Skip to content

Commit 00f716a

Browse files
committed
Fix forbid-prop-types for arrayOf and instanceOf (fixes #230)
1 parent a2d9faa commit 00f716a

File tree

2 files changed

+40
-0
lines changed

2 files changed

+40
-0
lines changed

lib/rules/forbid-prop-types.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,12 @@ module.exports = function(context) {
6161
) {
6262
declaration.value = declaration.value.object;
6363
}
64+
if (
65+
declaration.value.type === 'CallExpression' &&
66+
declaration.value.callee.type === 'MemberExpression'
67+
) {
68+
declaration.value = declaration.value.callee;
69+
}
6470

6571
if (isForbidden(declaration.value.property.name)) {
6672
context.report(declaration, 'Prop type `' + declaration.value.property.name + '` is forbidden');

tests/lib/rules/forbid-prop-types.js

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,21 @@ ruleTester.run('forbid-prop-types', rule, {
176176
experimentalObjectRestSpread: true,
177177
jsx: true
178178
}
179+
}, {
180+
code: [
181+
'var Hello = React.createClass({',
182+
' propTypes: {',
183+
' retailer: PropTypes.instanceOf(Map).isRequired,',
184+
' requestRetailer: PropTypes.func.isRequired',
185+
' },',
186+
' render: function() {',
187+
' return <div />;',
188+
' }',
189+
'});'
190+
].join('\n'),
191+
ecmaFeatures: {
192+
jsx: true
193+
}
179194
}],
180195

181196
invalid: [{
@@ -421,5 +436,24 @@ ruleTester.run('forbid-prop-types', rule, {
421436
jsx: true
422437
},
423438
errors: 2
439+
}, {
440+
code: [
441+
'var Hello = React.createClass({',
442+
' propTypes: {',
443+
' retailer: PropTypes.instanceOf(Map).isRequired,',
444+
' requestRetailer: PropTypes.func.isRequired',
445+
' },',
446+
' render: function() {',
447+
' return <div />;',
448+
' }',
449+
'});'
450+
].join('\n'),
451+
ecmaFeatures: {
452+
jsx: true
453+
},
454+
options: [{
455+
forbid: ['instanceOf']
456+
}],
457+
errors: 1
424458
}]
425459
});

0 commit comments

Comments
 (0)