github.com/vanstinator/golangci-lint@v0.0.0-20240223191551-cc572f00d9d1/test/testdata/nilnil.go (about)

     1  //golangcitest:args -Enilnil
     2  package testdata
     3  
     4  import (
     5  	"io"
     6  	"unsafe"
     7  )
     8  
     9  type User struct{}
    10  
    11  func primitivePtr() (*int, error) {
    12  	return nil, nil // want "return both the `nil` error and invalid value: use a sentinel error instead"
    13  }
    14  
    15  func structPtr() (*User, error) {
    16  	return nil, nil // want "return both the `nil` error and invalid value: use a sentinel error instead"
    17  }
    18  
    19  func emptyStructPtr() (*struct{}, error) {
    20  	return nil, nil // want "return both the `nil` error and invalid value: use a sentinel error instead"
    21  }
    22  
    23  func anonymousStructPtr() (*struct{ ID string }, error) {
    24  	return nil, nil // want "return both the `nil` error and invalid value: use a sentinel error instead"
    25  }
    26  
    27  func chBi() (chan int, error) {
    28  	return nil, nil // want "return both the `nil` error and invalid value: use a sentinel error instead"
    29  }
    30  
    31  func chIn() (chan<- int, error) {
    32  	return nil, nil // want "return both the `nil` error and invalid value: use a sentinel error instead"
    33  }
    34  
    35  func chOut() (<-chan int, error) {
    36  	return nil, nil // want "return both the `nil` error and invalid value: use a sentinel error instead"
    37  }
    38  
    39  func fun() (func(), error) {
    40  	return nil, nil // want "return both the `nil` error and invalid value: use a sentinel error instead"
    41  }
    42  
    43  func funWithArgsAndResults() (func(a, b, c int) (int, int), error) {
    44  	return nil, nil // want "return both the `nil` error and invalid value: use a sentinel error instead"
    45  }
    46  
    47  func iface() (interface{}, error) {
    48  	return nil, nil // want "return both the `nil` error and invalid value: use a sentinel error instead"
    49  }
    50  
    51  func m1() (map[int]int, error) {
    52  	return nil, nil // want "return both the `nil` error and invalid value: use a sentinel error instead"
    53  }
    54  
    55  func m2() (map[int]*User, error) {
    56  	return nil, nil // want "return both the `nil` error and invalid value: use a sentinel error instead"
    57  }
    58  
    59  type Storage struct{}
    60  
    61  func (s *Storage) GetUser() (*User, error) {
    62  	return nil, nil // want "return both the `nil` error and invalid value: use a sentinel error instead"
    63  }
    64  
    65  func ifReturn() (*User, error) {
    66  	var s Storage
    67  	if _, err := s.GetUser(); err != nil {
    68  		return nil, nil // want "return both the `nil` error and invalid value: use a sentinel error instead"
    69  	}
    70  	return new(User), nil
    71  }
    72  
    73  func forReturn() (*User, error) {
    74  	for {
    75  		return nil, nil // want "return both the `nil` error and invalid value: use a sentinel error instead"
    76  	}
    77  }
    78  
    79  func multipleReturn() (*User, error) {
    80  	var s Storage
    81  
    82  	if _, err := s.GetUser(); err != nil {
    83  		return nil, nil // want "return both the `nil` error and invalid value: use a sentinel error instead"
    84  	}
    85  
    86  	if _, err := s.GetUser(); err != nil {
    87  		return nil, nil // want "return both the `nil` error and invalid value: use a sentinel error instead"
    88  	}
    89  
    90  	if _, err := s.GetUser(); err != nil {
    91  		return nil, nil // want "return both the `nil` error and invalid value: use a sentinel error instead"
    92  	}
    93  
    94  	return new(User), nil
    95  }
    96  
    97  func nested() {
    98  	_ = func() (*User, error) {
    99  		return nil, nil // want "return both the `nil` error and invalid value: use a sentinel error instead"
   100  	}
   101  
   102  	_, _ = func() (*User, error) {
   103  		return nil, nil // want "return both the `nil` error and invalid value: use a sentinel error instead"
   104  	}()
   105  }
   106  
   107  func deeplyNested() {
   108  	_ = func() {
   109  		_ = func() int {
   110  			_ = func() {
   111  				_ = func() (*User, error) {
   112  					_ = func() {}
   113  					_ = func() int { return 0 }
   114  					return nil, nil // want "return both the `nil` error and invalid value: use a sentinel error instead"
   115  				}
   116  			}
   117  			return 0
   118  		}
   119  	}
   120  }
   121  
   122  type (
   123  	StructPtrType    *User
   124  	PrimitivePtrType *int
   125  	ChannelType      chan int
   126  	FuncType         func(int) int
   127  	Checker          interface{ Check() }
   128  )
   129  
   130  func structPtrType() (StructPtrType, error) {
   131  	return nil, nil // want "return both the `nil` error and invalid value: use a sentinel error instead"
   132  }
   133  
   134  func primitivePtrType() (PrimitivePtrType, error) {
   135  	return nil, nil // want "return both the `nil` error and invalid value: use a sentinel error instead"
   136  }
   137  
   138  func channelType() (ChannelType, error) {
   139  	return nil, nil // want "return both the `nil` error and invalid value: use a sentinel error instead"
   140  }
   141  
   142  func funcType() (FuncType, error) {
   143  	return nil, nil // want "return both the `nil` error and invalid value: use a sentinel error instead"
   144  }
   145  
   146  func ifaceType() (Checker, error) {
   147  	return nil, nil // want "return both the `nil` error and invalid value: use a sentinel error instead"
   148  }
   149  
   150  func withoutArgs()                                {}
   151  func withoutError1() *User                        { return nil }
   152  func withoutError2() (*User, *User)               { return nil, nil }
   153  func withoutError3() (*User, *User, *User)        { return nil, nil, nil }
   154  func withoutError4() (*User, *User, *User, *User) { return nil, nil, nil, nil }
   155  
   156  // Unsupported.
   157  
   158  func invalidOrder() (error, *User)               { return nil, nil }
   159  func withError3rd() (*User, bool, error)         { return nil, false, nil }
   160  func withError4th() (*User, *User, *User, error) { return nil, nil, nil, nil }
   161  func unsafePtr() (unsafe.Pointer, error)         { return nil, nil }
   162  func uintPtr() (uintptr, error)                  { return 0, nil }
   163  func slice() ([]int, error)                      { return nil, nil }
   164  func ifaceExtPkg() (io.Closer, error)            { return nil, nil }
   165  
   166  func implicitNil1() (*User, error) {
   167  	err := (error)(nil)
   168  	return nil, err
   169  }
   170  
   171  func implicitNil2() (*User, error) {
   172  	err := io.EOF
   173  	err = nil
   174  	return nil, err
   175  }
   176  
   177  func implicitNil3() (*User, error) {
   178  	return nil, wrap(nil)
   179  }
   180  func wrap(err error) error { return err }