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("identity", identity, "identity(${1:})") _ = clone //@snippet("clone", clone, "clone(${1:})") _ = unconstrained //@snippet("unconstrained", unconstrained, "unconstrained[${1:}](${2:})") _ = partial //@snippet("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("unconstrained", unconstrained, "unconstrained[${1:}](${2:})") }