diff --git a/go.mod b/go.mod index 50147f8c3814..1e7283a49a58 100644 --- a/go.mod +++ b/go.mod @@ -46,7 +46,7 @@ require ( github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af github.com/julz/importas v0.1.0 github.com/kisielk/errcheck v1.6.0 - github.com/kulti/thelper v0.5.1 + github.com/kulti/thelper v0.6.2 github.com/kunwardeep/paralleltest v1.0.3 github.com/kyoh86/exportloopref v0.1.8 github.com/ldez/gomoddirectives v0.2.2 diff --git a/go.sum b/go.sum index 621d32160335..140db868b729 100644 --- a/go.sum +++ b/go.sum @@ -338,7 +338,6 @@ github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/ad github.com/gostaticanalysis/analysisutil v0.0.0-20190318220348-4088753ea4d3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= github.com/gostaticanalysis/analysisutil v0.0.3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= github.com/gostaticanalysis/analysisutil v0.1.0/go.mod h1:dMhHRU9KTiDcuLGdy87/2gTR8WruwYZrKdRq9m1O6uw= -github.com/gostaticanalysis/analysisutil v0.4.1/go.mod h1:18U/DLpRgIUd459wGxVHE0fRgmo1UgHDcbw7F5idXu0= github.com/gostaticanalysis/analysisutil v0.7.1 h1:ZMCjoue3DtDWQ5WyU16YbjbQEQ3VuzwxALrpYd+HeKk= github.com/gostaticanalysis/analysisutil v0.7.1/go.mod h1:v21E3hY37WKMGSnbsw2S/ojApNWb6C1//mXO48CXbVc= github.com/gostaticanalysis/comment v1.3.0/go.mod h1:xMicKDx7XRXYdVwY9f9wQpDJVnqWxw9wCauCMKp+IBI= @@ -442,8 +441,8 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/kulti/thelper v0.5.1 h1:Uf4CUekH0OvzQTFPrWkstJvXgm6pnNEtQu3HiqEkpB0= -github.com/kulti/thelper v0.5.1/go.mod h1:vMu2Cizjy/grP+jmsvOFDx1kYP6+PD1lqg4Yu5exl2U= +github.com/kulti/thelper v0.6.2 h1:K4xulKkwOCnT1CDms6Ex3uG1dvSMUUQe9zxgYQgbRXs= +github.com/kulti/thelper v0.6.2/go.mod h1:DsqKShOvP40epevkFrvIwkCMNYxMeTNjdWL4dqWHZ6I= github.com/kunwardeep/paralleltest v1.0.3 h1:UdKIkImEAXjR1chUWLn+PNXqWUGs//7tzMeWuP7NhmI= github.com/kunwardeep/paralleltest v1.0.3/go.mod h1:vLydzomDFpk7yu5UX02RmP0H8QfRPOV/oFhWN85Mjb4= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= @@ -1112,7 +1111,6 @@ golang.org/x/tools v0.0.0-20201001104356-43ebab892c4c/go.mod h1:z6u4i615ZeAfBE4X golang.org/x/tools v0.0.0-20201002184944-ecd9fd270d5d/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= golang.org/x/tools v0.0.0-20201023174141-c8cfbd0f21e6/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201114224030-61ea331ec02b/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= diff --git a/pkg/config/linters_settings.go b/pkg/config/linters_settings.go index 97c2065d4bf5..088223f0db62 100644 --- a/pkg/config/linters_settings.go +++ b/pkg/config/linters_settings.go @@ -549,6 +549,11 @@ type ThelperSettings struct { Name bool `mapstructure:"name"` Begin bool `mapstructure:"begin"` } `mapstructure:"test"` + Fuzz struct { + First bool `mapstructure:"first"` + Name bool `mapstructure:"name"` + Begin bool `mapstructure:"begin"` + } `mapstructure:"fuzz"` Benchmark struct { First bool `mapstructure:"first"` Name bool `mapstructure:"name"` diff --git a/pkg/golinters/thelper.go b/pkg/golinters/thelper.go index 1d92f2fbfab4..349c46666df6 100644 --- a/pkg/golinters/thelper.go +++ b/pkg/golinters/thelper.go @@ -27,6 +27,16 @@ func NewThelper(cfg *config.ThelperSettings) *goanalysis.Linter { opts = append(opts, "t_first") } + if cfg.Fuzz.Name { + opts = append(opts, "f_name") + } + if cfg.Fuzz.Begin { + opts = append(opts, "f_begin") + } + if cfg.Fuzz.First { + opts = append(opts, "f_first") + } + if cfg.Benchmark.Name { opts = append(opts, "b_name") } diff --git a/test/testdata/thelper_go118.go b/test/testdata/thelper_go118.go new file mode 100644 index 000000000000..1fa8c268743a --- /dev/null +++ b/test/testdata/thelper_go118.go @@ -0,0 +1,25 @@ +//go:build go1.18 +// +build go1.18 + +//args: -Ethelper +package testdata + +import "testing" + +func fhelperWithHelperAfterAssignment(f *testing.F) { // ERROR "test helper function should start from f.Helper()" + _ = 0 + f.Helper() +} + +func fhelperWithNotFirst(s string, f *testing.F, i int) { // ERROR `parameter \*testing.F should be the first` + f.Helper() +} + +func fhelperWithIncorrectName(o *testing.F) { // ERROR `parameter \*testing.F should have name f` + o.Helper() +} + +func FuzzSubtestShouldNotBeChecked(f *testing.F) { + f.Add(5, "hello") + f.Fuzz(func(t *testing.T, a int, b string) {}) +}