diff options
author | Nayeem Rahman <nayeemrmn99@gmail.com> | 2023-10-02 07:32:05 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-10-02 07:32:05 +0100 |
commit | 6fd2d0841871018bd394ebbdccd4c1f39e5cf773 (patch) | |
tree | 635b0402b090a2792be20c2a45850b30ca3cb9b5 /cli/tsc | |
parent | de25c81fd0860d0fb604d105534721d8b37a4abd (diff) |
refactor(lsp): clean up tsc requests (#20743)
Diffstat (limited to 'cli/tsc')
-rw-r--r-- | cli/tsc/99_main_compiler.js | 297 | ||||
-rw-r--r-- | cli/tsc/compiler.d.ts | 235 | ||||
-rw-r--r-- | cli/tsc/diagnostics.rs | 3 |
3 files changed, 23 insertions, 512 deletions
diff --git a/cli/tsc/99_main_compiler.js b/cli/tsc/99_main_compiler.js index 8978bf1be..e246d5d0c 100644 --- a/cli/tsc/99_main_compiler.js +++ b/cli/tsc/99_main_compiler.js @@ -968,26 +968,23 @@ delete Object.prototype.__proto__; ops.op_respond({ id, data }); } - /** - * @param {LanguageServerRequest} request - */ - function serverRequest({ id, ...request }) { + function serverRequest(id, method, args) { if (logDebug) { - debug(`serverRequest()`, { id, ...request }); + debug(`serverRequest()`, id, method, args); } // reset all memoized source files names scriptFileNamesCache = undefined; // evict all memoized source file versions scriptVersionCache.clear(); - switch (request.method) { - case "restart": { + switch (method) { + case "$restart": { serverRestart(); return respond(id, true); } - case "configure": { + case "$configure": { const { options, errors } = ts - .convertCompilerOptionsFromJson(request.compilerOptions, ""); + .convertCompilerOptionsFromJson(args[0], ""); Object.assign(options, { allowNonTsExtensions: true, allowImportingTsExtensions: true, @@ -998,141 +995,20 @@ delete Object.prototype.__proto__; compilationSettings = options; return respond(id, true); } - case "findRenameLocations": { + case "$getSupportedCodeFixes": { return respond( id, - languageService.findRenameLocations( - request.specifier, - request.position, - request.findInStrings, - request.findInComments, - request.providePrefixAndSuffixTextForRename, - ), + ts.getSupportedCodeFixes(), ); } - case "getAssets": { + case "$getAssets": { return respond(id, getAssets()); } - case "getApplicableRefactors": { - return respond( - id, - languageService.getApplicableRefactors( - request.specifier, - request.range, - { - ...(request.preferences ?? {}), - allowTextChangesInNewFiles: true, - provideRefactorNotApplicableReason: true, - }, - undefined, - request.kind, - ), - ); - } - case "getEditsForRefactor": { - return respond( - id, - languageService.getEditsForRefactor( - request.specifier, - { - ...request.formatCodeSettings, - indentStyle: ts.IndentStyle.Smart, - insertSpaceBeforeAndAfterBinaryOperators: true, - insertSpaceAfterCommaDelimiter: true, - }, - request.range, - request.refactorName, - request.actionName, - request.preferences, - ), - ); - } - case "getEditsForFileRename": { - return respond( - id, - languageService.getEditsForFileRename( - request.oldSpecifier, - request.newSpecifier, - request.formatCodeSettings, - request.preferences, - ), - ); - } - case "getCodeFixes": { - return respond( - id, - languageService.getCodeFixesAtPosition( - request.specifier, - request.startPosition, - request.endPosition, - request.errorCodes.map((v) => Number(v)), - { - ...request.formatCodeSettings, - indentStyle: ts.IndentStyle.Block, - }, - request.preferences, - ), - ); - } - case "getCombinedCodeFix": { - return respond( - id, - languageService.getCombinedCodeFix( - { - type: "file", - fileName: request.specifier, - }, - request.fixId, - { - ...request.formatCodeSettings, - indentStyle: ts.IndentStyle.Block, - }, - request.preferences, - ), - ); - } - case "getCompletionDetails": { - if (logDebug) { - debug("request", request); - } - return respond( - id, - languageService.getCompletionEntryDetails( - request.args.specifier, - request.args.position, - request.args.name, - request.args.formatCodeSettings ?? {}, - request.args.source, - request.args.preferences, - request.args.data, - ), - ); - } - case "getCompletions": { - return respond( - id, - languageService.getCompletionsAtPosition( - request.specifier, - request.position, - request.preferences, - request.formatCodeSettings, - ), - ); - } - case "getDefinition": { - return respond( - id, - languageService.getDefinitionAndBoundSpan( - request.specifier, - request.position, - ), - ); - } - case "getDiagnostics": { + case "$getDiagnostics": { try { /** @type {Record<string, any[]>} */ const diagnosticMap = {}; - for (const specifier of request.specifiers) { + for (const specifier of args[0]) { diagnosticMap[specifier] = fromTypeScriptDiagnostics([ ...languageService.getSemanticDiagnostics(specifier), ...languageService.getSuggestionDiagnostics(specifier), @@ -1154,151 +1030,18 @@ delete Object.prototype.__proto__; return respond(id, {}); } } - case "getDocumentHighlights": { - return respond( - id, - languageService.getDocumentHighlights( - request.specifier, - request.position, - request.filesToSearch, - ), - ); - } - case "getEncodedSemanticClassifications": { - return respond( - id, - languageService.getEncodedSemanticClassifications( - request.specifier, - request.span, - ts.SemanticClassificationFormat.TwentyTwenty, - ), - ); - } - case "getImplementation": { - return respond( - id, - languageService.getImplementationAtPosition( - request.specifier, - request.position, - ), - ); - } - case "getNavigateToItems": { - return respond( - id, - languageService.getNavigateToItems( - request.search, - request.maxResultCount, - request.fileName, - ), - ); - } - case "getNavigationTree": { - return respond( - id, - languageService.getNavigationTree(request.specifier), - ); - } - case "getOutliningSpans": { - return respond( - id, - languageService.getOutliningSpans( - request.specifier, - ), - ); - } - case "getQuickInfo": { - return respond( - id, - languageService.getQuickInfoAtPosition( - request.specifier, - request.position, - ), - ); - } - case "findReferences": { - return respond( - id, - languageService.findReferences( - request.specifier, - request.position, - ), - ); - } - case "getSignatureHelpItems": { - return respond( - id, - languageService.getSignatureHelpItems( - request.specifier, - request.position, - request.options, - ), - ); - } - case "getSmartSelectionRange": { - return respond( - id, - languageService.getSmartSelectionRange( - request.specifier, - request.position, - ), - ); - } - case "getSupportedCodeFixes": { - return respond( - id, - ts.getSupportedCodeFixes(), - ); - } - case "getTypeDefinition": { - return respond( - id, - languageService.getTypeDefinitionAtPosition( - request.specifier, - request.position, - ), - ); - } - case "prepareCallHierarchy": { - return respond( - id, - languageService.prepareCallHierarchy( - request.specifier, - request.position, - ), - ); - } - case "provideCallHierarchyIncomingCalls": { - return respond( - id, - languageService.provideCallHierarchyIncomingCalls( - request.specifier, - request.position, - ), - ); - } - case "provideCallHierarchyOutgoingCalls": { - return respond( - id, - languageService.provideCallHierarchyOutgoingCalls( - request.specifier, - request.position, - ), - ); - } - case "provideInlayHints": - return respond( - id, - languageService.provideInlayHints( - request.specifier, - request.span, - request.preferences, - ), - ); default: + if (typeof languageService[method] === "function") { + // The `getCompletionEntryDetails()` method returns null if the + // `source` is `null` for whatever reason. It must be `undefined`. + if (method == "getCompletionEntryDetails") { + args[4] ??= undefined; + } + return respond(id, languageService[method](...args)); + } throw new TypeError( // @ts-ignore exhausted case statement sets type to never - `Invalid request method for request: "${request.method}" (${id})`, + `Invalid request method for request: "${method}" (${id})`, ); } } diff --git a/cli/tsc/compiler.d.ts b/cli/tsc/compiler.d.ts index 30e433405..73298a44b 100644 --- a/cli/tsc/compiler.d.ts +++ b/cli/tsc/compiler.d.ts @@ -56,239 +56,4 @@ declare global { ...args: any[] ): void; } - - type LanguageServerRequest = - | Restart - | ConfigureRequest - | FindRenameLocationsRequest - | GetAssets - | GetApplicableRefactors - | GetEditsForRefactor - | GetEditsForFileRename - | GetCodeFixes - | GetCombinedCodeFix - | GetCompletionDetails - | GetCompletionsRequest - | GetDefinitionRequest - | GetDiagnosticsRequest - | GetDocumentHighlightsRequest - | GetEncodedSemanticClassifications - | GetImplementationRequest - | GetNavigateToItems - | GetNavigationTree - | GetOutliningSpans - | GetQuickInfoRequest - | FindReferencesRequest - | GetSignatureHelpItemsRequest - | GetSmartSelectionRange - | GetSupportedCodeFixes - | GetTypeDefinitionRequest - | PrepareCallHierarchy - | ProvideCallHierarchyIncomingCalls - | ProvideCallHierarchyOutgoingCalls - | ProvideInlayHints; - - interface BaseLanguageServerRequest { - id: number; - method: string; - } - - interface ConfigureRequest extends BaseLanguageServerRequest { - method: "configure"; - // deno-lint-ignore no-explicit-any - compilerOptions: Record<string, any>; - } - - interface FindRenameLocationsRequest extends BaseLanguageServerRequest { - method: "findRenameLocations"; - specifier: string; - position: number; - findInStrings: boolean; - findInComments: boolean; - providePrefixAndSuffixTextForRename: boolean; - } - - interface GetAssets extends BaseLanguageServerRequest { - method: "getAssets"; - } - - interface GetApplicableRefactors extends BaseLanguageServerRequest { - method: "getApplicableRefactors"; - specifier: string; - range: ts.TextRange; - preferences?: ts.UserPreferences; - kind: string; - } - - interface GetEditsForRefactor extends BaseLanguageServerRequest { - method: "getEditsForRefactor"; - specifier: string; - formatCodeSettings: ts.FormatCodeSettings; - range: ts.TextRange; - refactorName: string; - actionName: string; - preferences?: ts.UserPreferences; - } - - interface GetEditsForFileRename extends BaseLanguageServerRequest { - method: "getEditsForFileRename"; - oldSpecifier: string; - newSpecifier: string; - formatCodeSettings: ts.FormatCodeSettings; - preferences?: ts.UserPreferences; - } - - interface GetCodeFixes extends BaseLanguageServerRequest { - method: "getCodeFixes"; - specifier: string; - startPosition: number; - endPosition: number; - errorCodes: string[]; - formatCodeSettings: ts.FormatCodeSettings; - preferences: ts.UserPreferences; - } - - interface GetCombinedCodeFix extends BaseLanguageServerRequest { - method: "getCombinedCodeFix"; - specifier: string; - // deno-lint-ignore ban-types - fixId: {}; - formatCodeSettings: ts.FormatCodeSettings; - preferences: ts.UserPreferences; - } - - interface GetCompletionDetails extends BaseLanguageServerRequest { - method: "getCompletionDetails"; - args: { - specifier: string; - position: number; - name: string; - formatCodeSettings: ts.FormatCodeSettings; - source?: string; - preferences?: ts.UserPreferences; - data?: ts.CompletionEntryData; - }; - } - - interface GetCompletionsRequest extends BaseLanguageServerRequest { - method: "getCompletions"; - specifier: string; - position: number; - preferences: ts.GetCompletionsAtPositionOptions; - formatCodeSettings: ts.FormatCodeSettings; - } - - interface GetDiagnosticsRequest extends BaseLanguageServerRequest { - method: "getDiagnostics"; - specifiers: string[]; - } - - interface GetDefinitionRequest extends BaseLanguageServerRequest { - method: "getDefinition"; - specifier: string; - position: number; - } - - interface GetDocumentHighlightsRequest extends BaseLanguageServerRequest { - method: "getDocumentHighlights"; - specifier: string; - position: number; - filesToSearch: string[]; - } - - interface GetEncodedSemanticClassifications - extends BaseLanguageServerRequest { - method: "getEncodedSemanticClassifications"; - specifier: string; - span: ts.TextSpan; - } - - interface GetImplementationRequest extends BaseLanguageServerRequest { - method: "getImplementation"; - specifier: string; - position: number; - } - - interface GetNavigateToItems extends BaseLanguageServerRequest { - method: "getNavigateToItems"; - search: string; - maxResultCount?: number; - fileName?: string; - } - - interface GetNavigationTree extends BaseLanguageServerRequest { - method: "getNavigationTree"; - specifier: string; - } - - interface GetOutliningSpans extends BaseLanguageServerRequest { - method: "getOutliningSpans"; - specifier: string; - } - - interface GetQuickInfoRequest extends BaseLanguageServerRequest { - method: "getQuickInfo"; - specifier: string; - position: number; - } - - interface FindReferencesRequest extends BaseLanguageServerRequest { - method: "findReferences"; - specifier: string; - position: number; - } - - interface GetSignatureHelpItemsRequest extends BaseLanguageServerRequest { - method: "getSignatureHelpItems"; - specifier: string; - position: number; - options: ts.SignatureHelpItemsOptions; - } - - interface GetSmartSelectionRange extends BaseLanguageServerRequest { - method: "getSmartSelectionRange"; - specifier: string; - position: number; - } - - interface GetSupportedCodeFixes extends BaseLanguageServerRequest { - method: "getSupportedCodeFixes"; - } - - interface GetTypeDefinitionRequest extends BaseLanguageServerRequest { - method: "getTypeDefinition"; - specifier: string; - position: number; - } - - interface PrepareCallHierarchy extends BaseLanguageServerRequest { - method: "prepareCallHierarchy"; - specifier: string; - position: number; - } - - interface ProvideCallHierarchyIncomingCalls - extends BaseLanguageServerRequest { - method: "provideCallHierarchyIncomingCalls"; - specifier: string; - position: number; - } - - interface ProvideCallHierarchyOutgoingCalls - extends BaseLanguageServerRequest { - method: "provideCallHierarchyOutgoingCalls"; - specifier: string; - position: number; - } - - interface ProvideInlayHints extends BaseLanguageServerRequest { - method: "provideInlayHints"; - specifier: string; - span: ts.TextSpan; - preferences?: ts.UserPreferences; - } - - interface Restart extends BaseLanguageServerRequest { - method: "restart"; - } } diff --git a/cli/tsc/diagnostics.rs b/cli/tsc/diagnostics.rs index 08fa3e8da..296337974 100644 --- a/cli/tsc/diagnostics.rs +++ b/cli/tsc/diagnostics.rs @@ -113,10 +113,13 @@ pub struct Diagnostic { pub start: Option<Position>, pub end: Option<Position>, pub message_text: Option<String>, + #[serde(skip_serializing_if = "Option::is_none")] pub message_chain: Option<DiagnosticMessageChain>, + #[serde(skip_serializing_if = "Option::is_none")] pub source: Option<String>, pub source_line: Option<String>, pub file_name: Option<String>, + #[serde(skip_serializing_if = "Option::is_none")] pub related_information: Option<Vec<Diagnostic>>, } |