Jshint: Habilitar falha de declaração de caso

Criado em 18 fev. 2011  ·  10Comentários  ·  Fonte: jshint/jshint

Uma das coisas de que nunca fui capaz de convencer Crockford é permitir falhas de declaração de caso.

Atualmente, está tudo bem:

switch (foo) {
caso 1:
caso 2:
faça alguma coisa();
}

Mas isso não é:

switch (foo) {
caso 1:
doSomethingFirst ();
caso 2:
faça alguma coisa();
}

Em uma versão do JSLint que hackeei antes, fiz uma verificação de um comentário / _capa_ / para indicação de que você pretende falhar:

switch (foo) {
caso 1:
doSomethingFirst ();
/ _falls through_ /
caso 2:
faça alguma coisa();
}

Eu realmente gostaria de ver isso incluído no JSHint, pois tem sido uma dor no JSLint por muito tempo.

Comentários muito úteis

Para quem procura a chave .jshintrc object:

"-W086": true, //allow fall-through

Todos 10 comentários

Além disso, de # 11 - JSHint provavelmente deve ter uma opção para permitir a queda até default .

Como na maioria das vezes a falha de caso não é intencional, não adicionei uma opção separada para simplesmente ignorar a mensagem. Em vez disso, reutilizei sua abordagem com um comentário explícito dizendo que a falha é intencional.

 switch (foo) {
 caso 1:
 dosmth ();
 / * falha * /
 caso 2:
 dosmth ();
 }

Confirmação relacionada: 4a72da1.

Incrível, obrigado!

IIRC, Crockford faz uma menção específica em seu livro porque ele não gosta de casos inesperados. A história é divertida e um tanto depreciativa.

Desculpe comentar sobre isso, mas o aviso ainda é acionado por case s com um lançamento no final de um bloco. Você pode desativar o aviso com uma anotação /* falls through */ , mas a anotação é "perturbada" (no sentido de que o aviso é acionado depois de tudo) por qualquer coisa que não seja um espaço em branco entre o caso anterior, a anotação e o próximo caso, então não posso nem comentar por que o comentário está lá.

O comentário /* falls through */ vez de break; é um recurso não documentado. Por favor, adicione-o aos documentos.

Comentários adicionais podem ser adicionados em uma linha antes de /* falls through */ .

Destacado. Adicione /*falls through*/ aos documentos.

Além disso, adicione suporte para:

case 'none':
default:

Embora tecnicamente o caso 'none' seja desnecessário, ele aumenta a legibilidade do código.

+1 para adicionar informações sobre isso aos documentos.

Como ponto de interesse, recentemente encontrei uma situação em que casos "falhos" fazem sentido. Usei isso para realizar migrações de dados versionados lidos de localStorage. Ex:

function migrate( version, data ) {
    switch( version ) {
        case 1 :
            data.new1 = data.old;  // convert data from version 1 to version 2
            delete data.old;
        case 2 :
            data.new2 = data.new1;  // convert data from version 2 to version 3
            delete data.new1;
    }
    return data;  // return data in version 3 format
}

Conforme o formato dos dados evolui, o código pode ser mantido adicionando casos para a migração de versões mais antigas, e todas as migrações para trazer uma versão específica para a mais recente são aplicadas.

Para quem procura a chave .jshintrc object:

"-W086": true, //allow fall-through
Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

strugee picture strugee  ·  8Comentários

ghost picture ghost  ·  3Comentários

NemoStein picture NemoStein  ·  7Comentários

TheSavior picture TheSavior  ·  3Comentários

stefanuddenberg picture stefanuddenberg  ·  7Comentários