Skip to content

Commit a4dd50f

Browse files
aduh95targos
authored andcommitted
tools: refactor prefer-primordials
Use optional chaining to improve code readability and remove use of `Array.prototype.reduce`. PR-URL: #36018 Reviewed-By: Shingo Inoue <leko.noor@gmail.com>
1 parent 698bffa commit a4dd50f

File tree

2 files changed

+21
-23
lines changed

2 files changed

+21
-23
lines changed

test/parallel/test-eslint-prefer-primordials.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ new RuleTester({
6666
},
6767
{
6868
code: 'const { NumberParseInt } = primordials; NumberParseInt("xxx")',
69-
options: [{ name: 'parseInt' }]
69+
options: [{ name: 'parseInt', into: 'Number' }]
7070
},
7171
{
7272
code: `
@@ -141,7 +141,7 @@ new RuleTester({
141141
const { Number } = primordials;
142142
Number.parseInt('10')
143143
`,
144-
options: [{ name: 'Number', into: Number }],
144+
options: [{ name: 'Number' }],
145145
errors: [{ message: /const { NumberParseInt } = primordials/ }]
146146
},
147147
{

tools/eslint-rules/prefer-primordials.js

+19-21
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,7 @@ function isTarget(map, varName) {
2323
}
2424

2525
function isIgnored(map, varName, propName) {
26-
if (!map.has(varName) || !map.get(varName).has(propName)) {
27-
return false;
28-
}
29-
return map.get(varName).get(propName).ignored;
26+
return map.get(varName)?.get(propName)?.ignored ?? false;
3027
}
3128

3229
function getReportName({ name, parentName, into }) {
@@ -71,25 +68,26 @@ module.exports = {
7168
},
7269
create(context) {
7370
const globalScope = context.getSourceCode().scopeManager.globalScope;
74-
const nameMap = context.options.reduce((acc, option) =>
75-
acc.set(
71+
72+
const nameMap = new Map();
73+
const renameMap = new Map();
74+
75+
for (const option of context.options) {
76+
const names = option.ignore || [];
77+
nameMap.set(
7678
option.name,
77-
(option.ignore || [])
78-
.reduce((acc, name) => acc.set(name, {
79-
ignored: true
80-
}), new Map())
81-
)
82-
, new Map());
83-
const renameMap = context.options
84-
.filter((option) => option.into)
85-
.reduce((acc, option) =>
86-
acc.set(option.name, option.into)
87-
, new Map());
79+
new Map(names.map((name) => [name, { ignored: true }]))
80+
);
81+
if (option.into) {
82+
renameMap.set(option.name, option.into);
83+
}
84+
}
85+
8886
let reported;
8987

9088
return {
9189
Program() {
92-
reported = new Map();
90+
reported = new Set();
9391
},
9492
[identifierSelector](node) {
9593
if (reported.has(node.range[0])) {
@@ -104,10 +102,10 @@ module.exports = {
104102
return;
105103
}
106104

107-
const defs = (globalScope.set.get(name) || {}).defs || null;
105+
const defs = globalScope.set.get(name)?.defs;
108106
if (parentName && isTarget(nameMap, parentName)) {
109107
if (!defs || defs[0].name.name !== 'primordials') {
110-
reported.set(node.range[0], true);
108+
reported.add(node.range[0]);
111109
const into = renameMap.get(name);
112110
context.report({
113111
node,
@@ -120,7 +118,7 @@ module.exports = {
120118
return;
121119
}
122120
if (defs.length === 0 || defs[0].node.init.name !== 'primordials') {
123-
reported.set(node.range[0], true);
121+
reported.add(node.range[0]);
124122
const into = renameMap.get(name);
125123
context.report({
126124
node,

0 commit comments

Comments
 (0)