func ResolveRuleDocLink()

in sg/internal/policy/package_spec.go [62:91]


func ResolveRuleDocLink(spec PackageSpec, rule Rule) (string, error) {
	if spec.Rule == nil || spec.Rule.DocLink == "" {
		// not set
		return "", nil
	}

	tmpl, err := template.New("doc-link").Parse(spec.Rule.DocLink)
	if err != nil {
		return "", fmt.Errorf("parse %q as template: %w", spec.Rule.DocLink, err)
	}

	var b bytes.Buffer

	tmplPayload := map[string]interface{}{
		"Name":           rule.Name,
		"Kind":           rule.Kind,
		"SourceFileName": "",
	}
	if rule.SourceLocation != nil {
		f := filepath.Base(rule.SourceLocation.File)
		f = strings.TrimSuffix(f, filepath.Ext(f))
		tmplPayload["SourceFileName"] = f
	}

	if err := tmpl.Execute(&b, tmplPayload); err != nil {
		return "", fmt.Errorf("execute template: %w", err)
	}

	return b.String(), nil
}