From 237e6b0a4ae3b84e6630aae95c2cf7d99ea83a20 Mon Sep 17 00:00:00 2001 From: ytnsym Date: Thu, 12 Sep 2024 17:15:47 +0900 Subject: [PATCH] add receivernamelen linter --- .golangci.next.reference.yml | 2 ++ go.mod | 1 + go.sum | 2 ++ jsonschema/golangci.next.jsonschema.json | 1 + .../receivernamelen/receivernamelen.go | 19 ++++++++++++++++++ .../receivernamelen/receivernamelen_test.go | 11 ++++++++++ .../testdata/receivernamelen.go | 20 +++++++++++++++++++ pkg/lint/lintersdb/builder_linter.go | 6 ++++++ 8 files changed, 62 insertions(+) create mode 100644 pkg/golinters/receivernamelen/receivernamelen.go create mode 100644 pkg/golinters/receivernamelen/receivernamelen_test.go create mode 100644 pkg/golinters/receivernamelen/testdata/receivernamelen.go diff --git a/.golangci.next.reference.yml b/.golangci.next.reference.yml index 4d5d5c88aad3..761e3f20c1f8 100644 --- a/.golangci.next.reference.yml +++ b/.golangci.next.reference.yml @@ -2689,6 +2689,7 @@ linters: - promlinter - protogetter - reassign + - receivernamelen - revive - rowserrcheck - sloglint @@ -2804,6 +2805,7 @@ linters: - promlinter - protogetter - reassign + - receivernamelen - revive - rowserrcheck - sloglint diff --git a/go.mod b/go.mod index 051df607ecc0..9cdad31c0fb1 100644 --- a/go.mod +++ b/go.mod @@ -120,6 +120,7 @@ require ( github.com/yagipy/maintidx v1.0.0 github.com/yeya24/promlinter v0.3.0 github.com/ykadowak/zerologlint v0.1.5 + github.com/ytnsym/receivernamelen v0.0.0-20240911094623-cb234a87d58c gitlab.com/bosi/decorder v0.4.2 go-simpler.org/musttag v0.12.2 go-simpler.org/sloglint v0.7.2 diff --git a/go.sum b/go.sum index a8b2a42c91f2..0ed2d06f92fc 100644 --- a/go.sum +++ b/go.sum @@ -571,6 +571,8 @@ github.com/yeya24/promlinter v0.3.0 h1:JVDbMp08lVCP7Y6NP3qHroGAO6z2yGKQtS5Jsjqto github.com/yeya24/promlinter v0.3.0/go.mod h1:cDfJQQYv9uYciW60QT0eeHlFodotkYZlL+YcPQN+mW4= github.com/ykadowak/zerologlint v0.1.5 h1:Gy/fMz1dFQN9JZTPjv1hxEk+sRWm05row04Yoolgdiw= github.com/ykadowak/zerologlint v0.1.5/go.mod h1:KaUskqF3e/v59oPmdq1U1DnKcuHokl2/K1U4pmIELKg= +github.com/ytnsym/receivernamelen v0.0.0-20240911094623-cb234a87d58c h1:AsS70Kik4mibMbHB7lco94iizYuCEoPwsF4FMn76KVw= +github.com/ytnsym/receivernamelen v0.0.0-20240911094623-cb234a87d58c/go.mod h1:cgnDTZbZYr2LfrEMX6Zm790TNvNVC6YgZQjS4LCKDXo= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= diff --git a/jsonschema/golangci.next.jsonschema.json b/jsonschema/golangci.next.jsonschema.json index e137b14c6d39..3531409046ca 100644 --- a/jsonschema/golangci.next.jsonschema.json +++ b/jsonschema/golangci.next.jsonschema.json @@ -388,6 +388,7 @@ "promlinter", "protogetter", "reassign", + "receivernamelen", "revive", "rowserrcheck", "scopelint", diff --git a/pkg/golinters/receivernamelen/receivernamelen.go b/pkg/golinters/receivernamelen/receivernamelen.go new file mode 100644 index 000000000000..e2d14b25a1ec --- /dev/null +++ b/pkg/golinters/receivernamelen/receivernamelen.go @@ -0,0 +1,19 @@ +package receivernamelen + +import ( + "github.com/ytnsym/receivernamelen" + "golang.org/x/tools/go/analysis" + + "github.com/golangci/golangci-lint/pkg/goanalysis" +) + +func New() *goanalysis.Linter { + a := receivernamelen.Analyzer + + return goanalysis.NewLinter( + a.Name, + a.Doc, + []*analysis.Analyzer{a}, + nil, + ).WithLoadMode(goanalysis.LoadModeSyntax) +} diff --git a/pkg/golinters/receivernamelen/receivernamelen_test.go b/pkg/golinters/receivernamelen/receivernamelen_test.go new file mode 100644 index 000000000000..665bbe2dd12c --- /dev/null +++ b/pkg/golinters/receivernamelen/receivernamelen_test.go @@ -0,0 +1,11 @@ +package receivernamelen + +import ( + "testing" + + "github.com/golangci/golangci-lint/test/testshared/integration" +) + +func TestFromTestdata(t *testing.T) { + integration.RunTestdata(t) +} diff --git a/pkg/golinters/receivernamelen/testdata/receivernamelen.go b/pkg/golinters/receivernamelen/testdata/receivernamelen.go new file mode 100644 index 000000000000..6eea3faa546b --- /dev/null +++ b/pkg/golinters/receivernamelen/testdata/receivernamelen.go @@ -0,0 +1,20 @@ +//golangcitest:args -Ereceivernamelen +package testdata + +type Example1 struct{} + +func (e *Example1) F() {} + +type Example2 struct{} + +func (ex *Example2) F() {} + +type Example3 struct{} + +func (ex3 *Example3) F() {} // want `receiver variable names must be one or two letters in length` + +type Example4 struct{} + +func (example *Example4) F() {} // want `receiver variable names must be one or two letters in length` + +func F() {} diff --git a/pkg/lint/lintersdb/builder_linter.go b/pkg/lint/lintersdb/builder_linter.go index c06cd9a038cd..3f47e2054ab9 100644 --- a/pkg/lint/lintersdb/builder_linter.go +++ b/pkg/lint/lintersdb/builder_linter.go @@ -85,6 +85,7 @@ import ( "github.com/golangci/golangci-lint/pkg/golinters/promlinter" "github.com/golangci/golangci-lint/pkg/golinters/protogetter" "github.com/golangci/golangci-lint/pkg/golinters/reassign" + "github.com/golangci/golangci-lint/pkg/golinters/receivernamelen" "github.com/golangci/golangci-lint/pkg/golinters/revive" "github.com/golangci/golangci-lint/pkg/golinters/rowserrcheck" "github.com/golangci/golangci-lint/pkg/golinters/sloglint" @@ -657,6 +658,11 @@ func (LinterBuilder) Build(cfg *config.Config) ([]*linter.Config, error) { WithLoadForGoAnalysis(). WithURL("https://github.com/curioswitch/go-reassign"), + linter.NewConfig(receivernamelen.New()). + WithSince("v1.62.0"). + WithPresets(linter.PresetStyle). + WithURL("https://github.com/ytnsym/receivernamelen"), + linter.NewConfig(revive.New(&cfg.LintersSettings.Revive)). WithSince("v1.37.0"). WithPresets(linter.PresetStyle, linter.PresetMetaLinter).