Giant blob of minor changes
[dotfiles/.git] / .config / coc / extensions / coc-go-data / tools / pkg / mod / honnef.co / go / tools@v0.0.1-2020.1.5 / staticcheck / testdata / src / CheckUnreachableTypeCases / CheckUnreachableTypeCases.go
1 package pkg
2
3 import "io"
4
5 type T struct{}
6
7 func (T) Read(b []byte) (int, error) { return 0, nil }
8 func (T) something() string          { return "non-exported method" }
9
10 type V error
11 type U error
12
13 func fn1() {
14         var (
15                 v   interface{}
16                 err error
17         )
18
19         switch v.(type) {
20         case io.Reader:
21                 println("io.Reader")
22         case io.ReadCloser: // want `unreachable case clause: io\.Reader will always match before io\.ReadCloser`
23                 println("io.ReadCloser")
24         }
25
26         switch v.(type) {
27         case io.Reader:
28                 println("io.Reader")
29         case T: // want `unreachable case clause: io\.Reader will always match before CheckUnreachableTypeCases\.T`
30                 println("T")
31         }
32
33         switch v.(type) {
34         case io.Reader:
35                 println("io.Reader")
36         case io.ReadCloser: // want `unreachable case clause: io\.Reader will always match before io\.ReadCloser`
37                 println("io.ReadCloser")
38         case T: // want `unreachable case clause: io\.Reader will always match before CheckUnreachableTypeCases\.T`
39                 println("T")
40         }
41
42         switch v.(type) {
43         case io.Reader:
44                 println("io.Reader")
45         case io.ReadCloser, T: // want `unreachable case clause: io\.Reader will always match before io\.ReadCloser`
46                 println("io.ReadCloser or T")
47         }
48
49         switch v.(type) {
50         case io.ReadCloser, io.Reader:
51                 println("io.ReadCloser or io.Reader")
52         case T: // want `unreachable case clause: io\.Reader will always match before CheckUnreachableTypeCases\.T`
53                 println("T")
54         }
55
56         switch v.(type) {
57         default:
58                 println("something else")
59         case io.Reader:
60                 println("io.Reader")
61         case T: // want `unreachable case clause: io\.Reader will always match before CheckUnreachableTypeCases\.T`
62                 println("T")
63         }
64
65         switch err.(type) {
66         case V:
67                 println("V")
68         case U: // want `unreachable case clause: CheckUnreachableTypeCases\.V will always match before CheckUnreachableTypeCases\.U`
69                 println("U")
70         }
71
72         switch err.(type) {
73         case U:
74                 println("U")
75         case V: // want `unreachable case clause: CheckUnreachableTypeCases\.U will always match before CheckUnreachableTypeCases\.V`
76                 println("V")
77         }
78 }
79
80 func fn3() {
81         var (
82                 v   interface{}
83                 err error
84         )
85
86         switch v.(type) {
87         case T:
88                 println("T")
89         case io.Reader:
90                 println("io.Reader")
91         }
92
93         switch v.(type) {
94         case io.ReadCloser:
95                 println("io.ReadCloser")
96         case T:
97                 println("T")
98         }
99
100         switch v.(type) {
101         case io.ReadCloser:
102                 println("io.ReadCloser")
103         case io.Reader:
104                 println("io.Reader")
105         }
106
107         switch v.(type) {
108         case T:
109                 println("T")
110         }
111
112         switch err.(type) {
113         case V, U:
114                 println("V or U")
115         case io.Reader:
116                 println("io.Reader")
117         }
118
119         switch v.(type) {
120         default:
121                 println("something")
122         }
123 }