Skip to content

Commit 96815ee

Browse files
committed
gopls/internal/regtest/marker: port the inlay hint tests
For golang/go#54845 Change-Id: Id6b33174392badfc216de389cc95fdc93e3bd8d0 Reviewed-on: https://go-review.googlesource.com/c/tools/+/540917 Reviewed-by: Alan Donovan <[email protected]> LUCI-TryBot-Result: Go LUCI <[email protected]>
1 parent 80e691c commit 96815ee

15 files changed

+452
-461
lines changed

gopls/internal/lsp/lsp_test.go

Lines changed: 0 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
package lsp
66

77
import (
8-
"bytes"
98
"context"
109
"fmt"
1110
"os"
@@ -246,54 +245,6 @@ func (r *runner) SemanticTokens(t *testing.T, spn span.Span) {
246245
}
247246
}
248247

249-
func (r *runner) InlayHints(t *testing.T, spn span.Span) {
250-
uri := spn.URI()
251-
filename := uri.Filename()
252-
253-
hints, err := r.server.InlayHint(r.ctx, &protocol.InlayHintParams{
254-
TextDocument: protocol.TextDocumentIdentifier{
255-
URI: protocol.URIFromSpanURI(uri),
256-
},
257-
// TODO: add Range
258-
})
259-
if err != nil {
260-
t.Fatal(err)
261-
}
262-
263-
// Map inlay hints to text edits.
264-
edits := make([]protocol.TextEdit, len(hints))
265-
for i, hint := range hints {
266-
var paddingLeft, paddingRight string
267-
if hint.PaddingLeft {
268-
paddingLeft = " "
269-
}
270-
if hint.PaddingRight {
271-
paddingRight = " "
272-
}
273-
edits[i] = protocol.TextEdit{
274-
Range: protocol.Range{Start: hint.Position, End: hint.Position},
275-
NewText: fmt.Sprintf("<%s%s%s>", paddingLeft, hint.Label[0].Value, paddingRight),
276-
}
277-
}
278-
279-
m, err := r.data.Mapper(uri)
280-
if err != nil {
281-
t.Fatal(err)
282-
}
283-
got, _, err := source.ApplyProtocolEdits(m, edits)
284-
if err != nil {
285-
t.Error(err)
286-
}
287-
288-
withinlayHints := r.data.Golden(t, "inlayHint", filename, func() ([]byte, error) {
289-
return got, nil
290-
})
291-
292-
if !bytes.Equal(withinlayHints, got) {
293-
t.Errorf("inlay hints failed for %s, expected:\n%s\ngot:\n%s", filename, withinlayHints, got)
294-
}
295-
}
296-
297248
func applyTextDocumentEdits(r *runner, edits []protocol.DocumentChanges) (map[span.URI][]byte, error) {
298249
res := make(map[span.URI][]byte)
299250
for _, docEdits := range edits {

gopls/internal/lsp/regtest/marker.go

Lines changed: 47 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -729,6 +729,7 @@ var actionMarkerFuncs = map[string]func(marker){
729729
"highlight": actionMarkerFunc(highlightMarker),
730730
"hover": actionMarkerFunc(hoverMarker),
731731
"implementation": actionMarkerFunc(implementationMarker),
732+
"inlayhints": actionMarkerFunc(inlayhintsMarker),
732733
"preparerename": actionMarkerFunc(prepareRenameMarker),
733734
"rank": actionMarkerFunc(rankMarker),
734735
"rankl": actionMarkerFunc(ranklMarker),
@@ -1129,11 +1130,25 @@ func (mark marker) uri() protocol.DocumentURI {
11291130
return mark.run.env.Sandbox.Workdir.URI(mark.run.test.fset.File(mark.note.Pos).Name())
11301131
}
11311132

1133+
// document returns a protocol.TextDocumentIdentifier for the current file.
1134+
func (mark marker) document() protocol.TextDocumentIdentifier {
1135+
return protocol.TextDocumentIdentifier{URI: mark.uri()}
1136+
}
1137+
11321138
// path returns the relative path to the file containing the marker.
11331139
func (mark marker) path() string {
11341140
return mark.run.env.Sandbox.Workdir.RelPath(mark.run.test.fset.File(mark.note.Pos).Name())
11351141
}
11361142

1143+
// mapper returns a *protocol.Mapper for the current file.
1144+
func (mark marker) mapper() *protocol.Mapper {
1145+
mapper, err := mark.run.env.Editor.Mapper(mark.path())
1146+
if err != nil {
1147+
mark.run.env.T.Fatalf("failed to get mapper for current mark: %v", err)
1148+
}
1149+
return mapper
1150+
}
1151+
11371152
// fmtLoc formats the given pos in the context of the test, using
11381153
// archive-relative paths for files and including the line number in the full
11391154
// archive file.
@@ -1647,12 +1662,7 @@ func acceptCompletionMarker(mark marker, src protocol.Location, label string, go
16471662
return
16481663
}
16491664
filename := mark.path()
1650-
mapper, err := mark.run.env.Editor.Mapper(filename)
1651-
if err != nil {
1652-
mark.errorf("Editor.Mapper(%s) failed: %v", filename, err)
1653-
return
1654-
}
1655-
1665+
mapper := mark.mapper()
16561666
patched, _, err := source.ApplyProtocolEdits(mapper, append([]protocol.TextEdit{
16571667
*selected.TextEdit,
16581668
}, selected.AdditionalTextEdits...))
@@ -1690,7 +1700,7 @@ func typedefMarker(mark marker, src, dst protocol.Location) {
16901700
func foldingRangeMarker(mark marker, g *Golden) {
16911701
env := mark.run.env
16921702
ranges, err := mark.server().FoldingRange(env.Ctx, &protocol.FoldingRangeParams{
1693-
TextDocument: protocol.TextDocumentIdentifier{URI: mark.uri()},
1703+
TextDocument: mark.document(),
16941704
})
16951705
if err != nil {
16961706
mark.errorf("foldingRange failed: %v", err)
@@ -1731,7 +1741,7 @@ func foldingRangeMarker(mark marker, g *Golden) {
17311741
// formatMarker implements the @format marker.
17321742
func formatMarker(mark marker, golden *Golden) {
17331743
edits, err := mark.server().Formatting(mark.run.env.Ctx, &protocol.DocumentFormattingParams{
1734-
TextDocument: protocol.TextDocumentIdentifier{URI: mark.uri()},
1744+
TextDocument: mark.document(),
17351745
})
17361746
var got []byte
17371747
if err != nil {
@@ -2224,6 +2234,35 @@ func implementationMarker(mark marker, src protocol.Location, want ...protocol.L
22242234
}
22252235
}
22262236

2237+
func inlayhintsMarker(mark marker, g *Golden) {
2238+
hints := mark.run.env.InlayHints(mark.path())
2239+
2240+
// Map inlay hints to text edits.
2241+
edits := make([]protocol.TextEdit, len(hints))
2242+
for i, hint := range hints {
2243+
var paddingLeft, paddingRight string
2244+
if hint.PaddingLeft {
2245+
paddingLeft = " "
2246+
}
2247+
if hint.PaddingRight {
2248+
paddingRight = " "
2249+
}
2250+
edits[i] = protocol.TextEdit{
2251+
Range: protocol.Range{Start: hint.Position, End: hint.Position},
2252+
NewText: fmt.Sprintf("<%s%s%s>", paddingLeft, hint.Label[0].Value, paddingRight),
2253+
}
2254+
}
2255+
2256+
m := mark.mapper()
2257+
got, _, err := source.ApplyProtocolEdits(m, edits)
2258+
if err != nil {
2259+
mark.errorf("ApplyProtocolEdits: %v", err)
2260+
return
2261+
}
2262+
2263+
compareGolden(mark, "inlay hints", got, g)
2264+
}
2265+
22272266
func prepareRenameMarker(mark marker, src, spn protocol.Location, placeholder string) {
22282267
params := &protocol.PrepareRenameParams{
22292268
TextDocumentPositionParams: protocol.LocationTextDocumentPositionParams(src),

gopls/internal/lsp/testdata/inlay_hint/composite_literals.go

Lines changed: 0 additions & 27 deletions
This file was deleted.

gopls/internal/lsp/testdata/inlay_hint/composite_literals.go.golden

Lines changed: 0 additions & 29 deletions
This file was deleted.

gopls/internal/lsp/testdata/inlay_hint/constant_values.go

Lines changed: 0 additions & 45 deletions
This file was deleted.

gopls/internal/lsp/testdata/inlay_hint/constant_values.go.golden

Lines changed: 0 additions & 47 deletions
This file was deleted.

gopls/internal/lsp/testdata/inlay_hint/parameter_names.go

Lines changed: 0 additions & 50 deletions
This file was deleted.

0 commit comments

Comments
 (0)