Вы можете добавить это самостоятельно в JSLint, если хотите, хотя это пограничное Зло.
Вот один быстрый и грязный способ с текущей версией:
Путь, который я собираюсь выбрать, состоит в том, чтобы захватить блок switch
функции token
для комментариев в стиле /*
. Это строка 1276 в настоящее время:
case '/*':
for (;;) {
i = source_row.search(lx);
...
Давайте изменим это, чтобы искать комментарии, которые выглядят как /*ignore:true */
в строке сами по себе (хотя технически в этом случае половина true
может быть где угодно в строке, хотя строка /*ignore:false */
должна находиться в строке на себя, поэтому давайте притворимся, что это верно для обоих).
Пример плохого кода с ошибкой lint:
function spam()
{
var sand = "sand";
/*ignore:true */
var spud = "spud";
/*ignore:false */
window.console.log(sand);
}
Если мы найдем /*ignore:true */
, давайте пропустим строки, пока не найдем строку с /*ignore:false */
с /*ignore:...
самыми первыми символами в строке. Пока это ложное утверждение в строке само по себе, мы игнорируем все.
case '/*':
// Opening /* has already been sliced.
if (source_row.startsWith("ignore:true")) {
do {
if (console.log) { console.log(source_row) };
} while (next_line() && !source_row.trim().startsWith("/*ignore:false"));
} else {
// Put in the code that was originally there
}
break;
Это некрасиво, но, кажется, работает.
Теперь это может вызвать проблемы. Например, если у вас есть объявление var
в разделе, который вы игнорируете и используете позже, JSLint_Hacked сообщит, что myVar was used before it was defined.
Пример:
/*jslint white:true, sloppy:true, browser:true */
function spam()
{
var sand = "spam";
/*ignore:true */
var spud = "spud";
/*ignore:false */
window.console.log(sand + spud);
}
Так что такие вещи могут стать неприятными.
И я бы использовал это только в тех случаях, когда вы бездумно вынуждены линтинговать все, но по какой-то причине у вас нет возможности исправить то, что находится в каждом файле, хотя у вас есть возможность редактировать его, как ни странно, как в данном случае с запутанным кодом. Вся эта штука с ignore
очень хреновая.
Мне нужно провести больше времени внутри JSLint, чтобы узнать, как это работает на самом деле, но функция next_line()
кажется неразрушающей. То есть вы могли (и должны) обработать это в функции do_jslint()
с "настоящими" директивами стиля /*jslint ignore:true */
, но тогда вам придется обрабатывать побочные эффекты при вызове функции advance()
. Хак, который я здесь использую, был намного проще, но он также намного уродливее.
person
ruffin
schedule
12.03.2015