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

mlange-42 / modo / 12835912779

17 Jan 2025 07:54PM CUT coverage: 57.991% (+0.06%) from 57.927%
12835912779

Pull #58

github

web-flow
Merge 0eafdfbe6 into 45ab35eb0
Pull Request #58: Tweak CLI help, improve code structure

13 of 33 new or added lines in 6 files covered. (39.39%)

762 of 1314 relevant lines covered (57.99%)

6.88 hits per line

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

84.97
/document/filter.go
1
package document
2

3
import (
4
        "fmt"
5
)
6

7
// Filters and re-structures docs for package re-exports.
8
//
9
// Also collects a lookup, mapping from original to altered cross-refs.
10
func (proc *Processor) filterPackages() error {
6✔
11
        proc.linkExports = map[string]string{}
6✔
12
        anyExports := proc.collectExports(proc.Docs.Decl, nil)
6✔
13

6✔
14
        if !proc.UseExports {
9✔
15
                proc.ExportDocs = &Docs{
3✔
16
                        Version: proc.Docs.Version,
3✔
17
                        Decl:    proc.Docs.Decl,
3✔
18
                }
3✔
19
                return nil
3✔
20
        }
3✔
21

22
        if !anyExports {
3✔
23
                return fmt.Errorf("no package re-exports found. Given flag '--exports', there will be no output.\n       Add exports or run without flag '--exports'")
×
24
        }
×
25

26
        proc.ExportDocs = &Docs{
3✔
27
                Version: proc.Docs.Version,
3✔
28
                Decl:    proc.Docs.Decl.linkedCopy(),
3✔
29
        }
3✔
30
        proc.filterPackage(proc.Docs.Decl, proc.ExportDocs.Decl, nil, nil)
3✔
31
        return nil
3✔
32
}
33

34
func (proc *Processor) filterPackage(src, rootOut *Package, oldPath, newPath []string) {
5✔
35
        rootExports := map[string]*members{}
5✔
36
        collectExportsPackage(src, rootExports)
5✔
37

5✔
38
        oldPath = appendNew(oldPath, src.Name)
5✔
39
        newPath = appendNew(newPath, src.Name)
5✔
40

5✔
41
        for _, mod := range src.Modules {
13✔
42
                if mems, ok := rootExports[mod.Name]; ok {
16✔
43
                        proc.collectModuleExports(mod, rootOut, oldPath, newPath, mems)
8✔
44
                }
8✔
45
        }
46

47
        for _, pkg := range src.Packages {
7✔
48
                if mems, ok := rootExports[pkg.Name]; ok {
4✔
49
                        proc.collectPackageExports(pkg, rootOut, oldPath, newPath, mems)
2✔
50
                }
2✔
51
        }
52
}
53

54
func (proc *Processor) collectPackageExports(src, rootOut *Package, oldPath, newPath []string, rootMembers *members) {
2✔
55
        selfIncluded, toCrawl := collectExportMembers(rootMembers)
2✔
56

2✔
57
        if selfIncluded {
4✔
58
                newPkg := src.linkedCopy()
2✔
59
                proc.filterPackage(src, newPkg, oldPath, newPath)
2✔
60
                rootOut.Packages = append(rootOut.Packages, newPkg)
2✔
61

2✔
62
                tempOldPath := appendNew(oldPath, src.Name)
2✔
63
                tempNewPath := appendNew(newPath, src.Name)
2✔
64
                proc.addLinkExport(tempOldPath, tempNewPath)
2✔
65
        }
2✔
66
        oldPath = appendNew(oldPath, src.Name)
2✔
67

2✔
68
        for _, mod := range src.Modules {
4✔
69
                if mems, ok := toCrawl[mod.Name]; ok {
4✔
70
                        proc.collectModuleExports(mod, rootOut, oldPath, newPath, mems)
2✔
71
                }
2✔
72
        }
73

74
        for _, pkg := range src.Packages {
2✔
75
                if mems, ok := toCrawl[pkg.Name]; ok {
×
76
                        proc.collectPackageExports(pkg, rootOut, oldPath, newPath, mems)
×
77
                }
×
78
        }
79

80
        for _, elem := range src.Structs {
2✔
81
                proc.collectExportsStruct(elem, oldPath, newPath)
×
82
        }
×
83
        for _, elem := range src.Traits {
2✔
84
                proc.collectExportsTrait(elem, oldPath, newPath)
×
85
        }
×
86
        for _, elem := range src.Functions {
2✔
87
                proc.collectExportsFunction(elem, oldPath, newPath)
×
88
        }
×
89
}
90

