Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Move errcheck package out of internal #185

Merged
merged 25 commits into from Dec 10, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
ea6ea2f
Move errcheck package out of internal
echlebek Aug 2, 2020
ee8ff30
Merge branch 'master' into publish-api
echlebek Aug 4, 2020
b03026b
Fix up the docs a bit
echlebek Aug 4, 2020
5665fc9
CheckPackage function
Aug 18, 2020
b4ad18c
Start factoring out exclusion flags into separate struct.
dtcaciuc Aug 19, 2020
f1024b1
Move Checker.exclude to Checker.Exclusions.Symbols
dtcaciuc Aug 19, 2020
b694f8e
Move Checker.Blank and Checker.Asserts to Exclusions
dtcaciuc Aug 19, 2020
5c4c914
Move Checker.Ignore to Exclusions.Packages, remove NewChecker
dtcaciuc Aug 19, 2020
f394fab
Clarify -ignore deprecation message
dtcaciuc Aug 19, 2020
7c04f7d
Merge pull request #188 from SVilgelm/publish-api
echlebek Aug 31, 2020
3c3d64d
Merge remote-tracking branch 'origin/publish-api' into exclusions
echlebek Aug 31, 2020
181d1bd
Simplify vendored package resolution.
dtcaciuc Oct 10, 2020
672a183
Merge pull request #1 from dtcaciuc/rm-mod-check
dtcaciuc Oct 10, 2020
bd31643
Restore legacy ignore functionality; fix docstrings
dtcaciuc Oct 10, 2020
bf59cbd
Clean up comments; add future improvement TODO
dtcaciuc Oct 10, 2020
720fbcb
Merge pull request #189 from dtcaciuc/exclusions
echlebek Oct 23, 2020
677f1d6
Remove CheckPaths
echlebek Oct 25, 2020
8d25d8e
Refactor main.checkPaths a bit
echlebek Oct 25, 2020
beb76a6
Remove mutex, Errors->UncheckedErrors
echlebek Oct 25, 2020
53abe15
Implement locking in main
echlebek Oct 25, 2020
cfa64d0
Remove sort.Interface from Result
echlebek Nov 10, 2020
c4c6bdd
Don't mutate Result on Unique()
echlebek Nov 10, 2020
c1c14fd
Merge pull request #193 from kisielk/no-check-path
kisielk Nov 13, 2020
6afc191
Clarify Result docs
echlebek Dec 10, 2020
97c82e3
Make API less pointery. Get rid of error interface.
echlebek Dec 10, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
File renamed without changes.
311 changes: 144 additions & 167 deletions internal/errcheck/errcheck.go → errcheck/errcheck.go

Large diffs are not rendered by default.

202 changes: 111 additions & 91 deletions internal/errcheck/errcheck_test.go → errcheck/errcheck_test.go
Expand Up @@ -6,6 +6,7 @@ import (
"os"
"path"
"regexp"
"strings"
"testing"

"golang.org/x/tools/go/packages"
Expand Down Expand Up @@ -165,35 +166,40 @@ package custom
},
}

for i, currCase := range cases {
checker := NewChecker()
checker.Tags = currCase.tags
for _, test := range cases {
testName := strings.Join(test.tags, ",")
t.Run(testName, func(t *testing.T) {
var checker Checker
checker.Tags = test.tags

loadPackages = func(cfg *packages.Config, paths ...string) ([]*packages.Package, error) {
cfg.Env = append(os.Environ(),
"GOPATH="+tmpGopath)
cfg.Dir = testBuildTagsDir
pkgs, err := packages.Load(cfg, paths...)
return pkgs, err
}
err := checker.CheckPackages("github.com/testbuildtags")

if currCase.numExpectedErrs == 0 {
loadPackages = func(cfg *packages.Config, paths ...string) ([]*packages.Package, error) {
cfg.Env = append(os.Environ(),
"GOPATH="+tmpGopath)
cfg.Dir = testBuildTagsDir
pkgs, err := packages.Load(cfg, paths...)
return pkgs, err
}
packages, err := checker.LoadPackages("github.com/testbuildtags")
if err != nil {
t.Errorf("Case %d: expected no errors, but got: %v", i, err)
t.Fatal(err)
}
continue
}

uerr, ok := err.(*UncheckedErrors)
if !ok {
t.Errorf("Case %d: wrong error type returned: %v", i, err)
continue
}
uerr := &Result{}
for _, pkg := range packages {
uerr.Append(checker.CheckPackage(pkg))
}
*uerr = uerr.Unique()
if test.numExpectedErrs == 0 {
if len(uerr.UncheckedErrors) != 0 {
t.Errorf("expected no errors, but got: %v", uerr)
}
return
}

if currCase.numExpectedErrs != len(uerr.Errors) {
t.Errorf("Case %d:\nExpected: %d errors\nActual: %d errors", i, currCase.numExpectedErrs, len(uerr.Errors))
}
if test.numExpectedErrs != len(uerr.UncheckedErrors) {
t.Errorf("expected: %d errors\nactual: %d errors", test.numExpectedErrs, len(uerr.UncheckedErrors))
}
})
}
}

