diff --git a/pkg/exitcodes/exitcodes.go b/pkg/exitcodes/exitcodes.go index 83331dbe7b48..3fb562f223b9 100644 --- a/pkg/exitcodes/exitcodes.go +++ b/pkg/exitcodes/exitcodes.go @@ -1,5 +1,9 @@ package exitcodes +import ( + "fmt" +) + const ( Success = iota IssuesFound @@ -9,17 +13,24 @@ const ( NoGoFiles NoConfigFileDetected ErrorWasLogged + PackagesLoadingFailure ) type ExitError struct { + Inner error Message string Code int } func (e ExitError) Error() string { + if e.Inner != nil { + return fmt.Sprintf("%s, %s", e.Message, e.Inner.Error()) + } return e.Message } +func (e ExitError) Unwrap() error { return e.Inner } + var ( ErrNoGoFiles = &ExitError{ Message: "no go files to analyze", diff --git a/pkg/lint/package.go b/pkg/lint/package.go index c314166cae37..13c340a7e291 100644 --- a/pkg/lint/package.go +++ b/pkg/lint/package.go @@ -84,7 +84,11 @@ func (l *PackageLoader) loadPackages(ctx context.Context, loadMode packages.Load pkgs, err := packages.Load(conf, args...) if err != nil { - return nil, fmt.Errorf("failed to load with go/packages: %w", err) + return nil, &exitcodes.ExitError{ + Inner: err, + Message: "failed to load with go/packages:", + Code: exitcodes.PackagesLoadingFailure, + } } if loadMode&packages.NeedSyntax == 0 {