eslint/no-fallthrough Pedantic
무엇을 하는가
case 문의 연속 실행을 금지합니다
이 규칙은 하나의 케이스에서 다른 케이스로 의도치 않게 연속 실행되는 것을 제거하기 위한 것입니다. 따라서 주석으로 표시되지 않은 모든 연속 실행 시나리오를 경고합니다.
왜 좋지 않은가?
자바스크립트의 switch 문은 한 케이스에서 다음 케이스로 "연속 실행"할 수 있다는 특성 덕분에 언어에서 가장 실수하기 쉬운 구조 중 하나입니다. 예를 들어:
switch (foo) {
case 1:
doSomething();
case 2:
doSomethingElse();
}이 예제에서 foo가 1이라면, 첫 번째 케이스가 두 번째 케이스로 연속 실행되므로 둘 다 실행됩니다. 이를 방지하려면 break를 사용하면 됩니다. 예시:
switch (foo) {
case 1:
doSomething();
break;
case 2:
doSomethingElse();
}의도하지 않은 연속 실행을 막는 데는 문제가 없지만, 만약 연속 실행이 의도적이라면 언어 자체에서는 이를 나타낼 방법이 없습니다. 따라서 의도적인 연속 실행을 주석을 통해 항상 표시하는 것이 최선의 실천 방법입니다. 이 주석은 /falls?\s?through/i 정규식과 일치해야 하지만 지시어(directive)는 아니어야 합니다:
switch (foo) {
case 1:
doSomething();
// falls through
case 2:
doSomethingElse();
}
switch (foo) {
case 1:
doSomething();
// fall through
case 2:
doSomethingElse();
}
switch (foo) {
case 1:
doSomething();
// fallsthrough
case 2:
doSomethingElse();
}
switch (foo) {
case 1: {
doSomething();
// falls through
}
case 2: {
doSomethingElse();
}
}이 예제에서는 예상 동작에 대해 혼란이 없습니다. 첫 번째 케이스가 두 번째 케이스로 의도적으로 연속 실행되어야 한다는 것이 명확합니다.
예시
이 규칙에 대한 잘못된 코드 예시:
switch (foo) {
case 1:
doSomething();
case 2:
doSomething();
}이 규칙에 대한 올바른 코드 예시:
switch (foo) {
case 1:
doSomething();
break;
case 2:
doSomething();
}
function bar(foo) {
switch (foo) {
case 1:
doSomething();
return;
case 2:
doSomething();
}
}
switch (foo) {
case 1:
doSomething();
throw new Error("Boo!");
case 2:
doSomething();
}
switch (foo) {
case 1:
case 2:
doSomething();
}
switch (foo) {
case 1:
case 2:
doSomething();
}
switch (foo) {
case 1:
doSomething();
// falls through
case 2:
doSomething();
}
switch (foo) {
case 1: {
doSomething();
// falls through
}
case 2: {
doSomethingElse();
}
}이 예시들에서 마지막 케이스 문은 경고를 유발하지 않는다는 점에 유의하세요. 왜냐하면 더 이상 연속 실행될 대상이 없기 때문입니다.
구성
이 규칙은 다음 속성을 가진 구성 객체를 수용합니다:
allowEmptyCase
type: boolean
기본값: false
빈 케이스 문이 연속 실행되는 것을 허용할지 여부.
commentPattern
type: string
연속 실행 주석과 일치하도록 설정할 사용자 정의 정규 표현식 패턴.
reportUnusedFallthroughComment
type: boolean
기본값: false
의도적인 연속 실행을 표시한 주석이 실제로 사용되지 않았을 때 경고를 보고할지 여부.
사용 방법
구성 파일 또는 CLI를 사용하여 이 규칙을 활성화하려면 다음과 같이 사용할 수 있습니다:
{
"rules": {
"no-fallthrough": "error"
}
}oxlint --deny no-fallthrough