== Why is this an issue?

include::../description.adoc[]

=== Noncompliant code example

[source,javascript]
----
switch (param) {  //missing default clause
  case 0:
    doSomething();
    break;
  case 1:
    doSomethingElse();
    break;
}

switch (param) {
  default: // default clause should be the last one
    error();
    break;
  case 0:
    doSomething();
    break;
  case 1:
    doSomethingElse();
    break;
}
----

=== Compliant solution

[source,javascript]
----
switch (param) {
  case 0:
    doSomething();
    break;
  case 1:
    doSomethingElse();
    break;
  default:
    error();
    break;
}
----

=== Exceptions

The rule ignores ``++switch++`` statements where the discriminant is a TypeScript union and there is a ``++case++`` branch for each constituent.

[source,javascript]
----
type Season = 'Spring' | 'Summer' | 'Fall' | 'Winter';
let season: Season;
switch (season) {
  case 'Spring':
    wakeUp();
    break;
  case 'Summer':
    getOut();
    break;
  case 'Fall':
    saveFood();
    break;
  case 'Winter':
    sleep();
    break;
}
----

The same applies for TypeScript enums.

[source,javascript]
----
enum Direction {
  Up,
  Down
}

let dir: Direction;
switch (dir) {
  case Direction.Up:
    getUp();
    break;
  case Direction.Down:
    getDown();
    break;
}
----

include::../see.adoc[]

ifdef::env-github,rspecator-view[]

'''
== Implementation Specification
(visible only on this page)

include::../message.adoc[]

'''
== Comments And Links
(visible only on this page)

include::../comments-and-links.adoc[]

endif::env-github,rspecator-view[]
