UNPKG

tslint-immutable

Version:

TSLint rules to disable mutation in TypeScript.

70 lines 3.31 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var ts = require("typescript"); var check_node_1 = require("./shared/check-node"); var Ignore = require("./shared/ignore"); // tslint:disable-next-line:variable-name exports.Rule = check_node_1.createCheckNodeRule(checkNode, "Modifying properties of existing object not allowed."); var objPropAccessors = [ ts.SyntaxKind.ElementAccessExpression, ts.SyntaxKind.PropertyAccessExpression ]; var forbidObjPropOnLeftSideOf = [ ts.SyntaxKind.EqualsToken, ts.SyntaxKind.PlusEqualsToken, ts.SyntaxKind.MinusEqualsToken, ts.SyntaxKind.AsteriskEqualsToken, ts.SyntaxKind.AsteriskAsteriskEqualsToken, ts.SyntaxKind.SlashEqualsToken, ts.SyntaxKind.PercentEqualsToken, ts.SyntaxKind.LessThanLessThanEqualsToken, ts.SyntaxKind.GreaterThanGreaterThanEqualsToken, ts.SyntaxKind.GreaterThanGreaterThanGreaterThanEqualsToken, ts.SyntaxKind.AmpersandEqualsToken, ts.SyntaxKind.BarEqualsToken, ts.SyntaxKind.CaretEqualsToken ]; var forbidUnaryOps = [ ts.SyntaxKind.PlusPlusToken, ts.SyntaxKind.MinusMinusToken ]; function checkNode(node, ctx) { var invalidNodes = []; // No assignment with object.property on the left if (node && node.kind === ts.SyntaxKind.BinaryExpression) { var binExp_1 = node; if (objPropAccessors.some(function (k) { return k === binExp_1.left.kind; }) && forbidObjPropOnLeftSideOf.some(function (k) { return k === binExp_1.operatorToken.kind; }) && !Ignore.isIgnoredPrefix(binExp_1.getText(node.getSourceFile()), ctx.options.ignorePrefix)) { invalidNodes = invalidNodes.concat([check_node_1.createInvalidNode(node)]); } } // No deleting object properties if (node && node.kind === ts.SyntaxKind.DeleteExpression) { var delExp_1 = node; if (objPropAccessors.some(function (k) { return k === delExp_1.expression.kind; }) && !Ignore.isIgnoredPrefix(delExp_1.expression.getText(node.getSourceFile()), ctx.options.ignorePrefix)) { invalidNodes = invalidNodes.concat([check_node_1.createInvalidNode(node)]); } } // No prefix inc/dec if (node && node.kind === ts.SyntaxKind.PrefixUnaryExpression) { var preExp_1 = node; if (objPropAccessors.some(function (k) { return k === preExp_1.operand.kind; }) && forbidUnaryOps.some(function (o) { return o === preExp_1.operator; }) && !Ignore.isIgnoredPrefix(preExp_1.operand.getText(node.getSourceFile()), ctx.options.ignorePrefix)) { invalidNodes = invalidNodes.concat([check_node_1.createInvalidNode(node)]); } } // No postfix inc/dec if (node && node.kind === ts.SyntaxKind.PostfixUnaryExpression) { var postExp_1 = node; if (objPropAccessors.some(function (k) { return k === postExp_1.operand.kind; }) && forbidUnaryOps.some(function (o) { return o === postExp_1.operator; }) && !Ignore.isIgnoredPrefix(postExp_1.getText(node.getSourceFile()), ctx.options.ignorePrefix)) { invalidNodes = invalidNodes.concat([check_node_1.createInvalidNode(node)]); } } return { invalidNodes: invalidNodes }; } //# sourceMappingURL=noObjectMutationRule.js.map