.gitignore added
[dotfiles/.git] / .config / coc / extensions / coc-go-data / tools / pkg / mod / honnef.co / go / tools@v0.1.1 / lintcmd / runner / stats.go
diff --git a/.config/coc/extensions/coc-go-data/tools/pkg/mod/honnef.co/go/tools@v0.1.1/lintcmd/runner/stats.go b/.config/coc/extensions/coc-go-data/tools/pkg/mod/honnef.co/go/tools@v0.1.1/lintcmd/runner/stats.go
new file mode 100644 (file)
index 0000000..fd7da2f
--- /dev/null
@@ -0,0 +1,49 @@
+package runner
+
+import (
+       "sync/atomic"
+       "time"
+
+       "honnef.co/go/tools/go/loader"
+
+       "golang.org/x/tools/go/analysis"
+)
+
+const (
+       StateInitializing = iota
+       StateLoadPackageGraph
+       StateBuildActionGraph
+       StateProcessing
+       StateFinalizing
+)
+
+type Stats struct {
+       state                    uint32
+       initialPackages          uint32
+       totalPackages            uint32
+       processedPackages        uint32
+       processedInitialPackages uint32
+
+       // optional function to call every time an analyzer has finished analyzing a package.
+       PrintAnalyzerMeasurement func(*analysis.Analyzer, *loader.PackageSpec, time.Duration)
+}
+
+func (s *Stats) setState(state uint32)    { atomic.StoreUint32(&s.state, state) }
+func (s *Stats) State() int               { return int(atomic.LoadUint32(&s.state)) }
+func (s *Stats) setInitialPackages(n int) { atomic.StoreUint32(&s.initialPackages, uint32(n)) }
+func (s *Stats) InitialPackages() int     { return int(atomic.LoadUint32(&s.initialPackages)) }
+func (s *Stats) setTotalPackages(n int)   { atomic.StoreUint32(&s.totalPackages, uint32(n)) }
+func (s *Stats) TotalPackages() int       { return int(atomic.LoadUint32(&s.totalPackages)) }
+
+func (s *Stats) finishPackage()         { atomic.AddUint32(&s.processedPackages, 1) }
+func (s *Stats) finishInitialPackage()  { atomic.AddUint32(&s.processedInitialPackages, 1) }
+func (s *Stats) ProcessedPackages() int { return int(atomic.LoadUint32(&s.processedPackages)) }
+func (s *Stats) ProcessedInitialPackages() int {
+       return int(atomic.LoadUint32(&s.processedInitialPackages))
+}
+
+func (s *Stats) measureAnalyzer(analysis *analysis.Analyzer, pkg *loader.PackageSpec, d time.Duration) {
+       if s.PrintAnalyzerMeasurement != nil {
+               s.PrintAnalyzerMeasurement(analysis, pkg, d)
+       }
+}