| # Test of marker suppression functionality. | |
| # Deadcode should not identify marker interface methods as unreachable | |
| deadcode -filter= example.com | |
| !want "T.isMarker" | |
| want "R.isNotMarker" | |
| !want "P.greet" | |
| want "Q.greet" | |
| -- go.mod -- | |
| module example.com | |
| go 1.18 | |
| -- main.go -- | |
| package main | |
| import "fmt" | |
| // Marker method: implements interface, unexported, no params, no results, empty body | |
| type Marker interface { | |
| isMarker() | |
| } | |
| type T struct{} | |
| func (t *T) isMarker() {} | |
| // Not marker method: does not implement interface | |
| type R struct {} | |
| func (r *R) isNotMarker() {} | |
| // Ensure that it still reports valid interface methods | |
| // when unused | |
| type Greeter interface { | |
| greet() | |
| } | |
| type P struct {} | |
| func (p *P) greet() {fmt.Println("P: hello")} | |
| type Q struct {} | |
| func (q *Q) greet() {fmt.Println("Q: hello")} // this method should be reported | |
| func main () { | |
| var p P | |
| p.greet() | |
| } |