| We should not offer a code action to inline 'v' where it appears on the |
| left-hand side of an assignment: method with pointer receiver. |
| |
| Regression test for issue #75200. |
| |
| -- go.mod -- |
| module example.com/a |
| go 1.18 |
| |
| -- c/c.go -- |
| package c |
| |
| import "fmt" |
| |
| type V int |
| |
| func (V) Method() { } |
| |
| func (*V) PointerMethod() { } |
| |
| func _() { |
| var v V = V(123) |
| v = V(13) |
| v.Method() //@codeaction("v", "refactor.inline.variable", result=inlineV) |
| v.PointerMethod() //@codeaction("v", "refactor.inline.variable", err="0 CodeActions of kind refactor.inline.variable") |
| (v).PointerMethod() //@codeaction("v", "refactor.inline.variable", err="0 CodeActions of kind refactor.inline.variable") |
| var vptr *V = &v |
| vptr.PointerMethod() //@codeaction("vptr", "refactor.inline.variable", result=inlintVptr) |
| (vptr).PointerMethod() //@codeaction("vptr", "refactor.inline.variable", result=inlintVptrpar) |
| fmt.Println(v, vptr) |
| } |
| |
| -- @inlineV/c/c.go -- |
| package c |
| |
| import "fmt" |
| |
| type V int |
| |
| func (V) Method() { } |
| |
| func (*V) PointerMethod() { } |
| |
| func _() { |
| var v V = V(123) |
| v = V(13) |
| V(123).Method() //@codeaction("v", "refactor.inline.variable", result=inlineV) |
| v.PointerMethod() //@codeaction("v", "refactor.inline.variable", err="0 CodeActions of kind refactor.inline.variable") |
| (v).PointerMethod() //@codeaction("v", "refactor.inline.variable", err="0 CodeActions of kind refactor.inline.variable") |
| var vptr *V = &v |
| vptr.PointerMethod() //@codeaction("vptr", "refactor.inline.variable", result=inlintVptr) |
| (vptr).PointerMethod() //@codeaction("vptr", "refactor.inline.variable", result=inlintVptrpar) |
| fmt.Println(v, vptr) |
| } |
| |
| -- @inlintVptr/c/c.go -- |
| package c |
| |
| import "fmt" |
| |
| type V int |
| |
| func (V) Method() { } |
| |
| func (*V) PointerMethod() { } |
| |
| func _() { |
| var v V = V(123) |
| v = V(13) |
| v.Method() //@codeaction("v", "refactor.inline.variable", result=inlineV) |
| v.PointerMethod() //@codeaction("v", "refactor.inline.variable", err="0 CodeActions of kind refactor.inline.variable") |
| (v).PointerMethod() //@codeaction("v", "refactor.inline.variable", err="0 CodeActions of kind refactor.inline.variable") |
| var vptr *V = &v |
| &v.PointerMethod() //@codeaction("vptr", "refactor.inline.variable", result=inlintVptr) |
| (vptr).PointerMethod() //@codeaction("vptr", "refactor.inline.variable", result=inlintVptrpar) |
| fmt.Println(v, vptr) |
| } |
| |
| -- @inlintVptrpar/c/c.go -- |
| package c |
| |
| import "fmt" |
| |
| type V int |
| |
| func (V) Method() { } |
| |
| func (*V) PointerMethod() { } |
| |
| func _() { |
| var v V = V(123) |
| v = V(13) |
| v.Method() //@codeaction("v", "refactor.inline.variable", result=inlineV) |
| v.PointerMethod() //@codeaction("v", "refactor.inline.variable", err="0 CodeActions of kind refactor.inline.variable") |
| (v).PointerMethod() //@codeaction("v", "refactor.inline.variable", err="0 CodeActions of kind refactor.inline.variable") |
| var vptr *V = &v |
| vptr.PointerMethod() //@codeaction("vptr", "refactor.inline.variable", result=inlintVptr) |
| (&v).PointerMethod() //@codeaction("vptr", "refactor.inline.variable", result=inlintVptrpar) |
| fmt.Println(v, vptr) |
| } |
| |