Skip to content

Commit 7898ab5

Browse files
ldezpolyfloyd
authored andcommitted
fix: exposed AllowPair fields
1 parent 29e5d8c commit 7898ab5

File tree

3 files changed

+105
-96
lines changed

3 files changed

+105
-96
lines changed

errorlint/allowed.go

+67-67
Original file line numberDiff line numberDiff line change
@@ -8,101 +8,101 @@ import (
88
)
99

1010
type AllowPair struct {
11-
err string
12-
fun string
11+
Err string
12+
Fun string
1313
}
1414

1515
var allowedErrors = []AllowPair{
1616
// pkg/archive/tar
17-
{err: "io.EOF", fun: "(*archive/tar.Reader).Next"},
18-
{err: "io.EOF", fun: "(*archive/tar.Reader).Read"},
17+
{Err: "io.EOF", Fun: "(*archive/tar.Reader).Next"},
18+
{Err: "io.EOF", Fun: "(*archive/tar.Reader).Read"},
1919
// pkg/bufio
20-
{err: "io.EOF", fun: "(*bufio.Reader).Discard"},
21-
{err: "io.EOF", fun: "(*bufio.Reader).Peek"},
22-
{err: "io.EOF", fun: "(*bufio.Reader).Read"},
23-
{err: "io.EOF", fun: "(*bufio.Reader).ReadByte"},
24-
{err: "io.EOF", fun: "(*bufio.Reader).ReadBytes"},
25-
{err: "io.EOF", fun: "(*bufio.Reader).ReadLine"},
26-
{err: "io.EOF", fun: "(*bufio.Reader).ReadSlice"},
27-
{err: "io.EOF", fun: "(*bufio.Reader).ReadString"},
28-
{err: "io.EOF", fun: "(*bufio.Scanner).Scan"},
20+
{Err: "io.EOF", Fun: "(*bufio.Reader).Discard"},
21+
{Err: "io.EOF", Fun: "(*bufio.Reader).Peek"},
22+
{Err: "io.EOF", Fun: "(*bufio.Reader).Read"},
23+
{Err: "io.EOF", Fun: "(*bufio.Reader).ReadByte"},
24+
{Err: "io.EOF", Fun: "(*bufio.Reader).ReadBytes"},
25+
{Err: "io.EOF", Fun: "(*bufio.Reader).ReadLine"},
26+
{Err: "io.EOF", Fun: "(*bufio.Reader).ReadSlice"},
27+
{Err: "io.EOF", Fun: "(*bufio.Reader).ReadString"},
28+
{Err: "io.EOF", Fun: "(*bufio.Scanner).Scan"},
2929
// pkg/bytes
30-
{err: "io.EOF", fun: "(*bytes.Buffer).Read"},
31-
{err: "io.EOF", fun: "(*bytes.Buffer).ReadByte"},
32-
{err: "io.EOF", fun: "(*bytes.Buffer).ReadBytes"},
33-
{err: "io.EOF", fun: "(*bytes.Buffer).ReadRune"},
34-
{err: "io.EOF", fun: "(*bytes.Buffer).ReadString"},
35-
{err: "io.EOF", fun: "(*bytes.Reader).Read"},
36-
{err: "io.EOF", fun: "(*bytes.Reader).ReadAt"},
37-
{err: "io.EOF", fun: "(*bytes.Reader).ReadByte"},
38-
{err: "io.EOF", fun: "(*bytes.Reader).ReadRune"},
39-
{err: "io.EOF", fun: "(*bytes.Reader).ReadString"},
30+
{Err: "io.EOF", Fun: "(*bytes.Buffer).Read"},
31+
{Err: "io.EOF", Fun: "(*bytes.Buffer).ReadByte"},
32+
{Err: "io.EOF", Fun: "(*bytes.Buffer).ReadBytes"},
33+
{Err: "io.EOF", Fun: "(*bytes.Buffer).ReadRune"},
34+
{Err: "io.EOF", Fun: "(*bytes.Buffer).ReadString"},
35+
{Err: "io.EOF", Fun: "(*bytes.Reader).Read"},
36+
{Err: "io.EOF", Fun: "(*bytes.Reader).ReadAt"},
37+
{Err: "io.EOF", Fun: "(*bytes.Reader).ReadByte"},
38+
{Err: "io.EOF", Fun: "(*bytes.Reader).ReadRune"},
39+
{Err: "io.EOF", Fun: "(*bytes.Reader).ReadString"},
4040
// pkg/database/sql
41-
{err: "database/sql.ErrNoRows", fun: "(*database/sql.Row).Scan"},
41+
{Err: "database/sql.ErrNoRows", Fun: "(*database/sql.Row).Scan"},
4242
// pkg/debug/elf
43-
{err: "io.EOF", fun: "debug/elf.Open"},
44-
{err: "io.EOF", fun: "debug/elf.NewFile"},
43+
{Err: "io.EOF", Fun: "debug/elf.Open"},
44+
{Err: "io.EOF", Fun: "debug/elf.NewFile"},
4545
// pkg/io
46-
{err: "io.EOF", fun: "(io.ReadCloser).Read"},
47-
{err: "io.EOF", fun: "(io.Reader).Read"},
48-
{err: "io.EOF", fun: "(io.ReaderAt).ReadAt"},
49-
{err: "io.EOF", fun: "(*io.LimitedReader).Read"},
50-
{err: "io.EOF", fun: "(*io.SectionReader).Read"},
51-
{err: "io.EOF", fun: "(*io.SectionReader).ReadAt"},
52-
{err: "io.ErrClosedPipe", fun: "(*io.PipeWriter).Write"},
53-
{err: "io.ErrShortBuffer", fun: "io.ReadAtLeast"},
54-
{err: "io.ErrUnexpectedEOF", fun: "io.ReadAtLeast"},
55-
{err: "io.EOF", fun: "io.ReadFull"},
56-
{err: "io.ErrUnexpectedEOF", fun: "io.ReadFull"},
46+
{Err: "io.EOF", Fun: "(io.ReadCloser).Read"},
47+
{Err: "io.EOF", Fun: "(io.Reader).Read"},
48+
{Err: "io.EOF", Fun: "(io.ReaderAt).ReadAt"},
49+
{Err: "io.EOF", Fun: "(*io.LimitedReader).Read"},
50+
{Err: "io.EOF", Fun: "(*io.SectionReader).Read"},
51+
{Err: "io.EOF", Fun: "(*io.SectionReader).ReadAt"},
52+
{Err: "io.ErrClosedPipe", Fun: "(*io.PipeWriter).Write"},
53+
{Err: "io.ErrShortBuffer", Fun: "io.ReadAtLeast"},
54+
{Err: "io.ErrUnexpectedEOF", Fun: "io.ReadAtLeast"},
55+
{Err: "io.EOF", Fun: "io.ReadFull"},
56+
{Err: "io.ErrUnexpectedEOF", Fun: "io.ReadFull"},
5757
// pkg/net/http
58-
{err: "net/http.ErrServerClosed", fun: "(*net/http.Server).ListenAndServe"},
59-
{err: "net/http.ErrServerClosed", fun: "(*net/http.Server).ListenAndServeTLS"},
60-
{err: "net/http.ErrServerClosed", fun: "(*net/http.Server).Serve"},
61-
{err: "net/http.ErrServerClosed", fun: "(*net/http.Server).ServeTLS"},
62-
{err: "net/http.ErrServerClosed", fun: "net/http.ListenAndServe"},
63-
{err: "net/http.ErrServerClosed", fun: "net/http.ListenAndServeTLS"},
64-
{err: "net/http.ErrServerClosed", fun: "net/http.Serve"},
65-
{err: "net/http.ErrServerClosed", fun: "net/http.ServeTLS"},
58+
{Err: "net/http.ErrServerClosed", Fun: "(*net/http.Server).ListenAndServe"},
59+
{Err: "net/http.ErrServerClosed", Fun: "(*net/http.Server).ListenAndServeTLS"},
60+
{Err: "net/http.ErrServerClosed", Fun: "(*net/http.Server).Serve"},
61+
{Err: "net/http.ErrServerClosed", Fun: "(*net/http.Server).ServeTLS"},
62+
{Err: "net/http.ErrServerClosed", Fun: "net/http.ListenAndServe"},
63+
{Err: "net/http.ErrServerClosed", Fun: "net/http.ListenAndServeTLS"},
64+
{Err: "net/http.ErrServerClosed", Fun: "net/http.Serve"},
65+
{Err: "net/http.ErrServerClosed", Fun: "net/http.ServeTLS"},
6666
// pkg/os
67-
{err: "io.EOF", fun: "(*os.File).Read"},
68-
{err: "io.EOF", fun: "(*os.File).ReadAt"},
69-
{err: "io.EOF", fun: "(*os.File).ReadDir"},
70-
{err: "io.EOF", fun: "(*os.File).Readdir"},
71-
{err: "io.EOF", fun: "(*os.File).Readdirnames"},
67+
{Err: "io.EOF", Fun: "(*os.File).Read"},
68+
{Err: "io.EOF", Fun: "(*os.File).ReadAt"},
69+
{Err: "io.EOF", Fun: "(*os.File).ReadDir"},
70+
{Err: "io.EOF", Fun: "(*os.File).Readdir"},
71+
{Err: "io.EOF", Fun: "(*os.File).Readdirnames"},
7272
// pkg/strings
73-
{err: "io.EOF", fun: "(*strings.Reader).Read"},
74-
{err: "io.EOF", fun: "(*strings.Reader).ReadAt"},
75-
{err: "io.EOF", fun: "(*strings.Reader).ReadByte"},
76-
{err: "io.EOF", fun: "(*strings.Reader).ReadRune"},
73+
{Err: "io.EOF", Fun: "(*strings.Reader).Read"},
74+
{Err: "io.EOF", Fun: "(*strings.Reader).ReadAt"},
75+
{Err: "io.EOF", Fun: "(*strings.Reader).ReadByte"},
76+
{Err: "io.EOF", Fun: "(*strings.Reader).ReadRune"},
7777
// pkg/context
78-
{err: "context.DeadlineExceeded", fun: "(context.Context).Err"},
79-
{err: "context.Canceled", fun: "(context.Context).Err"},
78+
{Err: "context.DeadlineExceeded", Fun: "(context.Context).Err"},
79+
{Err: "context.Canceled", Fun: "(context.Context).Err"},
8080
// pkg/encoding/json
81-
{err: "io.EOF", fun: "(*encoding/json.Decoder).Decode"},
81+
{Err: "io.EOF", Fun: "(*encoding/json.Decoder).Decode"},
8282
// pkg/encoding/csv
83-
{err: "io.EOF", fun: "(*encoding/csv.Reader).Read"},
83+
{Err: "io.EOF", Fun: "(*encoding/csv.Reader).Read"},
8484
// pkg/mime/multipart
85-
{err: "io.EOF", fun: "(*mime/multipart.Reader).NextPart"},
86-
{err: "io.EOF", fun: "(*mime/multipart.Reader).NextRawPart"},
87-
{err: "mime/multipart.ErrMessageTooLarge", fun: "(*mime/multipart.Reader).ReadForm"},
85+
{Err: "io.EOF", Fun: "(*mime/multipart.Reader).NextPart"},
86+
{Err: "io.EOF", Fun: "(*mime/multipart.Reader).NextRawPart"},
87+
{Err: "mime/multipart.ErrMessageTooLarge", Fun: "(*mime/multipart.Reader).ReadForm"},
8888
}
8989

