Jshint: Habilitar la falla de la declaración de caso

Creado en 18 feb. 2011  ·  10Comentarios  ·  Fuente: jshint/jshint

Una de las cosas de las que nunca he podido convencer a Crockford es de permitir fallos en la declaración del caso.

Actualmente, esto está bien:

cambiar (foo) {
caso 1:
caso 2:
hacer algo();
}

Pero esto no es:

cambiar (foo) {
caso 1:
doSomethingFirst ();
caso 2:
hacer algo();
}

En una versión de JSLint que pirateé antes, verifiqué un comentario / _falls through_ / para indicar que tiene la intención de fracasar:

cambiar (foo) {
caso 1:
doSomethingFirst ();
/_cae a través_/
caso 2:
hacer algo();
}

Realmente me gustaría ver esto incluido en JSHint, ya que ha sido una molestia en JSLint durante mucho tiempo para mí.

Comentario más útil

Para aquellos que buscan la clave de objeto .jshintrc :

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

Todos 10 comentarios

Además, desde el # 11 - JSHint probablemente debería tener una opción para permitir que caiga hasta el default .

Dado que la mayoría de las veces la caída de casos no es intencional, no agregué una opción separada para simplemente ignorar el mensaje. En cambio, reutilicé su enfoque con un comentario explícito que dice que el fracaso es intencional.

 cambiar (foo) {
 caso 1:
 dosmth ();
 /* cae a través */
 caso 2:
 dosmth ();
 }

Confirmación relacionada: 4a72da1.

¡Genial gracias!

IIRC, Crockford hace una mención específica en su libro por qué no le gusta la caída del caso. La historia es a la vez divertida y un tanto despectiva.

Lamento comentar sobre esto, pero la advertencia todavía se activa para case s con un lanzamiento al final de un bloque. Puede deshabilitar la advertencia con una anotación /* falls through */ , pero la anotación se "perturba" (en el sentido de que, después de todo, la advertencia se activa) por cualquier cosa que no sea un espacio en blanco entre el caso anterior, la anotación y el siguiente. caso, así que ni siquiera puedo comentar por qué el comentario está allí.

El comentario /* falls through */ lugar de break; es una característica no documentada. Agréguelo a los documentos.

Se pueden agregar comentarios adicionales en una línea antes de /* falls through */ .

Secundado. Agregue /*falls through*/ a los documentos.

Además, agregue soporte para:

case 'none':
default:

Si bien técnicamente el caso 'none' es innecesario, aumenta la legibilidad del código.

+1 por agregar información sobre esto a los documentos.

Como punto de interés, recientemente encontré una situación en la que los casos "fallidos" tienen sentido. Usé esto para realizar migraciones de datos versionados leídos desde 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
}

A medida que evoluciona el formato de datos, el código se puede mantener agregando casos para migrar versiones anteriores, y se aplican todas las migraciones para actualizar una versión particular a la última.

Para aquellos que buscan la clave de objeto .jshintrc :

"-W086": true, //allow fall-through
¿Fue útil esta página
0 / 5 - 0 calificaciones