From 1ced71067e2bc3c87c4b083817a70666c0d3e0e0 Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Mon, 8 May 2017 22:42:43 +0200 Subject: [PATCH] Fix no-unused-prop-types crash with Flow spread operator (fixes #1178 --- lib/rules/no-unused-prop-types.js | 4 ++++ tests/lib/rules/no-unused-prop-types.js | 28 +++++++++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/lib/rules/no-unused-prop-types.js b/lib/rules/no-unused-prop-types.js index 2b670072a0..6eb5776d9f 100644 --- a/lib/rules/no-unused-prop-types.js +++ b/lib/rules/no-unused-prop-types.js @@ -678,6 +678,10 @@ module.exports = { switch (propTypes && propTypes.type) { case 'ObjectTypeAnnotation': iterateProperties(propTypes.properties, function(key, value) { + if (!value) { + ignorePropsValidation = true; + return; + } var types = buildTypeAnnotationDeclarationTypes(value, key); if (types === true) { types = {}; diff --git a/tests/lib/rules/no-unused-prop-types.js b/tests/lib/rules/no-unused-prop-types.js index 3f0ddebaf0..cc4f3c248d 100644 --- a/tests/lib/rules/no-unused-prop-types.js +++ b/tests/lib/rules/no-unused-prop-types.js @@ -1411,6 +1411,34 @@ ruleTester.run('no-unused-prop-types', rule, { ' bar: PropTypes.bool', '};' ].join('\n') + }, { + code: [ + 'type Person = {', + ' ...data,', + ' lastname: string', + '};', + 'class Hello extends React.Component {', + ' props: Person;', + ' render () {', + ' return
Hello {this.props.firstname}
;', + ' }', + '}' + ].join('\n'), + parser: 'babel-eslint' + }, { + code: [ + 'type Person = {|', + ' ...data,', + ' lastname: string', + '|};', + 'class Hello extends React.Component {', + ' props: Person;', + ' render () {', + ' return
Hello {this.props.firstname}
;', + ' }', + '}' + ].join('\n'), + parser: 'babel-eslint' } ],