woodpecker/vendor/github.com/sonatard/noctx/ngfunc/main.go

58 lines
1.2 KiB
Go
Raw Normal View History

package ngfunc
import (
"go/types"
"github.com/gostaticanalysis/analysisutil"
"golang.org/x/tools/go/analysis"
"golang.org/x/tools/go/analysis/passes/buildssa"
)
func Run(pass *analysis.Pass) (interface{}, error) {
ngFuncNames := []string{
"net/http.Get",
"net/http.Head",
"net/http.Post",
"net/http.PostForm",
"(*net/http.Client).Get",
"(*net/http.Client).Head",
"(*net/http.Client).Post",
"(*net/http.Client).PostForm",
}
ngFuncs := typeFuncs(pass, ngFuncNames)
if len(ngFuncs) == 0 {
return nil, nil
}
reportFuncs := ngCalledFuncs(pass, ngFuncs)
report(pass, reportFuncs)
return nil, nil
}
func ngCalledFuncs(pass *analysis.Pass, ngFuncs []*types.Func) []*Report {
var reports []*Report
srcFuncs := pass.ResultOf[buildssa.Analyzer].(*buildssa.SSA).SrcFuncs
for _, sf := range srcFuncs {
for _, b := range sf.Blocks {
for _, instr := range b.Instrs {
for _, ngFunc := range ngFuncs {
if analysisutil.Called(instr, nil, ngFunc) {
ngCalledFunc := &Report{
Instruction: instr,
function: ngFunc,
}
reports = append(reports, ngCalledFunc)
break
}
}
}
}
}
return reports
}