eslint-plugin-lodash
Version:
Lodash specific linting rules for ESLint
61 lines (50 loc) • 2.79 kB
JavaScript
/**
* @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));
}
};