• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

mlange-42 / modo / 12737935283

12 Jan 2025 11:14PM CUT coverage: 24.557%. Remained the same
12737935283

Pull #26

github

web-flow
Merge fdc77f32e into ee3165c19
Pull Request #26: Add CI tests on stable and nightly

97 of 395 relevant lines covered (24.56%)

1.28 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

22.81
/render.go
1
package modo
2

3
import (
4
        "embed"
5
        "io/fs"
6
        "log"
7
        "os"
8
        "path"
9
        "strings"
10
        "text/template"
11

12
        "github.com/mlange-42/modo/document"
13
        "github.com/mlange-42/modo/format"
14
)
15

16
//go:embed templates/* templates/**/*
17
var templates embed.FS
18
var t *template.Template
19

20
var functions = template.FuncMap{
21
        "pathJoin": path.Join,
22
}
23

24
func init() {
1✔
25
        var err error
1✔
26
        t, err = loadTemplates()
1✔
27
        if err != nil {
1✔
28
                log.Fatal(err)
×
29
        }
×
30
}
31

32
func Render(data document.Kinded) (string, error) {
2✔
33
        b := strings.Builder{}
2✔
34
        err := t.ExecuteTemplate(&b, data.GetKind()+".md", data)
2✔
35
        if err != nil {
2✔
36
                return "", err
×
37
        }
×
38
        return b.String(), nil
2✔
39
}
40

41
func RenderPackage(p *document.Package, dir string, rFormat format.Format, root bool) error {
×
42
        pkgPath := path.Join(dir, p.GetFileName())
×
43
        if err := mkDirs(pkgPath); err != nil {
×
44
                return err
×
45
        }
×
46

47
        pkgFile := strings.Builder{}
×
48
        if err := t.ExecuteTemplate(&pkgFile, "package_path.md", pkgPath); err != nil {
×
49
                return err
×
50
        }
×
51

52
        for _, pkg := range p.Packages {
×
53
                if err := RenderPackage(pkg, pkgPath, rFormat, false); err != nil {
×
54
                        return err
×
55
                }
×
56
        }
57

58
        for _, mod := range p.Modules {
×
59
                modPath := path.Join(pkgPath, mod.GetFileName())
×
60
                if err := renderModule(mod, modPath); err != nil {
×
61
                        return err
×
62
                }
×
63
        }
64

65
        text, err := Render(p)
×
66
        if err != nil {
×
67
                return err
×
68
        }
×
69
        if err := os.WriteFile(pkgFile.String(), []byte(text), 0666); err != nil {
×
70
                return err
×
71
        }
×
72

73
        if root {
×
74
                if err := format.GetFormatter(rFormat).WriteAuxiliary(p, dir, t); err != nil {
×
75
                        return err
×
76
                }
×
77
        }
78

79
        return nil
×
80
}
81

82
func renderModule(mod *document.Module, dir string) error {
×
83
        if err := mkDirs(dir); err != nil {
×
84
                return err
×
85
        }
×
86

87
        modFile := strings.Builder{}
×
88
        if err := t.ExecuteTemplate(&modFile, "module_path.md", dir); err != nil {
×
89
                return err
×
90
        }
×
91

92
        if err := renderList(mod.Structs, dir); err != nil {
×
93
                return err
×
94
        }
×
95
        if err := renderList(mod.Traits, dir); err != nil {
×
96
                return err
×
97
        }
×
98
        if err := renderList(mod.Functions, dir); err != nil {
×
99
                return err
×
100
        }
×
101

102
        text, err := Render(mod)
×
103
        if err != nil {
×
104
                return err
×
105
        }
×
106
        if err := os.WriteFile(modFile.String(), []byte(text), 0666); err != nil {
×
107
                return err
×
108
        }
×
109

110
        return nil
×
111
}
112

113
func renderList[T interface {
114
        document.Named
115
        document.Kinded
116
}](list []T, dir string) error {
×
117
        for _, elem := range list {
×
118
                text, err := Render(elem)
×
119
                if err != nil {
×
120
                        return err
×
121
                }
×
122
                memberPath := path.Join(dir, elem.GetFileName())
×
123

×
124
                memberFile := strings.Builder{}
×
125
                if err := t.ExecuteTemplate(&memberFile, "member_path.md", memberPath); err != nil {
×
126
                        return err
×
127
                }
×
128

129
                if err := os.WriteFile(memberFile.String(), []byte(text), 0666); err != nil {
×
130
                        return err
×
131
                }
×
132
        }
133
        return nil
×
134
}
135

136
func loadTemplates() (*template.Template, error) {
1✔
137
        allTemplates, err := findTemplates()
1✔
138
        if err != nil {
1✔
139
                return nil, err
×
140
        }
×
141
        templ, err := template.New("all").Funcs(functions).ParseFS(templates, allTemplates...)
1✔
142
        if err != nil {
1✔
143
                return nil, err
×
144
        }
×
145
        return templ, nil
1✔
146
}
147

148
func findTemplates() ([]string, error) {
1✔
149
        allTemplates := []string{}
1✔
150
        err := fs.WalkDir(templates, ".",
1✔
151
                func(path string, info os.DirEntry, err error) error {
32✔
152
                        if err != nil {
31✔
153
                                return err
×
154
                        }
×
155
                        if !info.IsDir() {
57✔
156
                                allTemplates = append(allTemplates, path)
26✔
157
                        }
26✔
158
                        return nil
31✔
159
                })
160
        if err != nil {
1✔
161
                return nil, err
×
162
        }
×
163
        return allTemplates, nil
1✔
164
}
165

166
func mkDirs(path string) error {
×
167
        if err := os.MkdirAll(path, os.ModePerm); err != nil && !os.IsExist(err) {
×
168
                return err
×
169
        }
×
170
        return nil
×
171
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc