From f7a9fb587a75116d95c5b1c996d5aeecbb4df09a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Aaberg?= Date: Sat, 16 Dec 2017 12:49:54 +0100 Subject: [PATCH] [fix] `no-did-mount-set-state`, `no-did-update-set-state`: Catch setState in cDU and cDM when defined as ClassProperties --- lib/util/makeNoMethodSetStateRule.js | 2 +- tests/lib/rules/no-did-mount-set-state.js | 14 ++++++++++++++ tests/lib/rules/no-did-update-set-state.js | 14 ++++++++++++++ 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/lib/util/makeNoMethodSetStateRule.js b/lib/util/makeNoMethodSetStateRule.js index dfa02e23ab..3a46b5e93b 100644 --- a/lib/util/makeNoMethodSetStateRule.js +++ b/lib/util/makeNoMethodSetStateRule.js @@ -76,7 +76,7 @@ function makeNoMethodSetStateRule(methodName, shouldCheckUnsafeCb) { depth++; } if ( - (ancestor.type !== 'Property' && ancestor.type !== 'MethodDefinition') || + (ancestor.type !== 'Property' && ancestor.type !== 'MethodDefinition' && ancestor.type !== 'ClassProperty') || !nameMatches(ancestor.key.name) || (mode !== 'disallow-in-func' && depth > 1) ) { diff --git a/tests/lib/rules/no-did-mount-set-state.js b/tests/lib/rules/no-did-mount-set-state.js index ac1b03ec9c..7c876efc0a 100644 --- a/tests/lib/rules/no-did-mount-set-state.js +++ b/tests/lib/rules/no-did-mount-set-state.js @@ -107,6 +107,20 @@ ruleTester.run('no-did-mount-set-state', rule, { errors: [{ message: 'Do not use setState in componentDidMount' }] + }, { + code: ` + class Hello extends React.Component { + componentDidMount = () => { + this.setState({ + data: data + }); + } + } + `, + parser: 'babel-eslint', + errors: [{ + message: 'Do not use setState in componentDidMount' + }] }, { code: ` var Hello = createReactClass({ diff --git a/tests/lib/rules/no-did-update-set-state.js b/tests/lib/rules/no-did-update-set-state.js index d446b6556f..2bd90db3a0 100644 --- a/tests/lib/rules/no-did-update-set-state.js +++ b/tests/lib/rules/no-did-update-set-state.js @@ -107,6 +107,20 @@ ruleTester.run('no-did-update-set-state', rule, { errors: [{ message: 'Do not use setState in componentDidUpdate' }] + }, { + code: ` + class Hello extends React.Component { + componentDidUpdate = () => { + this.setState({ + data: data + }); + } + } + `, + parser: 'babel-eslint', + errors: [{ + message: 'Do not use setState in componentDidUpdate' + }] }, { code: ` var Hello = createReactClass({