From 01c939fed4a57b08b0d7febb563b42517220d217 Mon Sep 17 00:00:00 2001 From: Armano Date: Thu, 2 Jan 2020 20:48:39 +0100 Subject: [PATCH] fix(eslint-plugin): crash in no-unnecessary-type-arguments (#1401) Co-authored-by: Brad Zacher --- .../rules/no-unnecessary-type-arguments.ts | 4 ++++ .../no-unnecessary-type-arguments.test.ts | 19 +++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/packages/eslint-plugin/src/rules/no-unnecessary-type-arguments.ts b/packages/eslint-plugin/src/rules/no-unnecessary-type-arguments.ts index 820f4fbfd54..a32cb94728c 100644 --- a/packages/eslint-plugin/src/rules/no-unnecessary-type-arguments.ts +++ b/packages/eslint-plugin/src/rules/no-unnecessary-type-arguments.ts @@ -110,6 +110,10 @@ function getTypeParametersFromType( const sym = getAliasedSymbol(symAtLocation, checker); + if (!sym.declarations) { + return undefined; + } + return findFirstResult(sym.declarations, decl => tsutils.isClassLikeDeclaration(decl) || ts.isTypeAliasDeclaration(decl) || diff --git a/packages/eslint-plugin/tests/rules/no-unnecessary-type-arguments.test.ts b/packages/eslint-plugin/tests/rules/no-unnecessary-type-arguments.test.ts index df79528403d..51c1acf3285 100644 --- a/packages/eslint-plugin/tests/rules/no-unnecessary-type-arguments.test.ts +++ b/packages/eslint-plugin/tests/rules/no-unnecessary-type-arguments.test.ts @@ -6,6 +6,7 @@ const rootDir = path.join(process.cwd(), 'tests/fixtures'); const ruleTester = new RuleTester({ parserOptions: { ecmaVersion: 2015, + sourceType: 'module', tsconfigRootDir: rootDir, project: './tsconfig.json', }, @@ -74,6 +75,9 @@ ruleTester.run('no-unnecessary-type-arguments', rule, { class Foo extends Bar {}`, `interface Bar {} class Foo implements Bar {}`, + `import { F } from './missing'; + function bar() {} + bar>()`, ], invalid: [ { @@ -177,5 +181,20 @@ ruleTester.run('no-unnecessary-type-arguments', rule, { output: `class Bar {} class Foo extends Bar {}`, }, + { + code: `import { F } from './missing'; + function bar>() {} + bar>()`, + errors: [ + { + line: 3, + column: 13, + messageId: 'unnecessaryTypeParameter', + }, + ], + output: `import { F } from './missing'; + function bar>() {} + bar()`, + }, ], });