Expand Down Expand Up @@ -271,35 +277,39 @@ require github.com/testlog v0.0.0
},
}

for i, currCase := range cases {
checker := NewChecker()
checker.Ignore = currCase.ignore
loadPackages = func(cfg *packages.Config, paths ...string) ([]*packages.Package, error) {
cfg.Env = append(os.Environ(),
"GOPATH="+tmpGopath,
"GOFLAGS=-mod=vendor")
cfg.Dir = testVendorDir
pkgs, err := packages.Load(cfg, paths...)
return pkgs, err
}
err := checker.CheckPackages("github.com/testvendor")

if currCase.numExpectedErrs == 0 {
for i, test := range cases {
t.Run(fmt.Sprintf("%d", i), func(t *testing.T) {
var checker Checker
checker.Exclusions.SymbolRegexpsByPackage = test.ignore
loadPackages = func(cfg *packages.Config, paths ...string) ([]*packages.Package, error) {
cfg.Env = append(os.Environ(),
"GOPATH="+tmpGopath,
"GOFLAGS=-mod=vendor")
cfg.Dir = testVendorDir
pkgs, err := packages.Load(cfg, paths...)
return pkgs, err
}
packages, err := checker.LoadPackages("github.com/testvendor")
if err != nil {
t.Errorf("Case %d: expected no errors, but got: %v", i, err)
t.Fatal(err)
}
continue
}
uerr := &Result{}
for _, pkg := range packages {
uerr.Append(checker.CheckPackage(pkg))
}
*uerr = uerr.Unique()

uerr, ok := err.(*UncheckedErrors)
if !ok {
t.Errorf("Case %d: wrong error type returned: %v", i, err)
continue
}
if test.numExpectedErrs == 0 {
if len(uerr.UncheckedErrors) != 0 {
t.Errorf("expected no errors, but got: %v", uerr)
}
return
}

if currCase.numExpectedErrs != len(uerr.Errors) {
t.Errorf("Case %d:\nExpected: %d errors\nActual: %d errors", i, currCase.numExpectedErrs, len(uerr.Errors))
}
if test.numExpectedErrs != len(uerr.UncheckedErrors) {
t.Errorf("expected: %d errors\nactual: %d errors", test.numExpectedErrs, len(uerr.UncheckedErrors))
}
})
}
}

Expand Down Expand Up @@ -367,35 +377,39 @@ require github.com/testlog v0.0.0
},
}

