Skip to content

Commit fcfee49

Browse files
committed
[Fix] Fix prop-types detection collision on renamed props
Fixes #2383
1 parent 2c6430d commit fcfee49

File tree

2 files changed

+28
-11
lines changed

2 files changed

+28
-11
lines changed

lib/util/usedPropTypes.js

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -356,21 +356,19 @@ module.exports = function usedPropTypesInstructions(context, components, utils)
356356
}
357357
const propName = ast.getKeyValue(context, properties[k]);
358358

359-
if (propName) {
360-
propVariables.set(propName, parentNames.concat(propName));
361-
usedPropTypes.push({
362-
allNames: parentNames.concat([propName]),
363-
name: propName,
364-
node: properties[k]
365-
});
366-
}
367-
368359
if (
369360
propName &&
370361
properties[k].type === 'Property' &&
371362
properties[k].value.type === 'ObjectPattern'
372363
) {
373364
markPropTypesAsUsed(properties[k].value, parentNames.concat([propName]));
365+
} else if (propName) {
366+
propVariables.set(propName, parentNames.concat(propName));
367+
usedPropTypes.push({
368+
allNames: parentNames.concat([propName]),
369+
name: propName,
370+
node: properties[k]
371+
});
374372
}
375373
}
376374
break;

tests/lib/rules/prop-types.js

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2498,7 +2498,6 @@ ruleTester.run('prop-types', rule, {
24982498
}
24992499
`,
25002500
errors: [
2501-
{message: "'foo' is missing in props validation"},
25022501
{message: "'foo.bar' is missing in props validation"}
25032502
]
25042503
}, {
@@ -2526,7 +2525,6 @@ ruleTester.run('prop-types', rule, {
25262525
}
25272526
`,
25282527
errors: [
2529-
{message: "'foo' is missing in props validation"},
25302528
{message: "'foo.bar' is missing in props validation"}
25312529
]
25322530
},
@@ -4808,6 +4806,27 @@ ruleTester.run('prop-types', rule, {
48084806
errors: [{
48094807
message: '\'text\' is missing in props validation'
48104808
}]
4809+
},
4810+
{
4811+
code: `
4812+
function Foo({
4813+
foo: {
4814+
bar: foo,
4815+
baz
4816+
},
4817+
}) {
4818+
return <p>{foo.reduce(() => 5)}</p>;
4819+
}
4820+
4821+
Foo.propTypes = {
4822+
foo: PropTypes.shape({
4823+
bar: PropTypes.arrayOf(PropTypes.string).isRequired,
4824+
}).isRequired,
4825+
};
4826+
`,
4827+
errors: [{
4828+
message: '\'foo.baz\' is missing in props validation'
4829+
}]
48114830
}
48124831
]
48134832
});

0 commit comments

Comments
 (0)