Regression test for "completion gives unneeded generic type
instantiation snippet", #51783.

Type parameters that can be inferred from the arguments
are not part of the offered completion snippet.

-- flags --
-ignore_extra_diags

-- a.go --
package a

// identity has a single simple type parameter.
// The completion omits the instantiation.
func identity[T any](x T) T

// clone has a second type parameter that is nonetheless constrained by the parameter.
// The completion omits the instantiation.
func clone[S ~[]E, E any](s S) S

// unconstrained has a type parameter constrained only by the result.
// The completion suggests instantiation.
func unconstrained[X, Y any](x X) Y

// partial has three type parameters,
// only the last two of which may be omitted as they
// are constrained by the arguments.
func partial[R any, S ~[]E, E any](s S) R

//@item(identity, "identity", "details", "kind")
//@item(clone, "clone", "details", "kind")
//@item(unconstrained, "unconstrained", "details", "kind")
//@item(partial, "partial", "details", "kind")

func _() {
	_ = identity //@snippet(re"()identity", identity, "identity(${1:})")

	_ = clone //@snippet(re"()clone", clone, "clone(${1:})")

	_ = unconstrained //@snippet(re"()unconstrained", unconstrained, "unconstrained[${1:}](${2:})")

	_ = partial //@snippet(re"()partial", partial, "partial[${1:}](${2:})")

	// Result-type inference permits us to omit Y in this (rare) case,
	// but completion doesn't support that.
	var _ int = unconstrained //@snippet(re"()unconstrained", unconstrained, "unconstrained[${1:}](${2:})")
}
