Skip to content

Commit 5aa8c76

Browse files
authored
feat: refactor rules that to check global objects (#226)
1 parent 5fc63a1 commit 5aa8c76

File tree

152 files changed

+998
-2230
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

152 files changed

+998
-2230
lines changed

lib/rules/no-array-from.js

Lines changed: 4 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@
44
*/
55
"use strict"
66

7-
const { READ, ReferenceTracker } = require("@eslint-community/eslint-utils")
8-
const { getSourceCode } = require("eslint-compat-utils")
7+
const {
8+
defineStaticPropertiesHandler,
9+
} = require("../util/define-static-properties-handler")
910

1011
module.exports = {
1112
meta: {
@@ -23,24 +24,6 @@ module.exports = {
2324
type: "problem",
2425
},
2526
create(context) {
26-
return {
27-
"Program:exit"(program) {
28-
const sourceCode = getSourceCode(context)
29-
const tracker = new ReferenceTracker(
30-
sourceCode.getScope(program),
31-
)
32-
for (const { node, path } of tracker.iterateGlobalReferences({
33-
Array: {
34-
from: { [READ]: true },
35-
},
36-
})) {
37-
context.report({
38-
node,
39-
messageId: "forbidden",
40-
data: { name: path.join(".") },
41-
})
42-
}
43-
},
44-
}
27+
return defineStaticPropertiesHandler(context, { Array: ["from"] })
4528
},
4629
}

lib/rules/no-array-isarray.js

Lines changed: 6 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@
44
*/
55
"use strict"
66

7-
const { READ, ReferenceTracker } = require("@eslint-community/eslint-utils")
8-
const { getSourceCode } = require("eslint-compat-utils")
7+
const {
8+
defineStaticPropertiesHandler,
9+
} = require("../util/define-static-properties-handler")
910

1011
module.exports = {
1112
meta: {
@@ -23,24 +24,8 @@ module.exports = {
2324
type: "problem",
2425
},
2526
create(context) {
26-
return {
27-
"Program:exit"(program) {
28-
const sourceCode = getSourceCode(context)
29-
const tracker = new ReferenceTracker(
30-
sourceCode.getScope(program),
31-
)
32-
for (const { node, path } of tracker.iterateGlobalReferences({
33-
Array: {
34-
isArray: { [READ]: true },
35-
},
36-
})) {
37-
context.report({
38-
node,
39-
messageId: "forbidden",
40-
data: { name: path.join(".") },
41-
})
42-
}
43-
},
44-
}
27+
return defineStaticPropertiesHandler(context, {
28+
Array: ["isArray"],
29+
})
4530
},
4631
}

lib/rules/no-array-of.js

Lines changed: 6 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@
44
*/
55
"use strict"
66

7-
const { READ, ReferenceTracker } = require("@eslint-community/eslint-utils")
8-
const { getSourceCode } = require("eslint-compat-utils")
7+
const {
8+
defineStaticPropertiesHandler,
9+
} = require("../util/define-static-properties-handler")
910

1011
module.exports = {
1112
meta: {
@@ -23,24 +24,8 @@ module.exports = {
2324
type: "problem",
2425
},
2526
create(context) {
26-
return {
27-
"Program:exit"(program) {
28-
const sourceCode = getSourceCode(context)
29-
const tracker = new ReferenceTracker(
30-
sourceCode.getScope(program),
31-
)
32-
for (const { node, path } of tracker.iterateGlobalReferences({
33-
Array: {
34-
of: { [READ]: true },
35-
},
36-
})) {
37-
context.report({
38-
node,
39-
messageId: "forbidden",
40-
data: { name: path.join(".") },
41-
})
42-
}
43-
},
44-
}
27+
return defineStaticPropertiesHandler(context, {
28+
Array: ["of"],
29+
})
4530
},
4631
}

lib/rules/no-atomics-waitasync.js

Lines changed: 6 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
"use strict"
22

3-
const { READ, ReferenceTracker } = require("@eslint-community/eslint-utils")
4-
const { getSourceCode } = require("eslint-compat-utils")
3+
const {
4+
defineStaticPropertiesHandler,
5+
} = require("../util/define-static-properties-handler")
56

67
module.exports = {
78
meta: {
@@ -19,24 +20,8 @@ module.exports = {
1920
type: "problem",
2021
},
2122
create(context) {
22-
return {
23-
"Program:exit"(program) {
24-
const sourceCode = getSourceCode(context)
25-
const tracker = new ReferenceTracker(
26-
sourceCode.getScope(program),
27-
)
28-
for (const { node, path } of tracker.iterateGlobalReferences({
29-
Atomics: {
30-
waitAsync: { [READ]: true },
31-
},
32-
})) {
33-
context.report({
34-
node,
35-
messageId: "forbidden",
36-
data: { name: path.join(".") },
37-
})
38-
}
39-
},
40-
}
23+
return defineStaticPropertiesHandler(context, {
24+
Atomics: ["waitAsync"],
25+
})
4126
},
4227
}

lib/rules/no-atomics.js

Lines changed: 2 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,7 @@
44
*/
55
"use strict"
66

7-
const { READ, ReferenceTracker } = require("@eslint-community/eslint-utils")
8-
const { getSourceCode } = require("eslint-compat-utils")
7+
const { defineGlobalsHandler } = require("../util/define-globals-handler")
98

109
module.exports = {
1110
meta: {
@@ -23,22 +22,6 @@ module.exports = {
2322
type: "problem",
2423
},
2524
create(context) {
26-
return {
27-
"Program:exit"(program) {
28-
const sourceCode = getSourceCode(context)
29-
const tracker = new ReferenceTracker(
30-
sourceCode.getScope(program),
31-
)
32-
for (const { node, path } of tracker.iterateGlobalReferences({
33-
Atomics: { [READ]: true },
34-
})) {
35-
context.report({
36-
node,
37-
messageId: "forbidden",
38-
data: { name: path.join(".") },
39-
})
40-
}
41-
},
42-
}
25+
return defineGlobalsHandler(context, ["Atomics"])
4326
},
4427
}

lib/rules/no-bigint.js

Lines changed: 15 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
*/
55
"use strict"
66

7-
const { ReferenceTracker } = require("@eslint-community/eslint-utils")
8-
const { getSourceCode } = require("eslint-compat-utils")
7+
const { mergeVisitors } = require("../util/merge-visitors")
8+
const { defineGlobalsHandler } = require("../util/define-globals-handler")
99

1010
module.exports = {
1111
meta: {
@@ -23,28 +23,19 @@ module.exports = {
2323
type: "problem",
2424
},
2525
create(context) {
26-
return {
27-
Literal(node) {
28-
if (node.bigint != null) {
29-
context.report({ messageId: "forbidden", node })
30-
}
26+
return mergeVisitors(
27+
{
28+
Literal(node) {
29+
if (node.bigint != null) {
30+
context.report({ messageId: "forbidden", node })
31+
}
32+
},
3133
},
32-
33-
"Program:exit"(program) {
34-
const sourceCode = getSourceCode(context)
35-
const tracker = new ReferenceTracker(
36-
sourceCode.getScope(program),
37-
)
38-
const references = tracker.iterateGlobalReferences({
39-
BigInt: { [ReferenceTracker.READ]: true },
40-
BigInt64Array: { [ReferenceTracker.READ]: true },
41-
BigUint64Array: { [ReferenceTracker.READ]: true },
42-
})
43-
44-
for (const { node } of references) {
45-
context.report({ messageId: "forbidden", node })
46-
}
47-
},
48-
}
34+
defineGlobalsHandler(context, [
35+
"BigInt",
36+
"BigInt64Array",
37+
"BigUint64Array",
38+
]),
39+
)
4940
},
5041
}

lib/rules/no-date-now.js

Lines changed: 4 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@
44
*/
55
"use strict"
66

7-
const { READ, ReferenceTracker } = require("@eslint-community/eslint-utils")
8-
const { getSourceCode } = require("eslint-compat-utils")
7+
const {
8+
defineStaticPropertiesHandler,
9+
} = require("../util/define-static-properties-handler")
910

1011
module.exports = {
1112
meta: {
@@ -23,24 +24,6 @@ module.exports = {
2324
type: "problem",
2425
},
2526
create(context) {
26-
return {
27-
"Program:exit"(program) {
28-
const sourceCode = getSourceCode(context)
29-
const tracker = new ReferenceTracker(
30-
sourceCode.getScope(program),
31-
)
32-
for (const { node, path } of tracker.iterateGlobalReferences({
33-
Date: {
34-
now: { [READ]: true },
35-
},
36-
})) {
37-
context.report({
38-
node,
39-
messageId: "forbidden",
40-
data: { name: path.join(".") },
41-
})
42-
}
43-
},
44-
}
27+
return defineStaticPropertiesHandler(context, { Date: ["now"] })
4528
},
4629
}

lib/rules/no-escape-unescape.js

Lines changed: 2 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
"use strict"
22

3-
const { READ, ReferenceTracker } = require("@eslint-community/eslint-utils")
4-
const { getSourceCode } = require("eslint-compat-utils")
3+
const { defineGlobalsHandler } = require("../util/define-globals-handler")
54

65
module.exports = {
76
meta: {
@@ -19,23 +18,6 @@ module.exports = {
1918
type: "problem",
2019
},
2120
create(context) {
22-
return {
23-
"Program:exit"(program) {
24-
const sourceCode = getSourceCode(context)
25-
const tracker = new ReferenceTracker(
26-
sourceCode.getScope(program),
27-
)
28-
for (const { node, path } of tracker.iterateGlobalReferences({
29-
escape: { [READ]: true },
30-
unescape: { [READ]: true },
31-
})) {
32-
context.report({
33-
node,
34-
messageId: "forbidden",
35-
data: { name: path.join(".") },
36-
})
37-
}
38-
},
39-
}
21+
return defineGlobalsHandler(context, ["escape", "unescape"])
4022
},
4123
}

lib/rules/no-global-this.js

Lines changed: 2 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,7 @@
44
*/
55
"use strict"
66

7-
const { READ, ReferenceTracker } = require("@eslint-community/eslint-utils")
8-
const { getSourceCode } = require("eslint-compat-utils")
7+
const { defineGlobalsHandler } = require("../util/define-globals-handler")
98

109
module.exports = {
1110
meta: {
@@ -23,22 +22,6 @@ module.exports = {
2322
type: "problem",
2423
},
2524
create(context) {
26-
return {
27-
"Program:exit"(program) {
28-
const sourceCode = getSourceCode(context)
29-
const tracker = new ReferenceTracker(
30-
sourceCode.getScope(program),
31-
)
32-
for (const { node, path } of tracker.iterateGlobalReferences({
33-
globalThis: { [READ]: true },
34-
})) {
35-
context.report({
36-
node,
37-
messageId: "forbidden",
38-
data: { name: path.join(".") },
39-
})
40-
}
41-
},
42-
}
25+
return defineGlobalsHandler(context, ["globalThis"])
4326
},
4427
}

lib/rules/no-intl-displaynames.js

Lines changed: 6 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
"use strict"
22

3-
const { READ, ReferenceTracker } = require("@eslint-community/eslint-utils")
4-
const { getSourceCode } = require("eslint-compat-utils")
3+
const {
4+
defineStaticPropertiesHandler,
5+
} = require("../util/define-static-properties-handler")
56

67
module.exports = {
78
meta: {
@@ -19,24 +20,8 @@ module.exports = {
1920
type: "problem",
2021
},
2122
create(context) {
22-
return {
23-
"Program:exit"(program) {
24-
const sourceCode = getSourceCode(context)
25-
const tracker = new ReferenceTracker(
26-
sourceCode.getScope(program),
27-
)
28-
for (const { node, path } of tracker.iterateGlobalReferences({
29-
Intl: {
30-
DisplayNames: { [READ]: true },
31-
},
32-
})) {
33-
context.report({
34-
node,
35-
messageId: "forbidden",
36-
data: { name: path.join(".") },
37-
})
38-
}
39-
},
40-
}
23+
return defineStaticPropertiesHandler(context, {
24+
Intl: ["DisplayNames"],
25+
})
4126
},
4227
}

0 commit comments

Comments
 (0)