Skip to content

Commit

Permalink
gopls/internal/regtest/marker: port the inlay hint tests
Browse files Browse the repository at this point in the history
For golang/go#54845

Change-Id: Id6b33174392badfc216de389cc95fdc93e3bd8d0
Reviewed-on: https://go-review.googlesource.com/c/tools/+/540917
Reviewed-by: Alan Donovan <adonovan@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
  • Loading branch information
findleyr committed Nov 9, 2023
1 parent 80e691c commit 96815ee
Show file tree
Hide file tree
Showing 15 changed files with 452 additions and 461 deletions.
49 changes: 0 additions & 49 deletions gopls/internal/lsp/lsp_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
package lsp

import (
"bytes"
"context"
"fmt"
"os"
Expand Down Expand Up @@ -246,54 +245,6 @@ func (r *runner) SemanticTokens(t *testing.T, spn span.Span) {
}
}

func (r *runner) InlayHints(t *testing.T, spn span.Span) {
uri := spn.URI()
filename := uri.Filename()

hints, err := r.server.InlayHint(r.ctx, &protocol.InlayHintParams{
TextDocument: protocol.TextDocumentIdentifier{
URI: protocol.URIFromSpanURI(uri),
},
// TODO: add Range
})
if err != nil {
t.Fatal(err)
}

// Map inlay hints to text edits.
edits := make([]protocol.TextEdit, len(hints))
for i, hint := range hints {
var paddingLeft, paddingRight string
if hint.PaddingLeft {
paddingLeft = " "
}
if hint.PaddingRight {
paddingRight = " "
}
edits[i] = protocol.TextEdit{
Range: protocol.Range{Start: hint.Position, End: hint.Position},
NewText: fmt.Sprintf("<%s%s%s>", paddingLeft, hint.Label[0].Value, paddingRight),
}
}

m, err := r.data.Mapper(uri)
if err != nil {
t.Fatal(err)
}
got, _, err := source.ApplyProtocolEdits(m, edits)
if err != nil {
t.Error(err)
}

withinlayHints := r.data.Golden(t, "inlayHint", filename, func() ([]byte, error) {
return got, nil
})

if !bytes.Equal(withinlayHints, got) {
t.Errorf("inlay hints failed for %s, expected:\n%s\ngot:\n%s", filename, withinlayHints, got)
}
}

