From bb1270c20edf080f9f069ea11a1fe5c2b0ebd62c Mon Sep 17 00:00:00 2001 From: Ian Cottrell Date: Mon, 18 Mar 2019 14:40:57 -0400 Subject: [PATCH] internal/lsp: fix accepting line:colum forms to query definition Change-Id: I425a9ebf77925b16fb7cb6fd5727d2377ab836b1 Reviewed-on: https://go-review.googlesource.com/c/tools/+/168178 Run-TryBot: Ian Cottrell TryBot-Result: Gobot Gobot Reviewed-by: Michael Matloob --- internal/lsp/cmd/definition.go | 10 +++++----- internal/lsp/cmd/definition_test.go | 4 +++- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/internal/lsp/cmd/definition.go b/internal/lsp/cmd/definition.go index d80c197f5f..b7d41ceb8b 100644 --- a/internal/lsp/cmd/definition.go +++ b/internal/lsp/cmd/definition.go @@ -67,12 +67,12 @@ func (d *definition) Run(ctx context.Context, args ...string) error { if err != nil { return err } - tok := f.GetToken(ctx) - pos := tok.Pos(from.Start().Offset()) - if !pos.IsValid() { - return fmt.Errorf("invalid position %v", from) + converter := span.NewTokenConverter(view.FileSet(), f.GetToken(ctx)) + rng, err := from.Range(converter) + if err != nil { + return err } - ident, err := source.Identifier(ctx, view, f, pos) + ident, err := source.Identifier(ctx, view, f, rng.Start) if err != nil { return fmt.Errorf("%v: %v", from, err) } diff --git a/internal/lsp/cmd/definition_test.go b/internal/lsp/cmd/definition_test.go index f4cfc6a0c0..7508c0ce77 100644 --- a/internal/lsp/cmd/definition_test.go +++ b/internal/lsp/cmd/definition_test.go @@ -39,7 +39,9 @@ func TestDefinitionHelpExample(t *testing.T) { thisFile := filepath.Join(dir, "definition.go") baseArgs := []string{"query", "definition"} expect := regexp.MustCompile(`^[\w/\\:_]+flag[/\\]flag.go:\d+:\d+-\d+: defined here as type flag.FlagSet struct{.*}$`) - for _, query := range []string{fmt.Sprintf("%v:#%v", thisFile, cmd.ExampleOffset)} { + for _, query := range []string{ + fmt.Sprintf("%v:%v:%v", thisFile, cmd.ExampleLine, cmd.ExampleColumn), + fmt.Sprintf("%v:#%v", thisFile, cmd.ExampleOffset)} { args := append(baseArgs, query) got := captureStdOut(t, func() { tool.Main(context.Background(), &cmd.Application{}, args)