detects nested contexts in loops
Find a file
pre-commit-ci[bot] 8782199988
Some checks failed
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, macos-latest) (push) Has been cancelled
Go / build (1.23, ubuntu-latest) (push) Has been cancelled
Go / build (1.23, windows-latest) (push) Has been cancelled
golangci-lint / lint (1.22) (push) Has been cancelled
golangci-lint / lint (1.23) (push) Has been cancelled
[pre-commit.ci] pre-commit autoupdate
updates:
- [github.com/golangci/golangci-lint: v1.60.1 → v1.60.3](https://github.com/golangci/golangci-lint/compare/v1.60.1...v1.60.3)
2024-08-27 08:09:22 +02:00
.github cd: use go1.23 for golangci-lint 2024-08-26 07:46:50 +02:00
cmd/fatcontext refactor: rename foreshadow to fatcontext 2024-03-27 23:50:12 +01:00
contrib refactor: rename foreshadow to fatcontext 2024-03-27 23:50:12 +01:00
pkg/analyzer doc: update linter description 2024-08-26 10:30:12 +02:00
testdata/src Detect nested contexts in function literals (#18) 2024-08-26 07:46:02 +02:00
.gitignore chore: setup goreleaser 2024-03-27 22:48:14 +01:00
.golangci.yml add linter and pre-commit 2024-03-27 22:01:27 +01:00
.goreleaser.yaml force github token in goreleaser 2024-03-28 00:01:25 +01:00
.pre-commit-config.yaml [pre-commit.ci] pre-commit autoupdate 2024-08-27 08:09:22 +02:00
go.mod update go.mod to 1.22 2024-08-25 18:15:22 +02:00
go.sum build(deps): bump golang.org/x/tools from 0.22.0 to 0.23.0 2024-08-01 21:38:51 +00:00
LICENSE add LICENSE 2024-03-27 20:04:07 +01:00
Makefile Revert "ci: run go checks in pre-commit.ci" 2024-03-27 23:07:11 +01:00
README.md update readme 2024-08-26 07:47:30 +02:00

fatcontext

fatcontext is a Go linter which detects potential fat contexts in loops or function literals. 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