Skip to content

Commit 83aa3a7

Browse files
feat(prefer-global): Add support for process.getBuiltinModule() (#436)
Co-authored-by: 唯然 <[email protected]>
1 parent 6f5e81d commit 83aa3a7

File tree

8 files changed

+224
-173
lines changed

8 files changed

+224
-173
lines changed

lib/util/check-prefer-global.js

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

77
const { ReferenceTracker } = require("@eslint-community/eslint-utils")
88
const { getScope } = require("../util/eslint-compat")
9+
const {
10+
iterateProcessGetBuiltinModuleReferences,
11+
} = require("../util/iterate-process-get-builtin-module-references")
912
/**
1013
* @typedef TraceMap
1114
* @property {import('@eslint-community/eslint-utils').TraceMap<boolean>} globals
@@ -43,6 +46,10 @@ class Verifier {
4346

4447
for (const { node } of [
4548
...tracker.iterateCjsReferences(traceMap.modules),
49+
...iterateProcessGetBuiltinModuleReferences(
50+
tracker,
51+
traceMap.modules
52+
),
4653
...tracker.iterateEsmReferences(traceMap.modules),
4754
]) {
4855
context.report({ node, messageId: "preferGlobal" })

tests/lib/rules/prefer-global/buffer.js

+32-26
Original file line numberDiff line numberDiff line change
@@ -7,41 +7,47 @@
77
const RuleTester = require("#test-helpers").RuleTester
88
const rule = require("../../../../lib/rules/prefer-global/buffer")
99

10+
const provideModuleMethods = ["require", "process.getBuiltinModule"]
11+
1012
new RuleTester().run("prefer-global/buffer", rule, {
1113
valid: [
1214
"var b = Buffer.alloc(10)",
1315
{
1416
code: "var b = Buffer.alloc(10)",
1517
options: ["always"],
1618
},
17-
{
18-
code: "var { Buffer } = require('buffer'); var b = Buffer.alloc(10)",
19-
options: ["never"],
20-
},
21-
{
22-
code: "var { Buffer } = require('node:buffer'); var b = Buffer.alloc(10)",
23-
options: ["never"],
24-
},
19+
...provideModuleMethods.flatMap(method => [
20+
{
21+
code: `var { Buffer } = ${method}('buffer'); var b = Buffer.alloc(10)`,
22+
options: ["never"],
23+
},
24+
{
25+
code: `var { Buffer } = ${method}('node:buffer'); var b = Buffer.alloc(10)`,
26+
options: ["never"],
27+
},
28+
]),
2529
],
2630
invalid: [
27-
{
28-
code: "var { Buffer } = require('buffer'); var b = Buffer.alloc(10)",
29-
errors: [{ messageId: "preferGlobal" }],
30-
},
31-
{
32-
code: "var { Buffer } = require('node:buffer'); var b = Buffer.alloc(10)",
33-
errors: [{ messageId: "preferGlobal" }],
34-
},
35-
{
36-
code: "var { Buffer } = require('buffer'); var b = Buffer.alloc(10)",
37-
options: ["always"],
38-
errors: [{ messageId: "preferGlobal" }],
39-
},
40-
{
41-
code: "var { Buffer } = require('node:buffer'); var b = Buffer.alloc(10)",
42-
options: ["always"],
43-
errors: [{ messageId: "preferGlobal" }],
44-
},
31+
...provideModuleMethods.flatMap(method => [
32+
{
33+
code: `var { Buffer } = ${method}('buffer'); var b = Buffer.alloc(10)`,
34+
errors: [{ messageId: "preferGlobal" }],
35+
},
36+
{
37+
code: `var { Buffer } = ${method}('node:buffer'); var b = Buffer.alloc(10)`,
38+
errors: [{ messageId: "preferGlobal" }],
39+
},
40+
{
41+
code: `var { Buffer } = ${method}('buffer'); var b = Buffer.alloc(10)`,
42+
options: ["always"],
43+
errors: [{ messageId: "preferGlobal" }],
44+
},
45+
{
46+
code: `var { Buffer } = ${method}('node:buffer'); var b = Buffer.alloc(10)`,
47+
options: ["always"],
48+
errors: [{ messageId: "preferGlobal" }],
49+
},
50+
]),
4551
{
4652
code: "var b = Buffer.alloc(10)",
4753
options: ["never"],

tests/lib/rules/prefer-global/console.js

+32-26
Original file line numberDiff line numberDiff line change
@@ -7,41 +7,47 @@
77
const RuleTester = require("#test-helpers").RuleTester
88
const rule = require("../../../../lib/rules/prefer-global/console")
99

10+
const provideModuleMethods = ["require", "process.getBuiltinModule"]
11+
1012
new RuleTester().run("prefer-global/console", rule, {
1113
valid: [
1214
"console.log(10)",
1315
{
1416
code: "console.log(10)",
1517
options: ["always"],
1618
},
17-
{
18-
code: "var console = require('console'); console.log(10)",
19-
options: ["never"],
20-
},
21-
{
22-
code: "var console = require('node:console'); console.log(10)",
23-
options: ["never"],
24-
},
19+
...provideModuleMethods.flatMap(method => [
20+
{
21+
code: `var console = ${method}('console'); console.log(10)`,
22+
options: ["never"],
23+
},
24+
{
25+
code: `var console = ${method}('node:console'); console.log(10)`,
26+
options: ["never"],
27+
},
28+
]),
2529
],
2630
invalid: [
27-
{
28-
code: "var console = require('console'); console.log(10)",
29-
errors: [{ messageId: "preferGlobal" }],
30-
},
31-
{
32-
code: "var console = require('node:console'); console.log(10)",
33-
errors: [{ messageId: "preferGlobal" }],
34-
},
35-
{
36-
code: "var console = require('console'); console.log(10)",
37-
options: ["always"],
38-
errors: [{ messageId: "preferGlobal" }],
39-
},
40-
{
41-
code: "var console = require('node:console'); console.log(10)",
42-
options: ["always"],
43-
errors: [{ messageId: "preferGlobal" }],
44-
},
31+
...provideModuleMethods.flatMap(method => [
32+
{
33+
code: `var console = ${method}('console'); console.log(10)`,
34+
errors: [{ messageId: "preferGlobal" }],
35+
},
36+
{
37+
code: `var console = ${method}('node:console'); console.log(10)`,
38+
errors: [{ messageId: "preferGlobal" }],
39+
},
40+
{
41+
code: `var console = ${method}('console'); console.log(10)`,
42+
options: ["always"],
43+
errors: [{ messageId: "preferGlobal" }],
44+
},
45+
{
46+
code: `var console = ${method}('node:console'); console.log(10)`,
47+
options: ["always"],
48+
errors: [{ messageId: "preferGlobal" }],
49+
},
50+
]),
4551
{
4652
code: "console.log(10)",
4753
options: ["never"],

tests/lib/rules/prefer-global/process.js

+25-17
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
const RuleTester = require("#test-helpers").RuleTester
88
const rule = require("../../../../lib/rules/prefer-global/process")
99

10+
const provideModuleMethods = ["require", "process.getBuiltinModule"]
11+
1012
new RuleTester().run("prefer-global/process", rule, {
1113
valid: [
1214
"process.exit(0)",
@@ -22,26 +24,32 @@ new RuleTester().run("prefer-global/process", rule, {
2224
code: "var process = require('node:process'); process.exit(0)",
2325
options: ["never"],
2426
},
25-
],
26-
invalid: [
27-
{
28-
code: "var process = require('process'); process.exit(0)",
29-
errors: [{ messageId: "preferGlobal" }],
30-
},
31-
{
32-
code: "var process = require('node:process'); process.exit(0)",
33-
errors: [{ messageId: "preferGlobal" }],
34-
},
35-
{
36-
code: "var process = require('process'); process.exit(0)",
37-
options: ["always"],
38-
errors: [{ messageId: "preferGlobal" }],
39-
},
4027
{
41-
code: "var process = require('node:process'); process.exit(0)",
28+
code: "process.getBuiltinModule('buffer')",
4229
options: ["always"],
43-
errors: [{ messageId: "preferGlobal" }],
4430
},
31+
],
32+
invalid: [
33+
...provideModuleMethods.flatMap(method => [
34+
{
35+
code: `var process_ = ${method}('process'); process_.exit(0)`,
36+
errors: [{ messageId: "preferGlobal" }],
37+
},
38+
{
39+
code: `var process_ = ${method}('node:process'); process_.exit(0)`,
40+
errors: [{ messageId: "preferGlobal" }],
41+
},
42+
{
43+
code: `var process_ = ${method}('process'); process_.exit(0)`,
44+
options: ["always"],
45+
errors: [{ messageId: "preferGlobal" }],
46+
},
47+
{
48+
code: `var process_ = ${method}('node:process'); process_.exit(0)`,
49+
options: ["always"],
50+
errors: [{ messageId: "preferGlobal" }],
51+
},
52+
]),
4553
{
4654
code: "process.exit(0)",
4755
options: ["never"],

tests/lib/rules/prefer-global/text-decoder.js

+32-26
Original file line numberDiff line numberDiff line change
@@ -7,41 +7,47 @@
77
const RuleTester = require("#test-helpers").RuleTester
88
const rule = require("../../../../lib/rules/prefer-global/text-decoder")
99

10+
const provideModuleMethods = ["require", "process.getBuiltinModule"]
11+
1012
new RuleTester().run("prefer-global/text-decoder", rule, {
1113
valid: [
1214
"var b = new TextDecoder(s)",
1315
{
1416
code: "var b = new TextDecoder(s)",
1517
options: ["always"],
1618
},
17-
{
18-
code: "var { TextDecoder } = require('util'); var b = new TextDecoder(s)",
19-
options: ["never"],
20-
},
21-
{
22-
code: "var { TextDecoder } = require('node:util'); var b = new TextDecoder(s)",
23-
options: ["never"],
24-
},
19+
...provideModuleMethods.flatMap(method => [
20+
{
21+
code: `var { TextDecoder } = ${method}('util'); var b = new TextDecoder(s)`,
22+
options: ["never"],
23+
},
24+
{
25+
code: `var { TextDecoder } = ${method}('node:util'); var b = new TextDecoder(s)`,
26+
options: ["never"],
27+
},
28+
]),
2529
],
2630
invalid: [
27-
{
28-
code: "var { TextDecoder } = require('util'); var b = new TextDecoder(s)",
29-
errors: [{ messageId: "preferGlobal" }],
30-
},
31-
{
32-
code: "var { TextDecoder } = require('node:util'); var b = new TextDecoder(s)",
33-
errors: [{ messageId: "preferGlobal" }],
34-
},
35-
{
36-
code: "var { TextDecoder } = require('util'); var b = new TextDecoder(s)",
37-
options: ["always"],
38-
errors: [{ messageId: "preferGlobal" }],
39-
},
40-
{
41-
code: "var { TextDecoder } = require('node:util'); var b = new TextDecoder(s)",
42-
options: ["always"],
43-
errors: [{ messageId: "preferGlobal" }],
44-
},
31+
...provideModuleMethods.flatMap(method => [
32+
{
33+
code: `var { TextDecoder } = ${method}('util'); var b = new TextDecoder(s)`,
34+
errors: [{ messageId: "preferGlobal" }],
35+
},
36+
{
37+
code: `var { TextDecoder } = ${method}('node:util'); var b = new TextDecoder(s)`,
38+
errors: [{ messageId: "preferGlobal" }],
39+
},
40+
{
41+
code: `var { TextDecoder } = ${method}('util'); var b = new TextDecoder(s)`,
42+
options: ["always"],
43+
errors: [{ messageId: "preferGlobal" }],
44+
},
45+
{
46+
code: `var { TextDecoder } = ${method}('node:util'); var b = new TextDecoder(s)`,
47+
options: ["always"],
48+
errors: [{ messageId: "preferGlobal" }],
49+
},
50+
]),
4551
{
4652
code: "var b = new TextDecoder(s)",
4753
options: ["never"],

tests/lib/rules/prefer-global/text-encoder.js

+32-26
Original file line numberDiff line numberDiff line change
@@ -7,41 +7,47 @@
77
const RuleTester = require("#test-helpers").RuleTester
88
const rule = require("../../../../lib/rules/prefer-global/text-encoder")
99

10+
const provideModuleMethods = ["require", "process.getBuiltinModule"]
11+
1012
new RuleTester().run("prefer-global/text-encoder", rule, {
1113
valid: [
1214
"var b = new TextEncoder(s)",
1315
{
1416
code: "var b = new TextEncoder(s)",
1517
options: ["always"],
1618
},
17-
{
18-
code: "var { TextEncoder } = require('util'); var b = new TextEncoder(s)",
19-
options: ["never"],
20-
},
21-
{
22-
code: "var { TextEncoder } = require('node:util'); var b = new TextEncoder(s)",
23-
options: ["never"],
24-
},
19+
...provideModuleMethods.flatMap(method => [
20+
{
21+
code: `var { TextEncoder } = ${method}('util'); var b = new TextEncoder(s)`,
22+
options: ["never"],
23+
},
24+
{
25+
code: `var { TextEncoder } = ${method}('node:util'); var b = new TextEncoder(s)`,
26+
options: ["never"],
27+
},
28+
]),
2529
],
2630
invalid: [
27-
{
28-
code: "var { TextEncoder } = require('util'); var b = new TextEncoder(s)",
29-
errors: [{ messageId: "preferGlobal" }],
30-
},
31-
{
32-
code: "var { TextEncoder } = require('node:util'); var b = new TextEncoder(s)",
33-
errors: [{ messageId: "preferGlobal" }],
34-
},
35-
{
36-
code: "var { TextEncoder } = require('util'); var b = new TextEncoder(s)",
37-
options: ["always"],
38-
errors: [{ messageId: "preferGlobal" }],
39-
},
40-
{
41-
code: "var { TextEncoder } = require('node:util'); var b = new TextEncoder(s)",
42-
options: ["always"],
43-
errors: [{ messageId: "preferGlobal" }],
44-
},
31+
...provideModuleMethods.flatMap(method => [
32+
{
33+
code: `var { TextEncoder } = ${method}('util'); var b = new TextEncoder(s)`,
34+
errors: [{ messageId: "preferGlobal" }],
35+
},
36+
{
37+
code: `var { TextEncoder } = ${method}('node:util'); var b = new TextEncoder(s)`,
38+
errors: [{ messageId: "preferGlobal" }],
39+
},
40+
{
41+
code: `var { TextEncoder } = ${method}('util'); var b = new TextEncoder(s)`,
42+
options: ["always"],
43+
errors: [{ messageId: "preferGlobal" }],
44+
},
45+
{
46+
code: `var { TextEncoder } = ${method}('node:util'); var b = new TextEncoder(s)`,
47+
options: ["always"],
48+
errors: [{ messageId: "preferGlobal" }],
49+
},
50+
]),
4551
{
4652
code: "var b = new TextEncoder(s)",
4753
options: ["never"],

0 commit comments

Comments
 (0)