function isSimpleCallArgument(node, depth) {
  if (depth >= 3) {
    return false;
  }

  const plusOne = node => isSimpleCallArgument(node, depth + 1);

  const plusTwo = node => isSimpleCallArgument(node, depth + 2);

  const regexpPattern = node.type === "Literal" && node.regex && node.regex.pattern || node.type === "RegExpLiteral" && node.pattern;

  if (regexpPattern && regexpPattern.length > 5) {
    return false;
  }

  if (node.type === "Literal" || node.type === "BigIntLiteral" || node.type === "BooleanLiteral" || node.type === "NullLiteral" || node.type === "NumericLiteral" || node.type === "RegExpLiteral" || node.type === "StringLiteral" || node.type === "Identifier" || node.type === "ThisExpression" || node.type === "Super" || node.type === "PrivateName" || node.type === "ArgumentPlaceholder" || node.type === "Import") {
    return true;
  }

  if (node.type === "TemplateLiteral") {
    return node.expressions.every(plusTwo);
  }

  if (node.type === "ObjectExpression") {
    return node.properties.every(p => !p.computed && (p.shorthand || p.value && plusTwo(p.value)));
  }

  if (node.type === "ArrayExpression") {
    return node.elements.every(x => x === null || plusTwo(x));
  }

  if (node.type === "CallExpression" || node.type === "OptionalCallExpression" || node.type === "NewExpression") {
    return plusOne(node.callee) && node.arguments.every(plusTwo);
  }

  if (node.type === "MemberExpression" || node.type === "OptionalMemberExpression") {
    return plusOne(node.object) && plusOne(node.property);
  }

  if (node.type === "UnaryExpression" && (node.operator === "!" || node.operator === "-")) {
    return plusOne(node.argument);
  }

  if (node.type === "TSNonNullExpression") {
    return plusOne(node.expression);
  }

  return false;
}
@param {import('estree').Node} node
@param {number} depth
@returns {boolean}