From d5b29f07923504b527af36f1eb96e59b7d0a891e Mon Sep 17 00:00:00 2001 From: Simon H <5968653+dummdidumm@users.noreply.github.com> Date: Tue, 4 Apr 2023 15:20:57 +0200 Subject: [PATCH] (feat) throw error on invalid tsconfig includes/excludes and on unknown options (#1974) #1952 #1951 --- .../language-server/src/plugins/typescript/service.ts | 3 +++ packages/language-server/src/svelte-check.ts | 6 ++++++ packages/svelte-check/src/options.ts | 4 +++- packages/svelte-check/src/writers.ts | 9 +++++++-- 4 files changed, 19 insertions(+), 3 deletions(-) diff --git a/packages/language-server/src/plugins/typescript/service.ts b/packages/language-server/src/plugins/typescript/service.ts index b421b859c..7b2d00256 100644 --- a/packages/language-server/src/plugins/typescript/service.ts +++ b/packages/language-server/src/plugins/typescript/service.ts @@ -24,6 +24,7 @@ import { export interface LanguageServiceContainer { readonly tsconfigPath: string; readonly compilerOptions: ts.CompilerOptions; + readonly configErrors: ts.Diagnostic[]; /** * @internal Public for tests only */ @@ -167,6 +168,7 @@ async function createLanguageService( const { options: compilerOptions, + errors: configErrors, fileNames: files, raw, extendedConfigPaths @@ -247,6 +249,7 @@ async function createLanguageService( return { tsconfigPath, compilerOptions, + configErrors, getService: () => languageService, updateSnapshot, deleteSnapshot, diff --git a/packages/language-server/src/svelte-check.ts b/packages/language-server/src/svelte-check.ts index 5d0240764..9d872dd52 100644 --- a/packages/language-server/src/svelte-check.ts +++ b/packages/language-server/src/svelte-check.ts @@ -181,6 +181,12 @@ export class SvelteCheck { private async getDiagnosticsForTsconfig(tsconfigPath: string) { const lsContainer = await this.getLSContainer(tsconfigPath); + + const noInputsFoundError = lsContainer.configErrors?.find((e) => e.code === 18003); + if (noInputsFoundError) { + throw new Error(noInputsFoundError.messageText.toString()); + } + const lang = lsContainer.getService(); const files = lang.getProgram()?.getSourceFiles() || []; const options = lang.getProgram()?.getCompilerOptions() || {}; diff --git a/packages/svelte-check/src/options.ts b/packages/svelte-check/src/options.ts index 06e3caef5..1b7709cea 100644 --- a/packages/svelte-check/src/options.ts +++ b/packages/svelte-check/src/options.ts @@ -81,7 +81,9 @@ export function parseOptions(cb: (opts: SvelteCheckCliOptions) => any) { }); }); - prog.parse(process.argv); + prog.parse(process.argv, { + unknown: (arg) => `Unknown option ${arg}` + }); } const outputFormats = ['human', 'human-verbose', 'machine'] as const; diff --git a/packages/svelte-check/src/writers.ts b/packages/svelte-check/src/writers.ts index 511468ed5..f7b9313f8 100644 --- a/packages/svelte-check/src/writers.ts +++ b/packages/svelte-check/src/writers.ts @@ -112,8 +112,13 @@ export class HumanFriendlyWriter implements Writer { const message = [ 'svelte-check found ', `${errorCount} ${errorCount === 1 ? 'error' : 'errors'} and `, - `${warningCount} ${warningCount === 1 ? 'warning' : 'warnings'} in `, - `${fileCountWithProblems} ${fileCountWithProblems === 1 ? 'file' : 'files'}\n` + `${warningCount} ${warningCount === 1 ? 'warning' : 'warnings'}`, + `${ + fileCountWithProblems + ? // prettier-ignore + ` in ${fileCountWithProblems} ${fileCountWithProblems === 1 ? 'file' : 'files'}` + : '' + }\n` ].join(''); if (errorCount !== 0) { this.stream.write(pc.red(message));