dev: replace pkg/errors with native error wrapping (#3604)
Co-authored-by: Fernandez Ludovic <ldez@users.noreply.github.com>
This commit is contained in:
parent
6c21f049c3
commit
b673c5c1af
2
go.mod
2
go.mod
@ -75,7 +75,6 @@ require (
|
|||||||
github.com/nishanths/exhaustive v0.9.5
|
github.com/nishanths/exhaustive v0.9.5
|
||||||
github.com/nishanths/predeclared v0.2.2
|
github.com/nishanths/predeclared v0.2.2
|
||||||
github.com/nunnatsa/ginkgolinter v0.8.1
|
github.com/nunnatsa/ginkgolinter v0.8.1
|
||||||
github.com/pkg/errors v0.9.1
|
|
||||||
github.com/polyfloyd/go-errorlint v1.1.0
|
github.com/polyfloyd/go-errorlint v1.1.0
|
||||||
github.com/quasilyte/go-ruleguard/dsl v0.3.22
|
github.com/quasilyte/go-ruleguard/dsl v0.3.22
|
||||||
github.com/ryancurrah/gomodguard v1.3.0
|
github.com/ryancurrah/gomodguard v1.3.0
|
||||||
@ -154,6 +153,7 @@ require (
|
|||||||
github.com/olekukonko/tablewriter v0.0.5 // indirect
|
github.com/olekukonko/tablewriter v0.0.5 // indirect
|
||||||
github.com/pelletier/go-toml v1.9.5 // indirect
|
github.com/pelletier/go-toml v1.9.5 // indirect
|
||||||
github.com/pelletier/go-toml/v2 v2.0.5 // indirect
|
github.com/pelletier/go-toml/v2 v2.0.5 // indirect
|
||||||
|
github.com/pkg/errors v0.9.1 // indirect
|
||||||
github.com/pmezard/go-difflib v1.0.0 // indirect
|
github.com/pmezard/go-difflib v1.0.0 // indirect
|
||||||
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect
|
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect
|
||||||
github.com/prometheus/client_golang v1.12.1 // indirect
|
github.com/prometheus/client_golang v1.12.1 // indirect
|
||||||
|
21
internal/cache/cache.go
vendored
21
internal/cache/cache.go
vendored
@ -12,6 +12,7 @@ import (
|
|||||||
"bytes"
|
"bytes"
|
||||||
"crypto/sha256"
|
"crypto/sha256"
|
||||||
"encoding/hex"
|
"encoding/hex"
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"os"
|
"os"
|
||||||
@ -20,8 +21,6 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/pkg/errors"
|
|
||||||
|
|
||||||
"github.com/golangci/golangci-lint/internal/renameio"
|
"github.com/golangci/golangci-lint/internal/renameio"
|
||||||
"github.com/golangci/golangci-lint/internal/robustio"
|
"github.com/golangci/golangci-lint/internal/robustio"
|
||||||
)
|
)
|
||||||
@ -80,7 +79,7 @@ func (c *Cache) fileName(id [HashSize]byte, key string) string {
|
|||||||
var errMissing = errors.New("cache entry not found")
|
var errMissing = errors.New("cache entry not found")
|
||||||
|
|
||||||
func IsErrMissing(err error) bool {
|
func IsErrMissing(err error) bool {
|
||||||
return errors.Cause(err) == errMissing
|
return errors.Is(err, errMissing)
|
||||||
}
|
}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@ -169,10 +168,10 @@ func (c *Cache) get(id ActionID) (Entry, error) {
|
|||||||
etime := entry[1 : 1+20]
|
etime := entry[1 : 1+20]
|
||||||
var buf [HashSize]byte
|
var buf [HashSize]byte
|
||||||
if _, err = hex.Decode(buf[:], eid); err != nil || buf != id {
|
if _, err = hex.Decode(buf[:], eid); err != nil || buf != id {
|
||||||
return failed(errors.Wrapf(err, "failed to hex decode eid data in %s", fileName))
|
return failed(fmt.Errorf("failed to hex decode eid data in %s: %w", fileName, err))
|
||||||
}
|
}
|
||||||
if _, err = hex.Decode(buf[:], eout); err != nil {
|
if _, err = hex.Decode(buf[:], eout); err != nil {
|
||||||
return failed(errors.Wrapf(err, "failed to hex decode eout data in %s", fileName))
|
return failed(fmt.Errorf("failed to hex decode eout data in %s: %w", fileName, err))
|
||||||
}
|
}
|
||||||
i := 0
|
i := 0
|
||||||
for i < len(esize) && esize[i] == ' ' {
|
for i < len(esize) && esize[i] == ' ' {
|
||||||
@ -192,7 +191,7 @@ func (c *Cache) get(id ActionID) (Entry, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if err = c.used(fileName); err != nil {
|
if err = c.used(fileName); err != nil {
|
||||||
return failed(errors.Wrapf(err, "failed to mark %s as used", fileName))
|
return failed(fmt.Errorf("failed to mark %s as used: %w", fileName, err))
|
||||||
}
|
}
|
||||||
|
|
||||||
return Entry{buf, size, time.Unix(0, tm)}, nil
|
return Entry{buf, size, time.Unix(0, tm)}, nil
|
||||||
@ -264,7 +263,7 @@ func (c *Cache) used(file string) error {
|
|||||||
if os.IsNotExist(err) {
|
if os.IsNotExist(err) {
|
||||||
return errMissing
|
return errMissing
|
||||||
}
|
}
|
||||||
return errors.Wrapf(err, "failed to stat file %s", file)
|
return fmt.Errorf("failed to stat file %s: %w", file, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if c.now().Sub(info.ModTime()) < mtimeInterval {
|
if c.now().Sub(info.ModTime()) < mtimeInterval {
|
||||||
@ -272,7 +271,7 @@ func (c *Cache) used(file string) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if err := os.Chtimes(file, c.now(), c.now()); err != nil {
|
if err := os.Chtimes(file, c.now(), c.now()); err != nil {
|
||||||
return errors.Wrapf(err, "failed to change time of file %s", file)
|
return fmt.Errorf("failed to change time of file %s: %w", file, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
@ -385,7 +384,7 @@ func (c *Cache) putIndexEntry(id ActionID, out OutputID, size int64, allowVerify
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err = os.Chtimes(file, c.now(), c.now()); err != nil { // mainly for tests
|
if err = os.Chtimes(file, c.now(), c.now()); err != nil { // mainly for tests
|
||||||
return errors.Wrapf(err, "failed to change time of file %s", file)
|
return fmt.Errorf("failed to change time of file %s: %w", file, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
@ -443,7 +442,7 @@ func (c *Cache) copyFile(file io.ReadSeeker, out OutputID, size int64) error {
|
|||||||
if f, openErr := os.Open(name); openErr == nil {
|
if f, openErr := os.Open(name); openErr == nil {
|
||||||
h := sha256.New()
|
h := sha256.New()
|
||||||
if _, copyErr := io.Copy(h, f); copyErr != nil {
|
if _, copyErr := io.Copy(h, f); copyErr != nil {
|
||||||
return errors.Wrap(copyErr, "failed to copy to sha256")
|
return fmt.Errorf("failed to copy to sha256: %w", copyErr)
|
||||||
}
|
}
|
||||||
|
|
||||||
f.Close()
|
f.Close()
|
||||||
@ -519,7 +518,7 @@ func (c *Cache) copyFile(file io.ReadSeeker, out OutputID, size int64) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err = os.Chtimes(name, c.now(), c.now()); err != nil { // mainly for tests
|
if err = os.Chtimes(name, c.now(), c.now()); err != nil { // mainly for tests
|
||||||
return errors.Wrapf(err, "failed to change time of file %s", name)
|
return fmt.Errorf("failed to change time of file %s: %w", name, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
@ -4,12 +4,12 @@ import (
|
|||||||
"bytes"
|
"bytes"
|
||||||
"encoding/gob"
|
"encoding/gob"
|
||||||
"encoding/hex"
|
"encoding/hex"
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"runtime"
|
"runtime"
|
||||||
"sort"
|
"sort"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
"github.com/pkg/errors"
|
|
||||||
"golang.org/x/tools/go/packages"
|
"golang.org/x/tools/go/packages"
|
||||||
|
|
||||||
"github.com/golangci/golangci-lint/internal/cache"
|
"github.com/golangci/golangci-lint/internal/cache"
|
||||||
@ -61,7 +61,7 @@ func (c *Cache) Put(pkg *packages.Package, mode HashMode, key string, data inter
|
|||||||
err = gob.NewEncoder(buf).Encode(data)
|
err = gob.NewEncoder(buf).Encode(data)
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrap(err, "failed to gob encode")
|
return fmt.Errorf("failed to gob encode: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
var aID cache.ActionID
|
var aID cache.ActionID
|
||||||
@ -71,13 +71,13 @@ func (c *Cache) Put(pkg *packages.Package, mode HashMode, key string, data inter
|
|||||||
if err == nil {
|
if err == nil {
|
||||||
subkey, subkeyErr := cache.Subkey(aID, key)
|
subkey, subkeyErr := cache.Subkey(aID, key)
|
||||||
if subkeyErr != nil {
|
if subkeyErr != nil {
|
||||||
err = errors.Wrap(subkeyErr, "failed to build subkey")
|
err = fmt.Errorf("failed to build subkey: %w", subkeyErr)
|
||||||
}
|
}
|
||||||
aID = subkey
|
aID = subkey
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrapf(err, "failed to calculate package %s action id", pkg.Name)
|
return fmt.Errorf("failed to calculate package %s action id: %w", pkg.Name, err)
|
||||||
}
|
}
|
||||||
c.ioSem <- struct{}{}
|
c.ioSem <- struct{}{}
|
||||||
c.sw.TrackStage("cache io", func() {
|
c.sw.TrackStage("cache io", func() {
|
||||||
@ -85,7 +85,7 @@ func (c *Cache) Put(pkg *packages.Package, mode HashMode, key string, data inter
|
|||||||
})
|
})
|
||||||
<-c.ioSem
|
<-c.ioSem
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrapf(err, "failed to save data to low-level cache by key %s for package %s", key, pkg.Name)
|
return fmt.Errorf("failed to save data to low-level cache by key %s for package %s: %w", key, pkg.Name, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
@ -101,13 +101,13 @@ func (c *Cache) Get(pkg *packages.Package, mode HashMode, key string, data inter
|
|||||||
if err == nil {
|
if err == nil {
|
||||||
subkey, subkeyErr := cache.Subkey(aID, key)
|
subkey, subkeyErr := cache.Subkey(aID, key)
|
||||||
if subkeyErr != nil {
|
if subkeyErr != nil {
|
||||||
err = errors.Wrap(subkeyErr, "failed to build subkey")
|
err = fmt.Errorf("failed to build subkey: %w", subkeyErr)
|
||||||
}
|
}
|
||||||
aID = subkey
|
aID = subkey
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrapf(err, "failed to calculate package %s action id", pkg.Name)
|
return fmt.Errorf("failed to calculate package %s action id: %w", pkg.Name, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
var b []byte
|
var b []byte
|
||||||
@ -120,14 +120,14 @@ func (c *Cache) Get(pkg *packages.Package, mode HashMode, key string, data inter
|
|||||||
if cache.IsErrMissing(err) {
|
if cache.IsErrMissing(err) {
|
||||||
return ErrMissing
|
return ErrMissing
|
||||||
}
|
}
|
||||||
return errors.Wrapf(err, "failed to get data from low-level cache by key %s for package %s", key, pkg.Name)
|
return fmt.Errorf("failed to get data from low-level cache by key %s for package %s: %w", key, pkg.Name, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
c.sw.TrackStage("gob", func() {
|
c.sw.TrackStage("gob", func() {
|
||||||
err = gob.NewDecoder(bytes.NewReader(b)).Decode(data)
|
err = gob.NewDecoder(bytes.NewReader(b)).Decode(data)
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrap(err, "failed to gob decode")
|
return fmt.Errorf("failed to gob decode: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
@ -136,12 +136,12 @@ func (c *Cache) Get(pkg *packages.Package, mode HashMode, key string, data inter
|
|||||||
func (c *Cache) pkgActionID(pkg *packages.Package, mode HashMode) (cache.ActionID, error) {
|
func (c *Cache) pkgActionID(pkg *packages.Package, mode HashMode) (cache.ActionID, error) {
|
||||||
hash, err := c.packageHash(pkg, mode)
|
hash, err := c.packageHash(pkg, mode)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return cache.ActionID{}, errors.Wrap(err, "failed to get package hash")
|
return cache.ActionID{}, fmt.Errorf("failed to get package hash: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
key, err := cache.NewHash("action ID")
|
key, err := cache.NewHash("action ID")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return cache.ActionID{}, errors.Wrap(err, "failed to make a hash")
|
return cache.ActionID{}, fmt.Errorf("failed to make a hash: %w", err)
|
||||||
}
|
}
|
||||||
fmt.Fprintf(key, "pkgpath %s\n", pkg.PkgPath)
|
fmt.Fprintf(key, "pkgpath %s\n", pkg.PkgPath)
|
||||||
fmt.Fprintf(key, "pkghash %s\n", hash)
|
fmt.Fprintf(key, "pkghash %s\n", hash)
|
||||||
@ -167,7 +167,7 @@ func (c *Cache) packageHash(pkg *packages.Package, mode HashMode) (string, error
|
|||||||
|
|
||||||
key, err := cache.NewHash("package hash")
|
key, err := cache.NewHash("package hash")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", errors.Wrap(err, "failed to make a hash")
|
return "", fmt.Errorf("failed to make a hash: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt.Fprintf(key, "pkgpath %s\n", pkg.PkgPath)
|
fmt.Fprintf(key, "pkgpath %s\n", pkg.PkgPath)
|
||||||
@ -176,7 +176,7 @@ func (c *Cache) packageHash(pkg *packages.Package, mode HashMode) (string, error
|
|||||||
h, fErr := cache.FileHash(f)
|
h, fErr := cache.FileHash(f)
|
||||||
<-c.ioSem
|
<-c.ioSem
|
||||||
if fErr != nil {
|
if fErr != nil {
|
||||||
return "", errors.Wrapf(fErr, "failed to calculate file %s hash", f)
|
return "", fmt.Errorf("failed to calculate file %s hash: %w", f, fErr)
|
||||||
}
|
}
|
||||||
fmt.Fprintf(key, "file %s %x\n", f, h)
|
fmt.Fprintf(key, "file %s %x\n", f, h)
|
||||||
}
|
}
|
||||||
@ -199,7 +199,7 @@ func (c *Cache) packageHash(pkg *packages.Package, mode HashMode) (string, error
|
|||||||
|
|
||||||
depHash, depErr := c.packageHash(dep, depMode)
|
depHash, depErr := c.packageHash(dep, depMode)
|
||||||
if depErr != nil {
|
if depErr != nil {
|
||||||
return errors.Wrapf(depErr, "failed to calculate hash for dependency %s with mode %d", dep.Name, depMode)
|
return fmt.Errorf("failed to calculate hash for dependency %s with mode %d: %w", dep.Name, depMode, depErr)
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt.Fprintf(key, "import %s %s\n", dep.PkgPath, depHash)
|
fmt.Fprintf(key, "import %s %s\n", dep.PkgPath, depHash)
|
||||||
|
@ -4,6 +4,7 @@ import (
|
|||||||
"bytes"
|
"bytes"
|
||||||
"context"
|
"context"
|
||||||
"crypto/sha256"
|
"crypto/sha256"
|
||||||
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
@ -12,7 +13,6 @@ import (
|
|||||||
|
|
||||||
"github.com/fatih/color"
|
"github.com/fatih/color"
|
||||||
"github.com/gofrs/flock"
|
"github.com/gofrs/flock"
|
||||||
"github.com/pkg/errors"
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
"github.com/spf13/pflag"
|
"github.com/spf13/pflag"
|
||||||
"gopkg.in/yaml.v3"
|
"gopkg.in/yaml.v3"
|
||||||
@ -149,12 +149,12 @@ func (e *Executor) Execute() error {
|
|||||||
func (e *Executor) initHashSalt(version string) error {
|
func (e *Executor) initHashSalt(version string) error {
|
||||||
binSalt, err := computeBinarySalt(version)
|
binSalt, err := computeBinarySalt(version)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrap(err, "failed to calculate binary salt")
|
return fmt.Errorf("failed to calculate binary salt: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
configSalt, err := computeConfigSalt(e.cfg)
|
configSalt, err := computeConfigSalt(e.cfg)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrap(err, "failed to calculate config salt")
|
return fmt.Errorf("failed to calculate config salt: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
var b bytes.Buffer
|
var b bytes.Buffer
|
||||||
@ -195,7 +195,7 @@ func computeConfigSalt(cfg *config.Config) ([]byte, error) {
|
|||||||
|
|
||||||
lintersSettingsBytes, err := yaml.Marshal(cfg.LintersSettings)
|
lintersSettingsBytes, err := yaml.Marshal(cfg.LintersSettings)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Wrap(err, "failed to json marshal config linter settings")
|
return nil, fmt.Errorf("failed to json marshal config linter settings: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
var configData bytes.Buffer
|
var configData bytes.Buffer
|
||||||
|
@ -2,6 +2,7 @@ package commands
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"log"
|
"log"
|
||||||
@ -11,7 +12,6 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/fatih/color"
|
"github.com/fatih/color"
|
||||||
"github.com/pkg/errors"
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
"github.com/spf13/pflag"
|
"github.com/spf13/pflag"
|
||||||
|
|
||||||
@ -355,7 +355,7 @@ func (e *Executor) runAnalysis(ctx context.Context, args []string) ([]result.Iss
|
|||||||
|
|
||||||
lintCtx, err := e.contextLoader.Load(ctx, lintersToRun)
|
lintCtx, err := e.contextLoader.Load(ctx, lintersToRun)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Wrap(err, "context loading failed")
|
return nil, fmt.Errorf("context loading failed: %w", err)
|
||||||
}
|
}
|
||||||
lintCtx.Log = e.log.Child(logutils.DebugKeyLintersContext)
|
lintCtx.Log = e.log.Child(logutils.DebugKeyLintersContext)
|
||||||
|
|
||||||
@ -522,7 +522,8 @@ func (e *Executor) executeRun(_ *cobra.Command, args []string) {
|
|||||||
if err := e.runAndPrint(ctx, args); err != nil {
|
if err := e.runAndPrint(ctx, args); err != nil {
|
||||||
e.log.Errorf("Running error: %s", err)
|
e.log.Errorf("Running error: %s", err)
|
||||||
if e.exitCode == exitcodes.Success {
|
if e.exitCode == exitcodes.Success {
|
||||||
if exitErr, ok := errors.Cause(err).(*exitcodes.ExitError); ok {
|
var exitErr *exitcodes.ExitError
|
||||||
|
if errors.As(err, &exitErr) {
|
||||||
e.exitCode = exitErr.Code
|
e.exitCode = exitErr.Code
|
||||||
} else {
|
} else {
|
||||||
e.exitCode = exitcodes.Failure
|
e.exitCode = exitcodes.Failure
|
||||||
|
@ -1,9 +1,8 @@
|
|||||||
package config
|
package config
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
"runtime"
|
"runtime"
|
||||||
|
|
||||||
"github.com/pkg/errors"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
var defaultLintersSettings = LintersSettings{
|
var defaultLintersSettings = LintersSettings{
|
||||||
|
@ -5,8 +5,6 @@ import (
|
|||||||
"os"
|
"os"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
"github.com/pkg/errors"
|
|
||||||
|
|
||||||
"github.com/golangci/golangci-lint/pkg/logutils"
|
"github.com/golangci/golangci-lint/pkg/logutils"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -26,7 +24,7 @@ func (fc *FileCache) GetFileBytes(filePath string) ([]byte, error) {
|
|||||||
|
|
||||||
fileBytes, err := os.ReadFile(filePath)
|
fileBytes, err := os.ReadFile(filePath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Wrapf(err, "can't read file %s", filePath)
|
return nil, fmt.Errorf("can't read file %s: %w", filePath, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
fc.files.Store(filePath, fileBytes)
|
fc.files.Store(filePath, fileBytes)
|
||||||
|
@ -4,8 +4,6 @@ import (
|
|||||||
"bytes"
|
"bytes"
|
||||||
"fmt"
|
"fmt"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
"github.com/pkg/errors"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type fileLinesCache [][]byte
|
type fileLinesCache [][]byte
|
||||||
@ -39,7 +37,7 @@ func (lc *LineCache) GetLine(filePath string, index1 int) (string, error) {
|
|||||||
func (lc *LineCache) getRawLine(filePath string, index0 int) ([]byte, error) {
|
func (lc *LineCache) getRawLine(filePath string, index0 int) ([]byte, error) {
|
||||||
fc, err := lc.getFileCache(filePath)
|
fc, err := lc.getFileCache(filePath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Wrapf(err, "failed to get file %s lines cache", filePath)
|
return nil, fmt.Errorf("failed to get file %s lines cache: %w", filePath, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if index0 < 0 {
|
if index0 < 0 {
|
||||||
@ -61,7 +59,7 @@ func (lc *LineCache) getFileCache(filePath string) (fileLinesCache, error) {
|
|||||||
|
|
||||||
fileBytes, err := lc.fileCache.GetFileBytes(filePath)
|
fileBytes, err := lc.fileCache.GetFileBytes(filePath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Wrapf(err, "can't get file %s bytes from cache", filePath)
|
return nil, fmt.Errorf("can't get file %s bytes from cache: %w", filePath, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
fc := bytes.Split(fileBytes, []byte("\n"))
|
fc := bytes.Split(fileBytes, []byte("\n"))
|
||||||
|
@ -6,7 +6,6 @@ import (
|
|||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
duplAPI "github.com/golangci/dupl"
|
duplAPI "github.com/golangci/dupl"
|
||||||
"github.com/pkg/errors"
|
|
||||||
"golang.org/x/tools/go/analysis"
|
"golang.org/x/tools/go/analysis"
|
||||||
|
|
||||||
"github.com/golangci/golangci-lint/pkg/config"
|
"github.com/golangci/golangci-lint/pkg/config"
|
||||||
@ -71,7 +70,7 @@ func runDupl(pass *analysis.Pass, settings *config.DuplSettings) ([]goanalysis.I
|
|||||||
for _, i := range issues {
|
for _, i := range issues {
|
||||||
toFilename, err := fsutils.ShortestRelPath(i.To.Filename(), "")
|
toFilename, err := fsutils.ShortestRelPath(i.To.Filename(), "")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Wrapf(err, "failed to get shortest rel path for %q", i.To.Filename())
|
return nil, fmt.Errorf("failed to get shortest rel path for %q: %w", i.To.Filename(), err)
|
||||||
}
|
}
|
||||||
|
|
||||||
dupl := fmt.Sprintf("%s:%d-%d", toFilename, i.To.LineStart(), i.To.LineEnd())
|
dupl := fmt.Sprintf("%s:%d-%d", toFilename, i.To.LineStart(), i.To.LineEnd())
|
||||||
|
@ -11,7 +11,6 @@ import (
|
|||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
"github.com/kisielk/errcheck/errcheck"
|
"github.com/kisielk/errcheck/errcheck"
|
||||||
"github.com/pkg/errors"
|
|
||||||
"golang.org/x/tools/go/analysis"
|
"golang.org/x/tools/go/analysis"
|
||||||
"golang.org/x/tools/go/packages"
|
"golang.org/x/tools/go/packages"
|
||||||
|
|
||||||
@ -143,7 +142,7 @@ func parseIgnoreConfig(s string) (map[string]*regexp.Regexp, error) {
|
|||||||
func getChecker(errCfg *config.ErrcheckSettings) (*errcheck.Checker, error) {
|
func getChecker(errCfg *config.ErrcheckSettings) (*errcheck.Checker, error) {
|
||||||
ignoreConfig, err := parseIgnoreConfig(errCfg.Ignore)
|
ignoreConfig, err := parseIgnoreConfig(errCfg.Ignore)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Wrap(err, "failed to parse 'ignore' directive")
|
return nil, fmt.Errorf("failed to parse 'ignore' directive: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
checker := errcheck.Checker{
|
checker := errcheck.Checker{
|
||||||
@ -252,7 +251,7 @@ func readExcludeFile(name string) ([]string, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if fh == nil {
|
if fh == nil {
|
||||||
return nil, errors.Wrapf(err, "failed reading exclude file: %s", name)
|
return nil, fmt.Errorf("failed reading exclude file: %s: %w", name, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
scanner := bufio.NewScanner(fh)
|
scanner := bufio.NewScanner(fh)
|
||||||
@ -263,7 +262,7 @@ func readExcludeFile(name string) ([]string, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if err := scanner.Err(); err != nil {
|
if err := scanner.Err(); err != nil {
|
||||||
return nil, errors.Wrapf(err, "failed scanning file: %s", name)
|
return nil, fmt.Errorf("failed scanning file: %s: %w", name, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return excludes, nil
|
return excludes, nil
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
package golinters
|
package golinters
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
"github.com/ashanbrown/forbidigo/forbidigo"
|
"github.com/ashanbrown/forbidigo/forbidigo"
|
||||||
"github.com/pkg/errors"
|
|
||||||
"golang.org/x/tools/go/analysis"
|
"golang.org/x/tools/go/analysis"
|
||||||
|
|
||||||
"github.com/golangci/golangci-lint/pkg/config"
|
"github.com/golangci/golangci-lint/pkg/config"
|
||||||
@ -59,14 +59,14 @@ func runForbidigo(pass *analysis.Pass, settings *config.ForbidigoSettings) ([]go
|
|||||||
|
|
||||||
forbid, err := forbidigo.NewLinter(settings.Forbid, options...)
|
forbid, err := forbidigo.NewLinter(settings.Forbid, options...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Wrapf(err, "failed to create linter %q", forbidigoName)
|
return nil, fmt.Errorf("failed to create linter %q: %w", forbidigoName, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
var issues []goanalysis.Issue
|
var issues []goanalysis.Issue
|
||||||
for _, file := range pass.Files {
|
for _, file := range pass.Files {
|
||||||
hints, err := forbid.RunWithConfig(forbidigo.RunConfig{Fset: pass.Fset}, file)
|
hints, err := forbid.RunWithConfig(forbidigo.RunConfig{Fset: pass.Fset}, file)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Wrapf(err, "forbidigo linter failed on file %q", file.Name.String())
|
return nil, fmt.Errorf("forbidigo linter failed on file %q: %w", file.Name.String(), err)
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, hint := range hints {
|
for _, hint := range hints {
|
||||||
|
@ -12,7 +12,6 @@ import (
|
|||||||
"github.com/hexops/gotextdiff"
|
"github.com/hexops/gotextdiff"
|
||||||
"github.com/hexops/gotextdiff/myers"
|
"github.com/hexops/gotextdiff/myers"
|
||||||
"github.com/hexops/gotextdiff/span"
|
"github.com/hexops/gotextdiff/span"
|
||||||
"github.com/pkg/errors"
|
|
||||||
"golang.org/x/tools/go/analysis"
|
"golang.org/x/tools/go/analysis"
|
||||||
|
|
||||||
"github.com/golangci/golangci-lint/pkg/config"
|
"github.com/golangci/golangci-lint/pkg/config"
|
||||||
@ -101,7 +100,7 @@ func runGci(pass *analysis.Pass, lintCtx *linter.Context, cfg *gcicfg.Config, lo
|
|||||||
|
|
||||||
is, err := extractIssuesFromPatch(diff, lintCtx, gciName)
|
is, err := extractIssuesFromPatch(diff, lintCtx, gciName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Wrapf(err, "can't extract issues from gci diff output %s", diff)
|
return nil, fmt.Errorf("can't extract issues from gci diff output %s: %w", diff, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
for i := range is {
|
for i := range is {
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
package goanalysis
|
package goanalysis
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/pkg/errors"
|
|
||||||
"golang.org/x/tools/go/packages"
|
"golang.org/x/tools/go/packages"
|
||||||
|
|
||||||
"github.com/golangci/golangci-lint/pkg/lint/linter"
|
"github.com/golangci/golangci-lint/pkg/lint/linter"
|
||||||
|
@ -2,11 +2,11 @@ package goanalysis
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"errors"
|
||||||
"flag"
|
"flag"
|
||||||
"fmt"
|
"fmt"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/pkg/errors"
|
|
||||||
"golang.org/x/tools/go/analysis"
|
"golang.org/x/tools/go/analysis"
|
||||||
|
|
||||||
"github.com/golangci/golangci-lint/pkg/lint/linter"
|
"github.com/golangci/golangci-lint/pkg/lint/linter"
|
||||||
@ -116,7 +116,7 @@ func (lnt *Linter) configureAnalyzer(a *analysis.Analyzer, cfg map[string]interf
|
|||||||
}
|
}
|
||||||
|
|
||||||
if err := f.Value.Set(valueToString(v)); err != nil {
|
if err := f.Value.Set(valueToString(v)); err != nil {
|
||||||
return errors.Wrapf(err, "failed to set analyzer setting %q with value %v", k, v)
|
return fmt.Errorf("failed to set analyzer setting %q with value %v: %w", k, v, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -137,7 +137,7 @@ func (lnt *Linter) configure() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if err := lnt.configureAnalyzer(a, analyzerSettings); err != nil {
|
if err := lnt.configureAnalyzer(a, analyzerSettings); err != nil {
|
||||||
return errors.Wrapf(err, "failed to configure analyzer %s", analyzerName)
|
return fmt.Errorf("failed to configure analyzer %s: %w", analyzerName, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -146,11 +146,11 @@ func (lnt *Linter) configure() error {
|
|||||||
|
|
||||||
func (lnt *Linter) preRun(lintCtx *linter.Context) error {
|
func (lnt *Linter) preRun(lintCtx *linter.Context) error {
|
||||||
if err := analysis.Validate(lnt.analyzers); err != nil {
|
if err := analysis.Validate(lnt.analyzers); err != nil {
|
||||||
return errors.Wrap(err, "failed to validate analyzers")
|
return fmt.Errorf("failed to validate analyzers: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := lnt.configure(); err != nil {
|
if err := lnt.configure(); err != nil {
|
||||||
return errors.Wrap(err, "failed to configure analyzers")
|
return fmt.Errorf("failed to configure analyzers: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if lnt.contextSetter != nil {
|
if lnt.contextSetter != nil {
|
||||||
|
@ -2,8 +2,8 @@ package goanalysis
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"fmt"
|
||||||
|
|
||||||
"github.com/pkg/errors"
|
|
||||||
"golang.org/x/tools/go/analysis"
|
"golang.org/x/tools/go/analysis"
|
||||||
|
|
||||||
"github.com/golangci/golangci-lint/pkg/lint/linter"
|
"github.com/golangci/golangci-lint/pkg/lint/linter"
|
||||||
@ -24,7 +24,7 @@ func NewMetaLinter(linters []*Linter) *MetaLinter {
|
|||||||
func (ml MetaLinter) Run(_ context.Context, lintCtx *linter.Context) ([]result.Issue, error) {
|
func (ml MetaLinter) Run(_ context.Context, lintCtx *linter.Context) ([]result.Issue, error) {
|
||||||
for _, l := range ml.linters {
|
for _, l := range ml.linters {
|
||||||
if err := l.preRun(lintCtx); err != nil {
|
if err := l.preRun(lintCtx); err != nil {
|
||||||
return nil, errors.Wrapf(err, "failed to pre-run %s", l.Name())
|
return nil, fmt.Errorf("failed to pre-run %s: %w", l.Name(), err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -11,12 +11,12 @@ package goanalysis
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/gob"
|
"encoding/gob"
|
||||||
|
"fmt"
|
||||||
"go/token"
|
"go/token"
|
||||||
"runtime"
|
"runtime"
|
||||||
"sort"
|
"sort"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
"github.com/pkg/errors"
|
|
||||||
"golang.org/x/tools/go/analysis"
|
"golang.org/x/tools/go/analysis"
|
||||||
"golang.org/x/tools/go/packages"
|
"golang.org/x/tools/go/packages"
|
||||||
|
|
||||||
@ -311,7 +311,7 @@ func extractDiagnostics(roots []*action) (retDiags []Diagnostic, retErrors []err
|
|||||||
if pe, ok := act.err.(*errorutil.PanicError); ok {
|
if pe, ok := act.err.(*errorutil.PanicError); ok {
|
||||||
panic(pe)
|
panic(pe)
|
||||||
}
|
}
|
||||||
retErrors = append(retErrors, errors.Wrap(act.err, act.a.Name))
|
retErrors = append(retErrors, fmt.Errorf("%s: %w", act.a.Name, act.err))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package goanalysis
|
package goanalysis
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"go/types"
|
"go/types"
|
||||||
"io"
|
"io"
|
||||||
@ -9,7 +10,6 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/hashicorp/go-multierror"
|
"github.com/hashicorp/go-multierror"
|
||||||
"github.com/pkg/errors"
|
|
||||||
"golang.org/x/tools/go/analysis"
|
"golang.org/x/tools/go/analysis"
|
||||||
"golang.org/x/tools/go/packages"
|
"golang.org/x/tools/go/packages"
|
||||||
"golang.org/x/tools/go/types/objectpath"
|
"golang.org/x/tools/go/types/objectpath"
|
||||||
@ -125,7 +125,7 @@ func (act *action) analyze() {
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
depErrors = multierror.Append(depErrors, errors.Cause(dep.err))
|
depErrors = multierror.Append(depErrors, errors.Unwrap(dep.err))
|
||||||
}
|
}
|
||||||
if depErrors != nil {
|
if depErrors != nil {
|
||||||
depErrors.ErrorFormat = func(e []error) string {
|
depErrors.ErrorFormat = func(e []error) string {
|
||||||
@ -182,7 +182,7 @@ func (act *action) analyze() {
|
|||||||
// It looks like there should be !pass.Analyzer.RunDespiteErrors
|
// It looks like there should be !pass.Analyzer.RunDespiteErrors
|
||||||
// but govet's cgocall crashes on it. Govet itself contains !pass.Analyzer.RunDespiteErrors condition here,
|
// but govet's cgocall crashes on it. Govet itself contains !pass.Analyzer.RunDespiteErrors condition here,
|
||||||
// but it exits before it if packages.Load have failed.
|
// but it exits before it if packages.Load have failed.
|
||||||
act.err = errors.Wrap(&IllTypedError{Pkg: act.pkg}, "analysis skipped")
|
act.err = fmt.Errorf("analysis skipped: %w", &IllTypedError{Pkg: act.pkg})
|
||||||
} else {
|
} else {
|
||||||
startedAt = time.Now()
|
startedAt = time.Now()
|
||||||
act.result, act.err = pass.Analyzer.Run(pass)
|
act.result, act.err = pass.Analyzer.Run(pass)
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package goanalysis
|
package goanalysis
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"go/ast"
|
"go/ast"
|
||||||
"go/parser"
|
"go/parser"
|
||||||
@ -11,7 +12,6 @@ import (
|
|||||||
"sync"
|
"sync"
|
||||||
"sync/atomic"
|
"sync/atomic"
|
||||||
|
|
||||||
"github.com/pkg/errors"
|
|
||||||
"golang.org/x/tools/go/gcexportdata"
|
"golang.org/x/tools/go/gcexportdata"
|
||||||
"golang.org/x/tools/go/packages"
|
"golang.org/x/tools/go/packages"
|
||||||
|
|
||||||
@ -59,7 +59,7 @@ func (lp *loadingPackage) analyze(loadMode LoadMode, loadSem chan struct{}) {
|
|||||||
defer lp.decUse(loadMode < LoadModeWholeProgram)
|
defer lp.decUse(loadMode < LoadModeWholeProgram)
|
||||||
|
|
||||||
if err := lp.loadWithFacts(loadMode); err != nil {
|
if err := lp.loadWithFacts(loadMode); err != nil {
|
||||||
werr := errors.Wrapf(err, "failed to load package %s", lp.pkg.Name)
|
werr := fmt.Errorf("failed to load package %s: %w", lp.pkg.Name, err)
|
||||||
// Don't need to write error to errCh, it will be extracted and reported on another layer.
|
// Don't need to write error to errCh, it will be extracted and reported on another layer.
|
||||||
// Unblock depending on actions and propagate error.
|
// Unblock depending on actions and propagate error.
|
||||||
for _, act := range lp.actions {
|
for _, act := range lp.actions {
|
||||||
@ -290,7 +290,7 @@ func (lp *loadingPackage) loadImportedPackageWithFacts(loadMode LoadMode) error
|
|||||||
Msg: fmt.Sprintf("could not load export data: %s", err),
|
Msg: fmt.Sprintf("could not load export data: %s", err),
|
||||||
Kind: packages.ParseError,
|
Kind: packages.ParseError,
|
||||||
})
|
})
|
||||||
return errors.Wrap(err, "could not load export data")
|
return fmt.Errorf("could not load export data: %w", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package golinters
|
package golinters
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"go/ast"
|
"go/ast"
|
||||||
"go/types"
|
"go/types"
|
||||||
@ -13,7 +14,6 @@ import (
|
|||||||
|
|
||||||
"github.com/go-critic/go-critic/checkers"
|
"github.com/go-critic/go-critic/checkers"
|
||||||
gocriticlinter "github.com/go-critic/go-critic/framework/linter"
|
gocriticlinter "github.com/go-critic/go-critic/framework/linter"
|
||||||
"github.com/pkg/errors"
|
|
||||||
"golang.org/x/tools/go/analysis"
|
"golang.org/x/tools/go/analysis"
|
||||||
|
|
||||||
"github.com/golangci/golangci-lint/pkg/config"
|
"github.com/golangci/golangci-lint/pkg/config"
|
||||||
@ -425,7 +425,7 @@ func (s *goCriticSettingsWrapper) validate() error {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if err := validateStringsUniq(s.EnabledTags); err != nil {
|
if err := validateStringsUniq(s.EnabledTags); err != nil {
|
||||||
return errors.Wrap(err, "validate enabled tags")
|
return fmt.Errorf("validate enabled tags: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
tagToCheckers := s.buildTagToCheckersMap()
|
tagToCheckers := s.buildTagToCheckersMap()
|
||||||
@ -447,15 +447,15 @@ func (s *goCriticSettingsWrapper) validate() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if err := validateStringsUniq(s.EnabledChecks); err != nil {
|
if err := validateStringsUniq(s.EnabledChecks); err != nil {
|
||||||
return errors.Wrap(err, "validate enabled checks")
|
return fmt.Errorf("validate enabled checks: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := validateStringsUniq(s.DisabledChecks); err != nil {
|
if err := validateStringsUniq(s.DisabledChecks); err != nil {
|
||||||
return errors.Wrap(err, "validate disabled checks")
|
return fmt.Errorf("validate disabled checks: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := s.validateCheckerNames(); err != nil {
|
if err := s.validateCheckerNames(); err != nil {
|
||||||
return errors.Wrap(err, "validation failed")
|
return fmt.Errorf("validation failed: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
package golinters
|
package golinters
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
gofmtAPI "github.com/golangci/gofmt/gofmt"
|
gofmtAPI "github.com/golangci/gofmt/gofmt"
|
||||||
"github.com/pkg/errors"
|
|
||||||
"golang.org/x/tools/go/analysis"
|
"golang.org/x/tools/go/analysis"
|
||||||
|
|
||||||
"github.com/golangci/golangci-lint/pkg/config"
|
"github.com/golangci/golangci-lint/pkg/config"
|
||||||
@ -73,7 +73,7 @@ func runGofmt(lintCtx *linter.Context, pass *analysis.Pass, settings *config.GoF
|
|||||||
|
|
||||||
is, err := extractIssuesFromPatch(string(diff), lintCtx, gofmtName)
|
is, err := extractIssuesFromPatch(string(diff), lintCtx, gofmtName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Wrapf(err, "can't extract issues from gofmt diff output %q", string(diff))
|
return nil, fmt.Errorf("can't extract issues from gofmt diff output %q: %w", string(diff), err)
|
||||||
}
|
}
|
||||||
|
|
||||||
for i := range is {
|
for i := range is {
|
||||||
|
@ -6,7 +6,6 @@ import (
|
|||||||
"go/token"
|
"go/token"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/pkg/errors"
|
|
||||||
diffpkg "github.com/sourcegraph/go-diff/diff"
|
diffpkg "github.com/sourcegraph/go-diff/diff"
|
||||||
|
|
||||||
"github.com/golangci/golangci-lint/pkg/config"
|
"github.com/golangci/golangci-lint/pkg/config"
|
||||||
@ -238,7 +237,7 @@ func getErrorTextForLinter(settings *config.LintersSettings, linterName string)
|
|||||||
func extractIssuesFromPatch(patch string, lintCtx *linter.Context, linterName string) ([]result.Issue, error) {
|
func extractIssuesFromPatch(patch string, lintCtx *linter.Context, linterName string) ([]result.Issue, error) {
|
||||||
diffs, err := diffpkg.ParseMultiFileDiff([]byte(patch))
|
diffs, err := diffpkg.ParseMultiFileDiff([]byte(patch))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Wrap(err, "can't parse patch")
|
return nil, fmt.Errorf("can't parse patch: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(diffs) == 0 {
|
if len(diffs) == 0 {
|
||||||
|
@ -7,7 +7,6 @@ import (
|
|||||||
"os"
|
"os"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
"github.com/pkg/errors"
|
|
||||||
"github.com/shazow/go-diff/difflib"
|
"github.com/shazow/go-diff/difflib"
|
||||||
"golang.org/x/tools/go/analysis"
|
"golang.org/x/tools/go/analysis"
|
||||||
"mvdan.cc/gofumpt/format"
|
"mvdan.cc/gofumpt/format"
|
||||||
@ -103,7 +102,7 @@ func runGofumpt(lintCtx *linter.Context, pass *analysis.Pass, diff differ, optio
|
|||||||
diff := out.String()
|
diff := out.String()
|
||||||
is, err := extractIssuesFromPatch(diff, lintCtx, gofumptName)
|
is, err := extractIssuesFromPatch(diff, lintCtx, gofumptName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Wrapf(err, "can't extract issues from gofumpt diff output %q", diff)
|
return nil, fmt.Errorf("can't extract issues from gofumpt diff output %q: %w", diff, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
for i := range is {
|
for i := range is {
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
package golinters
|
package golinters
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
goimportsAPI "github.com/golangci/gofmt/goimports"
|
goimportsAPI "github.com/golangci/gofmt/goimports"
|
||||||
"github.com/pkg/errors"
|
|
||||||
"golang.org/x/tools/go/analysis"
|
"golang.org/x/tools/go/analysis"
|
||||||
"golang.org/x/tools/imports"
|
"golang.org/x/tools/imports"
|
||||||
|
|
||||||
@ -71,7 +71,7 @@ func runGoImports(lintCtx *linter.Context, pass *analysis.Pass) ([]goanalysis.Is
|
|||||||
|
|
||||||
is, err := extractIssuesFromPatch(string(diff), lintCtx, goimportsName)
|
is, err := extractIssuesFromPatch(string(diff), lintCtx, goimportsName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Wrapf(err, "can't extract issues from gofmt diff output %q", string(diff))
|
return nil, fmt.Errorf("can't extract issues from gofmt diff output %q: %w", string(diff), err)
|
||||||
}
|
}
|
||||||
|
|
||||||
for i := range is {
|
for i := range is {
|
||||||
|
@ -9,7 +9,6 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
"github.com/pkg/errors"
|
|
||||||
"github.com/securego/gosec/v2"
|
"github.com/securego/gosec/v2"
|
||||||
"github.com/securego/gosec/v2/rules"
|
"github.com/securego/gosec/v2/rules"
|
||||||
"golang.org/x/tools/go/analysis"
|
"golang.org/x/tools/go/analysis"
|
||||||
@ -167,7 +166,7 @@ func convertToScore(str string) (gosec.Score, error) {
|
|||||||
case "high":
|
case "high":
|
||||||
return gosec.High, nil
|
return gosec.High, nil
|
||||||
default:
|
default:
|
||||||
return gosec.Low, errors.Errorf("'%s' is invalid, use low instead. Valid options: low, medium, high", str)
|
return gosec.Low, fmt.Errorf("'%s' is invalid, use low instead. Valid options: low, medium, high", str)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
package golinters
|
package golinters
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
"github.com/ashanbrown/makezero/makezero"
|
"github.com/ashanbrown/makezero/makezero"
|
||||||
"github.com/pkg/errors"
|
|
||||||
"golang.org/x/tools/go/analysis"
|
"golang.org/x/tools/go/analysis"
|
||||||
|
|
||||||
"github.com/golangci/golangci-lint/pkg/config"
|
"github.com/golangci/golangci-lint/pkg/config"
|
||||||
@ -59,7 +59,7 @@ func runMakeZero(pass *analysis.Pass, settings *config.MakezeroSettings) ([]goan
|
|||||||
for _, file := range pass.Files {
|
for _, file := range pass.Files {
|
||||||
hints, err := zero.Run(pass.Fset, pass.TypesInfo, file)
|
hints, err := zero.Run(pass.Fset, pass.TypesInfo, file)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Wrapf(err, "makezero linter failed on file %q", file.Name.String())
|
return nil, fmt.Errorf("makezero linter failed on file %q: %w", file.Name.String(), err)
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, hint := range hints {
|
for _, hint := range hints {
|
||||||
|
@ -13,7 +13,6 @@ import (
|
|||||||
reviveConfig "github.com/mgechev/revive/config"
|
reviveConfig "github.com/mgechev/revive/config"
|
||||||
"github.com/mgechev/revive/lint"
|
"github.com/mgechev/revive/lint"
|
||||||
"github.com/mgechev/revive/rule"
|
"github.com/mgechev/revive/rule"
|
||||||
"github.com/pkg/errors"
|
|
||||||
"golang.org/x/tools/go/analysis"
|
"golang.org/x/tools/go/analysis"
|
||||||
|
|
||||||
"github.com/golangci/golangci-lint/pkg/config"
|
"github.com/golangci/golangci-lint/pkg/config"
|
||||||
@ -171,13 +170,13 @@ func getReviveConfig(cfg *config.ReviveSettings) (*lint.Config, error) {
|
|||||||
|
|
||||||
err := toml.NewEncoder(buf).Encode(rawRoot)
|
err := toml.NewEncoder(buf).Encode(rawRoot)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Wrap(err, "failed to encode configuration")
|
return nil, fmt.Errorf("failed to encode configuration: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
conf = &lint.Config{}
|
conf = &lint.Config{}
|
||||||
_, err = toml.NewDecoder(buf).Decode(conf)
|
_, err = toml.NewDecoder(buf).Decode(conf)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Wrap(err, "failed to decode configuration")
|
return nil, fmt.Errorf("failed to decode configuration: %w", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
package golinters
|
package golinters
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"go/token"
|
"go/token"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
"github.com/pkg/errors"
|
|
||||||
"github.com/ultraware/whitespace"
|
"github.com/ultraware/whitespace"
|
||||||
"golang.org/x/tools/go/analysis"
|
"golang.org/x/tools/go/analysis"
|
||||||
|
|
||||||
@ -87,7 +87,7 @@ func runWhitespace(lintCtx *linter.Context, pass *analysis.Pass, wsSettings whit
|
|||||||
|
|
||||||
bracketLine, err := lintCtx.LineCache.GetLine(issue.Pos.Filename, issue.Pos.Line)
|
bracketLine, err := lintCtx.LineCache.GetLine(issue.Pos.Filename, issue.Pos.Line)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Wrapf(err, "failed to get line %s:%d", issue.Pos.Filename, issue.Pos.Line)
|
return nil, fmt.Errorf("failed to get line %s:%d: %w", issue.Pos.Filename, issue.Pos.Line, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
switch i.Type {
|
switch i.Type {
|
||||||
|
@ -3,13 +3,12 @@ package goutil
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/pkg/errors"
|
|
||||||
|
|
||||||
"github.com/golangci/golangci-lint/pkg/logutils"
|
"github.com/golangci/golangci-lint/pkg/logutils"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -40,11 +39,11 @@ func (e *Env) Discover(ctx context.Context) error {
|
|||||||
args = append(args, string(EnvGoCache), string(EnvGoRoot))
|
args = append(args, string(EnvGoCache), string(EnvGoRoot))
|
||||||
out, err := exec.CommandContext(ctx, "go", args...).Output()
|
out, err := exec.CommandContext(ctx, "go", args...).Output()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrap(err, "failed to run 'go env'")
|
return fmt.Errorf("failed to run 'go env': %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err = json.Unmarshal(out, &e.vars); err != nil {
|
if err = json.Unmarshal(out, &e.vars); err != nil {
|
||||||
return errors.Wrapf(err, "failed to parse 'go %s' json", strings.Join(args, " "))
|
return fmt.Errorf("failed to parse 'go %s' json: %w", strings.Join(args, " "), err)
|
||||||
}
|
}
|
||||||
|
|
||||||
e.debugf("Read go env for %s: %#v", time.Since(startedAt), e.vars)
|
e.debugf("Read go env for %s: %#v", time.Since(startedAt), e.vars)
|
||||||
|
@ -11,7 +11,6 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/pkg/errors"
|
|
||||||
"golang.org/x/tools/go/packages"
|
"golang.org/x/tools/go/packages"
|
||||||
|
|
||||||
"github.com/golangci/golangci-lint/internal/pkgcache"
|
"github.com/golangci/golangci-lint/internal/pkgcache"
|
||||||
@ -172,11 +171,11 @@ func (cl *ContextLoader) parseLoadedPackagesErrors(pkgs []*packages.Package) err
|
|||||||
errs = append(errs, err)
|
errs = append(errs, err)
|
||||||
|
|
||||||
if strings.Contains(err.Msg, "no Go files") {
|
if strings.Contains(err.Msg, "no Go files") {
|
||||||
return errors.Wrapf(exitcodes.ErrNoGoFiles, "package %s", pkg.PkgPath)
|
return fmt.Errorf("package %s: %w", pkg.PkgPath, exitcodes.ErrNoGoFiles)
|
||||||
}
|
}
|
||||||
if strings.Contains(err.Msg, "cannot find package") {
|
if strings.Contains(err.Msg, "cannot find package") {
|
||||||
// when analyzing not existing directory
|
// when analyzing not existing directory
|
||||||
return errors.Wrap(exitcodes.ErrFailure, err.Msg)
|
return fmt.Errorf("%v: %w", err.Msg, exitcodes.ErrFailure)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -195,7 +194,7 @@ func (cl *ContextLoader) loadPackages(ctx context.Context, loadMode packages.Loa
|
|||||||
|
|
||||||
buildFlags, err := cl.makeBuildFlags()
|
buildFlags, err := cl.makeBuildFlags()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Wrap(err, "failed to make build flags for go list")
|
return nil, fmt.Errorf("failed to make build flags for go list: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
conf := &packages.Config{
|
conf := &packages.Config{
|
||||||
@ -211,14 +210,14 @@ func (cl *ContextLoader) loadPackages(ctx context.Context, loadMode packages.Loa
|
|||||||
cl.debugf("Built loader args are %s", args)
|
cl.debugf("Built loader args are %s", args)
|
||||||
pkgs, err := packages.Load(conf, args...)
|
pkgs, err := packages.Load(conf, args...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Wrap(err, "failed to load with go/packages")
|
return nil, fmt.Errorf("failed to load with go/packages: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Currently, go/packages doesn't guarantee that error will be returned
|
// Currently, go/packages doesn't guarantee that error will be returned
|
||||||
// if context was canceled. See
|
// if context was canceled. See
|
||||||
// https://github.com/golang/tools/commit/c5cec6710e927457c3c29d6c156415e8539a5111#r39261855
|
// https://github.com/golang/tools/commit/c5cec6710e927457c3c29d6c156415e8539a5111#r39261855
|
||||||
if ctx.Err() != nil {
|
if ctx.Err() != nil {
|
||||||
return nil, errors.Wrap(ctx.Err(), "timed out to load packages")
|
return nil, fmt.Errorf("timed out to load packages: %w", ctx.Err())
|
||||||
}
|
}
|
||||||
|
|
||||||
if loadMode&packages.NeedSyntax == 0 {
|
if loadMode&packages.NeedSyntax == 0 {
|
||||||
@ -299,7 +298,7 @@ func (cl *ContextLoader) Load(ctx context.Context, linters []*linter.Config) (*l
|
|||||||
loadMode := cl.findLoadMode(linters)
|
loadMode := cl.findLoadMode(linters)
|
||||||
pkgs, err := cl.loadPackages(ctx, loadMode)
|
pkgs, err := cl.loadPackages(ctx, loadMode)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Wrap(err, "failed to load packages")
|
return nil, fmt.Errorf("failed to load packages: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
deduplicatedPkgs := cl.filterDuplicatePackages(pkgs)
|
deduplicatedPkgs := cl.filterDuplicatePackages(pkgs)
|
||||||
|
@ -7,7 +7,6 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/hashicorp/go-multierror"
|
"github.com/hashicorp/go-multierror"
|
||||||
"github.com/pkg/errors"
|
|
||||||
gopackages "golang.org/x/tools/go/packages"
|
gopackages "golang.org/x/tools/go/packages"
|
||||||
|
|
||||||
"github.com/golangci/golangci-lint/internal/errorutil"
|
"github.com/golangci/golangci-lint/internal/errorutil"
|
||||||
@ -46,7 +45,7 @@ func NewRunner(cfg *config.Config, log logutils.Log, goenv *goutil.Env, es *lint
|
|||||||
|
|
||||||
enabledLinters, err := es.GetEnabledLintersMap()
|
enabledLinters, err := es.GetEnabledLintersMap()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Wrap(err, "failed to get enabled linters")
|
return nil, fmt.Errorf("failed to get enabled linters: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// print deprecated messages
|
// print deprecated messages
|
||||||
|
@ -1,12 +1,11 @@
|
|||||||
package packages
|
package packages
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"go/token"
|
"go/token"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/pkg/errors"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func ParseErrorPosition(pos string) (*token.Position, error) {
|
func ParseErrorPosition(pos string) (*token.Position, error) {
|
||||||
@ -26,7 +25,7 @@ func ParseErrorPosition(pos string) (*token.Position, error) {
|
|||||||
if len(parts) == 3 { // no column
|
if len(parts) == 3 { // no column
|
||||||
column, err = strconv.Atoi(parts[2])
|
column, err = strconv.Atoi(parts[2])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Wrapf(err, "failed to parse column from %q", parts[2])
|
return nil, fmt.Errorf("failed to parse column from %q: %w", parts[2], err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
package processors
|
package processors
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
"go/parser"
|
"go/parser"
|
||||||
"go/token"
|
"go/token"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/pkg/errors"
|
|
||||||
|
|
||||||
"github.com/golangci/golangci-lint/pkg/logutils"
|
"github.com/golangci/golangci-lint/pkg/logutils"
|
||||||
"github.com/golangci/golangci-lint/pkg/result"
|
"github.com/golangci/golangci-lint/pkg/result"
|
||||||
)
|
)
|
||||||
@ -107,7 +107,7 @@ func (p *AutogeneratedExclude) getOrCreateFileSummary(i *result.Issue) (*ageFile
|
|||||||
|
|
||||||
doc, err := getDoc(i.FilePath())
|
doc, err := getDoc(i.FilePath())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Wrapf(err, "failed to get doc of file %s", i.FilePath())
|
return nil, fmt.Errorf("failed to get doc of file %s: %w", i.FilePath(), err)
|
||||||
}
|
}
|
||||||
|
|
||||||
fs.isGenerated = isGeneratedFileByComment(doc)
|
fs.isGenerated = isGeneratedFileByComment(doc)
|
||||||
@ -119,7 +119,7 @@ func getDoc(filePath string) (string, error) {
|
|||||||
fset := token.NewFileSet()
|
fset := token.NewFileSet()
|
||||||
syntax, err := parser.ParseFile(fset, filePath, nil, parser.PackageClauseOnly|parser.ParseComments)
|
syntax, err := parser.ParseFile(fset, filePath, nil, parser.PackageClauseOnly|parser.ParseComments)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", errors.Wrap(err, "failed to parse file")
|
return "", fmt.Errorf("failed to parse file: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
var docLines []string
|
var docLines []string
|
||||||
|
@ -1,11 +1,10 @@
|
|||||||
package processors
|
package processors
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/pkg/errors"
|
|
||||||
|
|
||||||
"github.com/golangci/golangci-lint/pkg/goutil"
|
"github.com/golangci/golangci-lint/pkg/goutil"
|
||||||
"github.com/golangci/golangci-lint/pkg/result"
|
"github.com/golangci/golangci-lint/pkg/result"
|
||||||
)
|
)
|
||||||
@ -37,7 +36,7 @@ func (p Cgo) Process(issues []result.Issue) ([]result.Issue, error) {
|
|||||||
if !filepath.IsAbs(i.FilePath()) {
|
if !filepath.IsAbs(i.FilePath()) {
|
||||||
absPath, err := filepath.Abs(i.FilePath())
|
absPath, err := filepath.Abs(i.FilePath())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, errors.Wrapf(err, "failed to build abs path for %q", i.FilePath())
|
return false, fmt.Errorf("failed to build abs path for %q: %w", i.FilePath(), err)
|
||||||
}
|
}
|
||||||
issueFilePath = absPath
|
issueFilePath = absPath
|
||||||
}
|
}
|
||||||
|
@ -8,8 +8,6 @@ import (
|
|||||||
"sort"
|
"sort"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/pkg/errors"
|
|
||||||
|
|
||||||
"github.com/golangci/golangci-lint/internal/robustio"
|
"github.com/golangci/golangci-lint/internal/robustio"
|
||||||
"github.com/golangci/golangci-lint/pkg/config"
|
"github.com/golangci/golangci-lint/pkg/config"
|
||||||
"github.com/golangci/golangci-lint/pkg/fsutils"
|
"github.com/golangci/golangci-lint/pkg/fsutils"
|
||||||
@ -77,14 +75,14 @@ func (f Fixer) fixIssuesInFile(filePath string, issues []result.Issue) error {
|
|||||||
// can't just use bufio.scanner: it has a line length limit
|
// can't just use bufio.scanner: it has a line length limit
|
||||||
origFileData, err := f.fileCache.GetFileBytes(filePath)
|
origFileData, err := f.fileCache.GetFileBytes(filePath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrapf(err, "failed to get file bytes for %s", filePath)
|
return fmt.Errorf("failed to get file bytes for %s: %w", filePath, err)
|
||||||
}
|
}
|
||||||
origFileLines := bytes.Split(origFileData, []byte("\n"))
|
origFileLines := bytes.Split(origFileData, []byte("\n"))
|
||||||
|
|
||||||
tmpFileName := filepath.Join(filepath.Dir(filePath), fmt.Sprintf(".%s.golangci_fix", filepath.Base(filePath)))
|
tmpFileName := filepath.Join(filepath.Dir(filePath), fmt.Sprintf(".%s.golangci_fix", filepath.Base(filePath)))
|
||||||
tmpOutFile, err := os.Create(tmpFileName)
|
tmpOutFile, err := os.Create(tmpFileName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrapf(err, "failed to make file %s", tmpFileName)
|
return fmt.Errorf("failed to make file %s: %w", tmpFileName, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// merge multiple issues per line into one issue
|
// merge multiple issues per line into one issue
|
||||||
@ -112,7 +110,7 @@ func (f Fixer) fixIssuesInFile(filePath string, issues []result.Issue) error {
|
|||||||
tmpOutFile.Close()
|
tmpOutFile.Close()
|
||||||
if err = robustio.Rename(tmpOutFile.Name(), filePath); err != nil {
|
if err = robustio.Rename(tmpOutFile.Name(), filePath); err != nil {
|
||||||
_ = robustio.RemoveAll(tmpOutFile.Name())
|
_ = robustio.RemoveAll(tmpOutFile.Name())
|
||||||
return errors.Wrapf(err, "failed to rename %s -> %s", tmpOutFile.Name(), filePath)
|
return fmt.Errorf("failed to rename %s -> %s: %w", tmpOutFile.Name(), filePath, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
@ -241,7 +239,7 @@ func (f Fixer) writeFixedFile(origFileLines [][]byte, issues []result.Issue, tmp
|
|||||||
outLine += "\n"
|
outLine += "\n"
|
||||||
}
|
}
|
||||||
if _, err := tmpOutFile.WriteString(outLine); err != nil {
|
if _, err := tmpOutFile.WriteString(outLine); err != nil {
|
||||||
return errors.Wrap(err, "failed to write output line")
|
return fmt.Errorf("failed to write output line: %w", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package processors
|
package processors
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/pkg/errors"
|
"fmt"
|
||||||
|
|
||||||
"github.com/golangci/golangci-lint/pkg/result"
|
"github.com/golangci/golangci-lint/pkg/result"
|
||||||
)
|
)
|
||||||
@ -22,7 +22,7 @@ func filterIssuesErr(issues []result.Issue, filter func(i *result.Issue) (bool,
|
|||||||
for i := range issues {
|
for i := range issues {
|
||||||
ok, err := filter(&issues[i])
|
ok, err := filter(&issues[i])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Wrapf(err, "can't filter issue %#v", issues[i])
|
return nil, fmt.Errorf("can't filter issue %#v: %w", issues[i], err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if ok {
|
if ok {
|
||||||
|
@ -1,12 +1,11 @@
|
|||||||
package processors
|
package processors
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"regexp"
|
"regexp"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/pkg/errors"
|
|
||||||
|
|
||||||
"github.com/golangci/golangci-lint/pkg/fsutils"
|
"github.com/golangci/golangci-lint/pkg/fsutils"
|
||||||
"github.com/golangci/golangci-lint/pkg/logutils"
|
"github.com/golangci/golangci-lint/pkg/logutils"
|
||||||
"github.com/golangci/golangci-lint/pkg/result"
|
"github.com/golangci/golangci-lint/pkg/result"
|
||||||
@ -35,7 +34,7 @@ func NewSkipDirs(patterns []string, log logutils.Log, runArgs []string) (*SkipDi
|
|||||||
p = fsutils.NormalizePathInRegex(p)
|
p = fsutils.NormalizePathInRegex(p)
|
||||||
patternRe, err := regexp.Compile(p)
|
patternRe, err := regexp.Compile(p)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Wrapf(err, "can't compile regexp %q", p)
|
return nil, fmt.Errorf("can't compile regexp %q: %w", p, err)
|
||||||
}
|
}
|
||||||
patternsRe = append(patternsRe, patternRe)
|
patternsRe = append(patternsRe, patternRe)
|
||||||
}
|
}
|
||||||
@ -52,7 +51,7 @@ func NewSkipDirs(patterns []string, log logutils.Log, runArgs []string) (*SkipDi
|
|||||||
|
|
||||||
absArg, err := filepath.Abs(arg)
|
absArg, err := filepath.Abs(arg)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Wrapf(err, "failed to abs-ify arg %q", arg)
|
return nil, fmt.Errorf("failed to abs-ify arg %q: %w", arg, err)
|
||||||
}
|
}
|
||||||
absArgsDirs = append(absArgsDirs, absArg)
|
absArgsDirs = append(absArgsDirs, absArg)
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user