eslint-plugin-no-array-concat
Version:
ESLint rule for not using Array.prototype.concat()
53 lines • 2.06 kB
JavaScript
const utils_1 = require("@typescript-eslint/utils");
const utils_2 = require("@typescript-eslint/utils");
const eslint_ast_utils_1 = require("eslint-ast-utils");
const utils_3 = require("../utils");
module.exports = (0, utils_3.createRule)({
name: __filename,
meta: {
type: "suggestion",
docs: {
description: "Prevent using Array.prototype.concat() for Array concatenation",
recommended: false,
},
schema: [],
fixable: 'code',
messages: {
noArrayConcat: "Do not use Array.prototype.concat(...)",
}
},
defaultOptions: [],
create(context) {
var _a;
const parserServices = utils_2.ESLintUtils.getParserServices(context);
const checker = (_a = parserServices === null || parserServices === void 0 ? void 0 : parserServices.program) === null || _a === void 0 ? void 0 : _a.getTypeChecker();
if (!checker || !parserServices) {
throw Error("Types not available, maybe you need set the parser to @typescript-eslint/parser");
}
function disallowedConcat(node) {
if (node.callee.type !== utils_1.AST_NODE_TYPES.MemberExpression) {
return;
}
const callee = node.callee;
const propertyName = (0, eslint_ast_utils_1.getPropertyName)(callee);
if (!propertyName || propertyName !== 'concat') {
return;
}
const tsNodeMap = parserServices.esTreeNodeToTSNodeMap.get(node.callee.object);
const type = checker.getTypeAtLocation(tsNodeMap);
if (!checker.isArrayType(type)) {
return;
}
context.report({
messageId: "noArrayConcat",
loc: callee.property.loc,
node
});
}
return {
CallExpression: disallowedConcat
};
}
});
//# sourceMappingURL=no-array-concat.js.map
;