Skip to content

Commit df7023e

Browse files
findleyrgopherbot
authored andcommitted
gopls/internal/regtest/marker: port all deep and fuzzy completion tests
Port @deep and @fuzzy markers, which were just @complete with different options. Since we support settings.json in the new marker tests, there was no need for new markers. For golang/go#54845 Change-Id: I56f670b51084fa20e71c607a7f20e0372c793598 Reviewed-on: https://go-review.googlesource.com/c/tools/+/537881 Auto-Submit: Robert Findley <[email protected]> Reviewed-by: Alan Donovan <[email protected]> LUCI-TryBot-Result: Go LUCI <[email protected]>
1 parent b90ce15 commit df7023e

File tree

8 files changed

+140
-139
lines changed

8 files changed

+140
-139
lines changed

gopls/internal/lsp/completion_test.go

-26
Original file line numberDiff line numberDiff line change
@@ -49,32 +49,6 @@ func (r *runner) CompletionSnippet(t *testing.T, src span.Span, expected tests.C
4949
}
5050
}
5151

52-
func (r *runner) DeepCompletion(t *testing.T, src span.Span, test tests.Completion, items tests.CompletionItems) {
53-
got := r.callCompletion(t, src, func(opts *source.Options) {
54-
opts.DeepCompletion = true
55-
opts.Matcher = source.CaseInsensitive
56-
opts.CompleteUnimported = false
57-
})
58-
got = tests.FilterBuiltins(src, got)
59-
want := expected(t, test, items)
60-
if diff := tests.DiffCompletionItems(want, got); diff != "" {
61-
t.Errorf("mismatching completion items (-want +got):\n%s", diff)
62-
}
63-
}
64-
65-
func (r *runner) FuzzyCompletion(t *testing.T, src span.Span, test tests.Completion, items tests.CompletionItems) {
66-
got := r.callCompletion(t, src, func(opts *source.Options) {
67-
opts.DeepCompletion = true
68-
opts.Matcher = source.Fuzzy
69-
opts.CompleteUnimported = false
70-
})
71-
got = tests.FilterBuiltins(src, got)
72-
want := expected(t, test, items)
73-
if diff := tests.DiffCompletionItems(want, got); diff != "" {
74-
t.Errorf("mismatching completion items (-want +got):\n%s", diff)
75-
}
76-
}
77-
7852
func (r *runner) CaseSensitiveCompletion(t *testing.T, src span.Span, test tests.Completion, items tests.CompletionItems) {
7953
got := r.callCompletion(t, src, func(opts *source.Options) {
8054
opts.Matcher = source.CaseSensitive

gopls/internal/lsp/source/options.go

+3
Original file line numberDiff line numberDiff line change
@@ -595,6 +595,9 @@ type InternalOptions struct {
595595
// LiteralCompletions controls whether literal candidates such as
596596
// "&someStruct{}" are offered. Tests disable this flag to simplify
597597
// their expected values.
598+
//
599+
// TODO(rfindley): this is almost unnecessary now. Remove it along with the
600+
// old marker tests.
598601
LiteralCompletions bool
599602

600603
// VerboseWorkDoneProgress controls whether the LSP server should send

gopls/internal/lsp/testdata/summary.txt.golden

+3-5
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
11
-- summary --
22
CallHierarchyCount = 2
3-
CompletionsCount = 178
4-
CompletionSnippetCount = 41
5-
DeepCompletionsCount = 5
6-
FuzzyCompletionsCount = 8
7-
RankedCompletionsCount = 163
3+
CompletionsCount = 177
4+
CompletionSnippetCount = 27
5+
RankedCompletionsCount = 151
86
CaseSensitiveCompletionsCount = 4
97
SemanticTokenCount = 3
108
SuggestedFixCount = 80

gopls/internal/lsp/tests/tests.go

-28
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,6 @@ type CallHierarchy = map[span.Span]*CallHierarchyResult
5858
type CompletionItems = map[token.Pos]*completion.CompletionItem
5959
type Completions = map[span.Span][]Completion
6060
type CompletionSnippets = map[span.Span][]CompletionSnippet
61-
type DeepCompletions = map[span.Span][]Completion
62-
type FuzzyCompletions = map[span.Span][]Completion
6361
type CaseSensitiveCompletions = map[span.Span][]Completion
6462
type RankCompletions = map[span.Span][]Completion
6563
type SemanticTokens = []span.Span
@@ -79,8 +77,6 @@ type Data struct {
7977
CompletionItems CompletionItems
8078
Completions Completions
8179
CompletionSnippets CompletionSnippets
82-
DeepCompletions DeepCompletions
83-
FuzzyCompletions FuzzyCompletions
8480
CaseSensitiveCompletions CaseSensitiveCompletions
8581
RankCompletions RankCompletions
8682
SemanticTokens SemanticTokens
@@ -114,8 +110,6 @@ type Tests interface {
114110
CallHierarchy(*testing.T, span.Span, *CallHierarchyResult)
115111
Completion(*testing.T, span.Span, Completion, CompletionItems)
116112
CompletionSnippet(*testing.T, span.Span, CompletionSnippet, bool, CompletionItems)
117-
DeepCompletion(*testing.T, span.Span, Completion, CompletionItems)
118-
FuzzyCompletion(*testing.T, span.Span, Completion, CompletionItems)
119113
CaseSensitiveCompletion(*testing.T, span.Span, Completion, CompletionItems)
120114
RankCompletion(*testing.T, span.Span, Completion, CompletionItems)
121115
SemanticTokens(*testing.T, span.Span)
@@ -235,8 +229,6 @@ func load(t testing.TB, mode string, dir string) *Data {
235229
CompletionItems: make(CompletionItems),
236230
Completions: make(Completions),
237231
CompletionSnippets: make(CompletionSnippets),
238-
DeepCompletions: make(DeepCompletions),
239-
FuzzyCompletions: make(FuzzyCompletions),
240232
RankCompletions: make(RankCompletions),
241233
CaseSensitiveCompletions: make(CaseSensitiveCompletions),
242234
Renames: make(Renames),
@@ -500,16 +492,6 @@ func Run(t *testing.T, tests Tests, data *Data) {
500492
}
501493
})
502494

503-
t.Run("DeepCompletion", func(t *testing.T) {
504-
t.Helper()
505-
eachCompletion(t, data.DeepCompletions, tests.DeepCompletion)
506-
})
507-
508-
t.Run("FuzzyCompletion", func(t *testing.T) {
509-
t.Helper()
510-
eachCompletion(t, data.FuzzyCompletions, tests.FuzzyCompletion)
511-
})
512-
513495
t.Run("CaseSensitiveCompletion", func(t *testing.T) {
514496
t.Helper()
515497
eachCompletion(t, data.CaseSensitiveCompletions, tests.CaseSensitiveCompletion)
@@ -665,8 +647,6 @@ func checkData(t *testing.T, data *Data) {
665647
fmt.Fprintf(buf, "CallHierarchyCount = %v\n", len(data.CallHierarchy))
666648
fmt.Fprintf(buf, "CompletionsCount = %v\n", countCompletions(data.Completions))
667649
fmt.Fprintf(buf, "CompletionSnippetCount = %v\n", snippetCount)
668-
fmt.Fprintf(buf, "DeepCompletionsCount = %v\n", countCompletions(data.DeepCompletions))
669-
fmt.Fprintf(buf, "FuzzyCompletionsCount = %v\n", countCompletions(data.FuzzyCompletions))
670650
fmt.Fprintf(buf, "RankedCompletionsCount = %v\n", countCompletions(data.RankCompletions))
671651
fmt.Fprintf(buf, "CaseSensitiveCompletionsCount = %v\n", countCompletions(data.CaseSensitiveCompletions))
672652
fmt.Fprintf(buf, "SemanticTokenCount = %v\n", len(data.SemanticTokens))
@@ -764,14 +744,6 @@ func (data *Data) collectCompletions(typ CompletionTestType) func(span.Span, []t
764744
})
765745
}
766746
switch typ {
767-
case CompletionDeep:
768-
return func(src span.Span, expected []token.Pos) {
769-
result(data.DeepCompletions, src, expected)
770-
}
771-
case CompletionFuzzy:
772-
return func(src span.Span, expected []token.Pos) {
773-
result(data.FuzzyCompletions, src, expected)
774-
}
775747
case CompletionRank:
776748
return func(src span.Span, expected []token.Pos) {
777749
result(data.RankCompletions, src, expected)

gopls/internal/lsp/testdata/address/address.go gopls/internal/regtest/marker/testdata/completion/address.txt

+29-15
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,17 @@
1+
This test exercises the reference and dereference completion modifiers.
2+
3+
TODO: remove the need to set "literalCompletions" here, as this is one of the
4+
few places this setting is needed.
5+
6+
-- flags --
7+
-ignore_extra_diags
8+
9+
-- go.mod --
10+
module golang.org/lsptests
11+
12+
go 1.18
13+
14+
-- address/address.go --
115
package address
216

317
func wantsPtr(*int) {}
@@ -13,39 +27,39 @@ func _() {
1327
b int //@item(addrB, "b", "int", "var")
1428
)
1529

16-
wantsPtr() //@rank(")", addrB, addrA),snippet(")", addrB, "&b", "&b")
17-
wantsPtr(&b) //@snippet(")", addrB, "b", "b")
30+
wantsPtr() //@rank(")", addrB, addrA),snippet(")", addrB, "&b")
31+
wantsPtr(&b) //@snippet(")", addrB, "b")
1832

19-
wantsVariadicPtr() //@rank(")", addrB, addrA),snippet(")", addrB, "&b", "&b")
33+
wantsVariadicPtr() //@rank(")", addrB, addrA),snippet(")", addrB, "&b")
2034

2135
var s foo
2236
s.c //@item(addrDeepC, "s.c", "int", "field")
23-
wantsPtr() //@snippet(")", addrDeepC, "&s.c", "&s.c")
24-
wantsPtr(s) //@snippet(")", addrDeepC, "&s.c", "&s.c")
25-
wantsPtr(&s) //@snippet(")", addrDeepC, "s.c", "s.c")
37+
wantsPtr() //@snippet(")", addrDeepC, "&s.c")
38+
wantsPtr(s) //@snippet(")", addrDeepC, "&s.c")
39+
wantsPtr(&s) //@snippet(")", addrDeepC, "s.c")
2640

2741
// don't add "&" in item (it gets added as an additional edit)
28-
wantsPtr(&s.c) //@snippet(")", addrFieldC, "c", "c")
42+
wantsPtr(&s.c) //@snippet(")", addrFieldC, "c")
2943

3044
// check dereferencing as well
3145
var c *int //@item(addrCPtr, "c", "*int", "var")
32-
var _ int = _ //@rank("_ //", addrCPtr, addrA),snippet("_ //", addrCPtr, "*c", "*c")
46+
var _ int = _ //@rank("_ //", addrCPtr, addrA),snippet("_ //", addrCPtr, "*c")
3347

34-
wantsVariadic() //@rank(")", addrCPtr, addrA),snippet(")", addrCPtr, "*c", "*c")
48+
wantsVariadic() //@rank(")", addrCPtr, addrA),snippet(")", addrCPtr, "*c")
3549

3650
var d **int //@item(addrDPtr, "d", "**int", "var")
37-
var _ int = _ //@rank("_ //", addrDPtr, addrA),snippet("_ //", addrDPtr, "**d", "**d")
51+
var _ int = _ //@rank("_ //", addrDPtr, addrA),snippet("_ //", addrDPtr, "**d")
3852

3953
type namedPtr *int
4054
var np namedPtr //@item(addrNamedPtr, "np", "namedPtr", "var")
4155

4256
var _ int = _ //@rank("_ //", addrNamedPtr, addrA)
4357

4458
// don't get tripped up by recursive pointer type
45-
type dontMessUp *dontMessUp
59+
type dontMessUp *dontMessUp //@item(dontMessUp, "dontMessUp", "*dontMessUp", "type")
4660
var dmu *dontMessUp //@item(addrDMU, "dmu", "*dontMessUp", "var")
4761

48-
var _ int = dmu //@complete(" //", addrDMU)
62+
var _ int = dmu //@complete(" //", addrDMU, dontMessUp)
4963
}
5064

5165
func (f foo) ptr() *foo { return &f }
@@ -59,8 +73,8 @@ func _() {
5973
// addressable
6074
getFoo().ptr().c //@item(addrGetFooPtrC, "getFoo().ptr().c", "int", "field")
6175

62-
wantsPtr() //@rank(addrGetFooPtrC, addrGetFooC),snippet(")", addrGetFooPtrC, "&getFoo().ptr().c", "&getFoo().ptr().c")
63-
wantsPtr(&g) //@rank(addrGetFooPtrC, addrGetFooC),snippet(")", addrGetFooPtrC, "getFoo().ptr().c", "getFoo().ptr().c")
76+
wantsPtr() //@snippet(")", addrGetFooPtrC, "&getFoo().ptr().c")
77+
wantsPtr(&g) //@snippet(")", addrGetFooPtrC, "getFoo().ptr().c")
6478
}
6579

6680
type nested struct {
@@ -74,5 +88,5 @@ func _() {
7488
getNested().f.ptr().c //@item(addrNestedPtrC, "getNested().f.ptr().c", "int", "field")
7589

7690
// addrNestedC is not addressable, so rank lower
77-
wantsPtr(getNestedfc) //@fuzzy(")", addrNestedPtrC, addrNestedC)
91+
wantsPtr(getNestedfc) //@complete(")", addrNestedPtrC, addrNestedC)
7892
}
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,20 @@
1+
This test exercises deep completion.
2+
3+
-- settings.json --
4+
{
5+
"completeUnimported": false,
6+
"matcher": "caseInsensitive"
7+
}
8+
9+
-- flags --
10+
-ignore_extra_diags
11+
12+
-- go.mod --
13+
module golang.org/lsptests
14+
15+
go 1.18
16+
17+
-- deep/deep.go --
118
package deep
219

320
import "context"
@@ -14,9 +31,9 @@ func wantsDeepB(deepB) {}
1431
func _() {
1532
var a deepA //@item(deepAVar, "a", "deepA", "var")
1633
a.b //@item(deepABField, "a.b", "deepB", "field")
17-
wantsDeepB(a) //@deep(")", deepABField, deepAVar)
34+
wantsDeepB(a) //@complete(")", deepABField, deepAVar)
1835

19-
deepA{a} //@snippet("}", deepABField, "a.b", "a.b")
36+
deepA{a} //@snippet("}", deepABField, "a.b")
2037
}
2138

2239
func wantsContext(context.Context) {}
@@ -32,7 +49,7 @@ func _() {
3249
var cork struct{ err error }
3350
cork.err //@item(deepCorkErr, "cork.err", "error", "field")
3451
context //@item(deepContextPkg, "context", "\"context\"", "package")
35-
var _ error = co //@rank(" //", deepCorkErr, deepContextPkg)
52+
var _ error = co // rank(" //", deepCorkErr, deepContextPkg)
3653
}
3754

3855
func _() {
@@ -42,7 +59,7 @@ func _() {
4259
}
4360
var circle deepCircle //@item(deepCircle, "circle", "deepCircle", "var")
4461
circle.deepCircle //@item(deepCircleField, "circle.deepCircle", "*deepCircle", "field")
45-
var _ deepCircle = circ //@deep(" //", deepCircle, deepCircleField),snippet(" //", deepCircleField, "*circle.deepCircle", "*circle.deepCircle")
62+
var _ deepCircle = circ //@complete(" //", deepCircle, deepCircleField),snippet(" //", deepCircleField, "*circle.deepCircle")
4663
}
4764

4865
func _() {
@@ -60,7 +77,7 @@ func _() {
6077
var a deepEmbedA //@item(deepEmbedA, "a", "deepEmbedA", "var")
6178
a.deepEmbedB //@item(deepEmbedB, "a.deepEmbedB", "deepEmbedB", "field")
6279
a.deepEmbedC //@item(deepEmbedC, "a.deepEmbedC", "deepEmbedC", "field")
63-
wantsC(a) //@deep(")", deepEmbedC, deepEmbedA, deepEmbedB)
80+
wantsC(a) //@complete(")", deepEmbedC, deepEmbedA, deepEmbedB)
6481
}
6582

6683
func _() {
@@ -70,7 +87,7 @@ func _() {
7087
}
7188

7289
nested{
73-
a: 123, //@deep(" //", deepNestedField)
90+
a: 123, //@complete(" //", deepNestedField)
7491
}
7592
}
7693

@@ -89,54 +106,5 @@ func _() {
89106

90107
// "a.d" should be ranked above the deeper "a.b.c"
91108
var i int
92-
i = a //@deep(" //", deepAD, deepABC, deepA, deepAB)
93-
}
94-
95-
type foo struct {
96-
b bar
97-
}
98-
99-
func (f foo) bar() bar {
100-
return f.b
101-
}
102-
103-
func (f foo) barPtr() *bar {
104-
return &f.b
105-
}
106-
107-
type bar struct{}
108-
109-
func (b bar) valueReceiver() int {
110-
return 0
111-
}
112-
113-
func (b *bar) ptrReceiver() int {
114-
return 0
115-
}
116-
117-
func _() {
118-
var (
119-
i int
120-
f foo
121-
)
122-
123-
f.bar().valueReceiver //@item(deepBarValue, "f.bar().valueReceiver", "func() int", "method")
124-
f.barPtr().ptrReceiver //@item(deepBarPtrPtr, "f.barPtr().ptrReceiver", "func() int", "method")
125-
f.barPtr().valueReceiver //@item(deepBarPtrValue, "f.barPtr().valueReceiver", "func() int", "method")
126-
127-
i = fbar //@fuzzy(" //", deepBarValue, deepBarPtrPtr, deepBarPtrValue)
128-
}
129-
130-
func (b baz) Thing() struct{ val int } {
131-
return b.thing
132-
}
133-
134-
type baz struct {
135-
thing struct{ val int }
136-
}
137-
138-
func (b baz) _() {
139-
b.Thing().val //@item(deepBazMethVal, "b.Thing().val", "int", "field")
140-
b.thing.val //@item(deepBazFieldVal, "b.thing.val", "int", "field")
141-
var _ int = bval //@rank(" //", deepBazFieldVal, deepBazMethVal)
109+
i = a //@complete(" //", deepAD, deepABC, deepA, deepAB)
142110
}

0 commit comments

Comments
 (0)