From c5446d1a47020c1261ad2c357e6b197b3eba6dca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ky=E2=84=93e=20Hensel?= Date: Wed, 26 Aug 2020 06:04:23 +1200 Subject: [PATCH] don't emit "unused @ts-expect-error" in unchecked js files (#40046) * don't emit unused ts-expect-error in unchecked js files * simplify code --- src/compiler/program.ts | 6 +++--- .../reference/ts-expect-error-js.errors.txt | 11 +++++++++++ .../baselines/reference/ts-expect-error-js.symbols | 7 +++++++ tests/baselines/reference/ts-expect-error-js.types | 8 ++++++++ .../reference/ts-expect-error-nocheck-js.symbols | 7 +++++++ .../reference/ts-expect-error-nocheck-js.types | 8 ++++++++ .../baselines/reference/ts-expect-error-nocheck.js | 14 ++++++++++++++ .../reference/ts-expect-error-nocheck.symbols | 9 +++++++++ .../reference/ts-expect-error-nocheck.types | 10 ++++++++++ .../conformance/directives/ts-expect-error-js.ts | 10 ++++++++++ .../directives/ts-expect-error-nocheck-js.ts | 10 ++++++++++ .../directives/ts-expect-error-nocheck.ts | 6 ++++++ 12 files changed, 103 insertions(+), 3 deletions(-) create mode 100644 tests/baselines/reference/ts-expect-error-js.errors.txt create mode 100644 tests/baselines/reference/ts-expect-error-js.symbols create mode 100644 tests/baselines/reference/ts-expect-error-js.types create mode 100644 tests/baselines/reference/ts-expect-error-nocheck-js.symbols create mode 100644 tests/baselines/reference/ts-expect-error-nocheck-js.types create mode 100644 tests/baselines/reference/ts-expect-error-nocheck.js create mode 100644 tests/baselines/reference/ts-expect-error-nocheck.symbols create mode 100644 tests/baselines/reference/ts-expect-error-nocheck.types create mode 100644 tests/cases/conformance/directives/ts-expect-error-js.ts create mode 100644 tests/cases/conformance/directives/ts-expect-error-nocheck-js.ts create mode 100644 tests/cases/conformance/directives/ts-expect-error-nocheck.ts diff --git a/src/compiler/program.ts b/src/compiler/program.ts index 5703181e90a..ddd20c3b2c3 100644 --- a/src/compiler/program.ts +++ b/src/compiler/program.ts @@ -1747,13 +1747,13 @@ namespace ts { const bindDiagnostics: readonly Diagnostic[] = includeBindAndCheckDiagnostics ? sourceFile.bindDiagnostics : emptyArray; const checkDiagnostics = includeBindAndCheckDiagnostics ? typeChecker.getDiagnostics(sourceFile, cancellationToken) : emptyArray; - return getMergedBindAndCheckDiagnostics(sourceFile, bindDiagnostics, checkDiagnostics, isCheckJs ? sourceFile.jsDocDiagnostics : undefined); + return getMergedBindAndCheckDiagnostics(sourceFile, includeBindAndCheckDiagnostics, bindDiagnostics, checkDiagnostics, isCheckJs ? sourceFile.jsDocDiagnostics : undefined); }); } - function getMergedBindAndCheckDiagnostics(sourceFile: SourceFile, ...allDiagnostics: (readonly Diagnostic[] | undefined)[]) { + function getMergedBindAndCheckDiagnostics(sourceFile: SourceFile, includeBindAndCheckDiagnostics: boolean, ...allDiagnostics: (readonly Diagnostic[] | undefined)[]) { const flatDiagnostics = flatten(allDiagnostics); - if (!sourceFile.commentDirectives?.length) { + if (!includeBindAndCheckDiagnostics || !sourceFile.commentDirectives?.length) { return flatDiagnostics; } diff --git a/tests/baselines/reference/ts-expect-error-js.errors.txt b/tests/baselines/reference/ts-expect-error-js.errors.txt new file mode 100644 index 00000000000..25f8ad534a1 --- /dev/null +++ b/tests/baselines/reference/ts-expect-error-js.errors.txt @@ -0,0 +1,11 @@ +tests/cases/conformance/directives/a.js(3,1): error TS2578: Unused '@ts-expect-error' directive. + + +==== tests/cases/conformance/directives/a.js (1 errors) ==== + // there should be a "Unused @ts-expect-error" error since js files are being checked + + // @ts-expect-error + ~~~~~~~~~~~~~~~~~~~ +!!! error TS2578: Unused '@ts-expect-error' directive. + const a = 1; + \ No newline at end of file diff --git a/tests/baselines/reference/ts-expect-error-js.symbols b/tests/baselines/reference/ts-expect-error-js.symbols new file mode 100644 index 00000000000..124ac9692f0 --- /dev/null +++ b/tests/baselines/reference/ts-expect-error-js.symbols @@ -0,0 +1,7 @@ +=== tests/cases/conformance/directives/a.js === +// there should be a "Unused @ts-expect-error" error since js files are being checked + +// @ts-expect-error +const a = 1; +>a : Symbol(a, Decl(a.js, 3, 5)) + diff --git a/tests/baselines/reference/ts-expect-error-js.types b/tests/baselines/reference/ts-expect-error-js.types new file mode 100644 index 00000000000..0a5f31b158b --- /dev/null +++ b/tests/baselines/reference/ts-expect-error-js.types @@ -0,0 +1,8 @@ +=== tests/cases/conformance/directives/a.js === +// there should be a "Unused @ts-expect-error" error since js files are being checked + +// @ts-expect-error +const a = 1; +>a : 1 +>1 : 1 + diff --git a/tests/baselines/reference/ts-expect-error-nocheck-js.symbols b/tests/baselines/reference/ts-expect-error-nocheck-js.symbols new file mode 100644 index 00000000000..ad51502ded4 --- /dev/null +++ b/tests/baselines/reference/ts-expect-error-nocheck-js.symbols @@ -0,0 +1,7 @@ +=== tests/cases/conformance/directives/a.js === +// there should not be a "Unused @ts-expect-error" error since js files are not being checked + +// @ts-expect-error +const a = 1; +>a : Symbol(a, Decl(a.js, 3, 5)) + diff --git a/tests/baselines/reference/ts-expect-error-nocheck-js.types b/tests/baselines/reference/ts-expect-error-nocheck-js.types new file mode 100644 index 00000000000..da49cc21ebe --- /dev/null +++ b/tests/baselines/reference/ts-expect-error-nocheck-js.types @@ -0,0 +1,8 @@ +=== tests/cases/conformance/directives/a.js === +// there should not be a "Unused @ts-expect-error" error since js files are not being checked + +// @ts-expect-error +const a = 1; +>a : 1 +>1 : 1 + diff --git a/tests/baselines/reference/ts-expect-error-nocheck.js b/tests/baselines/reference/ts-expect-error-nocheck.js new file mode 100644 index 00000000000..2c971e60b8c --- /dev/null +++ b/tests/baselines/reference/ts-expect-error-nocheck.js @@ -0,0 +1,14 @@ +//// [ts-expect-error-nocheck.ts] +// @ts-nocheck + +// there should not be a "Unused @ts-expect-error" error due to the // @ts-nocheck + +// @ts-expect-error +const a = 1; + + +//// [ts-expect-error-nocheck.js] +// @ts-nocheck +// there should not be a "Unused @ts-expect-error" error due to the // @ts-nocheck +// @ts-expect-error +var a = 1; diff --git a/tests/baselines/reference/ts-expect-error-nocheck.symbols b/tests/baselines/reference/ts-expect-error-nocheck.symbols new file mode 100644 index 00000000000..2c1415bd49f --- /dev/null +++ b/tests/baselines/reference/ts-expect-error-nocheck.symbols @@ -0,0 +1,9 @@ +=== tests/cases/conformance/directives/ts-expect-error-nocheck.ts === +// @ts-nocheck + +// there should not be a "Unused @ts-expect-error" error due to the // @ts-nocheck + +// @ts-expect-error +const a = 1; +>a : Symbol(a, Decl(ts-expect-error-nocheck.ts, 5, 5)) + diff --git a/tests/baselines/reference/ts-expect-error-nocheck.types b/tests/baselines/reference/ts-expect-error-nocheck.types new file mode 100644 index 00000000000..652516c1b7c --- /dev/null +++ b/tests/baselines/reference/ts-expect-error-nocheck.types @@ -0,0 +1,10 @@ +=== tests/cases/conformance/directives/ts-expect-error-nocheck.ts === +// @ts-nocheck + +// there should not be a "Unused @ts-expect-error" error due to the // @ts-nocheck + +// @ts-expect-error +const a = 1; +>a : 1 +>1 : 1 + diff --git a/tests/cases/conformance/directives/ts-expect-error-js.ts b/tests/cases/conformance/directives/ts-expect-error-js.ts new file mode 100644 index 00000000000..160e97b48cd --- /dev/null +++ b/tests/cases/conformance/directives/ts-expect-error-js.ts @@ -0,0 +1,10 @@ +// @allowJs: true +// @checkJs: true +// @noEmit: true + +// @fileName: a.js + +// there should be a "Unused @ts-expect-error" error since js files are being checked + +// @ts-expect-error +const a = 1; diff --git a/tests/cases/conformance/directives/ts-expect-error-nocheck-js.ts b/tests/cases/conformance/directives/ts-expect-error-nocheck-js.ts new file mode 100644 index 00000000000..0b44cd4e1f1 --- /dev/null +++ b/tests/cases/conformance/directives/ts-expect-error-nocheck-js.ts @@ -0,0 +1,10 @@ +// @allowJs: true +// @checkJs: false +// @noEmit: true + +// @fileName: a.js + +// there should not be a "Unused @ts-expect-error" error since js files are not being checked + +// @ts-expect-error +const a = 1; diff --git a/tests/cases/conformance/directives/ts-expect-error-nocheck.ts b/tests/cases/conformance/directives/ts-expect-error-nocheck.ts new file mode 100644 index 00000000000..32d88ebc73c --- /dev/null +++ b/tests/cases/conformance/directives/ts-expect-error-nocheck.ts @@ -0,0 +1,6 @@ +// @ts-nocheck + +// there should not be a "Unused @ts-expect-error" error due to the // @ts-nocheck + +// @ts-expect-error +const a = 1;