code: function isAssignmentTarget(node) {
          while (node.parent.kind === 178 /* ParenthesizedExpression */) {
              node = node.parent;
          }
          while (true) {
              var parent_5 = node.parent;
              if (parent_5.kind === 170 /* ArrayLiteralExpression */ || parent_5.kind === 191 /* SpreadElementExpression */) {
                  node = parent_5;
                  continue;
              }
              if (parent_5.kind === 253 /* PropertyAssignment */ || parent_5.kind === 254 /* ShorthandPropertyAssignment */) {
                  node = parent_5.parent;
                  continue;
              }
              return parent_5.kind === 187 /* BinaryExpression */ &&
                  isAssignmentOperator(parent_5.operatorToken.kind) &&
                  parent_5.left === node ||
                  (parent_5.kind === 207 /* ForInStatement */ || parent_5.kind === 208 /* ForOfStatement */) &&
                      parent_5.initializer === node;
          }
      }
docs: A node is an assignment target if it is on the left hand side of an '=' token, if it is parented by a property assignment in an object literal that is an assignment target, or if it is parented by an array literal that is an assignment target. Examples include 'a = xxx', '{ p: a } = xxx', '[{ p: a}] = xxx'.