github.com/songshiyun/revive@v1.1.5-0.20220323112655-f8433a19b3c5/testdata/useless-break.go (about) 1 package fixtures 2 3 import ( 4 ast "go/ast" 5 "reflect" 6 ) 7 8 func UselessBreaks() { 9 10 switch { 11 case true: 12 break // MATCH /useless break in case clause/ 13 case false: 14 if false { 15 break 16 } 17 } 18 19 select { 20 case c: 21 break // MATCH /useless break in case clause/ 22 case n: 23 if true { 24 if false { 25 break 26 } 27 break 28 } 29 } 30 31 for { 32 switch { 33 case c1: 34 break // MATCH /useless break in case clause (WARN: this break statement affects this switch or select statement and not the loop enclosing it)/ 35 } 36 } 37 38 for _, node := range desc.Args { 39 switch node := node.(type) { 40 case *ast.FuncLit: 41 found = true 42 funcLit = node 43 break // MATCH /useless break in case clause (WARN: this break statement affects this switch or select statement and not the loop enclosing it)/ 44 } 45 } 46 47 switch val.Kind() { 48 case reflect.Array, reflect.Slice: 49 if val.Len() == 0 { 50 break 51 } 52 for i := 0; i < val.Len(); i++ { 53 oneIteration(reflect.ValueOf(i), val.Index(i)) 54 } 55 return 56 case reflect.Map: 57 if val.Len() == 0 { 58 break 59 } 60 om := fmtsort.Sort(val) 61 for i, key := range om.Key { 62 oneIteration(key, om.Value[i]) 63 } 64 return 65 case reflect.Chan: 66 if val.IsNil() { 67 break 68 } 69 if val.Type().ChanDir() == reflect.SendDir { 70 s.errorf("range over send-only channel %v", val) 71 break 72 } 73 i := 0 74 for ; ; i++ { 75 elem, ok := val.Recv() 76 if !ok { 77 break 78 } 79 oneIteration(reflect.ValueOf(i), elem) 80 } 81 if i == 0 { 82 break 83 } 84 return 85 case reflect.Invalid: 86 break // MATCH /useless break in case clause/ 87 default: 88 s.errorf("range can't iterate over %v", val) 89 } 90 }