From a8f3a0534d1f5099d33824816e00fffc9df0bbcd Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Fri, 10 Jul 2015 21:11:21 +0200 Subject: [PATCH] Remove properties limitations on some prop types (fixes #139) --- lib/rules/prop-types.js | 25 ---------------- tests/lib/rules/prop-types.js | 54 ++++++++++++----------------------- 2 files changed, 18 insertions(+), 61 deletions(-) diff --git a/lib/rules/prop-types.js b/lib/rules/prop-types.js index 650f4752f1..85c21c619f 100644 --- a/lib/rules/prop-types.js +++ b/lib/rules/prop-types.js @@ -295,31 +295,6 @@ module.exports = function(context) { return true; } } - if ( - value.type === 'MemberExpression' && - value.property && - value.property.name - ) { - var name = value.property.name; - // React propTypes with limited possible properties - var propertiesMap = { - array: Array.prototype, - bool: Boolean.prototype, - func: Function.prototype, - number: Number.prototype, - string: String.prototype - }; - if (name in propertiesMap) { - return { - type: name, - children: { - __ANY_KEY__: { - acceptedProperties: propertiesMap[name] - } - } - }; - } - } // Unknown property or accepts everything (any, object, ...) return true; } diff --git a/tests/lib/rules/prop-types.js b/tests/lib/rules/prop-types.js index 0da4cc3821..ac5905d4c6 100644 --- a/tests/lib/rules/prop-types.js +++ b/tests/lib/rules/prop-types.js @@ -548,8 +548,23 @@ eslintTester.addRuleTest('lib/rules/prop-types', { '};' ].join('\n'), parser: 'babel-eslint' - } - ], + }, { + code: [ + 'var Hello = React.createClass({', + ' propTypes: {', + ' router: React.PropTypes.func', + ' },', + ' render: function() {', + ' var nextPath = this.props.router.getCurrentQuery().nextPath;', + ' return
{nextPath}
;', + ' }', + '});' + ].join('\n'), + ecmaFeatures: { + classes: true, + jsx: true + } + }], invalid: [ { @@ -834,40 +849,7 @@ eslintTester.addRuleTest('lib/rules/prop-types', { }, errors: [ {message: '\'a.length\' is missing in props validation for Hello'}, - {message: '\'a.b\' is missing in props validation for Hello'}, - {message: '\'a.e.anyProp\' is missing in props validation for Hello'}, - {message: '\'a.c.someThingElse\' is missing in props validation for Hello'} - ] - }, { - code: [ - 'class Hello extends React.Component {', - ' render() {', - ' this.props.arr.toFixed();', - ' this.props.bo.push();', - ' this.props.fu.push();', - ' this.props.numb.propX;', - ' this.props.stri.tooString();', - ' return
Hello
;', - ' }', - '}', - 'Hello.propTypes = {', - ' arr: React.PropTypes.array,', - ' bo: React.PropTypes.bool,', - ' fu: React.PropTypes.func,', - ' numb: React.PropTypes.number,', - ' stri: React.PropTypes.string', - '};' - ].join('\n'), - ecmaFeatures: { - classes: true, - jsx: true - }, - errors: [ - {message: '\'arr.toFixed\' is missing in props validation for Hello'}, - {message: '\'bo.push\' is missing in props validation for Hello'}, - {message: '\'fu.push\' is missing in props validation for Hello'}, - {message: '\'numb.propX\' is missing in props validation for Hello'}, - {message: '\'stri.tooString\' is missing in props validation for Hello'} + {message: '\'a.b\' is missing in props validation for Hello'} ] }, { code: [