Emacs JSHINT错误:应为';联合收割机';在9处有一个缩进,而不是在13处

Emacs JSHINT错误:应为';联合收割机';在9处有一个缩进,而不是在13处,emacs,jslint,wsh,jshint,jscript,Emacs,Jslint,Wsh,Jshint,Jscript,我喜欢JSLINT背后的想法,但有时它有点过于严格,在我看来这是不必要的 最近我发现了JSHINT。它更灵活,允许打开或关闭更多选项 但是JSHINT在我认为正确的代码上抛出了一个错误。例如,JSHINT会在自己的代码上进行barfs。如果我在JSHINT.js上运行JSHINT,它会给出以下信息: 我不明白。是否看到该图像底部附近的错误消息?JSHINT似乎希望缩进与实际不同。它不是在抱怨没有卷发。我有curly:false,它说不需要在一行if语句周围卷曲 奇怪的是,JSHINT.js源代

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

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

但是JSHINT在我认为正确的代码上抛出了一个错误。例如,JSHINT会在自己的代码上进行barfs。如果我在JSHINT.js上运行JSHINT,它会给出以下信息:

我不明白。是否看到该图像底部附近的错误消息?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

下面是一个gif,它显示了JSHINT在其原始形式中真正想要的东西。当红色高光消失时,这意味着JSHINT对该特定线条感到满意。(这在emacs中使用)

正如您所看到的,如果我以一种奇怪的方式缩进行,JSHINT就会放松

答复 我想答案是肯定的。我修改了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;
          }
***************
*** 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;
          }

…它不再抱怨自己的格式。

JSHint维护者。根据您的屏幕截图,它会出错,因为
combine
与您的
if
子句位于同一行,这违反了
white
选项的规则

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


我认为答案在[这个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;
          }
***************
*** 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;
          }

…它不再抱怨自己的格式

*点*第一个if语句的执行代码与if关键字在同一行上。。。是吗?是的,约瑟夫,是真的。第一个错误是因为代码与if语句位于同一行。我更新了这个问题,以便更清楚地表明我的意思。嘿,很高兴认识你。不-我理解,在同一条线上使用联合收割机的问题。但请看屏幕截图中其他红色突出显示的线条。这些都表明JSHINT正在抱怨缩进。如果我修复了第一个,所有其他的都会保留。我发现了这个帖子:看起来很相似。然后我用这些修改修改了JSHINT.js,在我的版本中的第2264行,它停止了抱怨。您认为呢?为了回答您的问题,是的,我修改了JSHINT.js代码,添加了一些样板文件,允许JSHINT.js在通过WSH运行的Windows上从命令行读取其输入。它不会更改任何JSHINT.js代码-只更改附加代码。并设置选项。您可以在以下位置找到它:我检查了最新的master,并意识到我从JSHint的源代码中删除了
white
选项。这个选项是Crockford的JSLint遗留下来的,我不使用它。。。。。。这对我来说意味着什么?我在设置选项时是否做错了什么?第87期中建议的更改-这些更改是否正确?他们似乎为我工作,但我没有测试套件。尚未查看该票证,将在下周完成并更新票证。如果使用
white
选项,基本上就是告诉JSHint按照Crockford的好零件手册处理代码。如果是这样,我建议用大括号将单行语句括起来。