This test verifies that gopls can remove unused parameters from methods,
when that method satisfies an interface.

For now, we just update static calls. In the future, we should compute the set
of dynamic calls that must change (and therefore, the set of concrete functions
that must be modified), in order to produce the desired outcome for our users.

Doing so would be more complicated, so for now this test simply records the
current behavior.

-- flags --
-min_go=go1.20

-- go.mod --
module example.com/rm

go 1.20

-- p.go --
package rm

type T int

func (t T) Foo(x int) { //@codeaction("x", "x", "refactor.rewrite", basic)
}

-- use/use.go --
package use

import "example.com/rm"

type Fooer interface{
	Foo(int)
}

var _ Fooer = rm.T(0)

func _() {
	var x rm.T
	x.Foo(1)
}
-- @basic/p.go --
package rm

type T int

func (t T) Foo() { //@codeaction("x", "x", "refactor.rewrite", basic)
}

-- @basic/use/use.go --
package use

import "example.com/rm"

type Fooer interface {
	Foo(int)
}

var _ Fooer = rm.T(0)

func _() {
	var x rm.T
	var t rm.T = x
	t.Foo()
}
