Skip to content

Commit c817f6c

Browse files
authored
💥 no-missing-require/import recognize node: prefix
As requested in #275, recognize Node.js core modules referenced using the [`node:`](https://nodejs.org/api/esm.html#esm_node_imports) URL scheme. Since `resolve.isCore` was moved to `is-core-module` in browserify/resolve@7c26483 and `[email protected]` added support for `node:` in inspect-js/is-core-module@7341223 require `is-core-module@^2.3.0`. Note: `is-core-module` checks whether the module is supported in a given Node.js version (if not provided, the current version is checked). Although checking whether a name is a core module in all Node.js versions supported by the package would be ideal, it will require significantly more design and implementation work and is therefore not included in this commit. Fixes: #275 Signed-off-by: Kevin Locke <[email protected]>
1 parent c4a37a6 commit c817f6c

File tree

5 files changed

+16
-4
lines changed

5 files changed

+16
-4
lines changed

‎lib/util/visit-import.js

+3-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
"use strict"
66

77
const path = require("path")
8-
const resolve = require("resolve")
8+
const isCoreModule = require("is-core-module")
99
const getResolvePaths = require("./get-resolve-paths")
1010
const getTryExtensions = require("./get-try-extensions")
1111
const ImportTarget = require("./import-target")
@@ -53,7 +53,8 @@ module.exports = function visitImport(
5353
}
5454

5555
const name = sourceNode && stripImportPathParams(sourceNode.value)
56-
if (name && (includeCore || !resolve.isCore(name))) {
56+
// Note: "999" arbitrary to check current/future Node.js version
57+
if (name && (includeCore || !isCoreModule(name, "999"))) {
5758
targets.push(new ImportTarget(sourceNode, name, options))
5859
}
5960
},

‎lib/util/visit-require.js

+3-2
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
const path = require("path")
88
const { CALL, ReferenceTracker, getStringIfConstant } = require("eslint-utils")
9-
const resolve = require("resolve")
9+
const isCoreModule = require("is-core-module")
1010
const getResolvePaths = require("./get-resolve-paths")
1111
const getTryExtensions = require("./get-try-extensions")
1212
const ImportTarget = require("./import-target")
@@ -48,7 +48,8 @@ module.exports = function visitRequire(
4848
const targetNode = node.arguments[0]
4949
const rawName = getStringIfConstant(targetNode)
5050
const name = rawName && stripImportPathParams(rawName)
51-
if (name && (includeCore || !resolve.isCore(name))) {
51+
// Note: "999" arbitrary to check current/future Node.js version
52+
if (name && (includeCore || !isCoreModule(name, "999"))) {
5253
targets.push(new ImportTarget(targetNode, name, options))
5354
}
5455
}

‎package.json

+1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
"eslint-plugin-es": "^4.1.0",
1717
"eslint-utils": "^2.0.0",
1818
"ignore": "^5.1.1",
19+
"is-core-module": "^2.3.0",
1920
"minimatch": "^3.0.4",
2021
"resolve": "^1.10.1",
2122
"semver": "^6.1.0"

‎tests/lib/rules/no-missing-import.js

+4
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,10 @@ ruleTester.run("no-missing-import", rule, {
4747
filename: fixture("test.js"),
4848
code: "import fs from 'fs';",
4949
},
50+
{
51+
filename: fixture("test.js"),
52+
code: "import fs from 'node:fs';",
53+
},
5054
{
5155
filename: fixture("test.js"),
5256
code: "import eslint from 'eslint/lib/api';",

‎tests/lib/rules/no-missing-require.js

+5
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,11 @@ ruleTester.run("no-missing-require", rule, {
2525
code: "require('fs');",
2626
env: { node: true },
2727
},
28+
{
29+
filename: fixture("test.js"),
30+
code: "require('node:fs');",
31+
env: { node: true },
32+
},
2833
{
2934
filename: fixture("test.js"),
3035
code: "require('eslint');",

0 commit comments

Comments
 (0)