MCPcopy Create free account
hub / github.com/nodejs/node / accessKind

Function accessKind

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

Source from the content-addressed store, hash-verified

19579 AccessKind[AccessKind["ReadWrite"] = 2] = "ReadWrite";
19580 })(AccessKind || (AccessKind = {}));
19581 function accessKind(node) {
19582 var parent = node.parent;
19583 if (!parent)
19584 return 0 /* AccessKind.Read */;
19585 switch (parent.kind) {
19586 case 212 /* SyntaxKind.ParenthesizedExpression */:
19587 return accessKind(parent);
19588 case 220 /* SyntaxKind.PostfixUnaryExpression */:
19589 case 219 /* SyntaxKind.PrefixUnaryExpression */:
19590 var operator = parent.operator;
19591 return operator === 45 /* SyntaxKind.PlusPlusToken */ || operator === 46 /* SyntaxKind.MinusMinusToken */ ? writeOrReadWrite() : 0 /* AccessKind.Read */;
19592 case 221 /* SyntaxKind.BinaryExpression */:
19593 var _a = parent, left = _a.left, operatorToken = _a.operatorToken;
19594 return left === node && isAssignmentOperator(operatorToken.kind) ?
19595 operatorToken.kind === 63 /* SyntaxKind.EqualsToken */ ? 1 /* AccessKind.Write */ : writeOrReadWrite()
19596 : 0 /* AccessKind.Read */;
19597 case 206 /* SyntaxKind.PropertyAccessExpression */:
19598 return parent.name !== node ? 0 /* AccessKind.Read */ : accessKind(parent);
19599 case 296 /* SyntaxKind.PropertyAssignment */: {
19600 var parentAccess = accessKind(parent.parent);
19601 // In `({ x: varname }) = { x: 1 }`, the left `x` is a read, the right `x` is a write.
19602 return node === parent.name ? reverseAccessKind(parentAccess) : parentAccess;
19603 }
19604 case 297 /* SyntaxKind.ShorthandPropertyAssignment */:
19605 // Assume it's the local variable being accessed, since we don't check public properties for --noUnusedLocals.
19606 return node === parent.objectAssignmentInitializer ? 0 /* AccessKind.Read */ : accessKind(parent.parent);
19607 case 204 /* SyntaxKind.ArrayLiteralExpression */:
19608 return accessKind(parent);
19609 default:
19610 return 0 /* AccessKind.Read */;
19611 }
19612 function writeOrReadWrite() {
19613 // If grandparent is not an ExpressionStatement, this is used as an expression in addition to having a side effect.
19614 return parent.parent && walkUpParenthesizedExpressions(parent.parent).kind === 238 /* SyntaxKind.ExpressionStatement */ ? 1 /* AccessKind.Write */ : 2 /* AccessKind.ReadWrite */;
19615 }
19616 }
19617 function reverseAccessKind(a) {
19618 switch (a) {
19619 case 0 /* AccessKind.Read */:

Callers 2

isWriteOnlyAccessFunction · 0.85
isWriteAccessFunction · 0.85

Calls 3

writeOrReadWriteFunction · 0.85
isAssignmentOperatorFunction · 0.85
reverseAccessKindFunction · 0.85

Tested by

no test coverage detected