示例#1
0
// 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;
}
示例#2
0
// 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;
}