(node)
| 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 */: |
no test coverage detected