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

     1  package foo
     2  
     3  type Closer interface {
     4  	Close() error
     5  }
     6  
     7  type st struct {
     8  	field int
     9  	m     map[int]int
    10  }
    11  
    12  func (s *st) Close() error {
    13  	return nil
    14  }
    15  
    16  func (s *st) Lock() {}
    17  
    18  func (s *st) Unlock() {}
    19  
    20  func Foo(s *st) {
    21  	s.Close()
    22  	s.field = 3
    23  }
    24  
    25  func FooWrong(s *st) { // WARN s can be Closer
    26  	s.Close()
    27  }
    28  
    29  type st2 struct {
    30  	st1 *st
    31  }
    32  
    33  func (s *st2) Close() error {
    34  	return nil
    35  }
    36  
    37  func Foo2(s *st2) {
    38  	s.Close()
    39  	s.st1.field = 3
    40  }
    41  
    42  func Foo2Wrong(s *st2) { // WARN s can be Closer
    43  	s.Close()
    44  }
    45  
    46  func FooPassed(s *st) {
    47  	s.Close()
    48  	s2 := s
    49  	s2.field = 2
    50  }
    51  
    52  func FooPassedWrong(s *st) { // WARN s can be Closer
    53  	s.Close()
    54  	s2 := s
    55  	s2.Close()
    56  }
    57  
    58  func FooBuiltinArg(s *st) func(int) {
    59  	s.Lock()
    60  	s.Unlock()
    61  	delete(s.m, 3)
    62  	return nil
    63  }