Skip to content
This repository has been archived by the owner on Feb 3, 2024. It is now read-only.

feature: improve def reference, overall experience #141

Merged
merged 17 commits into from
Oct 10, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions language-server/src/clientFileEventListener.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,12 @@ import winston from 'winston'
import { ConnectionToken } from './connection'
import { ProjectFileAdded, ProjectFileChanged, ProjectFileDeleted } from './events'
import { FileStore } from './fileStore'
import defaultLogger, { className, logFormat } from './log'
import defaultLogger, { withClass } from './log'

@tsyringe.singleton()
export class ClientFileEventListener {
private log = winston.createLogger({
format: winston.format.combine(className(ClientFileEventListener), logFormat),
format: winston.format.combine(withClass(ClientFileEventListener)),
transports: [defaultLogger()],
})

Expand Down
4 changes: 2 additions & 2 deletions language-server/src/defManager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,12 @@ import _ from 'lodash'
import { MultiDictionary } from 'typescript-collections'
import * as winston from 'winston'
import { DocumentWithNodeMap } from './documentWithNodeMap'
import defaultLogger, { className, logFormat } from './log'
import defaultLogger, { withClass, withVersion } from './log'
import { RimWorldVersion } from './RimWorldVersion'

export class DefManager {
private log = winston.createLogger({
format: winston.format.combine(className(DefManager), logFormat),
format: winston.format.combine(withClass(DefManager), withVersion(this.version ?? '')),
transports: [defaultLogger()],
})

Expand Down
1 change: 1 addition & 0 deletions language-server/src/events/event.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ export interface TextRequestResponse {
}

export interface TypeInfoRequest {
version: string
uris: string[]
}

Expand Down
4 changes: 2 additions & 2 deletions language-server/src/features/codeLens.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import * as tsyringe from 'tsyringe'
import * as lsp from 'vscode-languageserver'
import { URI } from 'vscode-uri'
import winston from 'winston'
import defaultLogger, { className, logFormat } from '../log'
import defaultLogger, { withClass } from '../log'
import { Project } from '../project'
import { ProjectManager } from '../projectManager'
import { RangeConverter } from '../utils/rangeConverter'
Expand Down Expand Up @@ -67,7 +67,7 @@ const resultToCodeLens = (r: Result): lsp.CodeLens => ({
@tsyringe.singleton()
export class CodeLens implements Provider {
private log = winston.createLogger({
format: winston.format.combine(className(CodeLens), logFormat),
format: winston.format.combine(withClass(CodeLens)),
transports: [defaultLogger()],
})

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import * as tsyringe from 'tsyringe'
import { Connection } from 'vscode-languageserver'
import winston from 'winston'
import { DefListRequest, DefListRequestResponse } from '../../events'
import defaultLogger, { className, logFormat } from '../../log'
import defaultLogger, { withClass } from '../../log'
import { ProjectManager } from '../../projectManager'
import { PlainObject } from '../../types/plainObject'
import { Provider } from '../provider'
Expand All @@ -13,7 +13,7 @@ import { ProjectHelper } from '../utils/project'
@tsyringe.injectable()
export class DefListRequestHandler implements Provider {
private log = winston.createLogger({
format: winston.format.combine(className(DefListRequestHandler), logFormat),
format: winston.format.combine(withClass(DefListRequestHandler)),
transports: [defaultLogger()],
})

Expand All @@ -27,8 +27,11 @@ export class DefListRequestHandler implements Provider {
return this.log
}

private async onRequest({ version }: DefListRequest): Promise<DefListRequestResponse | null | undefined> {
private async onRequest({ version }: DefListRequest): Promise<DefListRequestResponse | null> {
const project = this.projectManager.getProject(version)
if (!project) {
return null
}

const marshalledDefs = AsEnumerable(project.defManager.defDatabase.defs())
.Select((def) => this.marshalDef(def))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,15 @@ import { Connection, ResponseError } from 'vscode-languageserver'
import * as winston from 'winston'
import { Logger } from 'winston'
import { ParsedTypeInfoRequest, ParsedTypeInfoRequestResponse } from '../../events'
import defaultLogger, { className, logFormat } from '../../log'
import defaultLogger, { withClass } from '../../log'
import { ProjectManager } from '../../projectManager'
import { Provider } from '../provider'
import { ProjectHelper } from '../utils/project'

@tsyringe.injectable()
export class ParsedTypeInfoRequestHandler implements Provider {
private log = winston.createLogger({
format: winston.format.combine(className(ParsedTypeInfoRequestHandler), logFormat),
format: winston.format.combine(withClass(ParsedTypeInfoRequestHandler)),
transports: [defaultLogger()],
})

Expand All @@ -29,6 +29,9 @@ export class ParsedTypeInfoRequestHandler implements Provider {
version,
}: ParsedTypeInfoRequest): Promise<ParsedTypeInfoRequestResponse | ResponseError<Error>> {
const project = this.projectManager.getProject(version)
if (!project) {
return new ResponseError(1, `Project for version ${version} not found`)
}

const [typeInfoMap, error] = await project.getTypeInfo()
if (error) {
Expand Down
14 changes: 8 additions & 6 deletions language-server/src/features/decorate.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import * as tsyringe from 'tsyringe'
import { Connection } from 'vscode-languageserver'
import * as winston from 'winston'
import { DocumentTokenRequest, DocumentTokenRequestResponse } from '../events'
import defaultLogger, { className, logFormat } from '../log'
import defaultLogger, { withClass } from '../log'
import { Project } from '../project'
import { DocumentToken } from '../types/documentToken'
import { RangeConverter } from '../utils/rangeConverter'
Expand All @@ -17,7 +17,7 @@ import { ProjectHelper } from './utils/project'
@tsyringe.injectable()
export class DecoProvider implements Provider {
private log = winston.createLogger({
format: winston.format.combine(className(DecoProvider), logFormat),
format: winston.format.combine(withClass(DecoProvider)),
transports: [defaultLogger()],
})

Expand All @@ -34,8 +34,11 @@ export class DecoProvider implements Provider {
)
}

private onTokenRequest(p: DocumentTokenRequest): DocumentTokenRequestResponse | null | undefined {
const projects = this.projectHelper.getProjects(p.uri)
private onTokenRequest(p: DocumentTokenRequest): DocumentTokenRequestResponse | null {
const projects = this.projectHelper.getProjects(p.uri).filter((project) => project.state === 'ready')
if (projects.length === 0) {
return { tokens: [], uri: p.uri }
}

const tokens: DocumentToken[] = []

Expand All @@ -52,9 +55,8 @@ export class DecoProvider implements Provider {
return { uri: p.uri, tokens }
}

private getTokenFromDoc(project: Project, doc: Document) {
private getTokenFromDoc(project: Project, doc: Document): DocumentToken[] {
// traverse nodes and get nodes

const nodes: Node[] = this.getNodesBFS(doc)

return nodes.map((node) => this.getTokens(project, node)).flat()
Expand Down
4 changes: 2 additions & 2 deletions language-server/src/features/diagnostics/duplicatedNode.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { AsEnumerable } from 'linq-es2015'
import * as tsyringe from 'tsyringe'
import * as ls from 'vscode-languageserver'
import winston from 'winston'
import defaultLogger, { className, logFormat } from '../../log'
import defaultLogger, { withClass } from '../../log'
import { Project } from '../../project'
import jsonStr from '../../utils/json'
import { RangeConverter } from '../../utils/rangeConverter'
Expand All @@ -16,7 +16,7 @@ import { DiagnosticsContributor } from './contributor'
@tsyringe.injectable()
export class DuplicatedNode implements DiagnosticsContributor {
private log = winston.createLogger({
format: winston.format.combine(className(DuplicatedNode), logFormat),
format: winston.format.combine(withClass(DuplicatedNode)),
transports: [defaultLogger()],
})

Expand Down
4 changes: 2 additions & 2 deletions language-server/src/features/diagnostics/primitive.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { AsEnumerable } from 'linq-es2015'
import * as tsyringe from 'tsyringe'
import * as ls from 'vscode-languageserver'
import winston from 'winston'
import defaultLogger, { className, logFormat } from '../../log'
import defaultLogger, { withClass } from '../../log'
import { Project } from '../../project'
import { RangeConverter } from '../../utils/rangeConverter'
import { getNodesBFS, isFloat, isInteger, isLeafNode } from '../utils'
Expand All @@ -16,7 +16,7 @@ import { DiagnosticsContributor } from './contributor'
@tsyringe.injectable()
export class PrimitiveValue implements DiagnosticsContributor {
private log = winston.createLogger({
format: winston.format.combine(className(PrimitiveValue), logFormat),
format: winston.format.combine(withClass(PrimitiveValue)),
transports: [defaultLogger()],
})

Expand Down
9 changes: 4 additions & 5 deletions language-server/src/features/diagnostics/provider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,9 @@ import * as tsyringe from 'tsyringe'
import * as ls from 'vscode-languageserver'
import winston from 'winston'
import { Configuration } from '../../configuration'
import defaultLogger, { className, logFormat } from '../../log'
import defaultLogger, { withClass } from '../../log'
import { Project } from '../../project'
import { ProjectManager } from '../../projectManager'
import jsonStr from '../../utils/json'
import { Provider } from '../provider'
import { getRootElement } from '../utils'
import { DiagnosticsContributor } from './contributor'
Expand All @@ -21,7 +20,7 @@ export class DiagnosticsProvider implements Provider {
private connection?: ls.Connection = undefined

private log = winston.createLogger({
format: winston.format.combine(className(DiagnosticsProvider), logFormat),
format: winston.format.combine(withClass(DiagnosticsProvider)),
transports: [defaultLogger()],
})

Expand Down Expand Up @@ -104,8 +103,8 @@ export class DiagnosticsProvider implements Provider {
for (const dig of diagnosticsArr) {
if (dig.uri === document.uri) {
this.connection?.sendDiagnostics({ uri: dig.uri, diagnostics: dig.diagnostics })
this.log.debug(`[${project.version}] send diagnostics to uri: ${dig.uri}, items: ${dig.diagnostics.length}`)
this.log.silly(`${jsonStr(dig.diagnostics)}`)
// this.log.debug(`[${project.version}] send diagnostics to uri: ${dig.uri}, items: ${dig.diagnostics.length}`)
// this.log.silly(`${jsonStr(dig.diagnostics)}`)
} else {
this.log.warn(
`tried to send diagnostics which is not allowed in this context. target: ${dig.uri}, document: ${document.uri}`
Expand Down
4 changes: 2 additions & 2 deletions language-server/src/features/diagnostics/reference.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import * as tsyringe from 'tsyringe'
import * as ls from 'vscode-languageserver'
import * as winston from 'winston'
import { DocumentWithNodeMap } from '../../documentWithNodeMap'
import defaultLogger, { className, logFormat } from '../../log'
import defaultLogger, { withClass } from '../../log'
import { Project } from '../../project'
import { RangeConverter } from '../../utils/rangeConverter'
import { Definition } from '../definition'
Expand All @@ -15,7 +15,7 @@ import { DiagnosticsContributor } from './contributor'
@tsyringe.injectable()
export class Reference implements DiagnosticsContributor {
private log = winston.createLogger({
format: winston.format.combine(className(Reference), logFormat),
format: winston.format.combine(withClass(Reference)),
transports: [defaultLogger()],
})

Expand Down
4 changes: 2 additions & 2 deletions language-server/src/features/hover/def.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,13 @@ import * as tsyringe from 'tsyringe'
import * as ls from 'vscode-languageserver'
import { MarkupKind } from 'vscode-languageserver'
import * as winston from 'winston'
import defaultLogger, { className, logFormat } from '../../log'
import defaultLogger, { withClass } from '../../log'
import { getClassNameCodeBlock } from '../utils/markdown'

@tsyringe.injectable()
export class DefHoverProvider {
private log = winston.createLogger({
format: winston.format.combine(className(DefHoverProvider), logFormat),
format: winston.format.combine(withClass(DefHoverProvider)),
transports: [defaultLogger()],
})

Expand Down
4 changes: 2 additions & 2 deletions language-server/src/features/hover/defReference.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import { URI } from 'vscode-uri'
import winston from 'winston'
import { FileStore } from '../../fileStore'
import { DependencyFile } from '../../fs'
import defaultLogger, { className, logFormat } from '../../log'
import defaultLogger, { withClass } from '../../log'
import { Project } from '../../project'
import { RangeConverter } from '../../utils/rangeConverter'
import { Definition } from '../definition'
Expand All @@ -22,7 +22,7 @@ prettydiff.options.indent_char = ' '
@tsyringe.injectable()
export class DefReferenceHover {
private log = winston.createLogger({
format: winston.format.combine(className(DefReferenceHover), logFormat),
format: winston.format.combine(withClass(DefReferenceHover)),
transports: [defaultLogger()],
})

Expand Down
4 changes: 2 additions & 2 deletions language-server/src/features/hover/hover.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import * as ls from 'vscode-languageserver'
import { Connection } from 'vscode-languageserver'
import { URI } from 'vscode-uri'
import * as winston from 'winston'
import defaultLogger, { className, logFormat } from '../../log'
import defaultLogger, { withClass } from '../../log'
import { Project } from '../../project'
import { RangeConverter } from '../../utils/rangeConverter'
import { Provider } from '../provider'
Expand Down Expand Up @@ -58,7 +58,7 @@ type HoverType = 'parentNameValue' | 'defReference' | 'tag' | 'content' | 'def'
@injectable()
export class HoverProvider implements Provider {
private log = winston.createLogger({
format: winston.format.combine(className(HoverProvider), logFormat),
format: winston.format.combine(withClass(HoverProvider)),
transports: [defaultLogger()],
})

Expand Down
4 changes: 2 additions & 2 deletions language-server/src/features/hover/parentNameAttribValue.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import { URI } from 'vscode-uri'
import winston from 'winston'
import { FileStore } from '../../fileStore'
import { DependencyFile } from '../../fs'
import defaultLogger, { className, logFormat } from '../../log'
import defaultLogger, { withClass } from '../../log'
import { Project } from '../../project'
// how to use 'prettydiff' (it is quite different to use than other standard libs)
// https://github.com/prettydiff/prettydiff/issues/176
Expand All @@ -20,7 +20,7 @@ prettydiff.options.indent_char = ' '
@tsyringe.injectable()
export class ParentNameAttribValueHover {
private log = winston.createLogger({
format: winston.format.combine(className(ParentNameAttribValueHover), logFormat),
format: winston.format.combine(withClass(ParentNameAttribValueHover)),
transports: [defaultLogger()],
})

Expand Down
6 changes: 3 additions & 3 deletions language-server/src/features/hover/tag.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,13 @@ import * as tsyringe from 'tsyringe'
import * as ls from 'vscode-languageserver'
import { MarkupKind } from 'vscode-languageserver'
import * as winston from 'winston'
import defaultLogger, { className, logFormat } from '../../log'
import { getGenericClassNameToString, getCsharpFieldCodeBlock, getClassNameCodeBlock } from '../utils/markdown'
import defaultLogger, { withClass } from '../../log'
import { getClassNameCodeBlock, getCsharpFieldCodeBlock, getGenericClassNameToString } from '../utils/markdown'

@tsyringe.injectable()
export class TagHoverProvider {
private log = winston.createLogger({
format: winston.format.combine(className(TagHoverProvider), logFormat),
format: winston.format.combine(withClass(TagHoverProvider)),
transports: [defaultLogger()],
})

Expand Down
20 changes: 18 additions & 2 deletions language-server/src/features/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { singleton } from 'tsyringe'
import * as lsp from 'vscode-languageserver'
import { URI } from 'vscode-uri'
import winston from 'winston'
import defaultLogger, { className, logFormat } from '../log'
import defaultLogger, { withClass } from '../log'
import { LoadFolder } from '../mod/loadfolders'
import { ProjectManager } from '../projectManager'
import { RimWorldVersionArray } from '../RimWorldVersion'
Expand All @@ -22,7 +22,7 @@ import { Rename } from './rename'
@singleton()
export class LanguageFeature {
private readonly log = winston.createLogger({
format: winston.format.combine(className(LanguageFeature), logFormat),
format: winston.format.combine(withClass(LanguageFeature)),
transports: [defaultLogger()],
})

Expand Down Expand Up @@ -50,6 +50,10 @@ export class LanguageFeature {

for (const version of versions) {
const project = this.projectManager.getProject(version)
if (!project) {
continue
}

const { isIncomplete, items } = this.codeCompletion.codeCompletion(project, uri, position)
result.isIncomplete ||= isIncomplete
result.items.push(...items)
Expand All @@ -65,6 +69,10 @@ export class LanguageFeature {

for (const version of versions) {
const project = this.projectManager.getProject(version)
if (!project) {
continue
}

const { definitionLinks, errors } = this.definition.onDefinition(project, uri, position)

this.handleError(errors)
Expand All @@ -80,6 +88,10 @@ export class LanguageFeature {

for (const version of RimWorldVersionArray) {
const project = this.projectManager.getProject(version)
if (!project) {
continue
}

const res = this.reference.onReference(project, uri, position)
result.push(...res)

Expand All @@ -97,6 +109,10 @@ export class LanguageFeature {

for (const version of RimWorldVersionArray) {
const project = this.projectManager.getProject(version)
if (!project) {
continue
}

const res = this.rename.rename(project, uri, newName, position)
edit.changes = _.merge(edit.changes, res)
}
Expand Down
Loading