Skip to content

Commit

Permalink
internal/lsp: add suggested fix for unusedparams analysis
Browse files Browse the repository at this point in the history
Suggest replacing the unused function parameter with _.

Updates golang/go#36602

Change-Id: I53738e65907b8a4b4857dd8954f1477a043cf442
Reviewed-on: https://go-review.googlesource.com/c/tools/+/374254
Trust: Suzy Mueller <suzmue@golang.org>
Run-TryBot: Suzy Mueller <suzmue@golang.org>
gopls-CI: kokoro <noreply+kokoro@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Robert Findley <rfindley@google.com>
  • Loading branch information
suzmue committed Jan 14, 2022
1 parent 7424a4d commit f29bdf1
Show file tree
Hide file tree
Showing 6 changed files with 122 additions and 5 deletions.
2 changes: 1 addition & 1 deletion internal/lsp/analysis/unusedparams/testdata/src/a/a.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// Copyright 2020 The Go Authors. All rights reserved.
// Copyright 2022 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.

Expand Down
55 changes: 55 additions & 0 deletions internal/lsp/analysis/unusedparams/testdata/src/a/a.go.golden
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
// Copyright 2022 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 a

import (
"bytes"
"fmt"
"net/http"
)

type parent interface {
n(f bool)
}

type yuh struct {
a int
}

func (y *yuh) n(f bool) {
for i := 0; i < 10; i++ {
fmt.Println(i)
}
}

func a(i1 int, _ int, i3 int) int { // want "potentially unused parameter: 'i2'"
i3 += i1
_ = func(_ int) int { // want "potentially unused parameter: 'z'"
_ = 1
return 1
}
return i3
}

func b(_ bytes.Buffer) { // want "potentially unused parameter: 'c'"
_ = 1
}

func z(_ http.ResponseWriter, _ *http.Request) { // want "potentially unused parameter: 'h'"
fmt.Println("Before")
}

func l(h http.Handler) http.Handler {
return http.HandlerFunc(z)
}

func mult(a, _ int) int { // want "potentially unused parameter: 'b'"
a += 1
return a
}

func y(a int) {
panic("yo")
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// Copyright 2021 The Go Authors. All rights reserved.
// Copyright 2022 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.

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
// Copyright 2022 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, _ T, i3 int) int { // want "potentially unused parameter: 'i2'"
i3 += i1
_ = func(_ int) int { // want "potentially unused parameter: 'z'"
_ = 1
return 1
}
return i3
}

func b[T any](_ bytes.Buffer) { // want "potentially unused parameter: 'c'"
_ = 1
}

func z[T http.ResponseWriter](_ 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, _ int) int { // want "potentially unused parameter: 'b'"
a += 1
return a
}

func y[T any](a T) {
panic("yo")
}
11 changes: 9 additions & 2 deletions internal/lsp/analysis/unusedparams/unusedparams.go
Original file line number Diff line number Diff line change
Expand Up @@ -131,13 +131,20 @@ func run(pass *analysis.Pass) (interface{}, error) {
start, end = u.ident.Pos(), u.ident.End()
}
// TODO(golang/go#36602): Add suggested fixes to automatically
// remove the unused parameter. To start, just remove it from the
// function declaration. Later, remove it from every use of this
// remove the unused parameter from every use of this
// function.
pass.Report(analysis.Diagnostic{
Pos: start,
End: end,
Message: fmt.Sprintf("potentially unused parameter: '%s'", u.ident.Name),
SuggestedFixes: []analysis.SuggestedFix{{
Message: `Replace with "_"`,
TextEdits: []analysis.TextEdit{{
Pos: u.ident.Pos(),
End: u.ident.End(),
NewText: []byte("_"),
}},
}},
})
}
})
Expand Down
2 changes: 1 addition & 1 deletion internal/lsp/analysis/unusedparams/unusedparams_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,5 +18,5 @@ func Test(t *testing.T) {
if typeparams.Enabled {
tests = append(tests, "typeparams")
}
analysistest.Run(t, testdata, unusedparams.Analyzer, tests...)
analysistest.RunWithSuggestedFixes(t, testdata, unusedparams.Analyzer, tests...)
}

0 comments on commit f29bdf1

Please sign in to comment.