From a754db16a40a9d94359b6600b825419c0ca6f986 Mon Sep 17 00:00:00 2001 From: Rebecca Stambler Date: Wed, 20 Feb 2019 15:14:33 -0500 Subject: [PATCH] internal/lsp: absolutize paths when converting filenames to URIs Fixes golang/go#30280 Change-Id: I95e72c8d952ce7d64114772e9ef3df6568ae5dd4 Reviewed-on: https://go-review.googlesource.com/c/163160 Run-TryBot: Rebecca Stambler TryBot-Result: Gobot Gobot Reviewed-by: Ian Cottrell --- internal/lsp/cmd/definition.go | 3 +++ internal/lsp/cmd/location.go | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/internal/lsp/cmd/definition.go b/internal/lsp/cmd/definition.go index 29202e88..829a44e9 100644 --- a/internal/lsp/cmd/definition.go +++ b/internal/lsp/cmd/definition.go @@ -67,6 +67,9 @@ func (d *definition) Run(ctx context.Context, args ...string) error { } tok := f.GetToken() pos := tok.Pos(from.Start.Offset) + if !pos.IsValid() { + return fmt.Errorf("invalid position %v", from.Start.Offset) + } ident, err := source.Identifier(ctx, view, f, pos) if err != nil { return err diff --git a/internal/lsp/cmd/location.go b/internal/lsp/cmd/location.go index 29372b76..101046e0 100644 --- a/internal/lsp/cmd/location.go +++ b/internal/lsp/cmd/location.go @@ -7,6 +7,7 @@ package cmd import ( "fmt" "go/token" + "path/filepath" "regexp" "strconv" @@ -98,6 +99,9 @@ func parseLocation(value string) (Location, error) { return loc, fmt.Errorf("bad location syntax %q", value) } loc.Filename = m[posReFile] + if !filepath.IsAbs(loc.Filename) { + loc.Filename, _ = filepath.Abs(loc.Filename) // ignore error + } if m[posReSLine] != "" { v, err := strconv.ParseInt(m[posReSLine], 10, 32) if err != nil {