src/helpers/build-children.js
function isStringConcatenation(path) {
  if (!(path.isBinaryExpression() && path.node.operator === "+")) {
    return false;
  }

  const left = path.get("left");
  const right = path.get("right");
  return left.isStringLiteral() ||
    right.isStringLiteral() ||
    isStringConcatenation(left) ||
    isStringConcatenation(right);
}
function isStringConcatenation(path) {
  if (!(path.isBinaryExpression() && path.node.operator === "+")) {
    return false;
  }

  const left = path.get("left");
  const right = path.get("right");
  return left.isStringLiteral() ||
    right.isStringLiteral() ||
    isStringConcatenation(left) ||
    isStringConcatenation(right);
}
function isStringConcatenation ( path ) { if ( ! ( path . isBinaryExpression ( ) && path . node . operator === "+" ) ) { return false ; } const left = path . get ( "left" ) ; const right = path . get ( "right" ) ; return left . isStringLiteral ( ) || right . isStringLiteral ( ) || isStringConcatenation ( left ) || isStringConcatenation ( right ) ; }
String concatenations are special cased, so template literals don't require a call to renderArbitrary.
String concatenations are special cased so template literals don t require a call to renderArbitrary .