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
}