for i, currCase := range cases {
checker := NewChecker()
checker.WithoutGeneratedCode = currCase.withoutGeneratedCode
loadPackages = func(cfg *packages.Config, paths ...string) ([]*packages.Package, error) {
cfg.Env = append(os.Environ(),
"GOPATH="+tmpGopath,
"GOFLAGS=-mod=vendor")
cfg.Dir = testVendorDir
pkgs, err := packages.Load(cfg, paths...)
return pkgs, err
}
err := checker.CheckPackages(path.Join("github.com/testvendor"))

if currCase.numExpectedErrs == 0 {
for i, test := range cases {
t.Run(fmt.Sprintf("%d", i), func(t *testing.T) {
var checker Checker
checker.Exclusions.GeneratedFiles = test.withoutGeneratedCode
loadPackages = func(cfg *packages.Config, paths ...string) ([]*packages.Package, error) {
cfg.Env = append(os.Environ(),
"GOPATH="+tmpGopath,
"GOFLAGS=-mod=vendor")
cfg.Dir = testVendorDir
pkgs, err := packages.Load(cfg, paths...)
return pkgs, err
}
packages, err := checker.LoadPackages("github.com/testvendor")
if err != nil {
t.Errorf("Case %d: expected no errors, but got: %v", i, err)
t.Fatal(err)
}
continue
}
uerr := Result{}
for _, pkg := range packages {
uerr.Append(checker.CheckPackage(pkg))
}
uerr = uerr.Unique()

uerr, ok := err.(*UncheckedErrors)
if !ok {
t.Errorf("Case %d: wrong error type returned: %v", i, err)
continue
}
if test.numExpectedErrs == 0 {
if len(uerr.UncheckedErrors) != 0 {
t.Errorf("expected no errors, but got: %v", uerr)
}
return
}

if currCase.numExpectedErrs != len(uerr.Errors) {
t.Errorf("Case %d:\nExpected: %d errors\nActual: %d errors", i, currCase.numExpectedErrs, len(uerr.Errors))
}
if test.numExpectedErrs != len(uerr.UncheckedErrors) {
t.Errorf("expected: %d errors\nactual: %d errors", test.numExpectedErrs, len(uerr.UncheckedErrors))
}
})
}
}

Expand All @@ -404,19 +418,18 @@ func test(t *testing.T, f flags) {
asserts bool = f&CheckAsserts != 0
blank bool = f&CheckBlank != 0
)
checker := NewChecker()
checker.Asserts = asserts
checker.Blank = blank
checker.AddExcludes(DefaultExcludes)
checker.AddExcludes([]string{
var checker Checker
checker.Exclusions.TypeAssertions = !asserts
checker.Exclusions.BlankAssignments = !blank
checker.Exclusions.Symbols = append(checker.Exclusions.Symbols, DefaultExcludedSymbols...)
checker.Exclusions.Symbols = append(checker.Exclusions.Symbols,
fmt.Sprintf("(%s.ErrorMakerInterface).MakeNilError", testPackage),
})
err := checker.CheckPackages(testPackage)
uerr, ok := err.(*UncheckedErrors)
if !ok {
t.Fatalf("wrong error type returned: %v", err)
)
packages, err := checker.LoadPackages(testPackage)
if err != nil {
t.Fatal(err)
}

uerr := Result{}
numErrors := len(uncheckedMarkers)
if blank {
numErrors += len(blankMarkers)
Expand All @@ -425,11 +438,18 @@ func test(t *testing.T, f flags) {
numErrors += len(assertMarkers)
}

if len(uerr.Errors) != numErrors {
t.Errorf("got %d errors, want %d", len(uerr.Errors), numErrors)
for _, pkg := range packages {
err := checker.CheckPackage(pkg)
uerr.Append(err)
}

uerr = uerr.Unique()

if len(uerr.UncheckedErrors) != numErrors {
t.Errorf("got %d errors, want %d", len(uerr.UncheckedErrors), numErrors)
unchecked_loop:
for k := range uncheckedMarkers {
for _, e := range uerr.Errors {
for _, e := range uerr.UncheckedErrors {
if newMarker(e) == k {
continue unchecked_loop
}
Expand All @@ -439,7 +459,7 @@ func test(t *testing.T, f flags) {
if blank {
blank_loop:
for k := range blankMarkers {
for _, e := range uerr.Errors {
for _, e := range uerr.UncheckedErrors {
if newMarker(e) == k {
continue blank_loop
}
Expand All @@ -450,7 +470,7 @@ func test(t *testing.T, f flags) {
if asserts {
assert_loop:
for k := range assertMarkers {
for _, e := range uerr.Errors {
for _, e := range uerr.UncheckedErrors {
if newMarker(e) == k {
continue assert_loop
}
Expand All @@ -460,7 +480,7 @@ func test(t *testing.T, f flags) {
}
}

for i, err := range uerr.Errors {
for i, err := range uerr.UncheckedErrors {
m := marker{err.Pos.Filename, err.Pos.Line}
if !uncheckedMarkers[m] && !blankMarkers[m] && !assertMarkers[m] {
t.Errorf("%d: unexpected error: %v", i, err)
Expand Down
File renamed without changes.
File renamed without changes.