export function isAwaitExpression(path: SimplePath) { const { node, parent } = path; return ( t.isAwaitExpression(node) || (t.isAwaitExpression(parent.init) || t.isAwaitExpression(parent)) ); }
export function YieldExpression(node: Object, parent: Object): boolean { return ( t.isBinary(parent) || t.isUnaryLike(parent) || t.isCallExpression(parent) || t.isMemberExpression(parent) || t.isNewExpression(parent) || (t.isAwaitExpression(parent) && t.isYieldExpression(node)) || (t.isConditionalExpression(parent) && node === parent.test) || isClassExtendsClause(node, parent) ); }
export function ConditionalExpression(node: Object, parent: Object): boolean { if ( t.isUnaryLike(parent) || t.isBinary(parent) || t.isConditionalExpression(parent, { test: node }) || t.isAwaitExpression(parent) || t.isOptionalMemberExpression(parent) || t.isTaggedTemplateExpression(parent) || t.isTSTypeAssertion(parent) || t.isTSAsExpression(parent) ) { return true; } return UnaryLike(node, parent); }
export function Binary(node: Object, parent: Object): boolean { if ( node.operator === "**" && t.isBinaryExpression(parent, { operator: "**" }) ) { return parent.left === node; } if (isClassExtendsClause(node, parent)) { return true; } if ( ((t.isCallExpression(parent) || t.isNewExpression(parent)) && parent.callee === node) || t.isUnaryLike(parent) || (t.isMemberExpression(parent) && parent.object === node) || t.isAwaitExpression(parent) ) { return true; } if (t.isBinary(parent)) { const parentOp = parent.operator; const parentPos = PRECEDENCE[parentOp]; const nodeOp = node.operator; const nodePos = PRECEDENCE[nodeOp]; if ( // Logical expressions with the same precedence don't need parens. (parentPos === nodePos && parent.right === node && !t.isLogicalExpression(parent)) || parentPos > nodePos ) { return true; } } return false; }
p => t.isAwaitExpression(p.node) || t.isYieldExpression(p.node)
(node, ancestors, b) => t.isAwaitExpression(node) && isTopLevel(ancestors)