internal/lsp/analysis/unusedparams: add tests for generics

using the typeparams convention.

Change-Id: I42094b75bd43937bdae099473d6241de887456b4
Reviewed-on: https://go-review.googlesource.com/c/tools/+/353289
Trust: Peter Weinberger <pjw@google.com>
Run-TryBot: Peter Weinberger <pjw@google.com>
gopls-CI: kokoro <noreply+kokoro@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Robert Findley <rfindley@google.com>
diff --git a/internal/lsp/analysis/unusedparams/testdata/src/typeparams/typeparams.go b/internal/lsp/analysis/unusedparams/testdata/src/typeparams/typeparams.go
new file mode 100644
index 0000000..000a62f
--- /dev/null
+++ b/internal/lsp/analysis/unusedparams/testdata/src/typeparams/typeparams.go
@@ -0,0 +1,55 @@
+// Copyright 2021 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package typeparams
+
+import (
+	"bytes"
+	"fmt"
+	"net/http"
+)
+
+type parent[T any] interface {
+	n(f T)
+}
+
+type yuh[T any] struct {
+	a T
+}
+
+func (y *yuh[int]) n(f bool) {
+	for i := 0; i < 10; i++ {
+		fmt.Println(i)
+	}
+}
+
+func a[T comparable](i1 int, i2 T, i3 int) int { // want "potentially unused parameter: 'i2'"
+	i3 += i1
+	_ = func(z int) int { // want "potentially unused parameter: 'z'"
+		_ = 1
+		return 1
+	}
+	return i3
+}
+
+func b[T any](c bytes.Buffer) { // want "potentially unused parameter: 'c'"
+	_ = 1
+}
+
+func z[T http.ResponseWriter](h T, _ *http.Request) { // want "potentially unused parameter: 'h'"
+	fmt.Println("Before")
+}
+
+func l(h http.Handler) http.Handler {
+	return http.HandlerFunc(z[http.ResponseWriter])
+}
+
+func mult(a, b int) int { // want "potentially unused parameter: 'b'"
+	a += 1
+	return a
+}
+
+func y[T any](a T) {
+	panic("yo")
+}
diff --git a/internal/lsp/analysis/unusedparams/unusedparams_test.go b/internal/lsp/analysis/unusedparams/unusedparams_test.go
index 907f71c..646a3dc 100644
--- a/internal/lsp/analysis/unusedparams/unusedparams_test.go
+++ b/internal/lsp/analysis/unusedparams/unusedparams_test.go
@@ -9,9 +9,14 @@
 
 	"golang.org/x/tools/go/analysis/analysistest"
 	"golang.org/x/tools/internal/lsp/analysis/unusedparams"
+	"golang.org/x/tools/internal/typeparams"
 )
 
 func Test(t *testing.T) {
 	testdata := analysistest.TestData()
-	analysistest.Run(t, testdata, unusedparams.Analyzer, "a")
+	tests := []string{"a"}
+	if typeparams.Enabled {
+		tests = append(tests, "typeparams")
+	}
+	analysistest.Run(t, testdata, unusedparams.Analyzer, tests...)
 }