Repository navigation
Expand file tree
/
Copy pathconstruct_function_method_compatibility.txtar
More file actions
41 lines (37 loc) · 2.21 KB
/
Copy pathconstruct_function_method_compatibility.txtar
File metadata and controls
41 lines (37 loc) · 2.21 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# Function replacement accepts receiver-bearing source while preserving the selected method and receiver syntax.
mkdir .scratch
exec semedit replace-construct --file request.go --kind function --symbol Request.Validate --source 'func (r *Request) Validate() string { return "qualified" }'
grep 'return "qualified"' request.go
exec semedit replace-construct --file request.go --kind function --symbol Validate --source 'func (r *Request) Validate() string { return "unqualified" }'
grep 'return "unqualified"' request.go
grep 'func Validate\(\) string.*return "package"' request.go
grep 'func \(Other\) Validate\(\) string.*return "other"' request.go
cp request.go .scratch/expected.go
! exec semedit replace-construct --file request.go --kind function --symbol Request.Validate --source 'func (r *Other) Validate() string { return "wrong" }'
stderr 'receiver.*Request'
cmp request.go .scratch/expected.go
! exec semedit replace-construct --file request.go --kind function --symbol Request.Validate --source 'func (r Request) Validate() string { return "value" }'
stderr 'receiver syntax'
cmp request.go .scratch/expected.go
! exec semedit replace-construct --file request.go --kind function --symbol Request.Validate --source 'func Validate() string { return "lost receiver" }'
stderr 'receiver.*Request'
cmp request.go .scratch/expected.go
! exec semedit replace-construct --file request.go --kind method --symbol Validate --source 'func (r *Request) Validate() string { return "unqualified method" }'
stderr 'receiver'
cmp request.go .scratch/expected.go
! exec semedit replace-construct --file request.go --kind method --symbol Request.Validate --source 'func Validate() string { return "lost receiver" }'
stderr 'preserve.*method'
cmp request.go .scratch/expected.go
exec semedit replace-construct --file request.go --kind method --symbol '(*Request).Validate' --source 'func (r *Request) Validate() string { return "method" }'
grep 'return "method"' request.go
exec go test ./...
-- go.mod --
module example.com/methodcompat
go 1.24
-- request.go --
package request
type Request struct{}
type Other struct{}
func (*Request) Validate() string { return "request" }
func (Other) Validate() string { return "other" }
func Validate() string { return "package" }