diff options
Diffstat (limited to 'pkg')
| -rw-r--r-- | pkg/cover/html.go | 21 | ||||
| -rw-r--r-- | pkg/cover/report.go | 9 |
2 files changed, 30 insertions, 0 deletions
diff --git a/pkg/cover/html.go b/pkg/cover/html.go index bdbd3bbf4..63b1506c1 100644 --- a/pkg/cover/html.go +++ b/pkg/cover/html.go @@ -4,6 +4,7 @@ package cover import ( + "bufio" "bytes" "encoding/csv" "fmt" @@ -12,6 +13,7 @@ import ( "io" "io/ioutil" "math" + "net/http" "path/filepath" "sort" "strconv" @@ -104,6 +106,25 @@ func (rg *ReportGenerator) DoHTML(w io.Writer, progs []Prog) error { return coverTemplate.Execute(w, d) } +func (rg *ReportGenerator) DoRawCoverFiles(w http.ResponseWriter, progs []Prog) error { + if err := rg.lazySymbolize(progs); err != nil { + return err + } + sort.Slice(rg.Frames, func(i, j int) bool { + return rg.Frames[i].PC < rg.Frames[j].PC + }) + + w.Header().Set("Content-Type", "text/plain; charset=utf-8") + buf := bufio.NewWriter(w) + fmt.Fprintf(buf, "PC,Module,Offset,Filename,StartLine,EndLine\n") + for _, frame := range rg.Frames { + offset := frame.PC - frame.Module.Addr + fmt.Fprintf(buf, "0x%x,%v,0x%x,%v,%v\n", frame.PC, frame.Module.Name, offset, frame.Name, frame.StartLine) + } + buf.Flush() + return nil +} + type fileStats struct { Name string CoveredLines int diff --git a/pkg/cover/report.go b/pkg/cover/report.go index 8f805fe10..c7d96b703 100644 --- a/pkg/cover/report.go +++ b/pkg/cover/report.go @@ -175,6 +175,15 @@ func (rg *ReportGenerator) lazySymbolize(progs []Prog) error { return err } rg.Frames = append(rg.Frames, frames...) + uniqueFrames := make(map[uint64]bool) + var finalFrames []backend.Frame + for _, frame := range rg.Frames { + if !uniqueFrames[frame.PC] { + uniqueFrames[frame.PC] = true + finalFrames = append(finalFrames, frame) + } + } + rg.Frames = finalFrames for sym := range symbolize { sym.Symbolized = true } |
