Ошибка JSHINT: ожидается, что 'Объединить' будет иметь отступ в 9 вместо 13 - PullRequest
1 голос
/ 16 сентября 2011

Мне нравится идея JSLINT, но иногда она слишком строгая, на мой взгляд, излишне.

Недавно я нашел JSHINT. Он немного более гибкий, позволяет включать и выключать больше опций.

Но JSHINT выдает ошибку в коде, который, я думаю, выглядит правильно. Например, JSHINT barfs на свой собственный код. Если я запускаю JSHINT на JSHINT.js, это дает мне следующее:

enter image description here

Я не понимаю этого. Видите сообщение об ошибке в нижней части этого изображения? Кажется, JSHINT хочет, чтобы отступы отличались от тех, что есть. Это не жалуется на отсутствие кудрявых. У меня есть curly:false, который говорит, что не требует керлинга вокруг однострочных операторов if.

Странно то, что в исходном коде JSHINT.js везде используется отступ в 4 пробела, но он выдает ошибки об отступе только для этих нескольких строк. Зачем?

Я делаю это неправильно? Есть ли что-то еще, что я должен настроить?


EDITED - изначально я играл с JSHINT, и я поместил вызов combine() в ту же строку, что и оператор if. Я вернул код JSHINT к тому состоянию, в котором он был изначально, чтобы показать, что ошибки остаются.

enter image description here

Это делается с помощью 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).

enter image description here

Как вы можете видеть, если я сделаю отступ в строке странным образом, 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;
          }

... и он перестал жаловаться на собственное форматирование.

Ответы [ 2 ]

2 голосов
/ 16 сентября 2011

JSHint сопровождающий здесь.Исходя из вашего скриншота, он выдает ошибку, поскольку combine находится в той же строке, что и ваше предложение if, что противоречит правилам white.

Вы уверены, что ваша копия JSHint не была измененакто-нибудь?У нас есть модульные тесты для JSHint, и один из них проверяет собственный исходный код JSHint.И, как видно из прикрепленного примера, все проходит просто отлично.

jshint passing jshint screenshot

0 голосов
/ 16 сентября 2011

Я думаю, что ответ находится в [этом выпуске github] [4]. Я изменил 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;
          }

... и он перестал жаловаться на собственное форматирование.

...