UNPKG

eslint-plugin-no-array-concat

Version:
53 lines 2.06 kB
"use strict"; 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