9090
var allowedErrorsMap = make(map[string]map[string]struct{})
9191

9292
func allowedMapAppend(ap []AllowPair) {
9393
for _, pair := range ap {
94-
if _, ok := allowedErrorsMap[pair.err]; !ok {
95-
allowedErrorsMap[pair.err] = make(map[string]struct{})
94+
if _, ok := allowedErrorsMap[pair.Err]; !ok {
95+
allowedErrorsMap[pair.Err] = make(map[string]struct{})
9696
}
97-
allowedErrorsMap[pair.err][pair.fun] = struct{}{}
97+
allowedErrorsMap[pair.Err][pair.Fun] = struct{}{}
9898
}
9999
}
100100

101101
var allowedErrorWildcards = []AllowPair{
102102
// pkg/syscall
103-
{err: "syscall.E", fun: "syscall."},
103+
{Err: "syscall.E", Fun: "syscall."},
104104
// golang.org/x/sys/unix
105-
{err: "golang.org/x/sys/unix.E", fun: "golang.org/x/sys/unix."},
105+
{Err: "golang.org/x/sys/unix.E", Fun: "golang.org/x/sys/unix."},
106106
}
107107

108108
func allowedWildcardAppend(ap []AllowPair) {
@@ -117,7 +117,7 @@ func isAllowedErrAndFunc(err, fun string) bool {
117117
}
118118

119119
for _, allow := range allowedErrorWildcards {
120-
if strings.HasPrefix(fun, allow.fun) && strings.HasPrefix(err, allow.err) {
120+
if strings.HasPrefix(fun, allow.Fun) && strings.HasPrefix(err, allow.Err) {
121121
return true
122122
}
123123
}

errorlint/analysis_test.go

-29
Original file line numberDiff line numberDiff line change
@@ -39,35 +39,6 @@ func TestAllowedComparisons(t *testing.T) {
3939
analysistest.Run(t, analysistest.TestData(), analyzer, "allowed")
4040
}
4141

42-
func TestOptions(t *testing.T) {
43-
testCases := []struct {
44-
desc string
45-
opt Option
46-
pattern string
47-
}{
48-
{
49-
desc: "WithAllowedErrors",
50-
opt: WithAllowedErrors([]AllowPair{
51-
{err: "io.EOF", fun: "example.com/pkg.Read"},
52-
}),
53-
pattern: "options/withAllowedErrors",
54-
},
55-
{
56-
desc: "WithAllowedWildcard",
57-
opt: WithAllowedWildcard([]AllowPair{
58-
{err: "example.com/pkg.ErrMagic", fun: "example.com/pkg.Magic"},
59-
}),
60-
pattern: "options/withAllowedWildcard",
61-
},
62-
}
63-
for _, tt := range testCases {
64-
t.Run(tt.desc, func(t *testing.T) {
65-
analyzer := NewAnalyzer(tt.opt)
66-
analysistest.Run(t, analysistest.TestData(), analyzer, tt.pattern)
67-
})
68-
}
69-
}
70-
7142
func TestIssueRegressions(t *testing.T) {
7243
analyzer := NewAnalyzer()
7344
analysistest.Run(t, analysistest.TestData(), analyzer, "issues")

errorlint/options_test.go

+38
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package errorlint_test
2+
3+
import (
4+
"testing"
5+
6+
"github.com/polyfloyd/go-errorlint/errorlint"
7+
"golang.org/x/tools/go/analysis/analysistest"
8+
)
9+
10+
func TestOption(t *testing.T) {
11+
testCases := []struct {
12+
desc string
13+
opt errorlint.Option
14+
pattern string
15+
}{
16+
{
17+
desc: "WithAllowedErrors",
18+
opt: errorlint.WithAllowedErrors([]errorlint.AllowPair{
19+
{Err: "io.EOF", Fun: "example.com/pkg.Read"},
20+
}),
21+
pattern: "options/withAllowedErrors",
22+
},
23+
{
24+
desc: "WithAllowedWildcard",
25+
opt: errorlint.WithAllowedWildcard([]errorlint.AllowPair{
26+
{Err: "example.com/pkg.ErrMagic", Fun: "example.com/pkg.Magic"},
27+
}),
28+
pattern: "options/withAllowedWildcard",
29+
},
30+
}
31+
32+
for _, tt := range testCases {
33+
t.Run(tt.desc, func(t *testing.T) {
34+
analyzer := errorlint.NewAnalyzer(tt.opt)
35+
analysistest.Run(t, analysistest.TestData(), analyzer, tt.pattern)
36+
})
37+
}
38+
}

0 commit comments

Comments
 (0)