javascript - Hur fixar jag säkert ESLint `no-fallthrough`-felet för avsiktliga switch-case-utlämnanden av break/return/throw?


För min ansökan vill jag använda ett switch-case-mönster. Vissa fall kräver ELLER-logik, vilket betyder att det finns avsiktliga fallthroughs i koden för korthet. Men ESLint gillar inte det och ger fel. Jag försökte lägga till kommentarer enligt dokumentationen, men det hjälpte inte. För att återskapa, försök detta:

switch(num) {
  case 1:
    /*
      I also have comments in my code that explain functionality to non-developers.
    */
  case 2:
    return "if one or two";
  case 3:
    return "if three only";
}

ESLint med standardinställningar kommer att ge:

Error: Expected a 'break' statement before 'case'.  no-fallthrough

Hur informerar jag ESLint att förvänta sig ett undantag specifikt i detta kodblock?

Jag förstår att det finns sätt att designa detta annorlunda, t.ex. med if-satser och tidigt retur-mönster, vilket är mitt vanliga tillvägagångssätt. Men jag vill att den här delen av systemet ska vara läsbar för icke-utvecklare. Jag förväntar mig att TypeScript och Jest håller saker anständiga.

Svar #1

Jag slutade med att använda @dream-bolds svar men tillämpade det i koden istället för över hela projektet:

/* eslint-disable no-fallthrough */
switch (num) {
  case 1:
    // falls through
  case 2:
    return "if one or two";
  case 3:
    return "if three only";
}
/* eslint-enable no-fallthrough */

Svar #2

Lägg till detta i din eslint-konfigurationsfil,

...
'rules': {'no-fallthrough': ['error', {'commentPattern': 'break[\\s\\w]*omitted'}] 
...

och i din kod:

switch(foo) {
    case 1:
        doSomething();
        // break omitted

    case 2:
        doSomething();
}

Du kan läsa mer detaljer här.