Skip to content

Commit f4cab9a

Browse files
authored
Merge pull request jsx-eslint#1652 from lfades/fix/no-typos
support for custom propTypes with isRequired in no-typos
2 parents 1d12044 + 942a92c commit f4cab9a

File tree

2 files changed

+60
-2
lines changed

2 files changed

+60
-2
lines changed

lib/rules/no-typos.js

+8-2
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,15 @@ module.exports = {
5959
if (node && node.type === 'MemberExpression' && node.object.type === 'MemberExpression') {
6060
checkValidPropType(node.object.property);
6161
checkValidPropTypeQualfier(node.property);
62-
} else if (node && node.type === 'MemberExpression' && node.object.type === 'Identifier') {
62+
} else if (node && node.type === 'MemberExpression' && node.object.type === 'Identifier' && node.property.name !== 'isRequired') {
6363
checkValidPropType(node.property);
64-
} else if (node && node.type === 'CallExpression') {
64+
} else if (node && (
65+
node.type === 'MemberExpression' && node.object.type === 'CallExpression' || node.type === 'CallExpression'
66+
)) {
67+
if (node.type === 'MemberExpression') {
68+
checkValidPropTypeQualfier(node.property);
69+
node = node.object;
70+
}
6571
const callee = node.callee;
6672
if (callee.type === 'MemberExpression' && callee.property.name === 'shape') {
6773
checkValidPropObject(node.arguments[0]);

tests/lib/rules/no-typos.js

+52
Original file line numberDiff line numberDiff line change
@@ -369,6 +369,27 @@ ruleTester.run('no-typos', rule, {
369369
};
370370
`,
371371
parser: 'babel-eslint'
372+
}, {
373+
code: `class Component extends React.Component {};
374+
Component.propTypes = {
375+
b: string.isRequired,
376+
c: PropTypes.shape({
377+
d: number.isRequired,
378+
}).isRequired
379+
}
380+
`,
381+
parserOptions: parserOptions
382+
}, {
383+
code: `class Component extends React.Component {};
384+
Component.propTypes = {
385+
b: string.isRequired,
386+
c: PropTypes.shape({
387+
d: number.isRequired,
388+
}).isRequired
389+
}
390+
`,
391+
parser: 'babel-eslint',
392+
parserOptions: parserOptions
372393
}],
373394

374395
invalid: [{
@@ -795,5 +816,36 @@ ruleTester.run('no-typos', rule, {
795816
}, {
796817
message: 'Typo in declared prop type: objectof'
797818
}]
819+
}, {
820+
code: `class Component extends React.Component {};
821+
Component.propTypes = {
822+
a: string.isrequired,
823+
b: shape({
824+
c: number
825+
}).isrequired
826+
}
827+
`,
828+
parserOptions: parserOptions,
829+
errors: [{
830+
message: 'Typo in declared prop type: isrequired'
831+
}, {
832+
message: 'Typo in prop type chain qualifier: isrequired'
833+
}]
834+
}, {
835+
code: `class Component extends React.Component {};
836+
Component.propTypes = {
837+
a: string.isrequired,
838+
b: shape({
839+
c: number
840+
}).isrequired
841+
}
842+
`,
843+
parser: 'babel-eslint',
844+
parserOptions: parserOptions,
845+
errors: [{
846+
message: 'Typo in declared prop type: isrequired'
847+
}, {
848+
message: 'Typo in prop type chain qualifier: isrequired'
849+
}]
798850
}]
799851
});

0 commit comments

Comments
 (0)