mirror of https://github.com/golang/go.git
internal/lsp: add InlayHint regtests
Add regtests for inlay hints to verify we can turn on and off different inlay hints. Change-Id: Id88450c40c048b6c2544d22a0d3eadb57b70a723 Reviewed-on: https://go-review.googlesource.com/c/tools/+/411911 Reviewed-by: Robert Findley <rfindley@google.com> Reviewed-by: Jamal Carvalho <jamal@golang.org> gopls-CI: kokoro <noreply+kokoro@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Run-TryBot: Suzy Mueller <suzmue@golang.org>
This commit is contained in:
parent
2a900561e7
commit
e5b3324997
|
|
@ -0,0 +1,72 @@
|
||||||
|
// Copyright 2022 The Go Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
package inlayHint
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"golang.org/x/tools/gopls/internal/hooks"
|
||||||
|
"golang.org/x/tools/internal/lsp/bug"
|
||||||
|
. "golang.org/x/tools/internal/lsp/regtest"
|
||||||
|
"golang.org/x/tools/internal/lsp/source"
|
||||||
|
"golang.org/x/tools/internal/testenv"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestMain(m *testing.M) {
|
||||||
|
bug.PanicOnBugs = true
|
||||||
|
Main(m, hooks.Options)
|
||||||
|
}
|
||||||
|
func TestEnablingInlayHints(t *testing.T) {
|
||||||
|
testenv.NeedsGo1Point(t, 14) // Test fails on 1.13.
|
||||||
|
const workspace = `
|
||||||
|
-- go.mod --
|
||||||
|
module inlayHint.test
|
||||||
|
go 1.12
|
||||||
|
-- lib.go --
|
||||||
|
package lib
|
||||||
|
type Number int
|
||||||
|
const (
|
||||||
|
Zero Number = iota
|
||||||
|
One
|
||||||
|
Two
|
||||||
|
)
|
||||||
|
`
|
||||||
|
tests := []struct {
|
||||||
|
label string
|
||||||
|
enabled map[string]bool
|
||||||
|
wantInlayHint bool
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
label: "default",
|
||||||
|
wantInlayHint: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "enable const",
|
||||||
|
enabled: map[string]bool{source.ConstantValues: true},
|
||||||
|
wantInlayHint: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "enable parameter names",
|
||||||
|
enabled: map[string]bool{source.ParameterNames: true},
|
||||||
|
wantInlayHint: false,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
for _, test := range tests {
|
||||||
|
t.Run(test.label, func(t *testing.T) {
|
||||||
|
WithOptions(
|
||||||
|
EditorConfig{
|
||||||
|
Settings: map[string]interface{}{
|
||||||
|
"hints": test.enabled,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
).Run(t, workspace, func(t *testing.T, env *Env) {
|
||||||
|
env.OpenFile("lib.go")
|
||||||
|
lens := env.InlayHints("lib.go")
|
||||||
|
if gotInlayHint := len(lens) > 0; gotInlayHint != test.wantInlayHint {
|
||||||
|
t.Errorf("got inlayHint: %t, want %t", gotInlayHint, test.wantInlayHint)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1114,6 +1114,27 @@ func (e *Editor) Symbols(ctx context.Context, sym string) ([]protocol.SymbolInfo
|
||||||
return ans, err
|
return ans, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// CodeLens executes a codelens request on the server.
|
||||||
|
func (e *Editor) InlayHint(ctx context.Context, path string) ([]protocol.InlayHint, error) {
|
||||||
|
if e.Server == nil {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
e.mu.Lock()
|
||||||
|
_, ok := e.buffers[path]
|
||||||
|
e.mu.Unlock()
|
||||||
|
if !ok {
|
||||||
|
return nil, fmt.Errorf("buffer %q is not open", path)
|
||||||
|
}
|
||||||
|
params := &protocol.InlayHintParams{
|
||||||
|
TextDocument: e.textDocumentIdentifier(path),
|
||||||
|
}
|
||||||
|
hints, err := e.Server.InlayHint(ctx, params)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return hints, nil
|
||||||
|
}
|
||||||
|
|
||||||
// References executes a reference request on the server.
|
// References executes a reference request on the server.
|
||||||
func (e *Editor) References(ctx context.Context, path string, pos Pos) ([]protocol.Location, error) {
|
func (e *Editor) References(ctx context.Context, path string, pos Pos) ([]protocol.Location, error) {
|
||||||
if e.Server == nil {
|
if e.Server == nil {
|
||||||
|
|
|
||||||
|
|
@ -358,6 +358,17 @@ func (e *Env) ExecuteCommand(params *protocol.ExecuteCommandParams, result inter
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// InlayHints calls textDocument/inlayHints for the given path, calling t.Fatal on
|
||||||
|
// any error.
|
||||||
|
func (e *Env) InlayHints(path string) []protocol.InlayHint {
|
||||||
|
e.T.Helper()
|
||||||
|
hints, err := e.Editor.InlayHint(e.Ctx, path)
|
||||||
|
if err != nil {
|
||||||
|
e.T.Fatal(err)
|
||||||
|
}
|
||||||
|
return hints
|
||||||
|
}
|
||||||
|
|
||||||
// WorkspaceSymbol calls workspace/symbol
|
// WorkspaceSymbol calls workspace/symbol
|
||||||
func (e *Env) WorkspaceSymbol(sym string) []protocol.SymbolInformation {
|
func (e *Env) WorkspaceSymbol(sym string) []protocol.SymbolInformation {
|
||||||
e.T.Helper()
|
e.T.Helper()
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue