//golangcitest:args -Econtextcheck package testdata import "context" type MyString string func contextcheckCase1(ctx context.Context) { funcWithoutCtx() // want "Function `funcWithoutCtx` should pass the context parameter" } func contextcheckCase2(ctx context.Context) { ctx = context.WithValue(ctx, MyString("aaa"), "aaaaaa") funcWithCtx(ctx) defer func() { funcWithCtx(ctx) }() func(ctx context.Context) { funcWithCtx(ctx) }(ctx) funcWithCtx(context.Background()) // want "Non-inherited new context, use function like `context.WithXXX` instead" } func contextcheckCase3(ctx context.Context) { func() { funcWithCtx(ctx) }() ctx = context.Background() // want "Non-inherited new context, use function like `context.WithXXX` instead" funcWithCtx(ctx) } func contextcheckCase4(ctx context.Context) { ctx, cancel := getNewCtx(ctx) defer cancel() funcWithCtx(ctx) } func funcWithCtx(ctx context.Context) {} func funcWithoutCtx() { funcWithCtx(context.TODO()) } func getNewCtx(ctx context.Context) (newCtx context.Context, cancel context.CancelFunc) { return context.WithCancel(ctx) }