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) {