Skip to content

Commit 58ed9e9

Browse files
committed
[Fix] prop-types: avoid further crashes from nonexistent nodes in unusedPropTypes
Fixes jsx-eslint#2127
1 parent 7f7b96d commit 58ed9e9

File tree

2 files changed

+20
-4
lines changed

2 files changed

+20
-4
lines changed

lib/rules/prop-types.js

+5-4
Original file line numberDiff line numberDiff line change
@@ -163,17 +163,18 @@ module.exports = {
163163
* @param {Object} component The component to process
164164
*/
165165
function reportUndeclaredPropTypes(component) {
166-
let allNames;
167166
for (let i = 0, j = component.usedPropTypes.length; i < j; i++) {
168-
allNames = component.usedPropTypes[i].allNames;
167+
const allNames = component.usedPropTypes[i].allNames;
168+
const node = component.usedPropTypes[i].node;
169169
if (
170170
isIgnored(allNames[0]) ||
171-
isDeclaredInComponent(component.node, allNames)
171+
isDeclaredInComponent(component.node, allNames) ||
172+
!node
172173
) {
173174
continue;
174175
}
175176
context.report(
176-
component.usedPropTypes[i].node,
177+
node,
177178
MISSING_MESSAGE, {
178179
name: allNames.join('.').replace(/\.__COMPUTED_PROP__/g, '[]')
179180
}

tests/lib/rules/prop-types.js

+15
Original file line numberDiff line numberDiff line change
@@ -4379,6 +4379,21 @@ ruleTester.run('prop-types', rule, {
43794379
errors: [{
43804380
message: '\'usedProp\' is missing in props validation'
43814381
}]
4382+
},
4383+
{
4384+
code: `
4385+
export default class Controller extends React.Component {
4386+
handleAdd = id => {
4387+
this.setState((state, { name }) => {
4388+
const item = this.buildItem(id);
4389+
});
4390+
};
4391+
}
4392+
`,
4393+
parser: 'babel-eslint',
4394+
errors: [{
4395+
message: '\'name\' is missing in props validation'
4396+
}]
43824397
}
43834398
]
43844399
});

0 commit comments

Comments
 (0)