=== Exceptions

`case` labels that declare variables cannot have multiple patterns. Therefore this situation is ignored.

[source,swift]
----
switch a {
    case .STR_CASE(let x):
        print(x)
    case .INT_CASE(let x):
        print(x)
    default:
        print("default")
}
----

Blocks in an `if` chain that contain a single line of code are ignored, as are blocks in a `switch` statement that contain a single line of code with or without a following `break`.
[source,swift]
----
if a >= 0 && a < 10 {    // no issue, usually this is done on purpose to increase the readability
  doTheThing()
} else if a >= 10 && a < 20 {
  doTheThing()
} else if a >= 20 && a < 50 {
  doFirstThing()
} 
----

But this exception does not apply to `if` chains without `else`-s, or to `switch`-es without default clauses when all branches have the same single line of code. In the case of `if` chains with `else`-s, or of `switch`-es with default clauses, rule S3923 raises a bug. 

[source,swift]
----
if a >= 0 && a < 10 {     // Noncompliant, this might have been done on purpose but probably not
  doTheThing()
} else if a >= 10 && a < 20 {
  doTheThing()
}
----