Returns the BinaryExpression, PrefixUnaryExpression, PostfixUnaryExpression, or ForInOrOfStatement that references the given node as an assignment target
(node *Node)
| 182 | // Returns the BinaryExpression, PrefixUnaryExpression, PostfixUnaryExpression, or ForInOrOfStatement that references |
| 183 | // the given node as an assignment target |
| 184 | func GetAssignmentTarget(node *Node) *Node { |
| 185 | for { |
| 186 | parent := node.Parent |
| 187 | switch parent.Kind { |
| 188 | case KindBinaryExpression: |
| 189 | if IsAssignmentOperator(parent.AsBinaryExpression().OperatorToken.Kind) && parent.AsBinaryExpression().Left == node { |
| 190 | return parent |
| 191 | } |
| 192 | return nil |
| 193 | case KindPrefixUnaryExpression: |
| 194 | if parent.AsPrefixUnaryExpression().Operator == KindPlusPlusToken || parent.AsPrefixUnaryExpression().Operator == KindMinusMinusToken { |
| 195 | return parent |
| 196 | } |
| 197 | return nil |
| 198 | case KindPostfixUnaryExpression: |
| 199 | if parent.AsPostfixUnaryExpression().Operator == KindPlusPlusToken || parent.AsPostfixUnaryExpression().Operator == KindMinusMinusToken { |
| 200 | return parent |
| 201 | } |
| 202 | return nil |
| 203 | case KindForInStatement, KindForOfStatement: |
| 204 | if parent.Initializer() == node { |
| 205 | return parent |
| 206 | } |
| 207 | return nil |
| 208 | case KindParenthesizedExpression, KindArrayLiteralExpression, KindSpreadElement, KindNonNullExpression: |
| 209 | node = parent |
| 210 | case KindSpreadAssignment: |
| 211 | node = parent.Parent |
| 212 | case KindShorthandPropertyAssignment: |
| 213 | if parent.AsShorthandPropertyAssignment().Name() != node { |
| 214 | return nil |
| 215 | } |
| 216 | node = parent.Parent |
| 217 | case KindPropertyAssignment: |
| 218 | if parent.AsPropertyAssignment().Name() == node { |
| 219 | return nil |
| 220 | } |
| 221 | node = parent.Parent |
| 222 | default: |
| 223 | return nil |
| 224 | } |
| 225 | } |
| 226 | } |
| 227 | |
| 228 | func IsLogicalBinaryOperator(token Kind) bool { |
| 229 | return token == KindBarBarToken || token == KindAmpersandAmpersandToken |
no test coverage detected