Repository: go
Issue: x/tools/gopls: completion and quick fix for filling in type parameters in generic types
Labels: FeatureRequest,gopls,Tools,gopls/completion,gopls/generics

### gopls version

Build info ---------- golang.org/x/tools/gopls v0.14.2     golang.org/x/tools/gopls@v0.14.2 h1:sIw6vjZiuQ9S7s0auUUkHlWgsCkKZFWDHmrge8LYsnc=     github.com/BurntSushi/toml@v1.2.1 h1:9F2/+DoOYIOksmaJFPw1tGFy1eDnIJXg+UHjuD8lTak=     github.com/google/go-cmp@v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=     github.com/sergi/go-diff@v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0=     golang.org/x/exp/typeparams@v0.0.0-20221212164502-fae10dda9338 h1:2O2DON6y3XMJiQRAS1UWU+54aec2uopH3x7MAiqGW6Y=     golang.org/x/mod@v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0=     golang.org/x/sync@v0.4.0 h1:zxkM55ReGkDlKSM+Fu41A+zmbZuaPVbGMzvvdUPznYQ=     golang.org/x/sys@v0.14.0 h1:Vz7Qs629MkJkGyHxUlRHizWJRG2j8fbQKjELVSNhy7Q=     golang.org/x/telemetry@v0.0.0-20231114163143-69313e640400 h1:brbkEFfGwNGAEkykUOcryE/JiHUMMJouzE0fWWmz/QU=     golang.org/x/text@v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k=     golang.org/x/tools@v0.14.1-0.20231114185516-c9d3e7de13fd h1:Oku7E+OCrXHyst1dG1z10etCTxewCHXNFLRlyMPbh3w=     golang.org/x/vuln@v1.0.1 h1:KUas02EjQK5LTuIx1OylBQdKKZ9jeugs+HiqO5HormU=     honnef.co/go/tools@v0.4.5 h1:YGD4H+SuIOOqsyoLOpZDWcieM28W47/zRO7f+9V3nvo=     mvdan.cc/gofumpt@v0.4.0 h1:JVf4NN1mIpHogBj7ABpgOyZc65/UUOkKQFkoURsz4MM=     mvdan.cc/xurls/v2@v2.4.0 h1:tzxjVAj+wSBmDcF6zBB7/myTy3gX9xvi8Tyr28AuQgc= go: go1.21.1

### go env

```shell
GO111MODULE=''
GOARCH='amd64'
GOBIN=''
GOCACHE='/Users/suzmue/Library/Caches/go-build'
GOENV='/Users/suzmue/Library/Application Support/go/env'
GOEXE=''
GOEXPERIMENT=''
GOFLAGS=''
GOHOSTARCH='amd64'
GOHOSTOS='darwin'
GOINSECURE=''
GOMODCACHE='/Users/suzmue/go/pkg/mod'
GONOPROXY=''
GONOSUMDB=''
GOOS='darwin'
GOPATH='/Users/suzmue/go'
GOPRIVATE=''
GOPROXY='https://proxy.golang.org,direct'
GOROOT='/Users/suzmue/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.21.2.darwin-amd64'
GOSUMDB='sum.golang.org'
GOTMPDIR=''
GOTOOLCHAIN='auto'
GOTOOLDIR='/Users/suzmue/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.21.2.darwin-amd64/pkg/tool/darwin_amd64'
GOVCS=''
GOVERSION='go1.21.2'
GCCGO='gccgo'
GOAMD64='v1'
AR='ar'
CC='clang'
CXX='clang++'
CGO_ENABLED='1'
GOMOD='/Users/suzmue/helloWorld/go.mod'
GOWORK=''
CGO_CFLAGS='-O2 -g'
CGO_CPPFLAGS=''
CGO_CXXFLAGS='-O2 -g'
CGO_FFLAGS='-O2 -g'
CGO_LDFLAGS='-O2 -g'
PKG_CONFIG='pkg-config'
GOGCCFLAGS='-fPIC -arch x86_64 -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -ffile-prefix-map=/var/folders/2x/hlwbwjzd1vd4brlfs80676fw00fkl_/T/go-build1491560032=/tmp/go-build -gno-record-gcc-switches -fno-common'
```


### What did you do?

main.go:
```
package main

import "fmt"

type A[T any] struct {
	foo T
}

type B[T any] struct {
	foo []T
}

func main() {
	var a *A[int] = new(A) // diagnostic: "cannot use generic type A[T any] without instantiation"
	a.foo = 1
	a2 := &A{ // diagnostic: "cannot use generic type A[T any] without instantiation"
		foo: "hello",
	}
	fmt.Printf("%d %s\n", a.foo, a2.foo)
	b := B{ // diagnostic: "cannot use generic type B[T any] without instantiation"
		foo: []int{1, 2, 3},
	}
	fmt.Printf("%d\n", len(b.foo))
}
```



### What did you expect to see?

1. Completions with the correct type when adding `[` when filling in the type parameters.
2. Quick Fix for adding the missing type parameter which can be inferred in these cases.

### What did you see instead?

No quick fixes available and completions were for other types (same order for all): 

<img width="353" alt="Screenshot 2023-12-01 at 9 54 37 AM" src="https://github.com/golang/go/assets/6634754/03c0a76e-d9ea-4da0-9376-b70d58bae9c4">


### Editor and settings

VS Code

### Logs

_No response_