This test checks basic functionality of the "move parameter left/right" code
action.
Note that in many of these tests, a permutation can either be expressed as
a parameter move left or right. In these cases, the codeaction assertions
deliberately share the same golden data.
-- go.mod --
module example.com/moveparam
go 1.19
-- basic/basic.go --
package basic
func Foo(a, b int) int { //@codeaction("a", "refactor.rewrite.moveParamRight", result=basic), codeaction("b", "refactor.rewrite.moveParamLeft", result=basic)
return a + b
}
func _() {
x, y := 1, 2
z := Foo(x, y)
_ = z
}
-- basic/caller/caller.go --
package caller
import "example.com/moveparam/basic"
func a() int { return 1 }
func b() int { return 2 }
// Check that we can refactor a call in a toplevel var decl.
var _ = basic.Foo(1, 2)
// Check that we can refactor a call with effects in a toplevel var decl.
var _ = basic.Foo(a(), b())
func _() {
// check various refactorings in a function body, and comment handling.
_ = basic.Foo(1, 2) // with comments
// another comment
_ = basic.Foo(3, 4)
x := 4
x = basic.Foo(x /* this is an inline comment */, 5)
}
-- @basic/basic/basic.go --
package basic
func Foo(b, a int) int { //@codeaction("a", "refactor.rewrite.moveParamRight", result=basic), codeaction("b", "refactor.rewrite.moveParamLeft", result=basic)
return a + b
}
func _() {
x, y := 1, 2
z := Foo(y, x)
_ = z
}
-- @basic/basic/caller/caller.go --
package caller
import "example.com/moveparam/basic"
func a() int { return 1 }
func b() int { return 2 }
// Check that we can refactor a call in a toplevel var decl.
var _ = basic.Foo(2, 1)
// Check that we can refactor a call with effects in a toplevel var decl.
var _ = func() int {
var a int = a()
return basic.Foo(b(), a)
}()
func _() {
// check various refactorings in a function body, and comment handling.
_ = basic.Foo(2, 1) // with comments
// another comment
_ = basic.Foo(4, 3)
x := 4
x = basic.Foo(5, x)
}
-- method/method.go --
package method
type T struct{}
func (T) Foo(a, b int) {} //@codeaction("a", "refactor.rewrite.moveParamRight", result=method), codeaction("b", "refactor.rewrite.moveParamLeft", result=method)
func _() {
var t T
t.Foo(1, 2)
// TODO(rfindley): test method expressions here, once they are handled.
}
-- method/caller/caller.go --
package caller
import "example.com/moveparam/method"
func _() {
var t method.T
t.Foo(1, 2)
}
-- @method/method/caller/caller.go --
package caller
import "example.com/moveparam/method"
func _() {
var t method.T
t.Foo(2, 1)
}
-- @method/method/method.go --
package method
type T struct{}
func (T) Foo(b, a int) {} //@codeaction("a", "refactor.rewrite.moveParamRight", result=method), codeaction("b", "refactor.rewrite.moveParamLeft", result=method)
func _() {
var t T
t.Foo(2, 1)
// TODO(rfindley): test method expressions here, once they are handled.
}
-- fieldlist/joinfield.go --
package fieldlist
func JoinField(a int, b string, c int) {} //@codeaction("a", "refactor.rewrite.moveParamRight", result=joinfield), codeaction("b", "refactor.rewrite.moveParamLeft", result=joinfield)
func _() {
JoinField(1, "2", 3)
}
-- @joinfield/fieldlist/joinfield.go --
package fieldlist
func JoinField(b string, a, c int) {} //@codeaction("a", "refactor.rewrite.moveParamRight", result=joinfield), codeaction("b", "refactor.rewrite.moveParamLeft", result=joinfield)
func _() {
JoinField("2", 1, 3)
}
-- fieldlist/splitfield.go --
package fieldlist
func SplitField(a int, b, c string) {} //@codeaction("a", "refactor.rewrite.moveParamRight", result=splitfield), codeaction("b", "refactor.rewrite.moveParamLeft", result=splitfield)
func _() {
SplitField(1, "2", "3")
}
-- @splitfield/fieldlist/splitfield.go --
package fieldlist
func SplitField(b string, a int, c string) {} //@codeaction("a", "refactor.rewrite.moveParamRight", result=splitfield), codeaction("b", "refactor.rewrite.moveParamLeft", result=splitfield)
func _() {
SplitField("2", 1, "3")
}
-- unnamed/unnamed.go --
package unnamed
func Unnamed(int, string) { //@codeaction("int", "refactor.rewrite.moveParamRight", result=unnamed)
}
func _() {
Unnamed(1, "hi")
}
-- @unnamed/unnamed/unnamed.go --
package unnamed
func Unnamed(string, int) { //@codeaction("int", "refactor.rewrite.moveParamRight", result=unnamed)
}
func _() {
Unnamed("hi", 1)
}