honnef.co/go/tools@v0.4.7/staticcheck/testdata/src/example.com/CheckEvenSliceLength/CheckEvenSliceLength.go (about)

     1  package pkg
     2  
     3  import "strings"
     4  
     5  func fnVariadic(s string, args ...interface{}) { //@ fact(args, "needs even elements")
     6  	if len(args)%2 != 0 {
     7  		panic("I'm one of those annoying logging APIs")
     8  	}
     9  }
    10  
    11  func fnSlice(s string, args []interface{}) { //@ fact(args, "needs even elements")
    12  	if len(args)%2 != 0 {
    13  		panic("I'm one of those annoying logging APIs")
    14  	}
    15  }
    16  
    17  func fnIndirect(s string, args ...interface{}) { //@ fact(args, "needs even elements")
    18  	fnSlice(s, args)
    19  }
    20  
    21  func fn2(bleh []interface{}, arr1 [3]interface{}) { //@ fact(bleh, "needs even elements")
    22  	fnVariadic("%s", 1, 2, 3) //@ diag(re`variadic argument "args".+ but has 3 elements`)
    23  	args := []interface{}{1, 2, 3}
    24  	fnVariadic("", args...)     //@ diag(re`variadic argument "args".+ but has 3 elements`)
    25  	fnVariadic("", args[:1]...) //@ diag(re`variadic argument "args".+ but has 1 elements`)
    26  	fnVariadic("", args[:2]...)
    27  	fnVariadic("", args[0:1]...) //@ diag(re`variadic argument "args".+ but has 1 elements`)
    28  	fnVariadic("", args[0:]...)  //@ diag(re`variadic argument "args".+ but has 3 elements`)
    29  	fnVariadic("", args[:]...)   //@ diag(re`variadic argument "args".+ but has 3 elements`)
    30  	fnVariadic("", bleh...)
    31  	fnVariadic("", bleh[:1]...)  //@ diag(re`variadic argument "args".+ but has 1 elements`)
    32  	fnVariadic("", bleh[0:1]...) //@ diag(re`variadic argument "args".+ but has 1 elements`)
    33  	fnVariadic("", bleh[0:]...)
    34  	fnVariadic("", bleh[:]...)
    35  	fnVariadic("", bleh)                      //@ diag(re`variadic argument "args".+ but has 1 elements`)
    36  	fnVariadic("", make([]interface{}, 3)...) //@ diag(re`variadic argument "args".+ but has 3 elements`)
    37  	fnVariadic("", make([]interface{}, 4)...)
    38  	var arr2 [3]interface{}
    39  	fnVariadic("", arr1[:]...) //@ diag(re`variadic argument "args".+ but has 3 elements`)
    40  	fnVariadic("", arr2[:]...) //@ diag(re`variadic argument "args".+ but has 3 elements`)
    41  
    42  	fnSlice("", []interface{}{1, 2, 3}) //@ diag(re`argument "args".+ but has 3 elements`)
    43  	fnSlice("", []interface{}{1, 2, 3, 4})
    44  
    45  	fnIndirect("%s", 1, 2, 3) //@ diag(re`argument "args".+ but has 3 elements`)
    46  	fnIndirect("%s", 1, 2)
    47  
    48  	strings.NewReplacer("one") //@ diag(re`variadic argument "oldnew".+ but has 1 elements`)
    49  	strings.NewReplacer("one", "two")
    50  }
    51  
    52  func fn3() {
    53  	args := []interface{}{""}
    54  	if true {
    55  		fnSlice("", args) //@ diag(`but has 1 element`)
    56  	}
    57  }