Skip to content

Commit 3706d2b

Browse files
author
Jan Steinke
committed
use x/xerrors to create new errors
1 parent b3315ee commit 3706d2b

27 files changed

+106
-93
lines changed

go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,5 @@ go 1.11
55
require (
66
golang.org/x/net v0.0.0-20190311183353-d8887717615a
77
golang.org/x/sync v0.0.0-20190423024810-112230192c58
8+
golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522
89
)

go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,5 @@ golang.org/x/sync v0.0.0-20190423024810-112230192c58 h1:8gQV6CLnAEikrhgkHFbMAEha
55
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
66
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
77
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
8+
golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522 h1:bhOzK9QyoD0ogCnFro1m2mz41+Ib0oOhfJnBp5MR4K4=
9+
golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=

internal/lsp/cache/check.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ package cache
66

77
import (
88
"context"
9-
"fmt"
109
"go/ast"
1110
"go/scanner"
1211
"go/token"
@@ -15,6 +14,7 @@ import (
1514
"golang.org/x/tools/go/analysis"
1615
"golang.org/x/tools/go/packages"
1716
"golang.org/x/tools/internal/span"
17+
"golang.org/x/xerrors"
1818
)
1919

2020
type importer struct {
@@ -38,7 +38,7 @@ func (imp *importer) Import(pkgPath string) (*types.Package, error) {
3838

3939
func (imp *importer) getPkg(pkgPath string) (*pkg, error) {
4040
if _, ok := imp.seen[pkgPath]; ok {
41-
return nil, fmt.Errorf("circular import detected")
41+
return nil, xerrors.Errorf("circular import detected")
4242
}
4343
imp.view.pcache.mu.Lock()
4444
e, ok := imp.view.pcache.packages[pkgPath]
@@ -67,7 +67,7 @@ func (imp *importer) getPkg(pkgPath string) (*pkg, error) {
6767
func (imp *importer) typeCheck(pkgPath string) (*pkg, error) {
6868
meta, ok := imp.view.mcache.packages[pkgPath]
6969
if !ok {
70-
return nil, fmt.Errorf("no metadata for %v", pkgPath)
70+
return nil, xerrors.Errorf("no metadata for %v", pkgPath)
7171
}
7272
// Use the default type information for the unsafe package.
7373
var typ *types.Package

internal/lsp/cache/load.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77

88
"golang.org/x/tools/go/packages"
99
"golang.org/x/tools/internal/span"
10+
"golang.org/x/xerrors"
1011
)
1112

1213
func (v *view) loadParseTypecheck(ctx context.Context, f *goFile) ([]packages.Error, error) {
@@ -29,7 +30,7 @@ func (v *view) loadParseTypecheck(ctx context.Context, f *goFile) ([]packages.Er
2930
return errs, err
3031
}
3132
if f.meta == nil {
32-
return nil, fmt.Errorf("no metadata found for %v", f.filename())
33+
return nil, xerrors.Errorf("no metadata found for %v", f.filename())
3334
}
3435
imp := &importer{
3536
view: v,
@@ -48,7 +49,7 @@ func (v *view) loadParseTypecheck(ctx context.Context, f *goFile) ([]packages.Er
4849
}
4950
// If we still have not found the package for the file, something is wrong.
5051
if f.pkg == nil {
51-
return nil, fmt.Errorf("parse: no package found for %v", f.filename())
52+
return nil, xerrors.Errorf("parse: no package found for %v", f.filename())
5253
}
5354
return nil, nil
5455
}
@@ -59,7 +60,7 @@ func (v *view) checkMetadata(ctx context.Context, f *goFile) ([]packages.Error,
5960
pkgs, err := packages.Load(cfg, fmt.Sprintf("file=%s", f.filename()))
6061
if len(pkgs) == 0 {
6162
if err == nil {
62-
err = fmt.Errorf("%s: no packages found", f.filename())
63+
err = xerrors.Errorf("%s: no packages found", f.filename())
6364
}
6465
// Return this error as a diagnostic to the user.
6566
return []packages.Error{
@@ -73,7 +74,7 @@ func (v *view) checkMetadata(ctx context.Context, f *goFile) ([]packages.Error,
7374
// If the package comes back with errors from `go list`, don't bother
7475
// type-checking it.
7576
if len(pkg.Errors) > 0 {
76-
return pkg.Errors, fmt.Errorf("package %s has errors, skipping type-checking", pkg.PkgPath)
77+
return pkg.Errors, xerrors.Errorf("package %s has errors, skipping type-checking", pkg.PkgPath)
7778
}
7879
v.link(ctx, pkg.PkgPath, pkg, nil)
7980
}

internal/lsp/cache/parse.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ package cache
66

77
import (
88
"context"
9-
"fmt"
109
"go/ast"
1110
"go/parser"
1211
"go/scanner"
@@ -17,6 +16,7 @@ import (
1716
"sync"
1817

1918
"golang.org/x/tools/internal/span"
19+
"golang.org/x/xerrors"
2020
)
2121

2222
func parseFile(fset *token.FileSet, filename string, src []byte) (*ast.File, error) {
@@ -54,7 +54,7 @@ func (imp *importer) parseFiles(filenames []string) ([]*ast.File, []error) {
5454
}
5555
gof, ok := f.(*goFile)
5656
if !ok {
57-
parsed[i], errors[i] = nil, fmt.Errorf("Non go file in parse call: %v", filename)
57+
parsed[i], errors[i] = nil, xerrors.Errorf("Non go file in parse call: %v", filename)
5858
continue
5959
}
6060

@@ -72,7 +72,7 @@ func (imp *importer) parseFiles(filenames []string) ([]*ast.File, []error) {
7272
}
7373
src := gof.fc.Data
7474
if src == nil {
75-
parsed[i], errors[i] = nil, fmt.Errorf("No source for %v", filename)
75+
parsed[i], errors[i] = nil, xerrors.Errorf("No source for %v", filename)
7676
} else {
7777
// ParseFile may return both an AST and an error.
7878
parsed[i], errors[i] = parseFile(imp.fset, filename, src)
@@ -175,7 +175,7 @@ func (v *view) parseDeferOrGoStmt(bad *ast.BadStmt, parent ast.Node, tok *token.
175175
var lit string
176176
for {
177177
if tkn == token.EOF {
178-
return fmt.Errorf("reached the end of the file")
178+
return xerrors.Errorf("reached the end of the file")
179179
}
180180
if pos >= bad.From {
181181
break
@@ -193,7 +193,7 @@ func (v *view) parseDeferOrGoStmt(bad *ast.BadStmt, parent ast.Node, tok *token.
193193
Go: pos,
194194
}
195195
default:
196-
return fmt.Errorf("no defer or go statement found")
196+
return xerrors.Errorf("no defer or go statement found")
197197
}
198198

199199
// The expression after the "defer" or "go" starts at this position.
@@ -218,15 +218,15 @@ FindTo:
218218
to = curr
219219
}
220220
if !from.IsValid() || tok.Offset(from) >= len(src) {
221-
return fmt.Errorf("invalid from position")
221+
return xerrors.Errorf("invalid from position")
222222
}
223223
if !to.IsValid() || tok.Offset(to)+1 >= len(src) {
224-
return fmt.Errorf("invalid to position")
224+
return xerrors.Errorf("invalid to position")
225225
}
226226
exprstr := string(src[tok.Offset(from) : tok.Offset(to)+1])
227227
expr, err := parser.ParseExpr(exprstr)
228228
if expr == nil {
229-
return fmt.Errorf("no expr in %s: %v", exprstr, err)
229+
return xerrors.Errorf("no expr in %s: %v", exprstr, err)
230230
}
231231
// parser.ParseExpr returns undefined positions.
232232
// Adjust them for the current file.

internal/lsp/cache/session.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,14 @@ package cache
66

77
import (
88
"context"
9-
"fmt"
109
"os"
1110
"strings"
1211
"sync"
1312

1413
"golang.org/x/tools/internal/lsp/source"
1514
"golang.org/x/tools/internal/lsp/xlog"
1615
"golang.org/x/tools/internal/span"
16+
"golang.org/x/xerrors"
1717
)
1818

1919
type session struct {
@@ -150,7 +150,7 @@ func (s *session) removeView(ctx context.Context, view *view) error {
150150
return nil
151151
}
152152
}
153-
return fmt.Errorf("view %s for %v not found", view.Name(), view.Folder())
153+
return xerrors.Errorf("view %s for %v not found", view.Name(), view.Folder())
154154
}
155155

156156
func (s *session) Logger() xlog.Logger {

internal/lsp/cache/view.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ package cache
66

77
import (
88
"context"
9-
"fmt"
109
"go/ast"
1110
"go/parser"
1211
"go/types"
@@ -17,6 +16,7 @@ import (
1716
"golang.org/x/tools/go/packages"
1817
"golang.org/x/tools/internal/lsp/source"
1918
"golang.org/x/tools/internal/span"
19+
"golang.org/x/xerrors"
2020
)
2121

2222
type view struct {
@@ -340,7 +340,7 @@ func (v *view) getFile(uri span.URI) (viewFile, error) {
340340
},
341341
}
342342
default:
343-
return nil, fmt.Errorf("unsupported file extension: %s", ext)
343+
return nil, xerrors.Errorf("unsupported file extension: %s", ext)
344344
}
345345
v.mapFile(uri, f)
346346
return f, nil

internal/lsp/cmd/check.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"time"
1212

1313
"golang.org/x/tools/internal/span"
14+
"golang.org/x/xerrors"
1415
)
1516

1617
// check implements the check verb for gopls.
@@ -60,14 +61,14 @@ func (c *check) Run(ctx context.Context, args ...string) error {
6061
select {
6162
case <-file.hasDiagnostics:
6263
case <-time.Tick(30 * time.Second):
63-
return fmt.Errorf("timed out waiting for results from %v", file.uri)
64+
return xerrors.Errorf("timed out waiting for results from %v", file.uri)
6465
}
6566
file.diagnosticsMu.Lock()
6667
defer file.diagnosticsMu.Unlock()
6768
for _, d := range file.diagnostics {
6869
spn, err := file.mapper.RangeSpan(d.Range)
6970
if err != nil {
70-
return fmt.Errorf("Could not convert position %v for %q", d.Range, d.Message)
71+
return xerrors.Errorf("Could not convert position %v for %q", d.Range, d.Message)
7172
}
7273
fmt.Printf("%v: %v\n", spn, d.Message)
7374
}

internal/lsp/cmd/cmd.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import (
2626
"golang.org/x/tools/internal/lsp/source"
2727
"golang.org/x/tools/internal/span"
2828
"golang.org/x/tools/internal/tool"
29+
"golang.org/x/xerrors"
2930
)
3031

3132
// Application is the main application as passed to tool.Main
@@ -320,12 +321,12 @@ func (c *cmdClient) getFile(ctx context.Context, uri span.URI) *cmdFile {
320321
if file.mapper == nil {
321322
fname, err := uri.Filename()
322323
if err != nil {
323-
file.err = fmt.Errorf("%v: %v", uri, err)
324+
file.err = xerrors.Errorf("%v: %v", uri, err)
324325
return file
325326
}
326327
content, err := ioutil.ReadFile(fname)
327328
if err != nil {
328-
file.err = fmt.Errorf("%v: %v", uri, err)
329+
file.err = xerrors.Errorf("%v: %v", uri, err)
329330
return file
330331
}
331332
f := c.fset.AddFile(fname, -1, len(content))
@@ -345,7 +346,7 @@ func (c *connection) AddFile(ctx context.Context, uri span.URI) *cmdFile {
345346
p.TextDocument.URI = string(uri)
346347
p.TextDocument.Text = string(file.mapper.Content)
347348
if err := c.Server.DidOpen(ctx, p); err != nil {
348-
file.err = fmt.Errorf("%v: %v", uri, err)
349+
file.err = xerrors.Errorf("%v: %v", uri, err)
349350
}
350351
}
351352
return file

internal/lsp/cmd/definition.go

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import (
1616
"golang.org/x/tools/internal/lsp/protocol"
1717
"golang.org/x/tools/internal/span"
1818
"golang.org/x/tools/internal/tool"
19+
"golang.org/x/xerrors"
1920
)
2021

2122
// A Definition is the result of a 'definition' query.
@@ -79,26 +80,26 @@ func (d *definition) Run(ctx context.Context, args ...string) error {
7980
}
8081
locs, err := conn.Definition(ctx, &p)
8182
if err != nil {
82-
return fmt.Errorf("%v: %v", from, err)
83+
return xerrors.Errorf("%v: %v", from, err)
8384
}
8485

8586
if len(locs) == 0 {
86-
return fmt.Errorf("%v: not an identifier", from)
87+
return xerrors.Errorf("%v: not an identifier", from)
8788
}
8889
hover, err := conn.Hover(ctx, &p)
8990
if err != nil {
90-
return fmt.Errorf("%v: %v", from, err)
91+
return xerrors.Errorf("%v: %v", from, err)
9192
}
9293
if hover == nil {
93-
return fmt.Errorf("%v: not an identifier", from)
94+
return xerrors.Errorf("%v: not an identifier", from)
9495
}
9596
file = conn.AddFile(ctx, span.NewURI(locs[0].URI))
9697
if file.err != nil {
97-
return fmt.Errorf("%v: %v", from, file.err)
98+
return xerrors.Errorf("%v: %v", from, file.err)
9899
}
99100
definition, err := file.mapper.Span(locs[0])
100101
if err != nil {
101-
return fmt.Errorf("%v: %v", from, err)
102+
return xerrors.Errorf("%v: %v", from, err)
102103
}
103104
description := strings.TrimSpace(hover.Contents.Value)
104105
var result interface{}
@@ -115,7 +116,7 @@ func (d *definition) Run(ctx context.Context, args ...string) error {
115116
Desc: description,
116117
}
117118
default:
118-
return fmt.Errorf("unknown emulation for definition: %s", d.query.Emulate)
119+
return xerrors.Errorf("unknown emulation for definition: %s", d.query.Emulate)
119120
}
120121
if err != nil {
121122
return err
@@ -131,7 +132,7 @@ func (d *definition) Run(ctx context.Context, args ...string) error {
131132
case *guru.Definition:
132133
fmt.Printf("%s: defined here as %s", d.ObjPos, d.Desc)
133134
default:
134-
return fmt.Errorf("no printer for type %T", result)
135+
return xerrors.Errorf("no printer for type %T", result)
135136
}
136137
return nil
137138
}

internal/lsp/cmd/format.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import (
1616
"golang.org/x/tools/internal/lsp/protocol"
1717
"golang.org/x/tools/internal/lsp/source"
1818
"golang.org/x/tools/internal/span"
19+
"golang.org/x/xerrors"
1920
)
2021

2122
// format implements the format verb for gopls.
@@ -68,18 +69,18 @@ func (f *format) Run(ctx context.Context, args ...string) error {
6869
return err
6970
}
7071
if loc.Range.Start != loc.Range.End {
71-
return fmt.Errorf("only full file formatting supported")
72+
return xerrors.Errorf("only full file formatting supported")
7273
}
7374
p := protocol.DocumentFormattingParams{
7475
TextDocument: protocol.TextDocumentIdentifier{URI: loc.URI},
7576
}
7677
edits, err := conn.Formatting(ctx, &p)
7778
if err != nil {
78-
return fmt.Errorf("%v: %v", spn, err)
79+
return xerrors.Errorf("%v: %v", spn, err)
7980
}
8081
sedits, err := lsp.FromProtocolEdits(file.mapper, edits)
8182
if err != nil {
82-
return fmt.Errorf("%v: %v", spn, err)
83+
return xerrors.Errorf("%v: %v", spn, err)
8384
}
8485
ops := source.EditsToDiff(sedits)
8586
lines := diff.SplitLines(string(file.mapper.Content))

internal/lsp/cmd/serve.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121
"golang.org/x/tools/internal/lsp"
2222
"golang.org/x/tools/internal/lsp/debug"
2323
"golang.org/x/tools/internal/tool"
24+
"golang.org/x/xerrors"
2425
)
2526

2627
// Serve is a struct that exposes the configurable parts of the LSP server as
@@ -65,7 +66,7 @@ func (s *Serve) Run(ctx context.Context, args ...string) error {
6566
}
6667
f, err := os.Create(filename)
6768
if err != nil {
68-
return fmt.Errorf("Unable to create log file: %v", err)
69+
return xerrors.Errorf("Unable to create log file: %v", err)
6970
}
7071
defer f.Close()
7172
log.SetOutput(io.MultiWriter(os.Stderr, f))

internal/lsp/code_action.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,12 @@ package lsp
66

77
import (
88
"context"
9-
"fmt"
109
"strings"
1110

1211
"golang.org/x/tools/internal/lsp/protocol"
1312
"golang.org/x/tools/internal/lsp/source"
1413
"golang.org/x/tools/internal/span"
14+
"golang.org/x/xerrors"
1515
)
1616

1717
func (s *Server) codeAction(ctx context.Context, params *protocol.CodeActionParams) ([]protocol.CodeAction, error) {
@@ -75,7 +75,7 @@ func organizeImports(ctx context.Context, v source.View, s span.Span) ([]protoco
7575
// If we have a single point, assume we want the whole file.
7676
tok := f.GetToken(ctx)
7777
if tok == nil {
78-
return nil, fmt.Errorf("no file information for %s", f.URI())
78+
return nil, xerrors.Errorf("no file information for %s", f.URI())
7979
}
8080
rng.End = tok.Pos(tok.Size())
8181
}

0 commit comments

Comments
 (0)