mirror of
https://github.com/nodejs/node.git
synced 2025-08-15 13:48:44 +02:00
tools: fix bugs in prefer-primordials linter rule
The ESLint rule would repport false positive if code is using an identifier that happens to have the same name as a primordials member. PR-URL: https://github.com/nodejs/node/pull/42010 Reviewed-By: Shingo Inoue <leko.noor@gmail.com> Reviewed-By: Rich Trott <rtrott@gmail.com>
This commit is contained in:
parent
68c4b8d56d
commit
6700b5c9e1
2 changed files with 45 additions and 2 deletions
|
@ -57,8 +57,18 @@ function getDestructuringAssignmentParent(scope, node) {
|
|||
return declaration.defs[0].node.init;
|
||||
}
|
||||
|
||||
const identifierSelector =
|
||||
'[type!=VariableDeclarator][type!=MemberExpression]>Identifier';
|
||||
const parentSelectors = [
|
||||
// We want to select identifiers that refer to other references, not the ones
|
||||
// that create a new reference.
|
||||
'ClassDeclaration',
|
||||
'FunctionDeclaration',
|
||||
'LabeledStatement',
|
||||
'MemberExpression',
|
||||
'MethodDefinition',
|
||||
'SwitchCase',
|
||||
'VariableDeclarator',
|
||||
];
|
||||
const identifierSelector = parentSelectors.map((selector) => `[type!=${selector}]`).join('') + '>Identifier';
|
||||
|
||||
module.exports = {
|
||||
meta: {
|
||||
|
@ -90,6 +100,11 @@ module.exports = {
|
|||
reported = new Set();
|
||||
},
|
||||
[identifierSelector](node) {
|
||||
if (node.parent.type === 'Property' && node.parent.key === node) {
|
||||
// If the identifier is the key for this property declaration, it
|
||||
// can't be referring to a primordials member.
|
||||
return;
|
||||
}
|
||||
if (reported.has(node.range[0])) {
|
||||
return;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue