From 66c0ee5b29fe3b1865821429cd89f477c8c6beae Mon Sep 17 00:00:00 2001 From: Tom Moulard Date: Wed, 2 Jul 2025 21:58:39 +0200 Subject: [PATCH 1/6] chore: upgrade golangci-lint to v2.2.1 --- .github/workflows/ci.yml | 2 +- .golangci.yml | 134 ++++++++++++++++++++++----------------- Makefile | 2 +- syrup.go | 60 +++++++++--------- 4 files changed, 108 insertions(+), 90 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 551f3ce..84f9bc3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -13,7 +13,7 @@ jobs: runs-on: ubuntu-latest env: GO_VERSION: stable - GOLANGCI_LINT_VERSION: v1.62.0 + GOLANGCI_LINT_VERSION: v2.2.1 CGO_ENABLED: 0 steps: diff --git a/.golangci.yml b/.golangci.yml index 4bdaa01..32ac7d3 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -1,65 +1,65 @@ +version: "2" + run: timeout: 10m -linters-settings: - govet: - enable-all: true - disable: - - fieldalignment - gocyclo: - min-complexity: 15 - goconst: - min-len: 5 - min-occurrences: 3 - misspell: - locale: US - funlen: - lines: -1 - statements: 50 - godox: - keywords: - - FIXME - gofumpt: - extra-rules: true - depguard: - rules: - main: - deny: - - pkg: "github.com/instana/testify" - desc: not allowed - - pkg: "github.com/pkg/errors" - desc: Should be replaced by standard lib errors package - gocritic: - enabled-tags: - - diagnostic - - style - - performance - disabled-checks: - - sloppyReassign - - rangeValCopy - - octalLiteral - - paramTypeCombine # already handle by gofumpt.extra-rules - - unnamedResult - - hugeParam - tagliatelle: - case: +linters: + settings: + govet: + enable-all: true + disable: + - fieldalignment + gocyclo: + min-complexity: 15 + goconst: + min-len: 5 + min-occurrences: 3 + misspell: + locale: US + funlen: + lines: -1 + statements: 50 + godox: + keywords: + - FIXME + depguard: rules: - json: pascal - gosec: - excludes: - - G304 - - G306 + main: + deny: + - pkg: "github.com/instana/testify" + desc: not allowed + - pkg: "github.com/pkg/errors" + desc: Should be replaced by standard lib errors package + gocritic: + enabled-tags: + - diagnostic + - style + - performance + disabled-checks: + - sloppyReassign + - rangeValCopy + - octalLiteral + - paramTypeCombine # already handle by gofumpt.extra-rules + - unnamedResult + - hugeParam + tagliatelle: + case: + rules: + json: pascal + gosec: + excludes: + - G304 + - G306 -linters: - enable-all: true + default: all disable: - - exportloopref # deprecated - sqlclosecheck # not relevant (SQL) - rowserrcheck # not relevant (SQL) - cyclop # duplicate of gocyclo - lll - dupl - wsl + - wsl_v5 - nlreturn - mnd - err113 @@ -78,17 +78,35 @@ linters: - errchkjson - contextcheck + exclusions: + warn-unused: true + rules: + - text: fmt.Sprintf can be replaced with string + linters: + - perfsprint + issues: - exclude-use-default: false max-issues-per-linter: 0 max-same-issues: 0 - exclude: - - 'fmt.Sprintf can be replaced with string' - exclude-rules: - - path: .*_test.go - linters: - - funlen - - noctx + +formatters: + enable: + - gci + - gofmt + - gofumpt + - goimports + - golines + + settings: + gofumpt: + extra-rules: true + + golines: + max-len: 200 + tab-len: 4 + shorten-comments: true + reformat-tags: false + chain-split-dots: false output: show-stats: true diff --git a/Makefile b/Makefile index 97b7323..938ba03 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,7 @@ default: clean lint test build lint: - golangci-lint run + go run github.com/golangci/golangci-lint/v2/cmd/golangci-lint@v2.2.1 run clean: rm -rf cover.out diff --git a/syrup.go b/syrup.go index a070135..7d9f6a0 100644 --- a/syrup.go +++ b/syrup.go @@ -98,6 +98,36 @@ type Syrup struct { Signature *types.Signature } +// Call generates mock.Call wrapper. +func (s Syrup) Call(writer io.Writer, methods []*types.Func) error { + err := s.callBase(writer) + if err != nil { + return err + } + + err = s.typedReturns(writer) + if err != nil { + return err + } + + err = s.returnsFn(writer) + if err != nil { + return err + } + + err = s.typedRun(writer) + if err != nil { + return err + } + + err = s.callMethodsOn(writer, methods) + if err != nil { + return err + } + + return s.callMethodOnRaw(writer, methods) +} + // MockMethod generates method mocks. func (s Syrup) MockMethod(writer io.Writer) error { err := s.mockedMethod(writer) @@ -312,36 +342,6 @@ func (s Syrup) methodOnRaw(writer io.Writer) error { return w.Err() } -// Call generates mock.Call wrapper. -func (s Syrup) Call(writer io.Writer, methods []*types.Func) error { - err := s.callBase(writer) - if err != nil { - return err - } - - err = s.typedReturns(writer) - if err != nil { - return err - } - - err = s.returnsFn(writer) - if err != nil { - return err - } - - err = s.typedRun(writer) - if err != nil { - return err - } - - err = s.callMethodsOn(writer, methods) - if err != nil { - return err - } - - return s.callMethodOnRaw(writer, methods) -} - func (s Syrup) callBase(writer io.Writer) error { base := template.New("templateCallBase").Funcs(template.FuncMap{ "ToGoCamel": strcase.ToGoCamel, From a7e386b3513b3282c067a964e44c3330988d2a01 Mon Sep 17 00:00:00 2001 From: Tom Moulard Date: Wed, 2 Jul 2025 23:59:06 +0200 Subject: [PATCH 2/6] Apply suggestion from @ldez Co-authored-by: Ludovic Fernandez --- .golangci.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.golangci.yml b/.golangci.yml index 32ac7d3..c1120e2 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -92,10 +92,7 @@ issues: formatters: enable: - gci - - gofmt - gofumpt - - goimports - - golines settings: gofumpt: From b6aac8a5d98600fbdb9d7ec6871a127d04f0b611 Mon Sep 17 00:00:00 2001 From: Tom Moulard Date: Wed, 2 Jul 2025 23:59:19 +0200 Subject: [PATCH 3/6] Apply suggestion from @ldez Co-authored-by: Ludovic Fernandez --- .golangci.yml | 7 ------- 1 file changed, 7 deletions(-) diff --git a/.golangci.yml b/.golangci.yml index c1120e2..e95ffb9 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -98,12 +98,5 @@ formatters: gofumpt: extra-rules: true - golines: - max-len: 200 - tab-len: 4 - shorten-comments: true - reformat-tags: false - chain-split-dots: false - output: show-stats: true From ea43e4f063e59667029db67bb910310a8feca01c Mon Sep 17 00:00:00 2001 From: Tom Moulard Date: Wed, 23 Jul 2025 15:18:38 +0200 Subject: [PATCH 4/6] Apply suggestion from @tomMoulard --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 84f9bc3..bb59176 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -13,7 +13,7 @@ jobs: runs-on: ubuntu-latest env: GO_VERSION: stable - GOLANGCI_LINT_VERSION: v2.2.1 + GOLANGCI_LINT_VERSION: v2.3.0 CGO_ENABLED: 0 steps: From 02247be1d8d3c5895062dd0f21a6d485207e1a78 Mon Sep 17 00:00:00 2001 From: Tom Moulard Date: Wed, 23 Jul 2025 15:19:39 +0200 Subject: [PATCH 5/6] Apply suggestion from @tomMoulard --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 938ba03..0c366d5 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,7 @@ default: clean lint test build lint: - go run github.com/golangci/golangci-lint/v2/cmd/golangci-lint@v2.2.1 run + go run github.com/golangci/golangci-lint/v2/cmd/golangci-lint@v2.3.0 run clean: rm -rf cover.out From bb945fad86d1d405a6311027963e8b69e75aea4d Mon Sep 17 00:00:00 2001 From: Tom Moulard Date: Wed, 23 Jul 2025 15:26:30 +0200 Subject: [PATCH 6/6] chore: update to go1.24, and adding ctx to exec.Command --- go.mod | 2 +- mocktail.go | 5 ++++- mocktail_test.go | 8 ++++---- mod.go | 5 +++-- 4 files changed, 12 insertions(+), 8 deletions(-) diff --git a/go.mod b/go.mod index 9e66051..183661a 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/traefik/mocktail -go 1.23.0 +go 1.24 require ( github.com/ettle/strcase v0.2.0 diff --git a/mocktail.go b/mocktail.go index 8370945..e45bb13 100644 --- a/mocktail.go +++ b/mocktail.go @@ -4,6 +4,7 @@ package main import ( "bufio" "bytes" + "context" "flag" "fmt" "go/format" @@ -42,7 +43,9 @@ type InterfaceDesc struct { } func main() { - info, err := getModuleInfo(os.Getenv("MOCKTAIL_TEST_PATH")) + ctx := context.Background() + + info, err := getModuleInfo(ctx, os.Getenv("MOCKTAIL_TEST_PATH")) if err != nil { log.Fatal("get module path", err) } diff --git a/mocktail_test.go b/mocktail_test.go index c6968bc..b99445f 100644 --- a/mocktail_test.go +++ b/mocktail_test.go @@ -29,7 +29,7 @@ func TestMocktail(t *testing.T) { t.Setenv("MOCKTAIL_TEST_PATH", filepath.Join(testRoot, entry.Name())) - output, err := exec.Command("go", "run", ".").CombinedOutput() + output, err := exec.CommandContext(t.Context(), "go", "run", ".").CombinedOutput() t.Log(string(output)) require.NoError(t, err) @@ -61,7 +61,7 @@ func TestMocktail(t *testing.T) { continue } - cmd := exec.Command("go", "test", "-v", "./...") + cmd := exec.CommandContext(t.Context(), "go", "test", "-v", "./...") cmd.Dir = filepath.Join(testRoot, entry.Name()) output, err := cmd.CombinedOutput() @@ -88,7 +88,7 @@ func TestMocktail_exported(t *testing.T) { t.Setenv("MOCKTAIL_TEST_PATH", filepath.Join(testRoot, entry.Name())) - output, err := exec.Command("go", "run", ".", "-e").CombinedOutput() + output, err := exec.CommandContext(t.Context(), "go", "run", ".", "-e").CombinedOutput() t.Log(string(output)) require.NoError(t, err) @@ -120,7 +120,7 @@ func TestMocktail_exported(t *testing.T) { continue } - cmd := exec.Command("go", "test", "-v", "./...") + cmd := exec.CommandContext(t.Context(), "go", "test", "-v", "./...") cmd.Dir = filepath.Join(testRoot, entry.Name()) output, err := cmd.CombinedOutput() diff --git a/mod.go b/mod.go index 11f58b3..e642f5c 100644 --- a/mod.go +++ b/mod.go @@ -2,6 +2,7 @@ package main import ( "bytes" + "context" "encoding/json" "errors" "fmt" @@ -16,9 +17,9 @@ type modInfo struct { Main bool `json:"Main"` } -func getModuleInfo(dir string) (modInfo, error) { +func getModuleInfo(ctx context.Context, dir string) (modInfo, error) { // https://github.com/golang/go/issues/44753#issuecomment-790089020 - cmd := exec.Command("go", "list", "-m", "-json") + cmd := exec.CommandContext(ctx, "go", "list", "-m", "-json") if dir != "" { cmd.Dir = dir }