UNPKG

eslint-plugin-lodash

Version:

Lodash specific linting rules for ESLint

58 lines (45 loc) 2.34 kB
/** * @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)); } }); } };