gopls/internal/lsp/protocol: LocationTextDocumentPositionParams A helper function for populating LSP requests. Change-Id: Id9cbca56f8e32321680ba8ee4d7073d097789784 Reviewed-on: https://go-review.googlesource.com/c/tools/+/463683 Reviewed-by: Robert Findley <rfindley@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> gopls-CI: kokoro <noreply+kokoro@google.com> Run-TryBot: Alan Donovan <adonovan@google.com> Auto-Submit: Alan Donovan <adonovan@google.com>
diff --git a/gopls/internal/lsp/cmd/call_hierarchy.go b/gopls/internal/lsp/cmd/call_hierarchy.go index 9892fdf..eb5d29d 100644 --- a/gopls/internal/lsp/cmd/call_hierarchy.go +++ b/gopls/internal/lsp/cmd/call_hierarchy.go
@@ -58,10 +58,7 @@ } p := protocol.CallHierarchyPrepareParams{ - TextDocumentPositionParams: protocol.TextDocumentPositionParams{ - TextDocument: protocol.TextDocumentIdentifier{URI: loc.URI}, - Position: loc.Range.Start, - }, + TextDocumentPositionParams: protocol.LocationTextDocumentPositionParams(loc), } callItems, err := conn.PrepareCallHierarchy(ctx, &p)
diff --git a/gopls/internal/lsp/cmd/definition.go b/gopls/internal/lsp/cmd/definition.go index 269172d..952f43b 100644 --- a/gopls/internal/lsp/cmd/definition.go +++ b/gopls/internal/lsp/cmd/definition.go
@@ -88,12 +88,8 @@ if err != nil { return err } - tdpp := protocol.TextDocumentPositionParams{ - TextDocument: protocol.TextDocumentIdentifier{URI: loc.URI}, - Position: loc.Range.Start, - } p := protocol.DefinitionParams{ - TextDocumentPositionParams: tdpp, + TextDocumentPositionParams: protocol.LocationTextDocumentPositionParams(loc), } locs, err := conn.Definition(ctx, &p) if err != nil { @@ -104,7 +100,7 @@ return fmt.Errorf("%v: not an identifier", from) } q := protocol.HoverParams{ - TextDocumentPositionParams: tdpp, + TextDocumentPositionParams: protocol.LocationTextDocumentPositionParams(loc), } hover, err := conn.Hover(ctx, &q) if err != nil {
diff --git a/gopls/internal/lsp/cmd/highlight.go b/gopls/internal/lsp/cmd/highlight.go index bcb7149..60c04b2 100644 --- a/gopls/internal/lsp/cmd/highlight.go +++ b/gopls/internal/lsp/cmd/highlight.go
@@ -57,10 +57,7 @@ } p := protocol.DocumentHighlightParams{ - TextDocumentPositionParams: protocol.TextDocumentPositionParams{ - TextDocument: protocol.TextDocumentIdentifier{URI: loc.URI}, - Position: loc.Range.Start, - }, + TextDocumentPositionParams: protocol.LocationTextDocumentPositionParams(loc), } highlights, err := conn.DocumentHighlight(ctx, &p) if err != nil {
diff --git a/gopls/internal/lsp/cmd/implementation.go b/gopls/internal/lsp/cmd/implementation.go index eed41ab..bb5b1c2 100644 --- a/gopls/internal/lsp/cmd/implementation.go +++ b/gopls/internal/lsp/cmd/implementation.go
@@ -58,12 +58,8 @@ } p := protocol.ImplementationParams{ - TextDocumentPositionParams: protocol.TextDocumentPositionParams{ - TextDocument: protocol.TextDocumentIdentifier{URI: loc.URI}, - Position: loc.Range.Start, - }, + TextDocumentPositionParams: protocol.LocationTextDocumentPositionParams(loc), } - implementations, err := conn.Implementation(ctx, &p) if err != nil { return err
diff --git a/gopls/internal/lsp/cmd/prepare_rename.go b/gopls/internal/lsp/cmd/prepare_rename.go index 774433d..5e9d732 100644 --- a/gopls/internal/lsp/cmd/prepare_rename.go +++ b/gopls/internal/lsp/cmd/prepare_rename.go
@@ -60,10 +60,7 @@ return err } p := protocol.PrepareRenameParams{ - TextDocumentPositionParams: protocol.TextDocumentPositionParams{ - TextDocument: protocol.TextDocumentIdentifier{URI: loc.URI}, - Position: loc.Range.Start, - }, + TextDocumentPositionParams: protocol.LocationTextDocumentPositionParams(loc), } result, err := conn.PrepareRename(ctx, &p) if err != nil {
diff --git a/gopls/internal/lsp/cmd/references.go b/gopls/internal/lsp/cmd/references.go index 533fcc1..6db5ce3 100644 --- a/gopls/internal/lsp/cmd/references.go +++ b/gopls/internal/lsp/cmd/references.go
@@ -63,10 +63,7 @@ Context: protocol.ReferenceContext{ IncludeDeclaration: r.IncludeDeclaration, }, - TextDocumentPositionParams: protocol.TextDocumentPositionParams{ - TextDocument: protocol.TextDocumentIdentifier{URI: loc.URI}, - Position: loc.Range.Start, - }, + TextDocumentPositionParams: protocol.LocationTextDocumentPositionParams(loc), } locations, err := conn.References(ctx, &p) if err != nil {
diff --git a/gopls/internal/lsp/cmd/signature.go b/gopls/internal/lsp/cmd/signature.go index 2f34b9b..64c892e 100644 --- a/gopls/internal/lsp/cmd/signature.go +++ b/gopls/internal/lsp/cmd/signature.go
@@ -56,14 +56,8 @@ return err } - tdpp := protocol.TextDocumentPositionParams{ - TextDocument: protocol.TextDocumentIdentifier{ - URI: protocol.URIFromSpanURI(from.URI()), - }, - Position: loc.Range.Start, - } p := protocol.SignatureHelpParams{ - TextDocumentPositionParams: tdpp, + TextDocumentPositionParams: protocol.LocationTextDocumentPositionParams(loc), } s, err := conn.SignatureHelp(ctx, &p)
diff --git a/gopls/internal/lsp/fake/editor.go b/gopls/internal/lsp/fake/editor.go index 9a1f0dd..70d5e5e 100644 --- a/gopls/internal/lsp/fake/editor.go +++ b/gopls/internal/lsp/fake/editor.go
@@ -1047,10 +1047,7 @@ return nil, fmt.Errorf("buffer %q is not open", path) } params := &protocol.CompletionParams{ - TextDocumentPositionParams: protocol.TextDocumentPositionParams{ - TextDocument: e.TextDocumentIdentifier(path), - Position: loc.Range.Start, - }, + TextDocumentPositionParams: protocol.LocationTextDocumentPositionParams(loc), } completions, err := e.Server.Completion(ctx, params) if err != nil { @@ -1122,10 +1119,7 @@ return nil, fmt.Errorf("buffer %q is not open", path) } params := &protocol.ReferenceParams{ - TextDocumentPositionParams: protocol.TextDocumentPositionParams{ - TextDocument: e.TextDocumentIdentifier(path), - Position: loc.Range.Start, - }, + TextDocumentPositionParams: protocol.LocationTextDocumentPositionParams(loc), Context: protocol.ReferenceContext{ IncludeDeclaration: true, }, @@ -1185,10 +1179,7 @@ return nil, fmt.Errorf("buffer %q is not open", path) } params := &protocol.ImplementationParams{ - TextDocumentPositionParams: protocol.TextDocumentPositionParams{ - TextDocument: e.TextDocumentIdentifier(path), - Position: loc.Range.Start, - }, + TextDocumentPositionParams: protocol.LocationTextDocumentPositionParams(loc), } return e.Server.Implementation(ctx, params) }
diff --git a/gopls/internal/lsp/lsp_test.go b/gopls/internal/lsp/lsp_test.go index 212ba0f..5290e61 100644 --- a/gopls/internal/lsp/lsp_test.go +++ b/gopls/internal/lsp/lsp_test.go
@@ -154,10 +154,7 @@ } params := &protocol.CallHierarchyPrepareParams{ - TextDocumentPositionParams: protocol.TextDocumentPositionParams{ - TextDocument: protocol.TextDocumentIdentifier{URI: loc.URI}, - Position: loc.Range.Start, - }, + TextDocumentPositionParams: protocol.LocationTextDocumentPositionParams(loc), } items, err := r.server.PrepareCallHierarchy(r.ctx, params) @@ -678,10 +675,7 @@ if err != nil { t.Fatalf("failed for %v: %v", d.Src, err) } - tdpp := protocol.TextDocumentPositionParams{ - TextDocument: protocol.TextDocumentIdentifier{URI: loc.URI}, - Position: loc.Range.Start, - } + tdpp := protocol.LocationTextDocumentPositionParams(loc) var locs []protocol.Location var hover *protocol.Hover if d.IsType { @@ -749,10 +743,7 @@ t.Fatal(err) } gotImpls, err := r.server.Implementation(r.ctx, &protocol.ImplementationParams{ - TextDocumentPositionParams: protocol.TextDocumentPositionParams{ - TextDocument: protocol.TextDocumentIdentifier{URI: loc.URI}, - Position: loc.Range.Start, - }, + TextDocumentPositionParams: protocol.LocationTextDocumentPositionParams(loc), }) if err != nil { t.Fatalf("Server.Implementation(%s): %v", spn, err) @@ -780,17 +771,8 @@ if err != nil { t.Fatal(err) } - tdpp := protocol.TextDocumentPositionParams{ - TextDocument: protocol.TextDocumentIdentifier{ - URI: loc.URI, - }, - Position: loc.Range.Start, - } - if err != nil { - t.Fatalf("Mapper.SpanDocumentPosition(%v) failed: %v", src, err) - } params := &protocol.DocumentHighlightParams{ - TextDocumentPositionParams: tdpp, + TextDocumentPositionParams: protocol.LocationTextDocumentPositionParams(loc), } highlights, err := r.server.DocumentHighlight(r.ctx, params) if err != nil { @@ -833,12 +815,8 @@ if err != nil { t.Fatalf("failed for %v", err) } - tdpp := protocol.TextDocumentPositionParams{ - TextDocument: protocol.TextDocumentIdentifier{URI: loc.URI}, - Position: loc.Range.Start, - } params := &protocol.HoverParams{ - TextDocumentPositionParams: tdpp, + TextDocumentPositionParams: protocol.LocationTextDocumentPositionParams(loc), } hover, err := r.server.Hover(r.ctx, params) if err != nil { @@ -894,10 +872,7 @@ want[loc] = true } params := &protocol.ReferenceParams{ - TextDocumentPositionParams: protocol.TextDocumentPositionParams{ - TextDocument: protocol.TextDocumentIdentifier{URI: loc.URI}, - Position: loc.Range.Start, - }, + TextDocumentPositionParams: protocol.LocationTextDocumentPositionParams(loc), Context: protocol.ReferenceContext{ IncludeDeclaration: includeDeclaration, }, @@ -1065,12 +1040,8 @@ if err != nil { t.Fatalf("failed for %v: %v", src, err) } - tdpp := protocol.TextDocumentPositionParams{ - TextDocument: protocol.TextDocumentIdentifier{URI: loc.URI}, - Position: loc.Range.Start, - } params := &protocol.PrepareRenameParams{ - TextDocumentPositionParams: tdpp, + TextDocumentPositionParams: protocol.LocationTextDocumentPositionParams(loc), } got, err := r.server.PrepareRename(context.Background(), params) if err != nil { @@ -1206,14 +1177,8 @@ if err != nil { t.Fatalf("failed for %v: %v", loc, err) } - tdpp := protocol.TextDocumentPositionParams{ - TextDocument: protocol.TextDocumentIdentifier{ - URI: protocol.URIFromSpanURI(spn.URI()), - }, - Position: loc.Range.Start, - } params := &protocol.SignatureHelpParams{ - TextDocumentPositionParams: tdpp, + TextDocumentPositionParams: protocol.LocationTextDocumentPositionParams(loc), } got, err := r.server.SignatureHelp(r.ctx, params) if err != nil {
diff --git a/gopls/internal/lsp/protocol/mapper.go b/gopls/internal/lsp/protocol/mapper.go index e1e2578..63f28d1 100644 --- a/gopls/internal/lsp/protocol/mapper.go +++ b/gopls/internal/lsp/protocol/mapper.go
@@ -502,3 +502,11 @@ func (mr MappedRange) String() string { return fmt.Sprint(mr.Span()) } + +// LocationTextDocumentPositionParams converts its argument to its result. +func LocationTextDocumentPositionParams(loc Location) TextDocumentPositionParams { + return TextDocumentPositionParams{ + TextDocument: TextDocumentIdentifier{URI: loc.URI}, + Position: loc.Range.Start, + } +}
diff --git a/gopls/internal/regtest/misc/rename_test.go b/gopls/internal/regtest/misc/rename_test.go index 833d3db..ba5cf7a 100644 --- a/gopls/internal/regtest/misc/rename_test.go +++ b/gopls/internal/regtest/misc/rename_test.go
@@ -35,13 +35,8 @@ Run(t, files, func(t *testing.T, env *Env) { env.OpenFile("main.go") loc := env.RegexpSearch("main.go", `main`) - // TODO(adonovan): define a helper from Location to TextDocumentPositionParams. - tdpp := protocol.TextDocumentPositionParams{ - TextDocument: env.Editor.TextDocumentIdentifier("main.go"), - Position: loc.Range.Start, - } params := &protocol.PrepareRenameParams{ - TextDocumentPositionParams: tdpp, + TextDocumentPositionParams: protocol.LocationTextDocumentPositionParams(loc), } _, err := env.Editor.Server.PrepareRename(env.Ctx, params) if err == nil { @@ -142,12 +137,8 @@ const wantErr = "can't rename package: missing module information for package" Run(t, files, func(t *testing.T, env *Env) { loc := env.RegexpSearch("lib/a.go", "lib") - tdpp := protocol.TextDocumentPositionParams{ - TextDocument: env.Editor.TextDocumentIdentifier("lib/a.go"), - Position: loc.Range.Start, - } params := &protocol.PrepareRenameParams{ - TextDocumentPositionParams: tdpp, + TextDocumentPositionParams: protocol.LocationTextDocumentPositionParams(loc), } _, err := env.Editor.Server.PrepareRename(env.Ctx, params) if err == nil || !strings.Contains(err.Error(), wantErr) {