This test checks that completion works as expected in the presence of incomplete statements that may affect parser recovery. -- flags -- -ignore_extra_diags -- go.mod -- module golang.org/lsptests/dangling go 1.18 -- settings.json -- { "completeUnimported": false, "deepCompletion": false } -- dangling_for.go -- package danglingstmt func _() { for bar //@rank(" //", danglingBar) } func bar() bool { //@item(danglingBar, "bar", "func() bool", "func") return true } -- dangling_for_init.go -- package danglingstmt func _() { for i := bar //@rank(" //", danglingBar2) } func bar2() int { //@item(danglingBar2, "bar2", "func() int", "func") return 0 } -- dangling_for_init_cond.go -- package danglingstmt func _() { for i := bar3(); i > bar //@rank(" //", danglingBar3) } func bar3() int { //@item(danglingBar3, "bar3", "func() int", "func") return 0 } -- dangling_for_init_cond_post.go -- package danglingstmt func _() { for i := bar4(); i > bar4(); i += bar //@rank(" //", danglingBar4) } func bar4() int { //@item(danglingBar4, "bar4", "func() int", "func") return 0 } -- dangling_if.go -- package danglingstmt func _() { if foo //@rank(" //", danglingFoo) } func foo() bool { //@item(danglingFoo, "foo", "func() bool", "func") return true } -- dangling_if_eof.go -- package danglingstmt func bar5() bool { //@item(danglingBar5, "bar5", "func() bool", "func") return true } func _() { if b //@rank(" //", danglingBar5) -- dangling_if_init.go -- package danglingstmt func _() { if i := foo //@rank(" //", danglingFoo2) } func foo2() bool { //@item(danglingFoo2, "foo2", "func() bool", "func") return true } -- dangling_if_init_cond.go -- package danglingstmt func _() { if i := 123; foo //@rank(" //", danglingFoo3) } func foo3() bool { //@item(danglingFoo3, "foo3", "func() bool", "func") return true } -- dangling_multiline_if.go -- package danglingstmt func walrus() bool { //@item(danglingWalrus, "walrus", "func() bool", "func") return true } func _() { if true && walrus //@complete(" //", danglingWalrus) } -- dangling_selector_1.go -- package danglingstmt func _() { x. //@rank(" //", danglingI) } var x struct { i int } //@item(danglingI, "i", "int", "field") -- dangling_selector_2.go -- package danglingstmt // TODO: re-enable this test, which was broken when the foo package was removed. // (we can replicate the relevant definitions in the new marker test) // import "golang.org/lsptests/foo" func _() { foo. // rank(" //", Foo) var _ = []string{foo.} // rank("}", Foo) } -- dangling_switch_init.go -- package danglingstmt func _() { switch i := baz //@rank(" //", danglingBaz) } func baz() int { //@item(danglingBaz, "baz", "func() int", "func") return 0 } -- dangling_switch_init_tag.go -- package danglingstmt func _() { switch i := 0; baz //@rank(" //", danglingBaz2) } func baz2() int { //@item(danglingBaz2, "baz2", "func() int", "func") return 0 }