Jshint: Включить оператор case проваливается

Созданный на 18 февр. 2011  ·  10Комментарии  ·  Источник: jshint/jshint

Одна из вещей, в которой мне никогда не удавалось убедить Крокфорда, - это допускать провалы в описании дела.

В настоящее время это нормально:

switch (foo) {
Дело 1:
случай 2:
сделай что-нибудь();
}

Но это не так:

switch (foo) {
Дело 1:
doSomethingFirst ();
случай 2:
сделай что-нибудь();
}

В версии JSLint, которую я взломал раньше, я проверил комментарий / _falls through_ /, указывающий на то, что вы собираетесь провалиться:

switch (foo) {
Дело 1:
doSomethingFirst ();
/ _падение через_ /
случай 2:
сделай что-нибудь();
}

Мне бы очень хотелось, чтобы это было включено в JSHint, так как это очень долго мучило меня в JSLint.

Самый полезный комментарий

Для тех, кто ищет ключ объекта .jshintrc :

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

Все 10 Комментарий

Кроме того, из # 11 - JSHint, вероятно, должен иметь возможность разрешить падение до default .

Поскольку чаще всего провал кейса бывает непреднамеренным, я не добавил отдельную опцию, чтобы просто игнорировать сообщение. Вместо этого я повторно использовал ваш подход с явным комментарием о том, что провал является преднамеренным.

 switch (foo) {
 Дело 1:
 dosmth ();
 / * проваливается * /
 случай 2:
 dosmth ();
 }

Связанный коммит: 4a72da1.

Отлично, спасибо!

IIRC, Крокфорд конкретно упоминает в своей книге, почему ему не нравится провал дела. История одновременно забавна и несколько унизительна.

Извините за комментарий, но предупреждение по-прежнему срабатывает для case s с выбросом в конце блока. Вы можете отключить предупреждение с помощью аннотации /* falls through */ , но эта аннотация "нарушается" (в том смысле, что в конце концов появляется предупреждение) чем-либо, кроме пробела между предыдущим случаем, аннотацией и следующей. случае, поэтому я даже не могу прокомментировать, почему этот комментарий там.

Комментарий /* falls through */ вместо break; - недокументированная функция. Пожалуйста, добавьте это в документы.

Дополнительные комментарии можно добавить в строку перед /* falls through */ .

Прикомандированный. Добавьте в документы /*falls through*/ .

Также добавьте поддержку для:

case 'none':
default:

Хотя технически случай 'none' не нужен, он делает код более читабельным.

+1 за добавление информации об этом в документы.

Интересно, что недавно я обнаружил ситуацию, когда "провалы" в делах имеют смысл. Я использовал это для выполнения миграции версионных данных, прочитанных из localStorage. Бывший:

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
}

По мере развития формата данных код можно поддерживать, добавляя кейсы для миграции более старых версий, и применяются все миграции для доведения конкретной версии до последней.

Для тех, кто ищет ключ объекта .jshintrc :

"-W086": true, //allow fall-through
Была ли эта страница полезной?
0 / 5 - 0 рейтинги