Мне нравится идея JSLINT, но иногда она слишком строгая, на мой взгляд, излишне.
Недавно я нашел JSHINT. Он немного более гибкий, позволяет включать и выключать больше опций.
Но JSHINT выдает ошибку в коде, который, я думаю, выглядит правильно. Например, JSHINT barfs на свой собственный код. Если я запускаю JSHINT на JSHINT.js, это дает мне следующее:
Я не понимаю этого. Видите сообщение об ошибке в нижней части этого изображения? Кажется, JSHINT хочет, чтобы отступы отличались от тех, что есть. Это не жалуется на отсутствие кудрявых. У меня есть curly:false
, который говорит, что не требует керлинга вокруг однострочных операторов if.
Странно то, что в исходном коде JSHINT.js везде используется отступ в 4 пробела, но он выдает ошибки об отступе только для этих нескольких строк. Зачем?
Я делаю это неправильно? Есть ли что-то еще, что я должен настроить?
EDITED - изначально я играл с JSHINT, и я поместил вызов combine()
в ту же строку, что и оператор if. Я вернул код JSHINT к тому состоянию, в котором он был изначально, чтобы показать, что ошибки остаются.
Это делается с помощью JSHINT с использованием следующих опций:
options = {
curly : false, // no curly fascism
wsh : true, // WScript is allowed
white : true, // true: 'sloppy' whitespace is ok
plusplus : false, // false == ok to use ++
passfail : false // do not stop after first error
//radix : true // do not puke on parseInt() with no radix
};
EDIT2
Вот рисунок, который показывает, чего действительно хочет JSHINT в своем первоначальном виде. Когда красные блики исчезают, это означает, что JSHINT рад этой конкретной строке. (Это использует flymake-for-jslint в emacs).
Как вы можете видеть, если я сделаю отступ в строке странным образом, JSHINT расслабится.
Ответ
Я думаю, что ответ в этом выпуске github . Я изменил JSHINT, строка 2264, например:
***************
*** 2256,2262 ****
--- 2261,2270 ----
nexttoken, '{', nexttoken.value);
noreach = true;
+ // cheeso - fix for https://github.com/jshint/jshint/issues/87
+ indent += option.indent;
a = [statement()];
+ indent = old_indent;
noreach = false;
}
... и он перестал жаловаться на собственное форматирование.