jslint4java внешние параметры jslint игнорируются

Я использую https://github.com/reload/phing-drupal-template и у меня проблемы с jslinting. При использовании внешнего jslint с параметром --jslint ни параметр --browser, ни встроенные параметры не распознаются как

/*jslint browser: true */

Любая помощь приветствуется. Спасибо.

java -jar tools/jslint4java/jslint4java-2.0.5/jslint4java-2.0.5.jar
     --browser 
     --predef "jQuery,$,Modernizr" 
     ../sites/all/modules/custom/zendigital/js/frontpage.js



java -jar tools/jslint4java/jslint4java-2.0.5/jslint4java-2.0.5.jar 
     --jslint tools/jslint/fulljslint.js
     --browser
     --predef "jQuery,$,Modernizr"
     ../sites/all/modules/custom/zendigital/js/frontpage.js 


jslint:...frontpage.js:59:40:'window' is not defined.
jslint:...frontpage.js:84:23:'window' is not defined.
jslint:...frontpage.js:104:36:'window' is not defined.
jslint:...frontpage.js:105:23:'window' is not defined.
jslint:...frontpage.js:180:25:'Modernizr' is not defined.
jslint:...frontpage.js:250:65:'window' is not defined.
jslint:...frontpage.js:250:86:'window' is not defined.
jslint:...frontpage.js:278:4:'jQuery' is not defined.

1 ответ

Решение

Существует ли такое поведение, если вы используете канонический файл jslint? Тот, который вы связали, разветвлялся более четырех лет назад, не обновлялся и, похоже, не уважает window,

Сравните этот раздел в каноническом, текущем файле JSLint, который содержит window:
https://github.com/douglascrockford/JSLint/blob/master/jslint.js#L343

// browser contains a set of global names that are commonly provided by a
// web browser environment.

    browser = array_to_object([
        'clearInterval', 'clearTimeout', 'document', 'event', 'FormData',
        'frames', 'history', 'Image', 'localStorage', 'location', 'name',
        'navigator', 'Option', 'parent', 'screen', 'sessionStorage',
        'setInterval', 'setTimeout', 'Storage', 'window', 'XMLHttpRequest'
    ], false),

... с этим из вашей версии без каких-либо обновлений с ноября 2010 года, который не содержит window,
https://github.com/mikewest/JSLint/blob/master/fulljslint.js#L340

// browser contains a set of global names which are commonly provided by a
// web browser environment.

browser = {
    addEventListener: false,
    blur : false,
    clearInterval : false,
    clearTimeout : false,
    close : false,
    closed : false,
    defaultStatus : false,
    document : false,
    event : false,
    focus : false,
    frames : false,
    getComputedStyle: false,
    history : false,
    Image : false,
    length : false,
    location : false,
    moveBy : false,
    moveTo : false,
    name : false,
    navigator : false,
    onbeforeunload : true,
    onblur : true,
    onerror : true,
    onfocus : true,
    onload : true,
    onresize : true,
    onunload : true,
    open : false,
    opener : false,
    Option : false,
    parent : false,
    print : false,
    removeEventListener: false,
    resizeBy : false,
    resizeTo : false,
    screen : false,
    scroll : false,
    scrollBy : false,
    scrollTo : false,
    setInterval : false,
    setTimeout : false,
    status : false,
    top : false,
    XMLHttpRequest : false
},

Я не смотрел в --predef "jQuery,$,Modernizr" совсем.

Я бы не советовал использовать относительно анонимно разветвленный файл JSLint в целом, а тем более файл, который сидел четыре года. Какие из его изменений вы используете? Может быть проще добавить это к более актуальной версии JSLint, которая учитывает window - или используйте JSHint, чтобы получить такие же изменения, если они полезны и есть. (Или, как я обычно утверждаю, вы всегда можете просто принять совет JSLint.;^D)

Удачи. Дайте нам знать, если каноническая версия работает.


РЕДАКТИРОВАТЬ: Вы можете попробовать widget настройка для вашей устаревшей версии. Похоже, что window в нем:

// widget contains the global names which are provided to a Yahoo //
(fna Konfabulator) widget.

widget = {
    alert : true,
    animator : true,
    appleScript : true,
    beep : true,
    //...
    Window : true,
    XMLDOM : true,
    XMLHttpRequest : true,
    yahooCheckLogin : true,
    yahooLogin : true,
    yahooLogout : true
},

Тем не менее, вы так нестандартны в этой точке (widget не является текущей директивой JSLint и содержит большое количество ошибок, связанных с Konfabulator), вам действительно следует отказаться от этой вилки и обновить ее до текущей канонической версии. Это скорее "эксперимент для развлечения", чем рекомендуемое исправление.

Вы также можете просто вставить window: true, в browser массив, но, опять же, вам лучше делать необходимые изменения из этой ветви в текущей версии JSLint, используя JSHint, если он есть, или просто следуя текущей версии совета JSLint.

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

Другие вопросы по тегам