eslint-plugin-lodash
Version:
Lodash specific linting rules for ESLint
58 lines (45 loc) • 2.34 kB
JavaScript
/**
* @fileoverview Rule to enforce usage of collection method values
*/
'use strict';
/**
* @fileoverview Rule to enforce usage of collection method values
*/
//------------------------------------------------------------------------------
// Rule Definition
//------------------------------------------------------------------------------
module.exports = {
create: function create(context) {
var _require = require('../util/lodashUtil');
var isChainBreaker = _require.isChainBreaker;
var getLodashMethodVisitors = _require.getLodashMethodVisitors;
var _require2 = require('../util/astUtil');
var getMethodName = _require2.getMethodName;
var _require3 = require('../util/methodDataUtil');
var getCollectionMethods = _require3.getCollectionMethods;
var isAliasOfMethod = _require3.isAliasOfMethod;
var getSideEffectIterationMethods = _require3.getSideEffectIterationMethods;
var settings = require('../util/settingsUtil').getSettings(context);
var includes = require('lodash/includes');
function parentUsesValue(node, callType) {
var isBeforeChainBreaker = callType === 'chained' && isChainBreaker(node.parent.parent, settings.version);
return (isBeforeChainBreaker ? node.parent.parent : node).parent.type !== 'ExpressionStatement';
}
function isPureLodashCollectionMethod(method, version) {
return includes(getCollectionMethods(version), method) && !isAliasOfMethod(version, 'remove', method);
}
function isSideEffectIterationMethod(method, version) {
return includes(getSideEffectIterationMethods(version), method);
}
return getLodashMethodVisitors(context, function (node, iteratee, _ref) {
var method = _ref.method;
var version = _ref.version;
var callType = _ref.callType;
if (isPureLodashCollectionMethod(method, version) && !parentUsesValue(node, callType)) {
context.report(node, 'Use value returned from _.' + method);
} else if (isSideEffectIterationMethod(method, version) && parentUsesValue(node, callType)) {
context.report(node, 'Do not use value returned from _.' + getMethodName(node));
}
});
}
};