Skip to content

Commit 1467bc0

Browse files
alingseldez
andauthored
Add nilnesserr linter (#5240)
Co-authored-by: Fernandez Ludovic <[email protected]>
1 parent 8a5d479 commit 1467bc0

File tree

9 files changed

+140
-0
lines changed

9 files changed

+140
-0
lines changed

.golangci.next.reference.yml

+2
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ linters:
8181
- nakedret
8282
- nestif
8383
- nilerr
84+
- nilnesserr
8485
- nilnil
8586
- nlreturn
8687
- noctx
@@ -198,6 +199,7 @@ linters:
198199
- nakedret
199200
- nestif
200201
- nilerr
202+
- nilnesserr
201203
- nilnil
202204
- nlreturn
203205
- noctx

go.mod

+1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ require (
1919
github.com/alexkohler/nakedret/v2 v2.0.5
2020
github.com/alexkohler/prealloc v1.0.0
2121
github.com/alingse/asasalint v0.0.11
22+
github.com/alingse/nilnesserr v0.1.1
2223
github.com/ashanbrown/forbidigo v1.6.0
2324
github.com/ashanbrown/makezero v1.2.0
2425
github.com/bkielbasa/cyclop v1.2.3

go.sum

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

jsonschema/golangci.next.jsonschema.json

+1
Original file line numberDiff line numberDiff line change
@@ -397,6 +397,7 @@
397397
"nakedret",
398398
"nestif",
399399
"nilerr",
400+
"nilnesserr",
400401
"nilnil",
401402
"nlreturn",
402403
"noctx",
+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package nilnesserr
2+
3+
import (
4+
"github.com/alingse/nilnesserr"
5+
"golang.org/x/tools/go/analysis"
6+
7+
"github.com/golangci/golangci-lint/pkg/goanalysis"
8+
"github.com/golangci/golangci-lint/pkg/golinters/internal"
9+
)
10+
11+
func New() *goanalysis.Linter {
12+
a, err := nilnesserr.NewAnalyzer(nilnesserr.LinterSetting{})
13+
if err != nil {
14+
internal.LinterLogger.Fatalf("nilnesserr: create analyzer: %v", err)
15+
}
16+
17+
return goanalysis.NewLinter(
18+
a.Name,
19+
a.Doc,
20+
[]*analysis.Analyzer{a},
21+
nil,
22+
).WithLoadMode(goanalysis.LoadModeTypesInfo)
23+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package nilnesserr
2+
3+
import (
4+
"testing"
5+
6+
"github.com/golangci/golangci-lint/test/testshared/integration"
7+
)
8+
9+
func TestFromTestdata(t *testing.T) {
10+
integration.RunTestdata(t)
11+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
//golangcitest:args -Enilnesserr
2+
package testdata
3+
4+
import "fmt"
5+
6+
func do() error {
7+
return fmt.Errorf("do error")
8+
}
9+
10+
func do2() error {
11+
return fmt.Errorf("do2 error")
12+
}
13+
14+
func someCall() error {
15+
err := do()
16+
if err != nil {
17+
return err
18+
}
19+
err2 := do2()
20+
if err2 != nil {
21+
return err // want `return a nil value error after check error`
22+
}
23+
return nil
24+
}
25+
26+
func sameCall2() error {
27+
err := do()
28+
if err == nil {
29+
err2 := do2()
30+
if err2 != nil {
31+
return err // want `return a nil value error after check error`
32+
}
33+
return nil
34+
}
35+
return err
36+
37+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
//golangcitest:args -Enilnesserr
2+
package testdata
3+
4+
/*
5+
#include <stdio.h>
6+
#include <stdlib.h>
7+
8+
void myprint(char* s) {
9+
printf("%d\n", s);
10+
}
11+
*/
12+
import "C"
13+
14+
import (
15+
"fmt"
16+
"unsafe"
17+
)
18+
19+
func _() {
20+
cs := C.CString("Hello from stdio\n")
21+
C.myprint(cs)
22+
C.free(unsafe.Pointer(cs))
23+
}
24+
25+
func do() error {
26+
return fmt.Errorf("do error")
27+
}
28+
29+
func do2() error {
30+
return fmt.Errorf("do2 error")
31+
}
32+
33+
func someCall() error {
34+
err := do()
35+
if err != nil {
36+
return err
37+
}
38+
err2 := do2()
39+
if err2 != nil {
40+
return err // want `return a nil value error after check error`
41+
}
42+
return nil
43+
}
44+
45+
func sameCall2() error {
46+
err := do()
47+
if err == nil {
48+
err2 := do2()
49+
if err2 != nil {
50+
return err // want `return a nil value error after check error`
51+
}
52+
return nil
53+
}
54+
return err
55+
56+
}

pkg/lint/lintersdb/builder_linter.go

+7
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ import (
7272
"github.com/golangci/golangci-lint/pkg/golinters/nakedret"
7373
"github.com/golangci/golangci-lint/pkg/golinters/nestif"
7474
"github.com/golangci/golangci-lint/pkg/golinters/nilerr"
75+
"github.com/golangci/golangci-lint/pkg/golinters/nilnesserr"
7576
"github.com/golangci/golangci-lint/pkg/golinters/nilnil"
7677
"github.com/golangci/golangci-lint/pkg/golinters/nlreturn"
7778
"github.com/golangci/golangci-lint/pkg/golinters/noctx"
@@ -596,6 +597,12 @@ func (LinterBuilder) Build(cfg *config.Config) ([]*linter.Config, error) {
596597
WithPresets(linter.PresetBugs).
597598
WithURL("https://github.com/gostaticanalysis/nilerr"),
598599

600+
linter.NewConfig(nilnesserr.New()).
601+
WithSince("v1.63.0").
602+
WithLoadForGoAnalysis().
603+
WithPresets(linter.PresetBugs).
604+
WithURL("https://github.com/alingse/nilnesserr"),
605+
599606
linter.NewConfig(nilnil.New(&cfg.LintersSettings.NilNil)).
600607
WithSince("v1.43.0").
601608
WithPresets(linter.PresetStyle).

0 commit comments

Comments
 (0)