From 028972aec95c69f7f4c6324b1a126469071b7fe0 Mon Sep 17 00:00:00 2001 From: Dimitri Kopriwa <77674046+kopax-polyconseil@users.noreply.github.com> Date: Tue, 27 Sep 2022 12:54:30 +0300 Subject: [PATCH 1/3] feat(IgnoreImports): allow ignored imports in no-extraneous-dependency Fix : https://github.com/import-js/eslint-plugin-import/issues/2400 Idk how to use globs here, so it's no glob, and support `./` for rootDir --- src/rules/no-extraneous-dependencies.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/rules/no-extraneous-dependencies.js b/src/rules/no-extraneous-dependencies.js index 65c396e672..e2cf117e36 100644 --- a/src/rules/no-extraneous-dependencies.js +++ b/src/rules/no-extraneous-dependencies.js @@ -200,6 +200,7 @@ function reportIfMissing(context, deps, depsOptions, node, name) { if ( declarationStatus.isInDeps || + depsOptions.allowIgnoreImports || (depsOptions.allowDevDeps && declarationStatus.isInDevDeps) || (depsOptions.allowPeerDeps && declarationStatus.isInPeerDeps) || (depsOptions.allowOptDeps && declarationStatus.isInOptDeps) || @@ -216,6 +217,7 @@ function reportIfMissing(context, deps, depsOptions, node, name) { if ( declarationStatus.isInDeps || + depsOptions.allowIgnoreImports || (depsOptions.allowDevDeps && declarationStatus.isInDevDeps) || (depsOptions.allowPeerDeps && declarationStatus.isInPeerDeps) || (depsOptions.allowOptDeps && declarationStatus.isInOptDeps) || @@ -250,6 +252,16 @@ function testConfig(config, filename) { )); } +function testIgnoreImports(config, filename) { + if (!config) { + return true + } + return config.some(c => ( + filename.includes(value.substr(0, 2) === './' ? value.replace('.', process.cwd()) : value) + )) +} + + module.exports = { meta: { type: 'problem', @@ -268,6 +280,7 @@ module.exports = { 'packageDir': { 'type': ['string', 'array'] }, 'includeInternal': { 'type': ['boolean'] }, 'includeTypes': { 'type': ['boolean'] }, + 'ignoreImports': { 'type': ['array'] }, }, 'additionalProperties': false, }, @@ -280,6 +293,7 @@ module.exports = { const deps = getDependencies(context, options.packageDir) || extractDepFields({}); const depsOptions = { + allowIgnoreImports: testIgnoreImports(options.ignoreImports, filename) !== false, allowDevDeps: testConfig(options.devDependencies, filename) !== false, allowOptDeps: testConfig(options.optionalDependencies, filename) !== false, allowPeerDeps: testConfig(options.peerDependencies, filename) !== false, From 76026beafeaadedb4767d257a12b6da582344416 Mon Sep 17 00:00:00 2001 From: Dimitri Kopriwa <77674046+kopax-polyconseil@users.noreply.github.com> Date: Tue, 27 Sep 2022 12:57:54 +0300 Subject: [PATCH 2/3] doc(no-extraneous-dependency): Added ignore imports --- docs/rules/no-extraneous-dependencies.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/rules/no-extraneous-dependencies.md b/docs/rules/no-extraneous-dependencies.md index 70c08809cf..5813d5de24 100644 --- a/docs/rules/no-extraneous-dependencies.md +++ b/docs/rules/no-extraneous-dependencies.md @@ -54,6 +54,12 @@ folder layouts: "import/no-extraneous-dependencies": ["error", {"packageDir": ['./some-dir/', './root-pkg']}] ``` +There is `ignoreImports` options, it can be used to ignore some files or directories. + +```js +"import/no-extraneous-dependencies": ["error", {"ignoreImports": ['./some-root-dir/', '__mocks__']}] +``` + ## Rule Details Given the following `package.json`: From 2ed06d1d55c63e49df55da3137422d49a4d9329a Mon Sep 17 00:00:00 2001 From: Dimitri Kopriwa <77674046+kopax-polyconseil@users.noreply.github.com> Date: Tue, 27 Sep 2022 14:20:27 +0300 Subject: [PATCH 3/3] fix no connfig --- src/rules/no-extraneous-dependencies.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/rules/no-extraneous-dependencies.js b/src/rules/no-extraneous-dependencies.js index e2cf117e36..58b51b31d6 100644 --- a/src/rules/no-extraneous-dependencies.js +++ b/src/rules/no-extraneous-dependencies.js @@ -254,7 +254,7 @@ function testConfig(config, filename) { function testIgnoreImports(config, filename) { if (!config) { - return true + return false } return config.some(c => ( filename.includes(value.substr(0, 2) === './' ? value.replace('.', process.cwd()) : value)