Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

cmd/vet: export list of analysis passes used by vet #35487

Open
leighmcculloch opened this issue Nov 10, 2019 · 4 comments
Open

cmd/vet: export list of analysis passes used by vet #35487

leighmcculloch opened this issue Nov 10, 2019 · 4 comments
Labels
Analysis Issues related to static analysis (vet, x/tools/go/analysis) FeatureRequest NeedsInvestigation Someone must examine and confirm this is a valid issue and not a duplicate of an existing one.
Milestone

Comments

@leighmcculloch
Copy link
Contributor

What version of Go are you using (go version)?

$ go version
go version go1.13.4 linux/amd64

Does this issue reproduce with the latest release?

Yes

What operating system and processor architecture are you using (go env)?

go env Output
$ go env
GO111MODULE=""
GOARCH="amd64"
GOBIN="/home/leighmcculloch/local/bin"
GOCACHE="/home/leighmcculloch/.cache/go-build"
GOENV="/home/leighmcculloch/.config/go/env"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GONOPROXY=""
GONOSUMDB=""
GOOS="linux"
GOPATH="/home/leighmcculloch/go"
GOPRIVATE=""
GOPROXY="https://proxy.golang.org,direct"
GOROOT="/home/leighmcculloch/local/bin/go/1.13.4"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/home/leighmcculloch/local/bin/go/1.13.4/pkg/tool/linux_amd64"
GCCGO="gccgo"
AR="ar"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
GOMOD=""
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build882821970=/tmp/go-build -gno-record-gcc-switches"

What did you do?

I was looking to include all the same analysis passes of go vet into my own main package using multichecker similar to the pattern that I saw @FiloSottile use in FiloSottile/mkcert@82ea753.

What did you expect to see?

I expected to find an exported slice/list of analysis passes that vet uses so that it is easy to build multicheckers that build on-top of vet.

What did you see instead?

I saw that in go vet's main function is where the list of analysis passes is defined and that folks are just copying that list when building multichecker's that run additional checks on-top of vet's checks.

go/src/cmd/vet/main.go

Lines 35 to 58 in 78d4560

unitchecker.Main(
asmdecl.Analyzer,
assign.Analyzer,
atomic.Analyzer,
bools.Analyzer,
buildtag.Analyzer,
cgocall.Analyzer,
composite.Analyzer,
copylock.Analyzer,
errorsas.Analyzer,
httpresponse.Analyzer,
loopclosure.Analyzer,
lostcancel.Analyzer,
nilfunc.Analyzer,
printf.Analyzer,
shift.Analyzer,
stdmethods.Analyzer,
structtag.Analyzer,
tests.Analyzer,
unmarshal.Analyzer,
unreachable.Analyzer,
unsafeptr.Analyzer,
unusedresult.Analyzer,
)

Ask

Could we export in a package inside the go repo, or inside the tools repo, a slice that holds the analysis passes that vet will run, and have vet reference that so that it can be referenced by other tools?

I'm able to submit a change doing this if this would be welcomed.

@agnivade agnivade added FeatureRequest NeedsInvestigation Someone must examine and confirm this is a valid issue and not a duplicate of an existing one. labels Nov 10, 2019
@agnivade agnivade added this to the Unplanned milestone Nov 10, 2019
@leighmcculloch
Copy link
Contributor Author

If this change would be welcome I'm unsure on where the exported list should live.

Should it live in the x/tools module? In an import path like one of these?
golang.org/x/tools/go/vet
golang.org/x/tools/go/analysis/vet

Or, should we make golang.org/x/tools/go/analysis/passes a package that has an exported variable Vet that is a slice of passes run by vet?

@leighmcculloch
Copy link
Contributor Author

Would a change making the analysis exported be welcomed?

@timothy-king
Copy link
Contributor

Or, should we make golang.org/x/tools/go/analysis/passes a package that has an exported variable Vet that is a slice of passes run by vet?

Would we export 2 lists: the vet checkers run by go test and the vet checkers run by go vet?

@zpavlinovic
Copy link
Contributor

Or, should we make golang.org/x/tools/go/analysis/passes a package that has an exported variable Vet that is a slice of passes run by vet?

Would we export 2 lists: the vet checkers run by go test and the vet checkers run by go vet?

IMO, there should be only list that both go test and go vet use. I believe this would go well with go test vet=... approach suggested in #47309.

@adonovan adonovan added the Analysis Issues related to static analysis (vet, x/tools/go/analysis) label Apr 23, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Analysis Issues related to static analysis (vet, x/tools/go/analysis) FeatureRequest NeedsInvestigation Someone must examine and confirm this is a valid issue and not a duplicate of an existing one.
Projects
None yet
Development

No branches or pull requests

5 participants