Skip to content

Commit f54365b

Browse files
authored
Add noinlineerr linter (#5826)
1 parent 0bcafa0 commit f54365b

File tree

10 files changed

+249
-0
lines changed

10 files changed

+249
-0
lines changed

.golangci.next.reference.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ linters:
9191
- nilnil
9292
- nlreturn
9393
- noctx
94+
- noinlineerr
9495
- nolintlint
9596
- nonamedreturns
9697
- nosprintfhostport
@@ -200,6 +201,7 @@ linters:
200201
- nilnil
201202
- nlreturn
202203
- noctx
204+
- noinlineerr
203205
- nolintlint
204206
- nonamedreturns
205207
- nosprintfhostport

go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ require (
77
4d63.com/gochecknoglobals v0.2.2
88
github.com/4meepo/tagalign v1.4.2
99
github.com/Abirdcfly/dupword v0.1.6
10+
github.com/AlwxSin/noinlineerr v1.0.3
1011
github.com/Antonboom/errname v1.1.0
1112
github.com/Antonboom/nilnil v1.1.0
1213
github.com/Antonboom/testifylint v1.6.1

go.sum

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

jsonschema/golangci.next.jsonschema.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -794,6 +794,7 @@
794794
"nilnil",
795795
"nlreturn",
796796
"noctx",
797+
"noinlineerr",
797798
"nolintlint",
798799
"nonamedreturns",
799800
"nosprintfhostport",
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package noinlineerr
2+
3+
import (
4+
"github.com/AlwxSin/noinlineerr"
5+
6+
"github.com/golangci/golangci-lint/v2/pkg/goanalysis"
7+
)
8+
9+
func New() *goanalysis.Linter {
10+
return goanalysis.
11+
NewLinterFromAnalyzer(noinlineerr.NewAnalyzer()).
12+
WithLoadMode(goanalysis.LoadModeTypesInfo)
13+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package noinlineerr
2+
3+
import (
4+
"testing"
5+
6+
"github.com/golangci/golangci-lint/v2/test/testshared/integration"
7+
)
8+
9+
func TestFromTestdata(t *testing.T) {
10+
integration.RunTestdata(t)
11+
}
12+
13+
func TestFix(t *testing.T) {
14+
integration.RunFix(t)
15+
}
16+
17+
func TestFixPathPrefix(t *testing.T) {
18+
integration.RunFixPathPrefix(t)
19+
}
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
//golangcitest:args -Enoinlineerr
2+
//golangcitest:expected_exitcode 0
3+
package testdata
4+
5+
type MyAliasErr error
6+
7+
type MyCustomError struct{}
8+
9+
func (mc *MyCustomError) Error() string {
10+
return "error"
11+
}
12+
13+
func doSomething() error {
14+
return nil
15+
}
16+
17+
func doSmthManyArgs(a, b, c, d int) error {
18+
return nil
19+
}
20+
21+
func doSmthMultipleReturn() (bool, error) {
22+
return false, nil
23+
}
24+
25+
func doMyAliasErr() MyAliasErr {
26+
return nil
27+
}
28+
29+
func doMyCustomErr() *MyCustomError {
30+
return &MyCustomError{}
31+
}
32+
33+
func invalid() error {
34+
err := doSomething()
35+
if err != nil {
36+
return err
37+
}
38+
39+
err = doSmthManyArgs(0,
40+
0,
41+
0,
42+
0,
43+
)
44+
if err != nil {
45+
return err
46+
}
47+
48+
err = doMyAliasErr()
49+
if err != nil {
50+
return err
51+
}
52+
53+
err = doMyCustomErr()
54+
if err != nil {
55+
return err
56+
}
57+
58+
return nil
59+
}
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
//golangcitest:args -Enoinlineerr
2+
//golangcitest:expected_exitcode 0
3+
package testdata
4+
5+
type MyAliasErr error
6+
7+
type MyCustomError struct{}
8+
9+
func (mc *MyCustomError) Error() string {
10+
return "error"
11+
}
12+
13+
func doSomething() error {
14+
return nil
15+
}
16+
17+
func doSmthManyArgs(a, b, c, d int) error {
18+
return nil
19+
}
20+
21+
func doSmthMultipleReturn() (bool, error) {
22+
return false, nil
23+
}
24+
25+
func doMyAliasErr() MyAliasErr {
26+
return nil
27+
}
28+
29+
func doMyCustomErr() *MyCustomError {
30+
return &MyCustomError{}
31+
}
32+
33+
func invalid() error {
34+
err := doSomething()
35+
if err != nil {
36+
return err
37+
}
38+
39+
err = doSmthManyArgs(0,
40+
0,
41+
0,
42+
0,
43+
)
44+
if err != nil {
45+
return err
46+
}
47+
48+
err = doMyAliasErr()
49+
if err != nil {
50+
return err
51+
}
52+
53+
err = doMyCustomErr()
54+
if err != nil {
55+
return err
56+
}
57+
58+
return nil
59+
}
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
//golangcitest:args -Enoinlineerr
2+
package testdata
3+
4+
import (
5+
"fmt"
6+
"strconv"
7+
)
8+
9+
type MyAliasErr error
10+
11+
type MyCustomError struct {}
12+
13+
func (mc *MyCustomError) Error() string {
14+
return "error"
15+
}
16+
17+
func doSomething() error {
18+
return nil
19+
}
20+
21+
func doSmthManyArgs(a, b, c, d int) error {
22+
return nil
23+
}
24+
25+
func doSmthMultipleReturn() (bool, error) {
26+
return false, nil
27+
}
28+
29+
func doMyAliasErr() MyAliasErr {
30+
return nil
31+
}
32+
33+
func doMyCustomErr() *MyCustomError {
34+
return &MyCustomError{}
35+
}
36+
37+
func valid() error {
38+
err := doSomething() // ok
39+
if err != nil {
40+
return err
41+
}
42+
43+
err = doSmthManyArgs(0, 0, 0, 0) // ok
44+
if err != nil {
45+
return err
46+
}
47+
48+
_, err = doSmthMultipleReturn() // ok
49+
if err != nil {
50+
return err
51+
}
52+
53+
if ok, _ := strconv.ParseBool("1"); ok {
54+
fmt.Println("ok")
55+
}
56+
57+
return nil
58+
}
59+
60+
func invalid() error {
61+
if err := doSomething(); err != nil { // want "avoid inline error handling using `if err := ...; err != nil`; use plain assignment `err := ...`"
62+
return err
63+
}
64+
65+
if err := doSmthManyArgs(0, // want "avoid inline error handling using `if err := ...; err != nil`; use plain assignment `err := ...`"
66+
0,
67+
0,
68+
0,
69+
); err != nil {
70+
return err
71+
}
72+
73+
if _, err := doSmthMultipleReturn(); err != nil { // want "avoid inline error handling using `if err := ...; err != nil`; use plain assignment `err := ...`"
74+
_ = false
75+
return err
76+
}
77+
78+
if err := doMyAliasErr(); err != nil { // want "avoid inline error handling using `if err := ...; err != nil`; use plain assignment `err := ...`"
79+
return err
80+
}
81+
82+
if err := doMyCustomErr(); err != nil { // want "avoid inline error handling using `if err := ...; err != nil`; use plain assignment `err := ...`"
83+
return err
84+
}
85+
86+
return nil
87+
}

pkg/lint/lintersdb/builder_linter.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ import (
7979
"github.com/golangci/golangci-lint/v2/pkg/golinters/nilnil"
8080
"github.com/golangci/golangci-lint/v2/pkg/golinters/nlreturn"
8181
"github.com/golangci/golangci-lint/v2/pkg/golinters/noctx"
82+
"github.com/golangci/golangci-lint/v2/pkg/golinters/noinlineerr"
8283
"github.com/golangci/golangci-lint/v2/pkg/golinters/nolintlint"
8384
"github.com/golangci/golangci-lint/v2/pkg/golinters/nonamedreturns"
8485
"github.com/golangci/golangci-lint/v2/pkg/golinters/nosprintfhostport"
@@ -511,6 +512,11 @@ func (LinterBuilder) Build(cfg *config.Config) ([]*linter.Config, error) {
511512
WithLoadForGoAnalysis().
512513
WithURL("https://github.com/sonatard/noctx"),
513514

515+
linter.NewConfig(noinlineerr.New()).
516+
WithSince("v2.2.0").
517+
WithLoadForGoAnalysis().
518+
WithURL("https://github.com/AlwxSin/noinlineerr"),
519+
514520
linter.NewConfig(nonamedreturns.New(&cfg.Linters.Settings.NoNamedReturns)).
515521
WithSince("v1.46.0").
516522
WithLoadForGoAnalysis().

0 commit comments

Comments
 (0)