src/language-js/print/assignment.js/goDeeper
function isPoorlyBreakableMemberOrCallChain(
  path,
  options,
  print,
  deep = false
) {
  const node = path.getValue();
  const goDeeper = () =>
    isPoorlyBreakableMemberOrCallChain(path, options, print, true);

  if (node.type === "TSNonNullExpression") {
    return path.call(goDeeper, "expression");
  }

  if (isCallExpression(node)) {
    /** @type {any} TODO */
    const doc = printCallExpression(path, options, print);
    if (doc.label === "member-chain") {
      return false;
    }

    const args = getCallArguments(node);
    const isPoorlyBreakableCall =
      args.length === 0 ||
      (args.length === 1 && isLoneShortArgument(args[0], options));
    if (!isPoorlyBreakableCall) {
      return false;
    }

    if (isCallExpressionWithComplexTypeArguments(node, print)) {
      return false;
    }

    return path.call(goDeeper, "callee");
  }

  if (isMemberExpression(node)) {
    return path.call(goDeeper, "object");
  }

  return deep && (node.type === "Identifier" || node.type === "ThisExpression");
}