diff --git a/lib/rules/no-did-mount-set-state.js b/lib/rules/no-did-mount-set-state.js index c954e5971e..0bb4bac893 100644 --- a/lib/rules/no-did-mount-set-state.js +++ b/lib/rules/no-did-mount-set-state.js @@ -16,16 +16,20 @@ module.exports = function(context) { return { - 'MemberExpression': function(node) { - if (node.object.type !== 'ThisExpression' || node.property.name !== 'setState') { + 'CallExpression': function(node) { + var callee = node.callee; + if (callee.type !== 'MemberExpression') { return; } - var ancestors = context.getAncestors(node); + if (callee.object.type !== 'ThisExpression' || callee.property.name !== 'setState') { + return; + } + var ancestors = context.getAncestors(callee); for (var i = 0, j = ancestors.length; i < j; i++) { if (ancestors[i].type !== 'Property' || ancestors[i].key.name !== 'componentDidMount') { continue; } - context.report(node, 'Do not use setState in componentDidMount'); + context.report(callee, 'Do not use setState in componentDidMount'); } } }; diff --git a/lib/rules/no-did-update-set-state.js b/lib/rules/no-did-update-set-state.js index 1c14b49492..721e856dc2 100644 --- a/lib/rules/no-did-update-set-state.js +++ b/lib/rules/no-did-update-set-state.js @@ -16,16 +16,20 @@ module.exports = function(context) { return { - 'MemberExpression': function(node) { - if (node.object.type !== 'ThisExpression' || node.property.name !== 'setState') { + 'CallExpression': function(node) { + var callee = node.callee; + if (callee.type !== 'MemberExpression') { return; } - var ancestors = context.getAncestors(node); + if (callee.object.type !== 'ThisExpression' || callee.property.name !== 'setState') { + return; + } + var ancestors = context.getAncestors(callee); for (var i = 0, j = ancestors.length; i < j; i++) { if (ancestors[i].type !== 'Property' || ancestors[i].key.name !== 'componentDidUpdate') { continue; } - context.report(node, 'Do not use setState in componentDidUpdate'); + context.report(callee, 'Do not use setState in componentDidUpdate'); } } }; diff --git a/tests/lib/rules/no-did-mount-set-state.js b/tests/lib/rules/no-did-mount-set-state.js index 30b061baf0..7cc67f3b8c 100644 --- a/tests/lib/rules/no-did-mount-set-state.js +++ b/tests/lib/rules/no-did-mount-set-state.js @@ -40,6 +40,20 @@ eslintTester.addRuleTest('lib/rules/no-did-mount-set-state', { ecmaFeatures: { jsx: true } + }, { + code: '\ + var Hello = React.createClass({\ + componentDidMount: function() {\ + someNonMemberFunction(arg);\ + this.someHandler = this.setState;\ + },\ + render: function() {\ + return