summaryrefslogtreecommitdiff
path: root/cli/tsc/99_main_compiler.js
diff options
context:
space:
mode:
authorNayeem Rahman <nayeemrmn99@gmail.com>2023-10-02 07:32:05 +0100
committerGitHub <noreply@github.com>2023-10-02 07:32:05 +0100
commit6fd2d0841871018bd394ebbdccd4c1f39e5cf773 (patch)
tree635b0402b090a2792be20c2a45850b30ca3cb9b5 /cli/tsc/99_main_compiler.js
parentde25c81fd0860d0fb604d105534721d8b37a4abd (diff)
refactor(lsp): clean up tsc requests (#20743)
Diffstat (limited to 'cli/tsc/99_main_compiler.js')
-rw-r--r--cli/tsc/99_main_compiler.js297
1 files changed, 20 insertions, 277 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})`,
);
}
}