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 }