Skip to content

Commit 3360633

Browse files
authored
Fix false positives for built-in properties of object in no-*-prototype-* rules (#245)
1 parent e08b859 commit 3360633

File tree

3 files changed

+10
-3
lines changed

3 files changed

+10
-3
lines changed

lib/util/define-prototype-properties-handler/index.js

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,10 @@ function definePrototypePropertiesHandler(context, propertyTypeMap, options) {
8383
propertyTypeMap,
8484
})
8585

86-
const propertyEntries = Object.entries(propertyTypeMap)
86+
const propertyEntries = Object.entries(propertyTypeMap).map(
87+
([className, properties]) =>
88+
/** @type {const} */ ([className, Object.keys(properties)]),
89+
)
8790

8891
/**
8992
* @param {MemberExpression|Property} node
@@ -126,7 +129,7 @@ function definePrototypePropertiesHandler(context, propertyTypeMap, options) {
126129
// eslint-disable-next-line func-style
127130
let verifyPropertyName = (node, propertyName, objectNode) => {
128131
for (const [className, properties] of propertyEntries) {
129-
if (!properties[propertyName]) {
132+
if (!properties.includes(propertyName)) {
130133
continue
131134
}
132135
if (
@@ -145,7 +148,7 @@ function definePrototypePropertiesHandler(context, propertyTypeMap, options) {
145148
// For performance
146149
const [[className, properties]] = propertyEntries
147150
verifyPropertyName = (node, propertyName, objectNode) => {
148-
if (!properties[propertyName]) {
151+
if (!properties.includes(propertyName)) {
149152
return
150153
}
151154
verifyClassPropertyName(node, className, propertyName, objectNode)

tests/lib/rules/no-array-prototype-at.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ new RuleTester().run(ruleId, rule, {
2323
},
2424
// Test for https://github.com/eslint-community/eslint-plugin-es-x/issues/223
2525
"for (const { x } of foo) {}",
26+
`var array = [];
27+
var constructor = array.constructor = {};`,
2628
],
2729
invalid: [
2830
{

tests/lib/rules/no-array-prototype-every.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ new RuleTester().run(ruleId, rule, {
2121
options: [{ aggressive: false }],
2222
settings: { "es-x": { aggressive: true } },
2323
},
24+
`var array = [];
25+
var constructor = array.constructor = {};`,
2426
],
2527
invalid: [
2628
{

0 commit comments

Comments
 (0)