Skip to content

Commit 0ff698b

Browse files
authored
no-unused-properties: Fix for JSX member access (#2890)
1 parent c230c22 commit 0ff698b

2 files changed

Lines changed: 33 additions & 19 deletions

File tree

rules/no-unused-properties.js

Lines changed: 13 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -25,28 +25,19 @@ const specialProtoPropertyKey = {
2525
name: '__proto__',
2626
};
2727

28-
const propertyKeysEqual = (keyA, keyB) => {
29-
if (keyA.type === 'Identifier') {
30-
if (keyB.type === 'Identifier') {
31-
return keyA.name === keyB.name;
32-
}
33-
34-
if (keyB.type === 'Literal') {
35-
return keyA.name === keyB.value;
36-
}
28+
const getPropertyKeyName = key => {
29+
if (key.type === 'Identifier' || key.type === 'JSXIdentifier') {
30+
return key.name;
3731
}
3832

39-
if (keyA.type === 'Literal') {
40-
if (keyB.type === 'Identifier') {
41-
return keyA.value === keyB.name;
42-
}
43-
44-
if (keyB.type === 'Literal') {
45-
return keyA.value === keyB.value;
46-
}
33+
if (key.type === 'Literal') {
34+
return key.value;
4735
}
36+
};
4837

49-
return false;
38+
const propertyKeysEqual = (keyA, keyB) => {
39+
const keyNameA = getPropertyKeyName(keyA);
40+
return keyNameA !== undefined && keyNameA === getPropertyKeyName(keyB);
5041
};
5142

5243
const objectPatternMatchesObjectExprPropertyKey = (pattern, key) =>
@@ -137,7 +128,10 @@ const create = context => {
137128
return;
138129
}
139130

140-
if (parent.type === 'MemberExpression') {
131+
if (
132+
parent.type === 'MemberExpression'
133+
|| parent.type === 'JSXMemberExpression'
134+
) {
141135
if (
142136
isMemberExpressionAssignment(parent)
143137
|| isMemberExpressionCall(parent)

test/no-unused-properties.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -402,6 +402,26 @@ test({
402402
`,
403403
errors: [error],
404404
},
405+
{
406+
code: outdent`
407+
const styles = {
408+
wrapper: styled('div', {}),
409+
unused: styled('div', {}),
410+
};
411+
412+
function Component() {
413+
return <styles.wrapper />;
414+
}
415+
`,
416+
languageOptions: {
417+
parserOptions: {
418+
ecmaFeatures: {
419+
jsx: true,
420+
},
421+
},
422+
},
423+
errors: [error],
424+
},
405425
],
406426
});
407427

0 commit comments

Comments
 (0)