github.com/chenfeining/golangci-lint@v1.0.2-0.20230730162517-14c6c67868df/test/testdata/nonamedreturns_custom.go (about)

     1  //golangcitest:args -Enonamedreturns
     2  //golangcitest:config_path testdata/configs/nonamedreturns.yml
     3  package testdata
     4  
     5  import "fmt"
     6  
     7  type asdf struct {
     8  	test string
     9  }
    10  
    11  func noParams() {
    12  	return
    13  }
    14  
    15  var c = func() {
    16  	return
    17  }
    18  
    19  var d = func() error {
    20  	return nil
    21  }
    22  
    23  var e = func() (err error) { // want `named return "err" with type "error" found`
    24  	err = nil
    25  	return
    26  }
    27  
    28  var e2 = func() (_ error) {
    29  	return
    30  }
    31  
    32  func deferWithError() (err error) { // want `named return "err" with type "error" found`
    33  	defer func() {
    34  		err = nil // use flag to allow this
    35  	}()
    36  	return
    37  }
    38  
    39  var (
    40  	f = func() {
    41  		return
    42  	}
    43  
    44  	g = func() error {
    45  		return nil
    46  	}
    47  
    48  	h = func() (err error) { // want `named return "err" with type "error" found`
    49  		err = nil
    50  		return
    51  	}
    52  
    53  	h2 = func() (_ error) {
    54  		return
    55  	}
    56  )
    57  
    58  // this should not match as the implementation does not need named parameters (see below)
    59  type funcDefintion func(arg1, arg2 interface{}) (num int, err error)
    60  
    61  func funcDefintionImpl(arg1, arg2 interface{}) (int, error) {
    62  	return 0, nil
    63  }
    64  
    65  func funcDefintionImpl2(arg1, arg2 interface{}) (num int, err error) { // want `named return "num" with type "int" found`
    66  	return 0, nil
    67  }
    68  
    69  func funcDefintionImpl3(arg1, arg2 interface{}) (num int, _ error) { // want `named return "num" with type "int" found`
    70  	return 0, nil
    71  }
    72  
    73  func funcDefintionImpl4(arg1, arg2 interface{}) (_ int, _ error) {
    74  	return 0, nil
    75  }
    76  
    77  var funcVar = func() (msg string) { // want `named return "msg" with type "string" found`
    78  	msg = "c"
    79  	return msg
    80  }
    81  
    82  var funcVar2 = func() (_ string) {
    83  	msg := "c"
    84  	return msg
    85  }
    86  
    87  func test() {
    88  	a := funcVar()
    89  	_ = a
    90  
    91  	var function funcDefintion
    92  	function = funcDefintionImpl
    93  	i, err := function("", "")
    94  	_ = i
    95  	_ = err
    96  	function = funcDefintionImpl2
    97  	i, err = function("", "")
    98  	_ = i
    99  	_ = err
   100  }
   101  
   102  func good(i string) string {
   103  	return i
   104  }
   105  
   106  func bad(i string, a, b int) (ret1 string, ret2 interface{}, ret3, ret4 int, ret5 asdf) { // want `named return "ret1" with type "string" found`
   107  	x := "dummy"
   108  	return fmt.Sprintf("%s", x), nil, 1, 2, asdf{}
   109  }
   110  
   111  func bad2() (msg string, err error) { // want `named return "msg" with type "string" found`
   112  	msg = ""
   113  	err = nil
   114  	return
   115  }
   116  
   117  func myLog(format string, args ...interface{}) {
   118  	return
   119  }
   120  
   121  type obj struct{}
   122  
   123  func (o *obj) func1() (err error) { return nil } // want `named return "err" with type "error" found`
   124  
   125  func (o *obj) func2() (_ error) { return nil }