Skip to content

Commit f924414

Browse files
committed
Fix static propTypes handling in no-typos
Resolves #1677
1 parent c82746c commit f924414

File tree

2 files changed

+33
-5
lines changed

2 files changed

+33
-5
lines changed

lib/rules/no-typos.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -126,8 +126,7 @@ module.exports = {
126126

127127
function reportErrorIfClassPropertyCasingTypo(node, propertyName) {
128128
if (propertyName === 'propTypes' || propertyName === 'contextTypes' || propertyName === 'childContextTypes') {
129-
const propsNode = node && node.parent && node.parent.type === 'AssignmentExpression' && node.parent.right;
130-
checkValidPropObject(propsNode);
129+
checkValidPropObject(node);
131130
}
132131
STATIC_CLASS_PROPERTIES.forEach(CLASS_PROP => {
133132
if (propertyName && CLASS_PROP.toLowerCase() === propertyName.toLowerCase() && CLASS_PROP !== propertyName) {
@@ -176,7 +175,7 @@ module.exports = {
176175

177176
const tokens = context.getFirstTokens(node, 2);
178177
const propertyName = tokens[1].value;
179-
reportErrorIfClassPropertyCasingTypo(node, propertyName);
178+
reportErrorIfClassPropertyCasingTypo(node.value, propertyName);
180179
},
181180

182181
MemberExpression: function(node) {
@@ -193,9 +192,10 @@ module.exports = {
193192

194193
if (
195194
relatedComponent &&
196-
(utils.isES6Component(relatedComponent.node) || utils.isReturningJSX(relatedComponent.node))
195+
(utils.isES6Component(relatedComponent.node) || utils.isReturningJSX(relatedComponent.node)) &&
196+
(node.parent && node.parent.type === 'AssignmentExpression' && node.parent.right)
197197
) {
198-
reportErrorIfClassPropertyCasingTypo(node, propertyName);
198+
reportErrorIfClassPropertyCasingTypo(node.parent.right, propertyName);
199199
}
200200
},
201201

tests/lib/rules/no-typos.js

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -935,6 +935,34 @@ ruleTester.run('no-typos', rule, {
935935
errors: [{
936936
message: 'Typo in prop type chain qualifier: isrequired'
937937
}]
938+
}, {
939+
code: `
940+
import PropTypes from "prop-types";
941+
class Component extends React.Component {
942+
static propTypes = {
943+
a: PropTypes.number.isrequired
944+
}
945+
};
946+
`,
947+
parser: 'babel-eslint',
948+
parserOptions: parserOptions,
949+
errors: [{
950+
message: 'Typo in prop type chain qualifier: isrequired'
951+
}]
952+
}, {
953+
code: `
954+
import PropTypes from "prop-types";
955+
class Component extends React.Component {
956+
static propTypes = {
957+
a: PropTypes.Number
958+
}
959+
};
960+
`,
961+
parser: 'babel-eslint',
962+
parserOptions: parserOptions,
963+
errors: [{
964+
message: 'Typo in declared prop type: Number'
965+
}]
938966
}, {
939967
code: `
940968
import PropTypes from "prop-types";

0 commit comments

Comments
 (0)