-
Notifications
You must be signed in to change notification settings - Fork 279
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
Regressions related to 4242f24 #995
Comments
ldez
changed the title
Performance regression related to 4242f24
Regressions related to 4242f24
Jun 3, 2024
@ldez thanks for your report! @chavacava should we revert it? |
From the golangci-lint POV, we need an option to set the Go version instead of detecting it inside revive. |
Ping @denisvmedia, @chavacava, @ldez. |
Hey, is anybody here to read the PR that fixes this issue? @denisvmedia @chavacava @ldez ? |
chavacava
pushed a commit
that referenced
this issue
Jun 22, 2024
* Support go workspaces when detecting the go version. When a module is part of a workspace, a call to `go list -m` lists all modules in the workspace, and we need to parse multiple modinfos. * Do not invoke `go list` for every package. * Add a go language version override config option for golangci-lint.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
PR #993 creates a performance regression because
go list
is expensive and will be called on each package (even whenrange-val-address
is not used)."Funny thing", the regression impacts all the rules except
range-val-address
because this rule is skipped with go1.22.It will be a performance regression for revive and for golangci-lint.
For golangci-lint, a way to define the Go version externally to bypass the
go list
is a solution.I don't know enough about the revive design to propose a solution for revive.
We encountered the same problem with gosec golangci/golangci-lint#4735
log the call to detectGoVersion on revive's code
benchmark on kubernetes
With the commit, the run of
context-as-argument
(just an example) is about 2x slower than the previous commit (and about 10x slower on the system).Also, the implementation has a bug with Go workspaces:
Inside a Go workspace,
go list
always returns all the modules, not just the current module.As a reference, a working implementation: https://github.com/golangci/modinfo/blob/main/module.go
FYI, the issue comment (golang/go#44753 (comment)), used as a reference inside the PR, is outdated since Go workspace (go1.18).
The text was updated successfully, but these errors were encountered: