eslint-plugin-lodash
Version:
Lodash specific linting rules for ESLint
54 lines (41 loc) • 1.91 kB
JavaScript
/**
* @fileoverview Rule to disallow the use of a chain for a single method
*/
;
/**
* @fileoverview Rule to disallow the use of a chain for a single method
*/
// ------------------------------------------------------------------------------
// Rule Definition
// ------------------------------------------------------------------------------
module.exports = {
create: function create(context) {
var _require = require('../util/lodashUtil');
var isChainBreaker = _require.isChainBreaker;
var isLodashChainStart = _require.isLodashChainStart;
var getLodashImportVisitors = _require.getLodashImportVisitors;
var _require2 = require('../util/astUtil');
var isObjectOfMethodCall = _require2.isObjectOfMethodCall;
var isMethodCall = _require2.isMethodCall;
var _require$getSettings = require('../util/settingsUtil').getSettings(context);
var version = _require$getSettings.version;
var pragma = _require$getSettings.pragma;
var _require3 = require('../util/ruleUtil');
var combineVisitorObjects = _require3.combineVisitorObjects;
var negate = require('lodash/negate');
var isEndOfChain = negate(isObjectOfMethodCall);
function isBeforeChainBreaker(node) {
return isChainBreaker(node.parent.parent, version);
}
return combineVisitorObjects({
CallExpression: function CallExpression(node) {
if (isLodashChainStart(node, pragma)) {
var firstCall = node.parent.parent;
if (isMethodCall(firstCall) && (isEndOfChain(firstCall) || isBeforeChainBreaker(firstCall))) {
context.report(firstCall, 'Do not use chain syntax for single method');
}
}
}
}, getLodashImportVisitors(context));
}
};