Подтвердить что ты не робот

Почему появились новые ошибки JSLint "использовать пробелы, а не вкладки" и "небезопасный характер"?

Я проверял свой JavaScript с помощью JSLint примерно 2 года, а время от времени меняются правила. В общем случае, когда JSLint вводит новое правило, есть флажок, чтобы игнорировать это правило при разборе или если вы не игнорируете его, чтобы сделать свой код совместимым с ним.

Однако, когда я выполнял мою проверку JSLint сегодня, я столкнулся с этими двумя новыми ошибками:

Используйте пробелы, а не вкладки.

Это не ошибка смешения вкладок и пробелов. Я использую только вкладки. Это недавно измененная версия "смешивания вкладок и пробелов", которая теперь запрещает вкладки в целом.

и

Небезопасный символ.

*/

Небезопасный символ.

_const: {

Нет новых параметров для игнорирования. Я не могу понять, что небезопасно для закрытия комментария блока, почему он считает _const: {как небезопасный, когда у меня есть nomen: true, (обманывание _ в идентификаторах) или почему я должен внезапно переключаться с пробелов на вкладки, когда у меня все еще есть конфигурация о вложении 4 пробелов является вкладкой.

Есть ли у кого-нибудь идея, почему они были введены, по крайней мере, как заставить JSLint игнорировать эти новые правила?

Update: Параметр Messy White Space работает вокруг проблемы, но это может вызвать другое неожиданное поведение:

if (condition) { 
  //            ^-- there is a space but it won't indicate an error
4b9b3361

Ответ 1

Ну, похоже, Дуглас Крокфорд просто сделал намного больше людей, переключившихся на JSHint. Посмотрите эту фиксацию.

Ошибка "Смешанные пробелы и табуляции" была удалена, и вместо нее была добавлена ​​ошибка "Использовать пробелы, а не вкладки". Помимо этого, есть крошечное изменение в этом различии, которое показывает причину этого. Следующая строка (комментарий добавлен):

at = source_row.search(/ \t/);
//                      ^ Space

был заменен следующим:

at = source_row.search(/\t/);
//                      ^ No space!

После этого поиска существует инструкция if. Если условие оценивается как true, выдается предупреждение "Использовать пробелы, а не вкладки". Вот это утверждение:

if (at >= 0) {
    warn_at('use_spaces', line, at + 1);
}

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

Я предлагаю вам отказаться от JSLint и перейти на JSHint прямо сейчас.

Ответ 2

Вы можете подавить ошибку, щелкнув опцию "беспорядочное пустое пространство".

Ответ 3

В зависимости от вашего редактора /IDE вы можете настроить способ работы TAB.

Например, я использую Sublime Text. В правом нижнем углу находится вкладка Размер: 4.

Я нажал на него и установил его "Отступы, используя пробелы".

Это обновило все мои вкладки, чтобы использовать пробелы и ошибки JSLint. Я стараюсь использовать как можно меньше вариантов с JSLint, так как я хочу, чтобы мой код был хорошо структурирован.

Я также использую JSFormat, который будет вставляться в соответствии с настройками моих редакторов, поэтому, когда я закончил, я запускаю JSFormat, а затем JSLint. Нет ошибок = счастливый мальчик!

Надеюсь, что это поможет.

Ответ 4

Чтобы ответить, почему JSLint теперь дает ошибку о вкладках, http://www.jslint.com/help.html дает это обоснование:

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

По сути, он хочет, чтобы все пришли к консенсусу относительно того, использовать ли вкладки или пробелы, чтобы они не смешивались. Он решил, что согласованность ширины пространства делает его лучшим выбором, поэтому мы все должны использовать это. Ясно, что некоторые люди не согласятся с этой мыслью (включая меня), но именно по этой причине JSLint выбрасывает эту ошибку.