Skip to content

Commit 8360ffa

Browse files
committed
support isRequired for custom props and call expressions
1 parent 36beb6d commit 8360ffa

File tree

2 files changed

+43
-2
lines changed

2 files changed

+43
-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

+35
Original file line numberDiff line numberDiff line change
@@ -369,6 +369,17 @@ 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+
parser: 'babel-eslint',
382+
parserOptions: parserOptions
372383
}],
373384

374385
invalid: [{
@@ -795,5 +806,29 @@ ruleTester.run('no-typos', rule, {
795806
}, {
796807
message: 'Typo in declared prop type: objectof'
797808
}]
809+
}, {
810+
code: `class Component extends React.Component {};
811+
Component.propTypes = {
812+
b: string.isrequired
813+
}
814+
`,
815+
parser: 'babel-eslint',
816+
parserOptions: parserOptions,
817+
errors: [{
818+
message: 'Typo in declared prop type: isrequired'
819+
}]
820+
}, {
821+
code: `class Component extends React.Component {};
822+
Component.propTypes = {
823+
c: shape({
824+
d: number,
825+
}).isrequired
826+
}
827+
`,
828+
parser: 'babel-eslint',
829+
parserOptions: parserOptions,
830+
errors: [{
831+
message: 'Typo in prop type chain qualifier: isrequired'
832+
}]
798833
}]
799834
});

0 commit comments

Comments
 (0)