summaryrefslogtreecommitdiff
path: root/cli/tsc
diff options
context:
space:
mode:
authorKitson Kelly <me@kitsonkelly.com>2020-12-30 12:46:58 +1100
committerGitHub <noreply@github.com>2020-12-30 12:46:58 +1100
commite8a81724bb3b3767edaddbe78edc52108ae78b5f (patch)
treeacbb7dc356519a77f810db2c203a6fafabf7cdf0 /cli/tsc
parent268e47c0d8a9fa7b7c16f6862f22361add370796 (diff)
fix(lsp): handle ts debug errors better (#8914)
Fixes #8864
Diffstat (limited to 'cli/tsc')
-rw-r--r--cli/tsc/99_main_compiler.js43
-rw-r--r--cli/tsc/compiler.d.ts20
2 files changed, 29 insertions, 34 deletions
diff --git a/cli/tsc/99_main_compiler.js b/cli/tsc/99_main_compiler.js
index ddbb8fcac..d65aaa4c1 100644
--- a/cli/tsc/99_main_compiler.js
+++ b/cli/tsc/99_main_compiler.js
@@ -31,10 +31,22 @@ delete Object.prototype.__proto__;
const stringifiedArgs = args.map((arg) =>
typeof arg === "string" ? arg : JSON.stringify(arg)
).join(" ");
- core.print(`DEBUG ${logSource} - ${stringifiedArgs}\n`);
+ // adding a non-zero integer value to the end of the debug string causes
+ // the message to be printed to stderr instead of stdout, which is better
+ // aligned to the behaviour of debug messages
+ core.print(`DEBUG ${logSource} - ${stringifiedArgs}\n`, 1);
}
}
+ function error(...args) {
+ const stringifiedArgs = args.map((arg) =>
+ typeof arg === "string" || arg instanceof Error
+ ? String(arg)
+ : JSON.stringify(arg)
+ ).join(" ");
+ core.print(`ERROR ${logSource} = ${stringifiedArgs}\n`, 1);
+ }
+
class AssertionError extends Error {
constructor(msg) {
super(msg);
@@ -497,23 +509,18 @@ delete Object.prototype.__proto__;
);
return respond(id, sourceFile && sourceFile.text);
}
- case "getSemanticDiagnostics": {
- const diagnostics = languageService.getSemanticDiagnostics(
- request.specifier,
- ).filter(({ code }) => !IGNORED_DIAGNOSTICS.includes(code));
- return respond(id, fromTypeScriptDiagnostic(diagnostics));
- }
- case "getSuggestionDiagnostics": {
- const diagnostics = languageService.getSuggestionDiagnostics(
- request.specifier,
- ).filter(({ code }) => !IGNORED_DIAGNOSTICS.includes(code));
- return respond(id, fromTypeScriptDiagnostic(diagnostics));
- }
- case "getSyntacticDiagnostics": {
- const diagnostics = languageService.getSyntacticDiagnostics(
- request.specifier,
- ).filter(({ code }) => !IGNORED_DIAGNOSTICS.includes(code));
- return respond(id, fromTypeScriptDiagnostic(diagnostics));
+ case "getDiagnostics": {
+ try {
+ const diagnostics = [
+ ...languageService.getSemanticDiagnostics(request.specifier),
+ ...languageService.getSuggestionDiagnostics(request.specifier),
+ ...languageService.getSyntacticDiagnostics(request.specifier),
+ ].filter(({ code }) => !IGNORED_DIAGNOSTICS.includes(code));
+ return respond(id, fromTypeScriptDiagnostic(diagnostics));
+ } catch (e) {
+ error(e);
+ return respond(id, []);
+ }
}
case "getQuickInfo": {
return respond(
diff --git a/cli/tsc/compiler.d.ts b/cli/tsc/compiler.d.ts
index 7ba92a96f..7a8049c3a 100644
--- a/cli/tsc/compiler.d.ts
+++ b/cli/tsc/compiler.d.ts
@@ -36,16 +36,14 @@ declare global {
// deno-lint-ignore no-explicit-any
jsonOpSync<T>(name: string, params: T): any;
ops(): void;
- print(msg: string): void;
+ print(msg: string, code?: number): void;
registerErrorClass(name: string, Ctor: typeof Error): void;
}
type LanguageServerRequest =
| ConfigureRequest
| GetAsset
- | GetSyntacticDiagnosticsRequest
- | GetSemanticDiagnosticsRequest
- | GetSuggestionDiagnosticsRequest
+ | GetDiagnosticsRequest
| GetQuickInfoRequest
| GetDocumentHighlightsRequest
| GetReferencesRequest
@@ -69,18 +67,8 @@ declare global {
specifier: string;
}
- interface GetSyntacticDiagnosticsRequest extends BaseLanguageServerRequest {
- method: "getSyntacticDiagnostics";
- specifier: string;
- }
-
- interface GetSemanticDiagnosticsRequest extends BaseLanguageServerRequest {
- method: "getSemanticDiagnostics";
- specifier: string;
- }
-
- interface GetSuggestionDiagnosticsRequest extends BaseLanguageServerRequest {
- method: "getSuggestionDiagnostics";
+ interface GetDiagnosticsRequest extends BaseLanguageServerRequest {
+ method: "getDiagnostics";
specifier: string;
}