diff --git a/lib/rules/prop-types.js b/lib/rules/prop-types.js index ce01cf6fe0..c11d43cefb 100644 --- a/lib/rules/prop-types.js +++ b/lib/rules/prop-types.js @@ -566,10 +566,11 @@ module.exports = Components.detect(function(context, components, utils) { }, VariableDeclarator: function(node) { + var destructuring = node.init && node.id && node.id.type === 'ObjectPattern'; // let {props: {firstname}} = this - var thisDestructuring = node.init && node.init.type === 'ThisExpression' && node.id.type === 'ObjectPattern'; + var thisDestructuring = destructuring && node.init.type === 'ThisExpression'; // let {firstname} = props - var statelessDestructuring = node.init && node.init.name === 'props' && utils.getParentStatelessComponent(); + var statelessDestructuring = destructuring && node.init.name === 'props' && utils.getParentStatelessComponent(); if (!thisDestructuring && !statelessDestructuring) { return; diff --git a/tests/lib/rules/prop-types.js b/tests/lib/rules/prop-types.js index b4bc36bca8..7429ab9257 100644 --- a/tests/lib/rules/prop-types.js +++ b/tests/lib/rules/prop-types.js @@ -953,6 +953,15 @@ ruleTester.run('prop-types', rule, { ecmaFeatures: { jsx: true } + }, { + // Validation is ignored on reassigned props object + code: [ + 'const statelessComponent = (props) => {', + ' let newProps = props;', + ' return {newProps.someProp};', + '}' + ].join('\n'), + parser: 'babel-eslint' } ],