UNPKG

eslint-plugin-lodash

Version:

Lodash specific linting rules for ESLint

61 lines (50 loc) 2.79 kB
/** * @fileoverview Rule to check if there's a JS native method in the lodash chain */ 'use strict'; /** * @fileoverview Rule to check if there's a JS native method in the lodash chain */ //------------------------------------------------------------------------------ // Rule Definition //------------------------------------------------------------------------------ module.exports = { create: function create(context) { var _require = require('../util/lodashUtil'); var isLodashChainStart = _require.isLodashChainStart; var isChainBreaker = _require.isChainBreaker; var isNativeCollectionMethodCall = _require.isNativeCollectionMethodCall; var isLodashWrapperMethod = _require.isLodashWrapperMethod; var isLodashCall = _require.isLodashCall; var getLodashImportVisitors = _require.getLodashImportVisitors; var _require2 = require('../util/astUtil'); var isMethodCall = _require2.isMethodCall; var isObjectOfMethodCall = _require2.isObjectOfMethodCall; var getMethodName = _require2.getMethodName; var _require3 = require('../util/ruleUtil'); var combineVisitorObjects = _require3.combineVisitorObjects; var _require$getSettings = require('../util/settingsUtil').getSettings(context); var pragma = _require$getSettings.pragma; var version = _require$getSettings.version; var REPORT_MESSAGE = "Do not break chain before method '{{method}}'."; return combineVisitorObjects({ CallExpression: function CallExpression(node) { if (isLodashChainStart(node, pragma, context)) { do { node = node.parent.parent; } while (isMethodCall(node) && !isChainBreaker(node, version)); if (isChainBreaker(node, version) && isObjectOfMethodCall(node)) { var callAfterChainBreak = node.parent.parent; if (isNativeCollectionMethodCall(callAfterChainBreak) || isLodashWrapperMethod(callAfterChainBreak, version)) { context.report({ node: callAfterChainBreak, message: REPORT_MESSAGE, data: { method: getMethodName(callAfterChainBreak) } }); } } } else if (isLodashCall(node, pragma, context)) { if (node.parent.type === 'MemberExpression' && isMethodCall(node.parent.parent) && isNativeCollectionMethodCall(node.parent.parent)) { context.report({ node: node.parent.parent, message: REPORT_MESSAGE, data: { method: getMethodName(node.parent.parent) } }); } } } }, getLodashImportVisitors(context)); } };