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 --
1
15
package address
2
16
3
17
func wantsPtr(*int) {}
@@ -13,39 +27,39 @@ func _() {
13
27
b int //@item(addrB, "b", "int", "var")
14
28
)
15
29
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")
18
32
19
- wantsVariadicPtr () //@rank(")", addrB, addrA),snippet(")", addrB, "&b", "&b" )
33
+ wantsVariadicPtr() //@rank(")", addrB, addrA),snippet(")", addrB, "&b")
20
34
21
35
var s foo
22
36
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")
26
40
27
41
// 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")
29
43
30
44
// check dereferencing as well
31
45
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")
33
47
34
- wantsVariadic () //@rank(")", addrCPtr, addrA),snippet(")", addrCPtr, "*c", "*c" )
48
+ wantsVariadic() //@rank(")", addrCPtr, addrA),snippet(")", addrCPtr, "*c")
35
49
36
50
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")
38
52
39
53
type namedPtr *int
40
54
var np namedPtr //@item(addrNamedPtr, "np", "namedPtr", "var")
41
55
42
56
var _ int = _ //@rank("_ //", addrNamedPtr, addrA)
43
57
44
58
// don't get tripped up by recursive pointer type
45
- type dontMessUp * dontMessUp
59
+ type dontMessUp *dontMessUp //@item(dontMessUp, "dontMessUp", "*dontMessUp", "type")
46
60
var dmu *dontMessUp //@item(addrDMU, "dmu", "*dontMessUp", "var")
47
61
48
- var _ int = dmu //@complete(" //", addrDMU)
62
+ var _ int = dmu //@complete(" //", addrDMU, dontMessUp )
49
63
}
50
64
51
65
func (f foo) ptr() *foo { return &f }
@@ -59,8 +73,8 @@ func _() {
59
73
// addressable
60
74
getFoo().ptr().c //@item(addrGetFooPtrC, "getFoo().ptr().c", "int", "field")
61
75
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")
64
78
}
65
79
66
80
type nested struct {
@@ -74,5 +88,5 @@ func _() {
74
88
getNested().f.ptr().c //@item(addrNestedPtrC, "getNested().f.ptr().c", "int", "field")
75
89
76
90
// addrNestedC is not addressable, so rank lower
77
- wantsPtr (getNestedfc ) //@fuzzy (")", addrNestedPtrC, addrNestedC)
91
+ wantsPtr(getNestedfc) //@complete (")", addrNestedPtrC, addrNestedC)
78
92
}
0 commit comments