Skip to content

Commit 728105d

Browse files
committed
feat: ignore invalid module names and add custom ignore option
1 parent 83b039d commit 728105d

File tree

6 files changed

+58
-5
lines changed

6 files changed

+58
-5
lines changed

.eslintrc-test.cjs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ module.exports = {
77
2,
88
{
99
dev: true,
10+
ignore: ['blaz', '@ack/glom'],
1011
},
1112
],
1213
},

README.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,3 +45,13 @@ rules: {
4545
]
4646
}
4747
```
48+
49+
You can ignore specific modules by adding an `ignore` option:
50+
51+
```yaml
52+
rules:
53+
- @jcoreio/implicit-dependencies/no-implicit:
54+
- error
55+
- ignore:
56+
- vscode
57+
```

fixture/index.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@ export * from 'blonk'
88
export { blark } from 'blark'
99
require('@a/b/c')
1010

11+
require('!!raw-loader!./foo/bar')
12+
require('_a-b')
13+
require('AB')
14+
1115
import 'process'
1216
import 'fs/promises'
1317
import 'node:process'
@@ -21,3 +25,6 @@ export { foo }
2125
export default foo
2226

2327
export class Bar {}
28+
29+
import 'blaz'
30+
import '@ack/glom/flark'

package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,9 @@
2424
"homepage": "https://github.com/jcoreio/eslint-plugin-implicit-dependencies#readme",
2525
"dependencies": {
2626
"@babel/runtime": "^7.18.6",
27-
"pkg-up": "^3.1.0"
27+
"@types/validate-npm-package-name": "^4.0.2",
28+
"pkg-up": "^3.1.0",
29+
"validate-npm-package-name": "^5.0.0"
2830
},
2931
"devDependencies": {
3032
"@jcoreio/toolchain": "^3.8.0",

pnpm-lock.yaml

Lines changed: 23 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/rules/no-implicit-dependencies.js

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import path from 'path'
22
import pkgUp from 'pkg-up'
33
import fs from 'fs'
44
import { builtinModules } from 'module'
5+
import validateNpmPackageName from 'validate-npm-package-name'
56
const builtin = new Set(builtinModules)
67

78
export default {
@@ -19,6 +20,10 @@ export default {
1920
dev: {
2021
type: 'boolean',
2122
},
23+
ignore: {
24+
type: 'array',
25+
items: { type: 'string' },
26+
},
2227
},
2328
additionalProperties: false,
2429
},
@@ -39,6 +44,7 @@ export default {
3944
name === pkg.name ||
4045
name[0] === '.' ||
4146
name[0] === '/' ||
47+
name[0] === '!' || // ignore webpack magic
4248
name.startsWith('node:')
4349
) {
4450
return
@@ -50,14 +56,21 @@ export default {
5056
} else {
5157
moduleName = name.split('/')[0]
5258
}
59+
// if not a valid npm package name then skip
60+
if (!validateNpmPackageName(moduleName).validForNewPackages) {
61+
return
62+
}
5363
// if module is a node core module then skip
5464
if (builtin.has(moduleName)) {
5565
return
5666
}
5767

5868
// check dependencies
5969
const opts = context.options[0] || {}
60-
if (pkg.dependencies && pkg.dependencies[moduleName]) {
70+
71+
if (opts.ignore && opts.ignore.includes(moduleName)) {
72+
return
73+
} else if (pkg.dependencies && pkg.dependencies[moduleName]) {
6174
return
6275
} else if (pkg.optionalDependencies?.[moduleName] && opts.optional) {
6376
return

0 commit comments

Comments
 (0)