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: контролни коментари (селективно игнориране), но беше t отговори.


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 */ трябва да бъде на ред от себе си, така че нека се преструваме, че това важи и за двете).

Пример за лош код, който не работи с мъх:

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