Skip to content

Commit

Permalink
renders receievers on custom types
Browse files Browse the repository at this point in the history
  • Loading branch information
mariotoffia committed Oct 21, 2020
1 parent e0b791a commit dcf199b
Show file tree
Hide file tree
Showing 3 changed files with 62 additions and 1 deletion.
3 changes: 3 additions & 0 deletions asciidoc/defaults.go
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,10 @@ var templateCustomTypeDefintion = `=== {{.TypeDefVar.Name}}
----
{{.TypeDefVar.Decl}}
----
{{.TypeDefVar.Doc}}
{{if hasReceivers . .TypeDefVar.Name}}{{renderReceivers . .TypeDefVar.Name}}{{end}}
`

var templateCustomTypeDefintions = `== Variable Typedefinitions
Expand Down
14 changes: 13 additions & 1 deletion asciidoc/template.go
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,19 @@ func NewTemplateWithOverrides(overrides map[string]string) *Template {
return buf.String()
},
}),
CustomVarTypeDefTemplate.String(): createTemplate(CustomVarTypeDefTemplate, templateCustomTypeDefintion, overrides, template.FuncMap{}),
CustomVarTypeDefTemplate.String(): createTemplate(CustomVarTypeDefTemplate, templateCustomTypeDefintion, overrides, template.FuncMap{
"renderReceivers": func(t *TemplateContext, receiver string) string {
var buf bytes.Buffer
t.RenderReceiverFunctions(&buf, receiver)
return buf.String()
},
"hasReceivers": func(t *TemplateContext, receiver string) bool {
if nil != t.Package {
return len(t.Package.FindMethodsByReceiver(receiver)) > 0
}
return len(t.File.FindMethodsByReceiver(receiver)) > 0
},
}),
VarDeclarationsTemplate.String(): createTemplate(VarDeclarationsTemplate, templateVarAssignments, overrides, template.FuncMap{
"render": func(t *TemplateContext, a *goparser.GoAssignment) string {
var buf bytes.Buffer
Expand Down
46 changes: 46 additions & 0 deletions asciidoc/template_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -971,3 +971,49 @@ func TestStructReceiverFunction(t *testing.T) {

fmt.Println(buf.String())
}

func TestCustomTypeReceiverFunction(t *testing.T) {
src := `
package mypkg
// MyDataType is my and only...
type MyDataType int
// Bar is a public function receives a string and returns a string.
func (m MyDataType) Bar(msg string) string {
return "hello: " + msg
}`

m := dummyModule()
f, err := goparser.ParseInlineFile(m, m.Base+"/mypkg/file.go", src)
assert.NoError(t, err)

var buf bytes.Buffer

x := NewTemplateWithOverrides(map[string]string{
CustomVarTypeDefTemplate.String(): `=== {{.TypeDefVar.Name}}
[source, go]
----
{{.TypeDefVar.Decl}}
----
{{.TypeDefVar.Doc}}
{{if hasReceivers . .TypeDefVar.Name}}{{renderReceivers . .TypeDefVar.Name}}{{end}}
`,
ReceiversTemplate.String(): `==== Receivers
{{range .Receiver}}
===== {{.Name}}
[source, go]
----
{{ .Decl }}
----
{{.Doc}}
{{- end}}
`,
}).NewContextWithConfig(f, nil, &TemplateContextConfig{IncludeMethodCode: false})

x.RenderVarTypeDef(&buf, f.CustomTypes[0])

fmt.Println(buf.String())
}

0 comments on commit dcf199b

Please sign in to comment.