UNPKG

eslint-plugin-lodash

Version:

Lodash specific linting rules for ESLint

60 lines (51 loc) 2.34 kB
/** * @fileoverview Rule to make sure value() wasn't called on a lodash chain twice */ 'use strict'; /** * @fileoverview Rule to make sure value() wasn't called on a lodash chain twice */ // ------------------------------------------------------------------------------ // Rule Definition // ------------------------------------------------------------------------------ module.exports = { meta: { fixable: "code" }, create: function create(context) { var _require = require('../util/lodashUtil'); var isImplicitChainStart = _require.isImplicitChainStart; var isChainBreaker = _require.isChainBreaker; var isChainable = _require.isChainable; var getLodashImportVisitors = _require.getLodashImportVisitors; var _require2 = require('../util/astUtil'); var isMethodCall = _require2.isMethodCall; var getCaller = _require2.getCaller; var getMethodName = _require2.getMethodName; var settings = require('../util/settingsUtil').getSettings(context); var _require3 = require('../util/ruleUtil'); var combineVisitorObjects = _require3.combineVisitorObjects; return combineVisitorObjects({ CallExpression: function CallExpression(node) { if (isImplicitChainStart(node, settings.pragma, context)) { (function () { do { node = node.parent.parent; } while (isMethodCall(node) && !isChainBreaker(node, settings.version)); var caller = getCaller(node); if (isMethodCall(node) && !isChainable(caller, settings.version)) { context.report({ node: node, message: 'Do not use .value() after chain-ending method {{method}}', data: { method: getMethodName(caller) }, fix: function fix(fixer) { return fixer.removeRange([caller.range[1], node.range[1]]); } }); } })(); } } }, getLodashImportVisitors(context)); } };