This test exercises deep completion. It was originally bundled with deep.go, but is split into a separate test as the new marker tests do not permit mutating server options for individual marks. -- flags -- -ignore_extra_diags -- go.mod -- module golang.org/lsptests go 1.18 -- deep/deep2.go -- package deep type foo struct { b bar } func (f foo) bar() bar { return f.b } func (f foo) barPtr() *bar { return &f.b } type bar struct{} func (b bar) valueReceiver() int { return 0 } func (b *bar) ptrReceiver() int { return 0 } func _() { var ( i int f foo ) f.bar().valueReceiver //@item(deepBarValue, "f.bar().valueReceiver", "func() int", "method") f.barPtr().ptrReceiver //@item(deepBarPtrPtr, "f.barPtr().ptrReceiver", "func() int", "method") f.barPtr().valueReceiver //@item(deepBarPtrValue, "f.barPtr().valueReceiver", "func() int", "method") i = fbar //@complete(" //", deepBarValue, deepBarPtrPtr, deepBarPtrValue) } func (b baz) Thing() struct{ val int } { return b.thing } type baz struct { thing struct{ val int } } func (b baz) _() { b.Thing().val //@item(deepBazMethVal, "b.Thing().val", "int", "field") b.thing.val //@item(deepBazFieldVal, "b.thing.val", "int", "field") var _ int = bval //@rank(" //", deepBazFieldVal, deepBazMethVal) }