func applyTextDocumentEdits(r *runner, edits []protocol.DocumentChanges) (map[span.URI][]byte, error) {
res := make(map[span.URI][]byte)
for _, docEdits := range edits {
Expand Down
55 changes: 47 additions & 8 deletions gopls/internal/lsp/regtest/marker.go
Original file line number Diff line number Diff line change
Expand Up @@ -729,6 +729,7 @@ var actionMarkerFuncs = map[string]func(marker){
"highlight": actionMarkerFunc(highlightMarker),
"hover": actionMarkerFunc(hoverMarker),
"implementation": actionMarkerFunc(implementationMarker),
"inlayhints": actionMarkerFunc(inlayhintsMarker),
"preparerename": actionMarkerFunc(prepareRenameMarker),
"rank": actionMarkerFunc(rankMarker),
"rankl": actionMarkerFunc(ranklMarker),
Expand Down Expand Up @@ -1129,11 +1130,25 @@ func (mark marker) uri() protocol.DocumentURI {
return mark.run.env.Sandbox.Workdir.URI(mark.run.test.fset.File(mark.note.Pos).Name())
}

// document returns a protocol.TextDocumentIdentifier for the current file.
func (mark marker) document() protocol.TextDocumentIdentifier {
return protocol.TextDocumentIdentifier{URI: mark.uri()}
}

// path returns the relative path to the file containing the marker.
func (mark marker) path() string {
return mark.run.env.Sandbox.Workdir.RelPath(mark.run.test.fset.File(mark.note.Pos).Name())
}

// mapper returns a *protocol.Mapper for the current file.
func (mark marker) mapper() *protocol.Mapper {
mapper, err := mark.run.env.Editor.Mapper(mark.path())
if err != nil {
mark.run.env.T.Fatalf("failed to get mapper for current mark: %v", err)
}
return mapper
}

// fmtLoc formats the given pos in the context of the test, using
// archive-relative paths for files and including the line number in the full
// archive file.
Expand Down Expand Up @@ -1647,12 +1662,7 @@ func acceptCompletionMarker(mark marker, src protocol.Location, label string, go
return
}
filename := mark.path()
mapper, err := mark.run.env.Editor.Mapper(filename)
if err != nil {
mark.errorf("Editor.Mapper(%s) failed: %v", filename, err)
return
}

mapper := mark.mapper()
patched, _, err := source.ApplyProtocolEdits(mapper, append([]protocol.TextEdit{
*selected.TextEdit,
}, selected.AdditionalTextEdits...))
Expand Down Expand Up @@ -1690,7 +1700,7 @@ func typedefMarker(mark marker, src, dst protocol.Location) {
func foldingRangeMarker(mark marker, g *Golden) {
env := mark.run.env
ranges, err := mark.server().FoldingRange(env.Ctx, &protocol.FoldingRangeParams{
TextDocument: protocol.TextDocumentIdentifier{URI: mark.uri()},
TextDocument: mark.document(),
})
if err != nil {
mark.errorf("foldingRange failed: %v", err)
Expand Down Expand Up @@ -1731,7 +1741,7 @@ func foldingRangeMarker(mark marker, g *Golden) {
// formatMarker implements the @format marker.
func formatMarker(mark marker, golden *Golden) {
edits, err := mark.server().Formatting(mark.run.env.Ctx, &protocol.DocumentFormattingParams{
TextDocument: protocol.TextDocumentIdentifier{URI: mark.uri()},
TextDocument: mark.document(),
})
var got []byte
if err != nil {
Expand Down Expand Up @@ -2224,6 +2234,35 @@ func implementationMarker(mark marker, src protocol.Location, want ...protocol.L
}
}

func inlayhintsMarker(mark marker, g *Golden) {
hints := mark.run.env.InlayHints(mark.path())

// Map inlay hints to text edits.
edits := make([]protocol.TextEdit, len(hints))
for i, hint := range hints {
var paddingLeft, paddingRight string
if hint.PaddingLeft {
paddingLeft = " "
}
if hint.PaddingRight {
paddingRight = " "
}
edits[i] = protocol.TextEdit{
Range: protocol.Range{Start: hint.Position, End: hint.Position},
NewText: fmt.Sprintf("<%s%s%s>", paddingLeft, hint.Label[0].Value, paddingRight),
}
}

m := mark.mapper()
got, _, err := source.ApplyProtocolEdits(m, edits)
if err != nil {
mark.errorf("ApplyProtocolEdits: %v", err)
return
}

compareGolden(mark, "inlay hints", got, g)
}

func prepareRenameMarker(mark marker, src, spn protocol.Location, placeholder string) {
params := &protocol.PrepareRenameParams{
TextDocumentPositionParams: protocol.LocationTextDocumentPositionParams(src),
Expand Down
27 changes: 0 additions & 27 deletions gopls/internal/lsp/testdata/inlay_hint/composite_literals.go

This file was deleted.

This file was deleted.

45 changes: 0 additions & 45 deletions gopls/internal/lsp/testdata/inlay_hint/constant_values.go

This file was deleted.

47 changes: 0 additions & 47 deletions gopls/internal/lsp/testdata/inlay_hint/constant_values.go.golden

This file was deleted.

50 changes: 0 additions & 50 deletions gopls/internal/lsp/testdata/inlay_hint/parameter_names.go

This file was deleted.

Loading

0 comments on commit 96815ee

Please sign in to comment.