From 67d8263b30e5a8b60cc04899b8ff1b6f69544343 Mon Sep 17 00:00:00 2001 From: Andy Date: Wed, 19 Sep 2018 12:57:55 -0700 Subject: [PATCH] Fix error message for class type in JSDoc missing type arguments (#27222) --- src/compiler/checker.ts | 2 +- .../jsdocClassMissingTypeArguments.errors.txt | 12 ++++++++++++ .../reference/jsdocClassMissingTypeArguments.symbols | 10 ++++++++++ .../reference/jsdocClassMissingTypeArguments.types | 10 ++++++++++ .../cases/compiler/jsdocClassMissingTypeArguments.ts | 11 +++++++++++ 5 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 tests/baselines/reference/jsdocClassMissingTypeArguments.errors.txt create mode 100644 tests/baselines/reference/jsdocClassMissingTypeArguments.symbols create mode 100644 tests/baselines/reference/jsdocClassMissingTypeArguments.types create mode 100644 tests/cases/compiler/jsdocClassMissingTypeArguments.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 019f6bc6307..34b72ab36f7 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -8158,7 +8158,7 @@ namespace ts { const isJs = isInJSFile(node); const isJsImplicitAny = !noImplicitAny && isJs; if (!isJsImplicitAny && (numTypeArguments < minTypeArgumentCount || numTypeArguments > typeParameters.length)) { - const missingAugmentsTag = isJs && node.parent.kind !== SyntaxKind.JSDocAugmentsTag; + const missingAugmentsTag = isJs && isExpressionWithTypeArguments(node) && !isJSDocAugmentsTag(node.parent); const diag = minTypeArgumentCount === typeParameters.length ? missingAugmentsTag ? Diagnostics.Expected_0_type_arguments_provide_these_with_an_extends_tag diff --git a/tests/baselines/reference/jsdocClassMissingTypeArguments.errors.txt b/tests/baselines/reference/jsdocClassMissingTypeArguments.errors.txt new file mode 100644 index 00000000000..ae966c3990e --- /dev/null +++ b/tests/baselines/reference/jsdocClassMissingTypeArguments.errors.txt @@ -0,0 +1,12 @@ +/a.js(4,13): error TS2314: Generic type 'C' requires 1 type argument(s). + + +==== /a.js (1 errors) ==== + /** @template T */ + class C {} + + /** @param {C} p */ + ~ +!!! error TS2314: Generic type 'C' requires 1 type argument(s). + function f(p) {} + \ No newline at end of file diff --git a/tests/baselines/reference/jsdocClassMissingTypeArguments.symbols b/tests/baselines/reference/jsdocClassMissingTypeArguments.symbols new file mode 100644 index 00000000000..26c59f13785 --- /dev/null +++ b/tests/baselines/reference/jsdocClassMissingTypeArguments.symbols @@ -0,0 +1,10 @@ +=== /a.js === +/** @template T */ +class C {} +>C : Symbol(C, Decl(a.js, 0, 0)) + +/** @param {C} p */ +function f(p) {} +>f : Symbol(f, Decl(a.js, 1, 10)) +>p : Symbol(p, Decl(a.js, 4, 11)) + diff --git a/tests/baselines/reference/jsdocClassMissingTypeArguments.types b/tests/baselines/reference/jsdocClassMissingTypeArguments.types new file mode 100644 index 00000000000..0c64fd3c5a7 --- /dev/null +++ b/tests/baselines/reference/jsdocClassMissingTypeArguments.types @@ -0,0 +1,10 @@ +=== /a.js === +/** @template T */ +class C {} +>C : C + +/** @param {C} p */ +function f(p) {} +>f : (p: C) => void +>p : C + diff --git a/tests/cases/compiler/jsdocClassMissingTypeArguments.ts b/tests/cases/compiler/jsdocClassMissingTypeArguments.ts new file mode 100644 index 00000000000..7a8606d8237 --- /dev/null +++ b/tests/cases/compiler/jsdocClassMissingTypeArguments.ts @@ -0,0 +1,11 @@ +// @allowJs: true +// @checkJs: true +// @noEmit: true +// @noImplicitAny: true + +// @Filename: /a.js +/** @template T */ +class C {} + +/** @param {C} p */ +function f(p) {}