UNPKG

tslint-etc

Version:
41 lines (40 loc) 1.69 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Rule = void 0; const tsquery_1 = require("@phenomnomnominal/tsquery"); const Lint = require("tslint"); const ts = require("typescript"); const support_1 = require("../support"); const mutatorRegExp = /^(fill|reverse|sort|splice)$/; const creatorRegExp = /^(concat|entries|filter|keys|map|slice|values)$/; class Rule extends Lint.Rules.TypedRule { applyWithProgram(sourceFile, program) { const failures = []; const typeChecker = program.getTypeChecker(); const callExpressions = tsquery_1.tsquery(sourceFile, `CallExpression[expression.name.text='forEach']`); callExpressions.forEach((callExpression) => { const callee = callExpression.expression; if (!ts.isPropertyAccessExpression(callee)) { return; } const { expression: object, name: property } = callee; const type = typeChecker.getTypeAtLocation(object); if (!support_1.couldBeType(type, "Array")) { return; } failures.push(new Lint.RuleFailure(sourceFile, property.getStart(), property.getStart() + property.getWidth(), Rule.FAILURE_STRING, this.ruleName)); }); return failures; } } exports.Rule = Rule; Rule.metadata = { description: "Forbids calling forEach on arrays.", options: null, optionsDescription: "Not configurable.", requiresTypeInfo: true, ruleName: "no-array-foreach", type: "functionality", typescriptOnly: true, }; Rule.FAILURE_STRING = "Calling forEach on arrays is forbidden";