1

我喜欢 JSLINT 背后的想法,但有时它有点过于严格,在我看来是不必要的。

最近我发现了JSHINT。它更灵活一点,允许打开或关闭更多选项。

但是 JSHINT 在我认为看起来正确的代码上抛出了一个错误。例如,JSHINT barfs 对它自己的代码。如果我在 JSHINT.js 上运行 JSHINT,它会给我这个:

在此处输入图像描述

我不明白。看到该图像底部附近的错误消息了吗?JSHINT 似乎希望缩进与实际不同。它不是在抱怨没有卷曲。我curly:false说不需要围绕单行 if 语句的卷曲。

奇怪的是,JSHINT.js 源代码到处都使用 4 个空格的缩进,但它仅在这几行中引发有关缩进的错误。为什么?

我做错了吗?还有什么我应该配置的吗?


已编辑 - 最初我一直在玩 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
};

编辑2

这是一个 gif,它以原始形式显示了 JSHINT 真正想要的东西。当红色高亮消失时,这意味着 JSHINT 对那条特定的行很满意。(这是在 emacs 中使用flymake-for-jslint)。

在此处输入图像描述

如您所见,如果我以一种奇怪的方式缩进该行,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;
          }

...并且它不再抱怨自己的格式。

4

2 回答 2

2

JSHint 维护者在这里。根据您的屏幕截图,它会出错,因为它与您的条款combine在同一行,这违反了选项的规则。ifwhite

您确定您的 JSHint 副本没有被任何人修改吗?我们对 JSHint 进行了单元测试,其中一项测试会检查 JSHint 自己的源代码。而且,正如您从所附示例中看到的那样,一切顺利。

jshint 传递 jshint 截图

于 2011-09-15T21:59:28.013 回答
0

我认为答案在 [this github issue][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;
          }

...并且它不再抱怨自己的格式。

于 2011-09-16T11:29:42.023 回答