This test verifies the behavior of textDocument/prepareRename. -- settings.json -- { "deepCompletion": false } -- go.mod -- module golang.org/lsptests go 1.18 -- types/types.go -- package types type CoolAlias = int //@item(CoolAlias, "CoolAlias", "int", "type") type X struct { //@item(X_struct, "X", "struct{...}", "struct") x int } type Y struct { //@item(Y_struct, "Y", "struct{...}", "struct") y int } type Bob interface { //@item(Bob_interface, "Bob", "interface{...}", "interface") Bobby() } func (*X) Bobby() {} func (*Y) Bobby() {} -- good/good0.go -- package good func stuff() { //@item(good_stuff, "stuff", "func()", "func"),preparerename("stu", "stuff", "stuff") x := 5 random2(x) //@preparerename("dom", "random2", "random2") } -- good/good1.go -- package good import ( "golang.org/lsptests/types" //@item(types_import, "types", "\"golang.org/lsptests/types\"", "package") ) func random() int { //@item(good_random, "random", "func() int", "func") _ = "random() int" //@preparerename("random", "", "") y := 6 + 7 //@preparerename("7", "", "") return y //@preparerename("return", "","") } func random2(y int) int { //@item(good_random2, "random2", "func(y int) int", "func"),item(good_y_param, "y", "int", "var") //@complete("", good_y_param, types_import, good_random, good_random2, good_stuff) var b types.Bob = &types.X{} //@preparerename("ypes","types", "types") if _, ok := b.(*types.X); ok { //@complete("X", X_struct, Y_struct, Bob_interface, CoolAlias) _ = 0 // suppress "empty branch" diagnostic } return y }