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  }