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

mlange-42 / modo / 13124591245

03 Feb 2025 11:03PM CUT coverage: 73.453% (+0.1%) from 73.324%
13124591245

Pull #194

github

web-flow
Merge 9f5f9fe32 into 0977e0c13
Pull Request #194: Support four backticks in doc-test parser

18 of 19 new or added lines in 2 files covered. (94.74%)

1519 of 2068 relevant lines covered (73.45%)

25.74 hits per line

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

74.67
/document/util.go
1
package document
2

3
import (
4
        "errors"
5
        "fmt"
6
        "os"
7
        "path/filepath"
8
        "strings"
9
        "text/template"
10

11
        "github.com/mlange-42/modo/assets"
12
)
13

14
const codeFence3 = "```"
15
const codeFence4 = "````"
16

17
type fenceType uint8
18

19
const (
20
        fenceNone fenceType = iota
21
        fenceThree
22
        fenceFour
23
)
24

25
func getFenceType(line string) fenceType {
256✔
26
        isFence4 := strings.HasPrefix(line, codeFence4)
256✔
27
        if strings.HasPrefix(line, codeFence3) && !isFence4 {
298✔
28
                return fenceThree
42✔
29
        }
42✔
30
        if isFence4 {
218✔
31
                return fenceFour
4✔
32
        }
4✔
33
        return fenceNone
210✔
34
}
35

36
// appends to a slice, but guaranties to return a new one and not alter the original.
37
func appendNew[T any](sl []T, elems ...T) []T {
692✔
38
        sl2 := make([]T, len(sl), len(sl)+len(elems))
692✔
39
        copy(sl2, sl)
692✔
40
        sl2 = append(sl2, elems...)
692✔
41
        return sl2
692✔
42
}
692✔
43

44
func warnOrError(strict bool, pattern string, args ...any) error {
2✔
45
        if strict {
3✔
46
                return fmt.Errorf(pattern, args...)
1✔
47
        }
1✔
48
        fmt.Printf("WARNING: "+pattern+"\n", args...)
1✔
49
        return nil
1✔
50
}
51

52
func LoadTemplates(f Formatter, additional ...string) (*template.Template, error) {
13✔
53
        templ := template.New("all")
13✔
54
        templ = templ.Funcs(template.FuncMap{
13✔
55
                "toLink": f.ToLinkPath,
13✔
56
        })
13✔
57
        templ, err := templ.ParseFS(assets.Templates, "templates/*.*", "templates/**/*.*")
13✔
58
        if err != nil {
13✔
59
                return nil, err
×
60
        }
×
61

62
        for _, dir := range additional {
14✔
63
                if dir == "" {
1✔
64
                        continue
×
65
                }
66
                exists, isDir, err := fileExists(dir)
1✔
67
                if err != nil {
1✔
68
                        return nil, err
×
69
                }
×
70
                if !exists || !isDir {
1✔
71
                        return nil, fmt.Errorf("template directory '%s' does not exist", dir)
×
72
                }
×
73
                moreTemplates, err := findTemplates(dir)
1✔
74
                if err != nil {
1✔
75
                        return nil, err
×
76
                }
×
77
                templ, err = templ.ParseFiles(moreTemplates...)
1✔
78
                if err != nil {
1✔
79
                        return nil, err
×
80
                }
×
81
        }
82
        return templ, nil
13✔
83
}
84

85
func fileExists(file string) (exists, isDir bool, err error) {
1✔
86
        var s os.FileInfo
1✔
87
        if s, err = os.Stat(file); err == nil {
2✔
88
                exists = true
1✔
89
                isDir = s.IsDir()
1✔
90
                return
1✔
91
        } else if !errors.Is(err, os.ErrNotExist) {
1✔
92
                return
×
93
        }
×
94
        err = nil
×
95
        return
×
96
}
97

98
func findTemplates(dir string) ([]string, error) {
1✔
99
        allTemplates := []string{}
1✔
100
        err := filepath.WalkDir(dir,
1✔
101
                func(path string, info os.DirEntry, err error) error {
6✔
102
                        if err != nil {
5✔
103
                                return err
×
104
                        }
×
105
                        if !info.IsDir() {
9✔
106
                                allTemplates = append(allTemplates, path)
4✔
107
                        }
4✔
108
                        return nil
5✔
109
                })
110
        if err != nil {
1✔
111
                return nil, err
×
112
        }
×
113
        return allTemplates, nil
1✔
114
}
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