1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | var ts = require("typescript");
|
4 | var utils = require("tsutils/typeguard/2.8");
|
5 | var util_1 = require("tsutils/util");
|
6 | var check_node_1 = require("./shared/check-node");
|
7 | var Ignore = require("./shared/ignore");
|
8 | var typeguard_1 = require("./shared/typeguard");
|
9 |
|
10 | exports.Rule = check_node_1.createCheckNodeRule(checkNode, "Modifying properties of existing object not allowed.");
|
11 | var forbidUnaryOps = [
|
12 | ts.SyntaxKind.PlusPlusToken,
|
13 | ts.SyntaxKind.MinusMinusToken
|
14 | ];
|
15 | function checkNode(node, ctx) {
|
16 | var invalidNodes = [];
|
17 |
|
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 |
|
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 |
|
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 |
|
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 | }
|
48 | function 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 |
|
\ | No newline at end of file |