code: func (r *RuleSet) renderedConfigPattern(c context.Context, rule *rule) (*ConfigPattern, error) {
  	sub := func(name string) (string, error) {
  		if cb := r.v[name]; cb != nil {
  			return cb(c)
  		}
  		return "", fmt.Errorf("no placeholder named %q is registered", name)
  	}
  
  	configSet, err := renderPatternString(rule.configSet, sub)
  	if err != nil {
  		return nil, errors.Annotate(err, "failed to compile config set pattern %q", rule.configSet).Err()
  	}
  	path, err := renderPatternString(rule.path, sub)
  	if err != nil {
  		return nil, errors.Annotate(err, "failed to compile path pattern %q", rule.path).Err()
  	}
  
  	return &ConfigPattern{
  		ConfigSet: configSet,
  		Path:      path,
  	}, nil
  }
docs: // renderedConfigPattern expands variables in the config patterns.
  //
  // Must be called with r.l read lock held.