github.com/serversong/goreporter@v0.0.0-20200325104552-3cfaf44fd178/linters/interfacer/testdata/files/used.go (about)

     1  package foo
     2  
     3  type Closer interface {
     4  	Close() error
     5  }
     6  
     7  type Reader interface {
     8  	Read(p []byte) (n int, err error)
     9  }
    10  
    11  type ReadCloser interface {
    12  	Reader
    13  	Closer
    14  }
    15  
    16  type St struct{}
    17  
    18  func (s St) Read(p []byte) (int, error) {
    19  	return 0, nil
    20  }
    21  func (s St) Close() error {
    22  	return nil
    23  }
    24  func (s St) Other() {}
    25  
    26  func FooCloser(c Closer) {
    27  	c.Close()
    28  }
    29  
    30  func FooSt(s St) {
    31  	s.Other()
    32  }
    33  
    34  func Bar(s St) {
    35  	s.Close()
    36  	FooSt(s)
    37  }
    38  
    39  func BarWrong(s St) { // WARN s can be Closer
    40  	s.Close()
    41  	FooCloser(s)
    42  }
    43  
    44  func extra(n int, cs ...Closer) {}
    45  
    46  func ArgExtraWrong(s1 St) { // WARN s1 can be Closer
    47  	var s2 St
    48  	s1.Close()
    49  	s2.Close()
    50  	extra(3, s1, s2)
    51  }
    52  
    53  func Assigned(s St) {
    54  	s.Close()
    55  	var s2 St
    56  	s2 = s
    57  	_ = s2
    58  }
    59  
    60  func Declared(s St) {
    61  	s.Close()
    62  	var s2 St = s
    63  	_ = s2
    64  }
    65  
    66  func AssignedIface(s St) { // WARN s can be Closer
    67  	s.Close()
    68  	var c Closer
    69  	c = s
    70  	_ = c
    71  }
    72  
    73  func AssignedIfaceDiff(s St) { // WARN s can be ReadCloser
    74  	s.Close()
    75  	var r Reader
    76  	r = s
    77  	_ = r
    78  }
    79  
    80  func doRead(r Reader) {
    81  	b := make([]byte, 10)
    82  	r.Read(b)
    83  }
    84  
    85  func ArgIfaceDiff(s St) { // WARN s can be ReadCloser
    86  	s.Close()
    87  	doRead(s)
    88  }