| 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:})") |
| } |