From d331af621b9c7e3bad14268ca4d11192b8658345 Mon Sep 17 00:00:00 2001 From: Kevin Huang Date: Tue, 12 Dec 2017 16:21:20 -0800 Subject: [PATCH 1/2] Add empty params check for unused prop types rule to fix empty proptype functions from causing crashes --- lib/rules/no-unused-prop-types.js | 3 +++ tests/lib/rules/no-unused-prop-types.js | 11 +++++++++++ 2 files changed, 14 insertions(+) diff --git a/lib/rules/no-unused-prop-types.js b/lib/rules/no-unused-prop-types.js index d4135140f2..cfaa806074 100644 --- a/lib/rules/no-unused-prop-types.js +++ b/lib/rules/no-unused-prop-types.js @@ -652,6 +652,9 @@ module.exports = { case 'ArrowFunctionExpression': case 'FunctionDeclaration': case 'FunctionExpression': + if (node.params.length === 0) { + break; + } type = 'destructuring'; properties = node.params[0].properties; if (inSetStateUpdater()) { diff --git a/tests/lib/rules/no-unused-prop-types.js b/tests/lib/rules/no-unused-prop-types.js index 5eaf90de0d..6377925b70 100644 --- a/tests/lib/rules/no-unused-prop-types.js +++ b/tests/lib/rules/no-unused-prop-types.js @@ -2440,6 +2440,17 @@ ruleTester.run('no-unused-prop-types', rule, { } `, parser: 'babel-eslint' + }, + { + code: ` + class MyComponent extends React.Component { + render() { + return
{ this.props.other }
+ } + } + MyComponent.propTypes = { other: () => {} }; + `, + parser: 'babel-eslint' } ], From 6015af29182e4cd406a6b661539fb592b3a1022e Mon Sep 17 00:00:00 2001 From: Kevin Huang Date: Wed, 13 Dec 2017 11:15:26 -0800 Subject: [PATCH 2/2] Add test cases for other forms of empty functions in no-unused-prop-types and remove parser option --- tests/lib/rules/no-unused-prop-types.js | 35 ++++++++++++++++++++++--- 1 file changed, 32 insertions(+), 3 deletions(-) diff --git a/tests/lib/rules/no-unused-prop-types.js b/tests/lib/rules/no-unused-prop-types.js index 6377925b70..577148051e 100644 --- a/tests/lib/rules/no-unused-prop-types.js +++ b/tests/lib/rules/no-unused-prop-types.js @@ -2443,14 +2443,43 @@ ruleTester.run('no-unused-prop-types', rule, { }, { code: ` - class MyComponent extends React.Component { + class MyComponent extends React.Component { render() { return
{ this.props.other }
} } MyComponent.propTypes = { other: () => {} }; - `, - parser: 'babel-eslint' + ` + }, + { + code: ` + class MyComponent extends React.Component { + render() { + return
{ this.props.other }
+ } + } + MyComponent.propTypes = { other() {} }; + ` + }, + { + code: ` + class MyComponent extends React.Component { + render() { + return
{ this.props.other }
+ } + } + MyComponent.propTypes = { other: function () {} }; + ` + }, + { + code: ` + class MyComponent extends React.Component { + render() { + return
{ this.props.other }
+ } + } + MyComponent.propTypes = { * other() {} }; + ` } ],