Jshint: Activer l'échec de la déclaration de cas

Créé le 18 févr. 2011  ·  10Commentaires  ·  Source: jshint/jshint

L'une des choses dont je n'ai jamais réussi à convaincre Crockford est d'autoriser les erreurs de déclaration de cas.

Actuellement, c'est bien :

switch(foo){
cas 1:
cas 2 :
faire quelque chose();
}

Mais ce n'est pas :

switch(foo){
cas 1:
faire quelque chose d'abord();
cas 2 :
faire quelque chose();
}

Dans une version de JSLint que j'ai piratée auparavant, j'ai recherché un commentaire /_falls through_/ pour indiquer que vous avez l'intention d'échouer :

switch(foo){
cas 1:
faire quelque chose d'abord();
/_tombe à travers_/
cas 2 :
faire quelque chose();
}

J'aimerais vraiment que cela soit inclus dans JSHint, car cela a été une douleur dans JSLint pendant très longtemps pour moi.

Commentaire le plus utile

Pour ceux qui recherchent la clé d'objet .jshintrc :

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

Tous les 10 commentaires

De plus, à partir de #11 — JSHint devrait probablement avoir une option pour permettre la chute jusqu'au default .

Étant donné que la plupart du temps, la chute de la casse n'est pas intentionnelle, je n'ai pas ajouté d'option distincte pour simplement ignorer le message. Au lieu de cela, j'ai réutilisé votre approche avec un commentaire explicite disant que l'échec est intentionnel.

 switch(foo) {
 cas 1:
 dosmth();
 /* tombe à travers */
 cas 2 :
 dosmth();
 }

Validation associée : 4a72da1.

Super merci!

IIRC, Crockford fait une mention spécifique dans son livre pourquoi il n'aime pas les cas. L'histoire est à la fois amusante et quelque peu dévalorisante.

Désolé de commenter cela, mais l'avertissement est toujours déclenché pour case s avec un lancer à la fin d'un bloc. Vous pouvez désactiver l'avertissement avec une annotation /* falls through */ , mais l'annotation est "perturbée" (dans le sens où l'avertissement est alors déclenché après tout) par autre chose que des espaces entre la casse précédente, l'annotation et la suivante cas, donc je ne peux même pas expliquer pourquoi le commentaire est là.

Le commentaire /* falls through */ au lieu de break; est une fonctionnalité non documentée. Merci de l'ajouter à la doc.

Des commentaires supplémentaires peuvent être ajoutés sur une ligne avant /* falls through */ .

Secondé. Veuillez ajouter /*falls through*/ aux documents.

Veuillez également ajouter un support pour :

case 'none':
default:

Bien que techniquement le cas 'none' soit inutile, il ajoute à la lisibilité du code.

+1 pour avoir ajouté des informations à ce sujet aux documents.

Comme point d'intérêt, j'ai récemment trouvé une situation où les cas « chute à travers » ont du sens. Je l'ai utilisé pour effectuer des migrations de données versionnées lues à partir 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
}

Au fur et à mesure que le format des données évolue, le code peut être maintenu en ajoutant des cas de migration d'anciennes versions, et toutes les migrations pour mettre une version particulière à la dernière version sont appliquées.

Pour ceux qui recherchent la clé d'objet .jshintrc :

"-W086": true, //allow fall-through
Cette page vous a été utile?
0 / 5 - 0 notes