canonical
Version:
Canonical code style linter and formatter for JavaScript, SCSS, CSS and JSON.
30 lines (25 loc) • 1.17 kB
JavaScript
/**
* @fileoverview Rule to ensure consistency of aliases of lodash methods
*/
;
//------------------------------------------------------------------------------
// Rule Definition
//------------------------------------------------------------------------------
module.exports = function (context) {
var _ = require('lodash');
var aliasMap = require('../util/aliases');
var lodashUtil = require('../util/lodashUtil');
var astUtil = require('../util/astUtil');
var aliases = _.reduce(aliasMap.ALIASES, function (result, aliasesForKey, key) {
var mapToMainKey = _.zipObject(aliasesForKey, _.fill(new Array(aliasesForKey.length), key));
return _.assign(result, mapToMainKey);
}, {});
return {
CallExpression: function (node) {
var methodName = astUtil.getMethodName(node);
if ((lodashUtil.isLodashCall(node) || lodashUtil.isLodashWrapper(node)) && _.has(aliases, methodName)) {
context.report(node.callee.property, "Method '{{old}}' is an alias, for consistency prefer using '{{new}}'", {old: methodName, new: aliases[methodName]});
}
}
};
};