1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
|
// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: MPL-2.0
package tfconfig
import (
"encoding/json"
"io"
"strings"
"text/template"
)
func RenderMarkdown(w io.Writer, module *Module) error {
tmpl := template.New("md")
tmpl.Funcs(template.FuncMap{
"tt": func(s string) string {
return "`" + s + "`"
},
"commas": func(s []string) string {
return strings.Join(s, ", ")
},
"json": func(v interface{}) (string, error) {
j, err := json.Marshal(v)
return string(j), err
},
"severity": func(s DiagSeverity) string {
switch s {
case DiagError:
return "Error: "
case DiagWarning:
return "Warning: "
default:
return ""
}
},
})
template.Must(tmpl.Parse(markdownTemplate))
return tmpl.Execute(w, module)
}
const markdownTemplate = `
# Module {{ tt .Path }}
{{- if .RequiredCore}}
Core Version Constraints:
{{- range .RequiredCore }}
* {{ tt . }}
{{- end}}{{end}}
{{- if .RequiredProviders}}
Provider Requirements:
{{- range $name, $req := .RequiredProviders }}
* **{{ $name }}{{ if $req.Source }} ({{ $req.Source | tt }}){{ end }}:** {{ if $req.VersionConstraints }}{{ commas $req.VersionConstraints | tt }}{{ else }}(any version){{ end }}
{{- end}}{{end}}
{{- if .Variables}}
## Input Variables
{{- range .Variables }}
* {{ tt .Name }}{{ if .Required }} (required){{else}} (default {{ json .Default | tt }}){{end}}
{{- if .Description}}: {{ .Description }}{{ end }}
{{- end}}{{end}}
{{- if .Outputs}}
## Output Values
{{- range .Outputs }}
* {{ tt .Name }}{{ if .Description}}: {{ .Description }}{{ end }}
{{- end}}{{end}}
{{- if .ManagedResources}}
## Managed Resources
{{- range .ManagedResources }}
* {{ printf "%s.%s" .Type .Name | tt }} from {{ tt .Provider.Name }}
{{- end}}{{end}}
{{- if .DataResources}}
## Data Resources
{{- range .DataResources }}
* {{ printf "data.%s.%s" .Type .Name | tt }} from {{ tt .Provider.Name }}
{{- end}}{{end}}
{{- if .ModuleCalls}}
## Child Modules
{{- range .ModuleCalls }}
* {{ tt .Name }} from {{ tt .Source }}{{ if .Version }} ({{ tt .Version }}){{ end }}
{{- end}}{{end}}
{{- if .Diagnostics}}
## Problems
{{- range .Diagnostics }}
## {{ severity .Severity }}{{ .Summary }}{{ if .Pos }}
(at {{ tt .Pos.Filename }} line {{ .Pos.Line }}{{ end }})
{{ if .Detail }}
{{ .Detail }}
{{- end }}
{{- end}}{{end}}
`
|