91
func (proc *Processor) collectModuleExports(src *Module, rootOut *Package, oldPath, newPath []string, rootMembers *members) {
10✔
92
        selfIncluded, toCrawl := collectExportMembers(rootMembers)
10✔
93

10✔
94
        oldPath = appendNew(oldPath, src.Name)
10✔
95
        if selfIncluded {
15✔
96
                rootOut.Modules = append(rootOut.Modules, src)
5✔
97

5✔
98
                tempNewPath := appendNew(newPath, src.Name)
5✔
99
                proc.addLinkExport(oldPath, tempNewPath)
5✔
100
        }
5✔
101

102
        for _, elem := range src.Structs {
22✔
103
                if _, ok := toCrawl[elem.Name]; ok {
19✔
104
                        rootOut.Structs = append(rootOut.Structs, elem)
7✔
105
                        proc.collectExportsStruct(elem, oldPath, newPath)
7✔
106
                }
7✔
107
        }
108
        for _, elem := range src.Traits {
13✔
109
                if _, ok := toCrawl[elem.Name]; ok {
3✔
110
                        rootOut.Traits = append(rootOut.Traits, elem)
×
111
                        proc.collectExportsTrait(elem, oldPath, newPath)
×
112
                }
×
113
        }
114
        for _, elem := range src.Functions {
13✔
115
                if _, ok := toCrawl[elem.Name]; ok {
5✔
116
                        rootOut.Functions = append(rootOut.Functions, elem)
2✔
117
                        proc.collectExportsFunction(elem, oldPath, newPath)
2✔
118
                }
2✔
119
        }
120
}
121

122
func (proc *Processor) collectExportsStruct(s *Struct, oldPath []string, newPath []string) {
7✔
123
        oldPath = appendNew(oldPath, s.Name)
7✔
124
        newPath = appendNew(newPath, s.Name)
7✔
125

7✔
126
        proc.addLinkExport(oldPath, newPath)
7✔
127

7✔
128
        collectExportsList(proc, s.Parameters, oldPath, newPath)
7✔
129
        collectExportsList(proc, s.Fields, oldPath, newPath)
7✔
130
        collectExportsList(proc, s.Functions, oldPath, newPath)
7✔
131
}
7✔
132

133
func (proc *Processor) collectExportsTrait(s *Trait, oldPath []string, newPath []string) {
×
134
        oldPath = appendNew(oldPath, s.Name)
×
135
        newPath = appendNew(newPath, s.Name)
×
136

×
137
        proc.addLinkExport(oldPath, newPath)
×
138

×
139
        collectExportsList(proc, s.Fields, oldPath, newPath)
×
140
        collectExportsList(proc, s.Functions, oldPath, newPath)
×
141
}
×
142

143
func (proc *Processor) collectExportsFunction(s *Function, oldPath []string, newPath []string) {
2✔
144
        oldPath = appendNew(oldPath, s.Name)
2✔
145
        newPath = appendNew(newPath, s.Name)
2✔
146

2✔
147
        proc.addLinkExport(oldPath, newPath)
2✔
148
}
2✔
149

150
func collectExportsList[T Named](proc *Processor, sl []T, oldPath, newPath []string) {
21✔
151
        for _, elem := range sl {
22✔
152
                oldPath := appendNew(oldPath, elem.GetName())
1✔
153
                newPath := appendNew(newPath, elem.GetName())
1✔
154
                proc.addLinkExport(oldPath, newPath)
1✔
155
        }
1✔
156
}
157

158
type members struct {
159
        Members []member
160
}
161

162
type member struct {
163
        Include bool
164
        RelPath []string
165
}
166

167
func collectExportMembers(parentMember *members) (selfIncluded bool, toCrawl map[string]*members) {
12✔
168
        selfIncluded = false
12✔
169
        toCrawl = map[string]*members{}
12✔
170

12✔
171
        for _, mem := range parentMember.Members {
32✔
172
                if mem.Include {
27✔
173
                        selfIncluded = true
7✔
174
                        continue
7✔
175
                }
176
                var newMember member
13✔
177
                if len(mem.RelPath) == 1 {
24✔
178
                        newMember = member{Include: true}
11✔
179
                } else {
13✔
180
                        newMember = member{RelPath: mem.RelPath[1:]}
2✔
181
                }
2✔
182
                if members, ok := toCrawl[mem.RelPath[0]]; ok {
15✔
183
                        members.Members = append(members.Members, newMember)
2✔
184
                        continue
2✔
185
                }
186
                toCrawl[mem.RelPath[0]] = &members{Members: []member{newMember}}
11✔
187
        }
188

189
        return
12✔
190
}
191

192
func collectExportsPackage(p *Package, out map[string]*members) {
5✔
193
        for _, ex := range p.exports {
21✔
194
                var newMember member
16✔
195
                if len(ex.Short) == 1 {
21✔
196
                        newMember = member{Include: true}
5✔
197
                } else {
16✔
198
                        newMember = member{RelPath: ex.Short[1:]}
11✔
199
                }
11✔
200
                if members, ok := out[ex.Short[0]]; ok {
22✔
201
                        members.Members = append(members.Members, newMember)
6✔
202
                        continue
6✔
203
                }
204
                out[ex.Short[0]] = &members{Members: []member{newMember}}
10✔
205
        }
206
}
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