/
markdown.go
112 lines (88 loc) · 2.39 KB
/
markdown.go
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
109
110
111
112
// 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}}
{{- if .Validation}}
Validation error messages {{- range .Validation}}
* {{ tt . }}
{{- end}}{{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}}
`