Skip to content

Commit 17d24eb

Browse files
authored
nlreturn: add block-size option (#2237)
1 parent 3229262 commit 17d24eb

File tree

8 files changed

+57
-8
lines changed

8 files changed

+57
-8
lines changed

.golangci.example.yml

+5
Original file line numberDiff line numberDiff line change
@@ -506,6 +506,11 @@ linters-settings:
506506
- map
507507
- chan
508508

509+
nlreturn:
510+
# size of the block (including return statement that is still "OK")
511+
# so no return split required.
512+
block-size: 1
513+
509514
nolintlint:
510515
# Enable to ensure that nolint directives are all used. Default is true.
511516
allow-unused: false

go.mod

+1-1
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ require (
7474
github.com/spf13/cobra v1.2.1
7575
github.com/spf13/pflag v1.0.5
7676
github.com/spf13/viper v1.8.1
77-
github.com/ssgreg/nlreturn/v2 v2.1.0
77+
github.com/ssgreg/nlreturn/v2 v2.2.1
7878
github.com/stretchr/testify v1.7.0
7979
github.com/tdakkota/asciicheck v0.0.0-20200416200610-e657995f937b
8080
github.com/tetafro/godot v1.4.10

go.sum

+4
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/config/linters_settings.go

+5
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,7 @@ type LintersSettings struct {
119119
Nakedret NakedretSettings
120120
Nestif NestifSettings
121121
NilNil NilNilSettings
122+
Nlreturn NlreturnSettings
122123
NoLintLint NoLintLintSettings
123124
Prealloc PreallocSettings
124125
Predeclared PredeclaredSettings
@@ -365,6 +366,10 @@ type NilNilSettings struct {
365366
CheckedTypes []string `mapstructure:"checked-types"`
366367
}
367368

369+
type NlreturnSettings struct {
370+
BlockSize int `mapstructure:"block-size"`
371+
}
372+
368373
type NoLintLintSettings struct {
369374
RequireExplanation bool `mapstructure:"require-explanation"`
370375
AllowLeadingSpace bool `mapstructure:"allow-leading-space"`

pkg/golinters/nlreturn.go

+14-6
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

+3-1
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,7 @@ func (m Manager) GetAllSupportedLinterConfigs() []*linter.Config {
120120
var thelperCfg *config.ThelperSettings
121121
var unusedCfg *config.StaticCheckSettings
122122
var wrapcheckCfg *config.WrapcheckSettings
123+
var nlreturnCfg *config.NlreturnSettings
123124

124125
if m.cfg != nil {
125126
cyclopCfg = &m.cfg.LintersSettings.Cyclop
@@ -143,6 +144,7 @@ func (m Manager) GetAllSupportedLinterConfigs() []*linter.Config {
143144
thelperCfg = &m.cfg.LintersSettings.Thelper
144145
unusedCfg = &m.cfg.LintersSettings.Unused
145146
wrapcheckCfg = &m.cfg.LintersSettings.Wrapcheck
147+
nlreturnCfg = &m.cfg.LintersSettings.Nlreturn
146148
}
147149

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

test/testdata/configs/nlreturn.yml

+3
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

+22
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)