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