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

mlange-42 / modo / 12845272312

18 Jan 2025 03:31PM CUT coverage: 59.033%. Remained the same
12845272312

push

github

web-flow
Fix README, update CHANGELOG (#65)

794 of 1345 relevant lines covered (59.03%)

7.46 hits per line

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

91.03
/document/exports.go
1
package document
2

3
import (
4
        "bufio"
5
        "strings"
6
)
7

8
const exportsMarker = "Exports:"
9
const exportsPrefix = "- "
10
const codeFence3 = "```"
11
const codeFence4 = "````"
12

13
type packageExport struct {
14
        Short []string
15
        Long  []string
16
}
17

18
func (proc *Processor) collectExports(p *Package, elems []string) bool {
8✔
19
        anyExports := false
8✔
20

8✔
21
        newElems := appendNew(elems, p.Name)
8✔
22
        for _, pkg := range p.Packages {
10✔
23
                if anyHere := proc.collectExports(pkg, newElems); anyHere {
4✔
24
                        anyExports = true
2✔
25
                }
2✔
26
        }
27

28
        if proc.UseExports {
13✔
29
                var anyHere bool
5✔
30
                p.exports, p.Description, anyHere = proc.parseExports(p.Description, newElems, true)
5✔
31
                if anyHere {
10✔
32
                        anyExports = true
5✔
33
                }
5✔
34
                return anyExports
5✔
35
        }
36

37
        p.exports = make([]*packageExport, 0, len(p.Packages)+len(p.Modules))
3✔
38
        for _, pkg := range p.Packages {
3✔
39
                p.exports = append(p.exports, &packageExport{Short: []string{pkg.Name}, Long: appendNew(newElems, pkg.Name)})
×
40
        }
×
41
        for _, mod := range p.Modules {
6✔
42
                p.exports = append(p.exports, &packageExport{Short: []string{mod.Name}, Long: appendNew(newElems, mod.Name)})
3✔
43
        }
3✔
44

45
        return anyExports
3✔
46
}
47

48
func (proc *Processor) parseExports(pkgDocs string, basePath []string, remove bool) ([]*packageExport, string, bool) {
6✔
49
        scanner := bufio.NewScanner(strings.NewReader(pkgDocs))
6✔
50

6✔
51
        outText := strings.Builder{}
6✔
52
        exports := []*packageExport{}
6✔
53
        anyExports := false
6✔
54
        isExport := false
6✔
55
        fenced3 := false
6✔
56
        fenced4 := false
6✔
57

6✔
58
        exportIndex := 0
6✔
59
        for scanner.Scan() {
56✔
60
                origLine := scanner.Text()
50✔
61
                line := strings.TrimSpace(origLine)
50✔
62

50✔
63
                fenced := false
50✔
64
                if strings.HasPrefix(origLine, codeFence3) {
52✔
65
                        fenced3 = !fenced3
2✔
66
                        fenced = true
2✔
67
                }
2✔
68
                if strings.HasPrefix(origLine, codeFence4) {
50✔
69
                        fenced4 = !fenced4
×
70
                        fenced = true
×
71
                }
×
72
                if fenced || fenced3 || fenced4 {
56✔
73
                        isExport = false
6✔
74
                        outText.WriteString(origLine)
6✔
75
                        outText.WriteRune('\n')
6✔
76
                        continue
6✔
77
                }
78

79
                if isExport {
67✔
80
                        if exportIndex == 0 && line == "" {
24✔
81
                                continue
1✔
82
                        }
83
                        if !strings.HasPrefix(line, exportsPrefix) {
24✔
84
                                outText.WriteString(origLine)
2✔
85
                                outText.WriteRune('\n')
2✔
86
                                isExport = false
2✔
87
                                continue
2✔
88
                        }
89
                        short := line[len(exportsPrefix):]
20✔
90
                        parts := strings.Split(short, ".")
20✔
91
                        exports = append(exports, &packageExport{Short: parts, Long: appendNew(basePath, parts...)})
20✔
92
                        anyExports = true
20✔
93
                        exportIndex++
20✔
94
                } else {
21✔
95
                        if line == exportsMarker {
28✔
96
                                isExport = true
7✔
97
                                exportIndex = 0
7✔
98
                                continue
7✔
99
                        }
100
                        outText.WriteString(origLine)
14✔
101
                        outText.WriteRune('\n')
14✔
102
                }
103
        }
104
        if err := scanner.Err(); err != nil {
6✔
105
                panic(err)
×
106
        }
107
        if remove {
12✔
108
                return exports, outText.String(), anyExports
6✔
109
        }
6✔
110
        return exports, pkgDocs, anyExports
×
111
}
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