From 23e9dc9a26206f9d4e000e915260a2251c5a1ea5 Mon Sep 17 00:00:00 2001 From: Taye Adeyemi Date: Sat, 13 Jun 2020 13:27:51 +0200 Subject: [PATCH] fix(no-extranaeous-dependencies): check if node.parent.importKind is 'type' to ignore typescript `import type` --- src/rules/no-extraneous-dependencies.js | 4 +++- tests/src/rules/no-extraneous-dependencies.js | 21 ++++++++++++++++++- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/rules/no-extraneous-dependencies.js b/src/rules/no-extraneous-dependencies.js index 03c45526c0..4ec78ffcf2 100644 --- a/src/rules/no-extraneous-dependencies.js +++ b/src/rules/no-extraneous-dependencies.js @@ -111,7 +111,9 @@ function optDepErrorMessage(packageName) { function reportIfMissing(context, deps, depsOptions, node, name) { // Do not report when importing types - if (node.importKind === 'type') { + const importKind = node.importKind || (node.parent && node.parent.importKind) + + if (importKind === 'type') { return } diff --git a/tests/src/rules/no-extraneous-dependencies.js b/tests/src/rules/no-extraneous-dependencies.js index 97279d8538..301ca74fb6 100644 --- a/tests/src/rules/no-extraneous-dependencies.js +++ b/tests/src/rules/no-extraneous-dependencies.js @@ -1,4 +1,5 @@ -import { test } from '../utils' +import { test, testFilePath } from '../utils' +import typescriptConfig from '../../../config/typescript' import * as path from 'path' import * as fs from 'fs' @@ -6,6 +7,7 @@ import { RuleTester } from 'eslint' import flatMap from 'array.prototype.flatmap' const ruleTester = new RuleTester() +const typescriptRuleTester = new RuleTester(typescriptConfig) const rule = require('rules/no-extraneous-dependencies') const packageDirWithSyntaxError = path.join(__dirname, '../../files/with-syntax-error') @@ -312,3 +314,20 @@ ruleTester.run('no-extraneous-dependencies', rule, { }), ], }) + +typescriptRuleTester.run('no-extraneous-dependencies typescript type imports', rule, { + valid: [ + test({ + code: 'import type MyType from "not-a-dependency";', + filename: testFilePath('./no-unused-modules/typescript/file-ts-a.ts'), + parser: require.resolve('babel-eslint'), + }), + test({ + code: 'import type { MyType } from "not-a-dependency";', + filename: testFilePath('./no-unused-modules/typescript/file-ts-a.ts'), + parser: require.resolve('babel-eslint'), + }), + ], + invalid: [ + ], +})