github.com/shogo82148/std@v1.22.1-0.20240327122250-4e474527810c/cmd/internal/cov/readcovdata.go (about) 1 // Copyright 2022 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package cov 6 7 import ( 8 "github.com/shogo82148/std/internal/coverage" 9 "github.com/shogo82148/std/internal/coverage/decodecounter" 10 "github.com/shogo82148/std/internal/coverage/decodemeta" 11 "github.com/shogo82148/std/internal/coverage/pods" 12 ) 13 14 // CovDataReader is a general-purpose helper/visitor object for 15 // reading coverage data files in a structured way. Clients create a 16 // CovDataReader to process a given collection of coverage data file 17 // directories, then pass in a visitor object with methods that get 18 // invoked at various important points. CovDataReader is intended 19 // to facilitate common coverage data file operations such as 20 // merging or intersecting data files, analyzing data files, or 21 // dumping data files. 22 type CovDataReader struct { 23 vis CovDataVisitor 24 indirs []string 25 matchpkg func(name string) bool 26 flags CovDataReaderFlags 27 err error 28 verbosityLevel int 29 } 30 31 // MakeCovDataReader creates a CovDataReader object to process the 32 // given set of input directories. Here 'vis' is a visitor object 33 // providing methods to be invoked as we walk through the data, 34 // 'indirs' is the set of coverage data directories to examine, 35 // 'verbosityLevel' controls the level of debugging trace messages 36 // (zero for off, higher for more output), 'flags' stores flags that 37 // indicate what to do if errors are detected, and 'matchpkg' is a 38 // caller-provided function that can be used to select specific 39 // packages by name (if nil, then all packages are included). 40 func MakeCovDataReader(vis CovDataVisitor, indirs []string, verbosityLevel int, flags CovDataReaderFlags, matchpkg func(name string) bool) *CovDataReader 41 42 type CovDataVisitor interface { 43 BeginPod(p pods.Pod) 44 EndPod(p pods.Pod) 45 46 VisitMetaDataFile(mdf string, mfr *decodemeta.CoverageMetaFileReader) 47 48 BeginCounterDataFile(cdf string, cdr *decodecounter.CounterDataReader, dirIdx int) 49 EndCounterDataFile(cdf string, cdr *decodecounter.CounterDataReader, dirIdx int) 50 51 VisitFuncCounterData(payload decodecounter.FuncPayload) 52 53 EndCounters() 54 55 BeginPackage(pd *decodemeta.CoverageMetaDataDecoder, pkgIdx uint32) 56 EndPackage(pd *decodemeta.CoverageMetaDataDecoder, pkgIdx uint32) 57 58 VisitFunc(pkgIdx uint32, fnIdx uint32, fd *coverage.FuncDesc) 59 60 Finish() 61 } 62 63 type CovDataReaderFlags uint32 64 65 const ( 66 CovDataReaderNoFlags CovDataReaderFlags = 0 67 PanicOnError = 1 << iota 68 PanicOnWarning 69 ) 70 71 func (r *CovDataReader) Visit() error