Skip to content

Commit 4f5e03d

Browse files
committed
update: nlreturn
adds configuration `block-size` that defines size of the block (including return statement that are still "OK") so no return split required.
1 parent 2ea496f commit 4f5e03d

File tree

6 files changed

+52
-7
lines changed

6 files changed

+52
-7
lines changed

.golangci.example.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,11 @@ linters-settings:
158158
# Exclude godoc examples from forbidigo checks. Default is true.
159159
exclude_godoc_examples: false
160160

161+
nlreturn:
162+
# size of the block (including return statement that are still "OK")
163+
# so no return split required.
164+
block-size: 1
165+
161166
funlen:
162167
lines: 60
163168
statements: 40

pkg/config/linters_settings.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@ type LintersSettings struct {
118118
Misspell MisspellSettings
119119
Nakedret NakedretSettings
120120
Nestif NestifSettings
121+
Nlreturn NlreturnSettings
121122
NoLintLint NoLintLintSettings
122123
Prealloc PreallocSettings
123124
Predeclared PredeclaredSettings
@@ -360,6 +361,10 @@ type NestifSettings struct {
360361
MinComplexity int `mapstructure:"min-complexity"`
361362
}
362363

364+
type NlreturnSettings struct {
365+
BlockSize int `mapstructure:"block-size"`
366+
}
367+
363368
type NoLintLintSettings struct {
364369
RequireExplanation bool `mapstructure:"require-explanation"`
365370
AllowLeadingSpace bool `mapstructure:"allow-leading-space"`

pkg/golinters/nlreturn.go

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,24 @@ import (
44
"github.com/ssgreg/nlreturn/v2/pkg/nlreturn"
55
"golang.org/x/tools/go/analysis"
66

7+
"github.com/golangci/golangci-lint/pkg/config"
78
"github.com/golangci/golangci-lint/pkg/golinters/goanalysis"
89
)
910

10-
func NewNLReturn() *goanalysis.Linter {
11+
func NewNLReturn(settings *config.NlreturnSettings) *goanalysis.Linter {
12+
a := nlreturn.NewAnalyzer()
13+
14+
cfg := map[string]map[string]interface{}{}
15+
if settings != nil {
16+
cfg[a.Name] = map[string]interface{}{
17+
"block-size": settings.BlockSize,
18+
}
19+
}
20+
1121
return goanalysis.NewLinter(
12-
"nlreturn",
22+
a.Name,
1323
"nlreturn checks for a new line before return and branch statements to increase code clarity",
14-
[]*analysis.Analyzer{
15-
nlreturn.NewAnalyzer(),
16-
},
17-
nil,
24+
[]*analysis.Analyzer{a},
25+
cfg,
1826
).WithLoadMode(goanalysis.LoadModeSyntax)
1927
}

pkg/lint/lintersdb/manager.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,7 @@ func (m Manager) GetAllSupportedLinterConfigs() []*linter.Config {
119119
var stylecheckCfg *config.StaticCheckSettings
120120
var unusedCfg *config.StaticCheckSettings
121121
var wrapcheckCfg *config.WrapcheckSettings
122+
var nlreturnCfg *config.NlreturnSettings
122123

123124
if m.cfg != nil {
124125
govetCfg = &m.cfg.LintersSettings.Govet
@@ -141,6 +142,7 @@ func (m Manager) GetAllSupportedLinterConfigs() []*linter.Config {
141142
stylecheckCfg = &m.cfg.LintersSettings.Stylecheck
142143
unusedCfg = &m.cfg.LintersSettings.Unused
143144
wrapcheckCfg = &m.cfg.LintersSettings.Wrapcheck
145+
nlreturnCfg = &m.cfg.LintersSettings.Nlreturn
144146
}
145147

146148
const megacheckName = "megacheck"
@@ -412,7 +414,7 @@ func (m Manager) GetAllSupportedLinterConfigs() []*linter.Config {
412414
WithPresets(linter.PresetBugs, linter.PresetSQL).
413415
WithLoadForGoAnalysis().
414416
WithURL("https://github.com/ryanrolds/sqlclosecheck"),
415-
linter.NewConfig(golinters.NewNLReturn()).
417+
linter.NewConfig(golinters.NewNLReturn(nlreturnCfg)).
416418
WithSince("v1.30.0").
417419
WithPresets(linter.PresetStyle).
418420
WithURL("https://github.com/ssgreg/nlreturn"),

test/testdata/configs/nlreturn.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
linters-settings:
2+
nlreturn:
3+
block-size: 2

test/testdata/nlreturn-block-size.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
// args: -Enlreturn
2+
// config_path: testdata/configs/nlreturn.yml
3+
package testdata
4+
5+
func foo0(n int) int {
6+
if n == 1 {
7+
n2 := n * n
8+
return n2
9+
}
10+
11+
return 1
12+
}
13+
14+
func foo1(n int) int {
15+
if n == 1 {
16+
n2 := n * n
17+
n3 := n2 * n
18+
return n3 // ERROR "return with no blank line before"
19+
}
20+
21+
return 1
22+
}

0 commit comments

Comments
 (0)