MCPcopy Index your code
hub / github.com/nodejs/node / getAssignmentTargetKind

Function getAssignmentTargetKind

test/fixtures/snapshot/typescript.js:17060–17102  ·  view source on GitHub ↗
(node)

Source from the content-addressed store, hash-verified

17058 AssignmentKind[AssignmentKind["Compound"] = 2] = "Compound";
17059 })(AssignmentKind = ts.AssignmentKind || (ts.AssignmentKind = {}));
17060 function getAssignmentTargetKind(node) {
17061 var parent = node.parent;
17062 while (true) {
17063 switch (parent.kind) {
17064 case 221 /* SyntaxKind.BinaryExpression */:
17065 var binaryOperator = parent.operatorToken.kind;
17066 return isAssignmentOperator(binaryOperator) && parent.left === node ?
17067 binaryOperator === 63 /* SyntaxKind.EqualsToken */ || isLogicalOrCoalescingAssignmentOperator(binaryOperator) ? 1 /* AssignmentKind.Definite */ : 2 /* AssignmentKind.Compound */ :
17068 0 /* AssignmentKind.None */;
17069 case 219 /* SyntaxKind.PrefixUnaryExpression */:
17070 case 220 /* SyntaxKind.PostfixUnaryExpression */:
17071 var unaryOperator = parent.operator;
17072 return unaryOperator === 45 /* SyntaxKind.PlusPlusToken */ || unaryOperator === 46 /* SyntaxKind.MinusMinusToken */ ? 2 /* AssignmentKind.Compound */ : 0 /* AssignmentKind.None */;
17073 case 243 /* SyntaxKind.ForInStatement */:
17074 case 244 /* SyntaxKind.ForOfStatement */:
17075 return parent.initializer === node ? 1 /* AssignmentKind.Definite */ : 0 /* AssignmentKind.None */;
17076 case 212 /* SyntaxKind.ParenthesizedExpression */:
17077 case 204 /* SyntaxKind.ArrayLiteralExpression */:
17078 case 225 /* SyntaxKind.SpreadElement */:
17079 case 230 /* SyntaxKind.NonNullExpression */:
17080 node = parent;
17081 break;
17082 case 298 /* SyntaxKind.SpreadAssignment */:
17083 node = parent.parent;
17084 break;
17085 case 297 /* SyntaxKind.ShorthandPropertyAssignment */:
17086 if (parent.name !== node) {
17087 return 0 /* AssignmentKind.None */;
17088 }
17089 node = parent.parent;
17090 break;
17091 case 296 /* SyntaxKind.PropertyAssignment */:
17092 if (parent.name === node) {
17093 return 0 /* AssignmentKind.None */;
17094 }
17095 node = parent.parent;
17096 break;
17097 default:
17098 return 0 /* AssignmentKind.None */;
17099 }
17100 parent = node.parent;
17101 }
17102 }
17103 ts.getAssignmentTargetKind = getAssignmentTargetKind;
17104 // A node is an assignment target if it is on the left hand side of an '=' token, if it is parented by a property
17105 // assignment in an object literal that is an assignment target, or if it is parented by an array literal that is

Callers 1

isAssignmentTargetFunction · 0.85

Tested by

no test coverage detected