docs: static JsExpr translateToJsExpr(
        String soyExpr,
        SourceLocation sourceLocation,
        SoyToJsVariableMappings variableMappings,
        ErrorReporter errorReporter) {
  
      StringBuffer jsExprTextSb = new StringBuffer();
  
      Matcher matcher = VAR_OR_BOOL_OP_OR_SOY_FUNCTION.matcher(soyExpr);
      while (matcher.find()) {
        String group = matcher.group();
        Matcher var = VAR.matcher(group);
        if (var.matches()) {
          matcher.appendReplacement(
              jsExprTextSb, Matcher.quoteReplacement(translateVar(variableMappings, var)));
        } else if (BOOL_OP_RE.matcher(group).matches()) {
          errorReporter.report(matcherLocation(matcher, sourceLocation), UNSUPPORTED_OPERATOR);
        } else {
          errorReporter.report(matcherLocation(matcher, sourceLocation), UNSUPPORTED_FUNCTION);
        }
      }
      matcher.appendTail(jsExprTextSb);
  
      String jsExprText = jsExprTextSb.toString();
  
      // Note: There is a JavaScript language quirk that requires all Unicode Foramt characters
      // (Unicode category "Cf") to be escaped in JS strings. Therefore, we call
      // JsSrcUtils.escapeUnicodeFormatChars() on the expression text in case it contains JS strings.
      jsExprText = JsSrcUtils.escapeUnicodeFormatChars(jsExprText);
      // Use a high precedence to ensure that everything with the v1Expression is grouped together
      return new JsExpr('(' + jsExprText + ')', /* precedence= */ Integer.MAX_VALUE);
    }