Skip to content

Commit 48e386d

Browse files
authored
Merge pull request jsx-eslint#1827 from alexzherdev/1677-no-typos-static-proptypes
Fix static propTypes handling in no-typos
2 parents 2a674b0 + d68b9e8 commit 48e386d

File tree

2 files changed

+35
-9
lines changed

2 files changed

+35
-9
lines changed

lib/rules/no-typos.js

+8-8
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ module.exports = {
4545
let propTypesPackageName = null;
4646
let reactPackageName = null;
4747

48-
function checkValidPropTypeQualfier(node) {
48+
function checkValidPropTypeQualifier(node) {
4949
if (node.name !== 'isRequired') {
5050
context.report({
5151
node: node,
@@ -101,14 +101,14 @@ module.exports = {
101101
isPropTypesPackage(node.object.object)
102102
) { // PropTypes.myProp.isRequired
103103
checkValidPropType(node.object.property);
104-
checkValidPropTypeQualfier(node.property);
104+
checkValidPropTypeQualifier(node.property);
105105
} else if (
106106
isPropTypesPackage(node.object) &&
107107
node.property.name !== 'isRequired'
108108
) { // PropTypes.myProp
109109
checkValidPropType(node.property);
110110
} else if (node.object.type === 'CallExpression') {
111-
checkValidPropTypeQualfier(node.property);
111+
checkValidPropTypeQualifier(node.property);
112112
checkValidCallExpression(node.object);
113113
}
114114
} else if (node.type === 'CallExpression') {
@@ -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

+27-1
Original file line numberDiff line numberDiff line change
@@ -917,7 +917,6 @@ ruleTester.run('no-typos', rule, {
917917
a: PropTypes.Number.isRequired
918918
}
919919
`,
920-
parser: 'babel-eslint',
921920
parserOptions: parserOptions,
922921
errors: [{
923922
message: 'Typo in declared prop type: Number'
@@ -930,11 +929,38 @@ ruleTester.run('no-typos', rule, {
930929
a: PropTypes.number.isrequired
931930
}
932931
`,
932+
parserOptions: parserOptions,
933+
errors: [{
934+
message: 'Typo in prop type chain qualifier: isrequired'
935+
}]
936+
}, {
937+
code: `
938+
import PropTypes from "prop-types";
939+
class Component extends React.Component {
940+
static propTypes = {
941+
a: PropTypes.number.isrequired
942+
}
943+
};
944+
`,
933945
parser: 'babel-eslint',
934946
parserOptions: parserOptions,
935947
errors: [{
936948
message: 'Typo in prop type chain qualifier: isrequired'
937949
}]
950+
}, {
951+
code: `
952+
import PropTypes from "prop-types";
953+
class Component extends React.Component {
954+
static propTypes = {
955+
a: PropTypes.Number
956+
}
957+
};
958+
`,
959+
parser: 'babel-eslint',
960+
parserOptions: parserOptions,
961+
errors: [{
962+
message: 'Typo in declared prop type: Number'
963+
}]
938964
}, {
939965
code: `
940966
import PropTypes from "prop-types";

0 commit comments

Comments
 (0)