knowledge.go 670 B

1234567891011121314151617181920212223242526
  1. package staticcheck
  2. import (
  3. "reflect"
  4. "golang.org/x/tools/go/analysis"
  5. "honnef.co/go/tools/internal/passes/buildssa"
  6. "honnef.co/go/tools/ssa"
  7. "honnef.co/go/tools/staticcheck/vrp"
  8. )
  9. var valueRangesAnalyzer = &analysis.Analyzer{
  10. Name: "vrp",
  11. Doc: "calculate value ranges of functions",
  12. Run: func(pass *analysis.Pass) (interface{}, error) {
  13. m := map[*ssa.Function]vrp.Ranges{}
  14. for _, ssafn := range pass.ResultOf[buildssa.Analyzer].(*buildssa.SSA).SrcFuncs {
  15. vr := vrp.BuildGraph(ssafn).Solve()
  16. m[ssafn] = vr
  17. }
  18. return m, nil
  19. },
  20. Requires: []*analysis.Analyzer{buildssa.Analyzer},
  21. ResultType: reflect.TypeOf(map[*ssa.Function]vrp.Ranges{}),
  22. }