.gitignore added
[dotfiles/.git] / .config / coc / extensions / coc-go-data / tools / pkg / mod / honnef.co / go / tools@v0.1.1 / lintcmd / runner / stats.go
1 package runner
2
3 import (
4         "sync/atomic"
5         "time"
6
7         "honnef.co/go/tools/go/loader"
8
9         "golang.org/x/tools/go/analysis"
10 )
11
12 const (
13         StateInitializing = iota
14         StateLoadPackageGraph
15         StateBuildActionGraph
16         StateProcessing
17         StateFinalizing
18 )
19
20 type Stats struct {
21         state                    uint32
22         initialPackages          uint32
23         totalPackages            uint32
24         processedPackages        uint32
25         processedInitialPackages uint32
26
27         // optional function to call every time an analyzer has finished analyzing a package.
28         PrintAnalyzerMeasurement func(*analysis.Analyzer, *loader.PackageSpec, time.Duration)
29 }
30
31 func (s *Stats) setState(state uint32)    { atomic.StoreUint32(&s.state, state) }
32 func (s *Stats) State() int               { return int(atomic.LoadUint32(&s.state)) }
33 func (s *Stats) setInitialPackages(n int) { atomic.StoreUint32(&s.initialPackages, uint32(n)) }
34 func (s *Stats) InitialPackages() int     { return int(atomic.LoadUint32(&s.initialPackages)) }
35 func (s *Stats) setTotalPackages(n int)   { atomic.StoreUint32(&s.totalPackages, uint32(n)) }
36 func (s *Stats) TotalPackages() int       { return int(atomic.LoadUint32(&s.totalPackages)) }
37
38 func (s *Stats) finishPackage()         { atomic.AddUint32(&s.processedPackages, 1) }
39 func (s *Stats) finishInitialPackage()  { atomic.AddUint32(&s.processedInitialPackages, 1) }
40 func (s *Stats) ProcessedPackages() int { return int(atomic.LoadUint32(&s.processedPackages)) }
41 func (s *Stats) ProcessedInitialPackages() int {
42         return int(atomic.LoadUint32(&s.processedInitialPackages))
43 }
44
45 func (s *Stats) measureAnalyzer(analysis *analysis.Analyzer, pkg *loader.PackageSpec, d time.Duration) {
46         if s.PrintAnalyzerMeasurement != nil {
47                 s.PrintAnalyzerMeasurement(analysis, pkg, d)
48         }
49 }