diff options
author | Kitson Kelly <me@kitsonkelly.com> | 2020-12-30 12:46:58 +1100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-12-30 12:46:58 +1100 |
commit | e8a81724bb3b3767edaddbe78edc52108ae78b5f (patch) | |
tree | acbb7dc356519a77f810db2c203a6fafabf7cdf0 /cli/tsc | |
parent | 268e47c0d8a9fa7b7c16f6862f22361add370796 (diff) |
fix(lsp): handle ts debug errors better (#8914)
Fixes #8864
Diffstat (limited to 'cli/tsc')
-rw-r--r-- | cli/tsc/99_main_compiler.js | 43 | ||||
-rw-r--r-- | cli/tsc/compiler.d.ts | 20 |
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; } |