code: private void doSubstitutions(NodeTraversal t, Config config, Node n) {
      if (n.isTaggedTemplateLit()) {
        // This is currently not supported, since tagged template literals have a different calling
        // convention than ordinary functions, so it's unclear which arguments are expected to be
        // replaced. Specifically, there are no direct string arguments, and for arbitrary tag
        // functions it's not clear that it's safe to inline any constant placeholders.
        compiler.report(JSError.make(n, STRING_REPLACEMENT_TAGGED_TEMPLATE));
        return;
      }
      checkState(n.isNew() || n.isCall());
  
      if (!config.isReplaceAll()) {
        // Note: the first child is the function, but the parameter id is 1 based.
        for (int parameter : config.parameters) {
          Node arg = n.getChildAtIndex(parameter);
          if (arg != null) {
            replaceExpression(t, arg, n);
          }
        }
      } else {
        // Replace all parameters.
        Node firstParam = n.getSecondChild();
        for (Node arg = firstParam; arg != null; arg = arg.getNext()) {
          arg = replaceExpression(t, arg, n);
        }
      }
    }
docs: Replace the parameters specified in the config, if possible.