mirror of
https://github.com/Crocmagnon/fatcontext.git
synced 2024-11-21 15:38:08 +01:00
detects nested contexts in loops
Gabriel Augendre
a80e8ddef6
Some checks failed
Go / build (1.21, macos-latest) (push) Has been cancelled
Go / build (1.21, ubuntu-latest) (push) Has been cancelled
Go / build (1.21, windows-latest) (push) Has been cancelled
Go / build (1.22, macos-latest) (push) Has been cancelled
Go / build (1.22, ubuntu-latest) (push) Has been cancelled
Go / build (1.22, windows-latest) (push) Has been cancelled
Go / build (1.23.0-rc.2, macos-latest) (push) Has been cancelled
Go / build (1.23.0-rc.2, ubuntu-latest) (push) Has been cancelled
Go / build (1.23.0-rc.2, windows-latest) (push) Has been cancelled
golangci-lint / lint (1.21) (push) Has been cancelled
golangci-lint / lint (1.22) (push) Has been cancelled
|
||
---|---|---|
.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