package cover import ( "crypto/sha256" "fmt" "path" "github.com/qiniu/goc/v2/pkg/config" ) // declareCoverVars attaches the required cover variables names // to the files, to be used when annotating the files. func declareCoverVars(p *config.Package) map[string]*config.FileVar { coverVars := make(map[string]*config.FileVar) coverIndex := 0 // We create the cover counters as new top-level variables in the package. // We need to avoid collisions with user variables (GoCover_0 is unlikely but still) // and more importantly with dot imports of other covered packages, // so we append 12 hex digits from the SHA-256 of the import path. // The point is only to avoid accidents, not to defeat users determined to // break things. sum := sha256.Sum256([]byte(p.ImportPath)) h := fmt.Sprintf("%x", sum[:6]) for _, file := range p.GoFiles { // These names appear in the cmd/cover HTML interface. var longFile = path.Join(p.ImportPath, file) coverVars[file] = &config.FileVar{ File: longFile, Var: fmt.Sprintf("GoCover_%d_%x", coverIndex, h), } coverIndex++ } for _, file := range p.CgoFiles { // These names appear in the cmd/cover HTML interface. var longFile = path.Join(p.ImportPath, file) coverVars[file] = &config.FileVar{ File: longFile, Var: fmt.Sprintf("GoCover_%d_%x", coverIndex, h), } coverIndex++ } return coverVars }