diff --git a/lib/rules/no-commit.js b/lib/rules/no-commit.js index 0d8f175..4236160 100644 --- a/lib/rules/no-commit.js +++ b/lib/rules/no-commit.js @@ -14,8 +14,13 @@ module.exports = function (context) { return { CallExpression: function (node) { - if (lodashUtil.isEndOfChain(node) && lodashUtil.isCallToMethod(node, 'commit') && !lodashUtil.isCallToMethod(astUtil.getCaller(node), 'forEach')) { - context.report(node, 'Do not end chain with commit, except for side effects.'); + if (lodashUtil.isLodashChainStart(node)) { + do { + node = node.parent.parent; + } while (astUtil.isMethodCall(node) && !lodashUtil.isCallToMethod(node, 'commit')); + if (lodashUtil.isCallToMethod(node, 'commit') && !lodashUtil.isCallToMethod(astUtil.getCaller(node), 'forEach')) { + context.report(node, 'Do not end chain with commit, except for side effects.'); + } } } }; diff --git a/lib/rules/no-single-chain.js b/lib/rules/no-single-chain.js index a918c8f..221424b 100644 --- a/lib/rules/no-single-chain.js +++ b/lib/rules/no-single-chain.js @@ -11,18 +11,21 @@ module.exports = function (context) { var lodashUtil = require('../util/lodashUtil'); var astUtil = require('../util/astUtil'); - function isCalledByChainStart(node) { - return lodashUtil.isLodashChainStart(astUtil.getCaller(node)); + function isEndOfChain(node) { + return !astUtil.isObjectOfMethodCall(node); } - function isChainBreakerAfterSingleMethod(node) { - return lodashUtil.isChainBreaker(node) && isCalledByChainStart(astUtil.getCaller(node)); + function isBeforeChainBreaker(node) { + return lodashUtil.isChainBreaker(node.parent.parent); } return { CallExpression: function (node) { - if (lodashUtil.isEndOfChain(node) && (isCalledByChainStart(node) || isChainBreakerAfterSingleMethod(node))) { - context.report(node.callee.property, 'Do not use chain syntax for single method'); + if (lodashUtil.isLodashChainStart(node)) { + var firstCall = node.parent.parent; + if (astUtil.isMethodCall(firstCall) && (isEndOfChain(firstCall) || isBeforeChainBreaker(firstCall))) { + context.report(firstCall, 'Do not use chain syntax for single method'); + } } } };