UNPKG

2.58 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3var ts = require("typescript");
4var utils = require("tsutils/typeguard/2.8");
5var util_1 = require("tsutils/util");
6var check_node_1 = require("./shared/check-node");
7var Ignore = require("./shared/ignore");
8var typeguard_1 = require("./shared/typeguard");
9// tslint:disable-next-line:variable-name
10exports.Rule = check_node_1.createCheckNodeRule(checkNode, "Modifying properties of existing object not allowed.");
11var forbidUnaryOps = [
12 ts.SyntaxKind.PlusPlusToken,
13 ts.SyntaxKind.MinusMinusToken
14];
15function checkNode(node, ctx) {
16 var invalidNodes = [];
17 // No assignment with object.property on the left
18 if (utils.isBinaryExpression(node) &&
19 typeguard_1.isAccessExpression(node.left) &&
20 utils.isBinaryExpression(node) &&
21 util_1.isAssignmentKind(node.operatorToken.kind) &&
22 !Ignore.isIgnoredPrefix(node.getText(node.getSourceFile()), ctx.options.ignorePrefix) &&
23 !inConstructor(node)) {
24 invalidNodes = invalidNodes.concat([check_node_1.createInvalidNode(node, [])]);
25 }
26 // No deleting object properties
27 if (utils.isDeleteExpression(node) &&
28 typeguard_1.isAccessExpression(node.expression) &&
29 !Ignore.isIgnoredPrefix(node.expression.getText(node.getSourceFile()), ctx.options.ignorePrefix)) {
30 invalidNodes = invalidNodes.concat([check_node_1.createInvalidNode(node, [])]);
31 }
32 // No prefix inc/dec
33 if (utils.isPrefixUnaryExpression(node) &&
34 typeguard_1.isAccessExpression(node.operand) &&
35 forbidUnaryOps.some(function (o) { return o === node.operator; }) &&
36 !Ignore.isIgnoredPrefix(node.operand.getText(node.getSourceFile()), ctx.options.ignorePrefix)) {
37 invalidNodes = invalidNodes.concat([check_node_1.createInvalidNode(node, [])]);
38 }
39 // No postfix inc/dec
40 if (utils.isPostfixUnaryExpression(node) &&
41 typeguard_1.isAccessExpression(node.operand) &&
42 forbidUnaryOps.some(function (o) { return o === node.operator; }) &&
43 !Ignore.isIgnoredPrefix(node.getText(node.getSourceFile()), ctx.options.ignorePrefix)) {
44 invalidNodes = invalidNodes.concat([check_node_1.createInvalidNode(node, [])]);
45 }
46 return { invalidNodes: invalidNodes };
47}
48function inConstructor(nodeIn) {
49 var node = nodeIn.parent;
50 while (node) {
51 if (utils.isConstructorDeclaration(node)) {
52 return true;
53 }
54 node = node.parent;
55 }
56 return false;
57}
58//# sourceMappingURL=noObjectMutationRule.js.map
\No newline at end of file