mirror of
https://github.com/Crocmagnon/fatcontext.git
synced 2024-12-23 22:41:57 +01:00
detects nested contexts in loops
3e9e29f41c
As long as the context is rooted in a non-pointer value that has a new copy in the loop, it is as safe to copy that value as it is to copy the context. So only report such cases when they are indirected and thus shared. |
||
---|---|---|
.github | ||
cmd/fatcontext | ||
contrib | ||
pkg/analyzer | ||
testdata/src | ||
.gitignore | ||
.golangci.yml | ||
.goreleaser.yaml | ||
.pre-commit-config.yaml | ||
go.mod | ||
go.sum | ||
LICENSE | ||
Makefile | ||
README.md |
fatcontext
fatcontext
is a Go linter which detects potential fat contexts in loops.
They can lead to performance issues, as documented here: https://gabnotes.org/fat-contexts/
Installation / usage
fatcontext
is available in golangci-lint
since v1.58.0.
go install github.com/Crocmagnon/fatcontext/cmd/fatcontext@latest
fatcontext ./...
There are no specific configuration options or custom command-line flags.
Example
package main
import "context"
func ok() {
ctx := context.Background()
for i := 0; i < 10; i++ {
ctx := context.WithValue(ctx, "key", i)
_ = ctx
}
}
func notOk() {
ctx := context.Background()
for i := 0; i < 10; i++ {
ctx = context.WithValue(ctx, "key", i) // "nested context in loop"
_ = ctx
}
}
Development
Setup pre-commit locally:
pre-commit install
Run tests & linter:
make lint test
To release, just publish a git tag:
git tag -a v0.1.0 -m "v0.1.0"
git push --follow-tags