diff --git a/lib/rules/no-typos.js b/lib/rules/no-typos.js index f9c798a9fb..8fb6ba27ee 100644 --- a/lib/rules/no-typos.js +++ b/lib/rules/no-typos.js @@ -126,8 +126,7 @@ module.exports = { function reportErrorIfClassPropertyCasingTypo(node, propertyName) { if (propertyName === 'propTypes' || propertyName === 'contextTypes' || propertyName === 'childContextTypes') { - const propsNode = node && node.parent && node.parent.type === 'AssignmentExpression' && node.parent.right; - checkValidPropObject(propsNode); + checkValidPropObject(node); } STATIC_CLASS_PROPERTIES.forEach(CLASS_PROP => { if (propertyName && CLASS_PROP.toLowerCase() === propertyName.toLowerCase() && CLASS_PROP !== propertyName) { @@ -176,7 +175,7 @@ module.exports = { const tokens = context.getFirstTokens(node, 2); const propertyName = tokens[1].value; - reportErrorIfClassPropertyCasingTypo(node, propertyName); + reportErrorIfClassPropertyCasingTypo(node.value, propertyName); }, MemberExpression: function(node) { @@ -193,9 +192,10 @@ module.exports = { if ( relatedComponent && - (utils.isES6Component(relatedComponent.node) || utils.isReturningJSX(relatedComponent.node)) + (utils.isES6Component(relatedComponent.node) || utils.isReturningJSX(relatedComponent.node)) && + (node.parent && node.parent.type === 'AssignmentExpression' && node.parent.right) ) { - reportErrorIfClassPropertyCasingTypo(node, propertyName); + reportErrorIfClassPropertyCasingTypo(node.parent.right, propertyName); } }, diff --git a/tests/lib/rules/no-typos.js b/tests/lib/rules/no-typos.js index 8ae187ff5b..3327b9d13d 100644 --- a/tests/lib/rules/no-typos.js +++ b/tests/lib/rules/no-typos.js @@ -935,6 +935,34 @@ ruleTester.run('no-typos', rule, { errors: [{ message: 'Typo in prop type chain qualifier: isrequired' }] + }, { + code: ` + import PropTypes from "prop-types"; + class Component extends React.Component { + static propTypes = { + a: PropTypes.number.isrequired + } + }; + `, + parser: 'babel-eslint', + parserOptions: parserOptions, + errors: [{ + message: 'Typo in prop type chain qualifier: isrequired' + }] + }, { + code: ` + import PropTypes from "prop-types"; + class Component extends React.Component { + static propTypes = { + a: PropTypes.Number + } + }; + `, + parser: 'babel-eslint', + parserOptions: parserOptions, + errors: [{ + message: 'Typo in declared prop type: Number' + }] }, { code: ` import PropTypes from "prop-types";