MCPcopy
hub / github.com/gobyexample-cn/gobyexample / parseSegs

Function parseSegs

tools/generate.go:138–194  ·  view source on GitHub ↗
(sourcePath string)

Source from the content-addressed store, hash-verified

136}
137
138func parseSegs(sourcePath string) ([]*Seg, string) {
139 var (
140 lines []string
141 source []string
142 )
143 // Convert tabs to spaces for uniform rendering.
144 for _, line := range readLines(sourcePath) {
145 lines = append(lines, strings.Replace(line, "\t", " ", -1))
146 source = append(source, line)
147 }
148 segs := []*Seg{}
149 lastSeen := ""
150 for _, line := range lines {
151 if line == "" {
152 lastSeen = ""
153 continue
154 }
155 matchDocs := docsPat.MatchString(line)
156 matchCode := !matchDocs
157 newDocs := (lastSeen == "") || ((lastSeen != "docs") && (segs[len(segs)-1].Docs != ""))
158 newCode := (lastSeen == "") || ((lastSeen != "code") && (segs[len(segs)-1].Code != ""))
159 if newDocs || newCode {
160 debug("NEWSEG")
161 }
162 if matchDocs {
163 trimmed := docsPat.ReplaceAllString(line, "")
164 if newDocs {
165 newSeg := Seg{Docs: trimmed, Code: ""}
166 segs = append(segs, &newSeg)
167 } else {
168 segs[len(segs)-1].Docs = segs[len(segs)-1].Docs + "\n" + trimmed
169 }
170 debug("DOCS: " + line)
171 lastSeen = "docs"
172 } else if matchCode {
173 if newCode {
174 newSeg := Seg{Docs: "", Code: line}
175 segs = append(segs, &newSeg)
176 } else {
177 lastSeg := segs[len(segs)-1]
178 if len(lastSeg.Code) == 0 {
179 lastSeg.Code = line
180 } else {
181 lastSeg.Code = lastSeg.Code + "\n" + line
182 }
183 }
184 debug("CODE: " + line)
185 lastSeen = "code"
186 }
187 }
188 for i, seg := range segs {
189 seg.CodeEmpty = (seg.Code == "")
190 seg.CodeLeading = (i < (len(segs) - 1))
191 seg.CodeRun = strings.Contains(seg.Code, "package main")
192 }
193 return segs, strings.Join(source, "\n")
194}
195

Callers 1

parseAndRenderSegsFunction · 0.85

Calls 2

debugFunction · 0.85
readLinesFunction · 0.70

Tested by

no test coverage detected