// Walk up the print stack to deterimine if our node can come first // in statement. function isFirstInStatement(printStack: Array<Object>): boolean { let i = printStack.length - 1; let node = printStack[i]; i--; let parent = printStack[i]; while (i > 0) { if (t.isExpressionStatement(parent, { expression: node })) { return true; } if ((t.isCallExpression(parent, { callee: node })) || (t.isSequenceExpression(parent) && parent.expressions[0] === node) || (t.isMemberExpression(parent, { object: node })) || (t.isConditional(parent, { test: node })) || (t.isBinary(parent, { left: node })) || (t.isAssignmentExpression(parent, { left: node }))) { node = parent; i--; parent = printStack[i]; } else { return false; } } return false; }
// Walk up the print stack to deterimine if our node can come first // in statement. function isFirstInStatement(printStack: Array<Object>, { considerArrow = false, considerDefaultExports = false } = {}): boolean { let i = printStack.length - 1; let node = printStack[i]; i--; let parent = printStack[i]; while (i > 0) { if (t.isExpressionStatement(parent, { expression: node })) { return true; } if (considerDefaultExports && t.isExportDefaultDeclaration(parent, { declaration: node })) { return true; } if (considerArrow && t.isArrowFunctionExpression(parent, { body: node })) { return true; } if ((t.isCallExpression(parent, { callee: node })) || (t.isSequenceExpression(parent) && parent.expressions[0] === node) || (t.isMemberExpression(parent, { object: node })) || (t.isConditional(parent, { test: node })) || (t.isBinary(parent, { left: node })) || (t.isAssignmentExpression(parent, { left: node }))) { node = parent; i--; parent = printStack[i]; } else { return false; } } return false; }