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)