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 со старой, разветвленной версией; он пропускает тонны вещей. Извините, если бы я мог быть более полезным.