-
Notifications
You must be signed in to change notification settings - Fork 0
/
func.go
69 lines (62 loc) · 1.32 KB
/
func.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
package golang
import (
"github.com/worldiety/macro/pkg/wdl"
"github.com/worldiety/macro/pkg/wdl/render"
)
func (r *RFile) renderFunc(f *wdl.Func, w *render.Writer) error {
r.parent.writeComments(w, f.Comment().Lines())
w.Printf("func ")
if f.Receiver() != nil {
w.Printf("(%s %s) ", f.Receiver().Name(), r.GoType(f.Receiver().TypeDef()))
}
// func name
w.Print(goAccessorName(f))
// type params/generics
if len(f.TypeParams()) > 0 {
w.Print("[")
for _, param := range f.TypeParams() {
if param.Name() != "" {
w.Printf("%s ", param.Name())
}
w.Print(r.GoType(param))
w.Print(",")
}
w.Print("]")
}
// func params
w.Printf("(")
for _, param := range f.Args() {
if param.Name() != "" {
w.Printf("%s ", param.Name())
}
w.Print(r.GoType(param.TypeDef()))
w.Print(",")
}
w.Printf(")")
// func result
if len(f.Results()) > 0 {
w.Printf("(")
for _, param := range f.Results() {
if param.Name() != "" {
w.Printf("%s ", param.Name())
}
if param.TypeDef() != nil {
// non generic
w.Print(r.GoType(param.TypeDef()))
}
w.Print(",")
}
w.Printf(")")
}
// func block body
if f.Body() != nil {
w.Printf("{\n")
for _, statement := range f.Body().List() {
if err := r.renderStmt(statement, w); err != nil {
return err
}
}
w.Printf("}\n")
}
return nil
}