JSLint - игнорировать разделы кода

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

  /*jlsint xxx:true/false*/

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

В запутанном коде, который у меня есть, используются конструкции, которые я не знаю, можно ли их отключить.

Например:

for(L=(117.>

вызывает это сообщение:

Problem at line 1 character 57: A trailing decimal point can be confused with a dot '117.

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

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

Я знаю об этом запросе JSLint: управление комментариями (выборочное игнорирование), но это не т ответил.


person Zhami    schedule 23.08.2010    source источник
comment
Проверьте это [stackoverflow. com/questions/599859/ [1]: stackoverflow.com/questions/599859/   -  person napoleonss    schedule 01.11.2012


Ответы (1)


Вы можете добавить это самостоятельно в 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
comment
Из всех поисков и даже из всех похожих вопросов/ответов это была единственная вещь, которая была хорошей работой. Я не могу поверить количеству неправильных ответов, большинство людей пытались поставить jshint материал... Спасибо за это! - person AJ Smith 'Smugger'; 02.11.2019