【问题标题】:JSHINT error: Expected 'combine' to have an indentation at 9 instead at 13JSHINT 错误:预期“组合”在 9 处而不是 13 处有缩进
【发布时间】:2011-11-18 06:24:28
【问题描述】:

我喜欢 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
};

EDIT2

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

如您所见,如果我以一种奇怪的方式缩进该行,JSHINT 就会放松。

回答

我认为答案在this github issue。我修改了 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;
          }

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

【问题讨论】:

  • *points* 第一个 if 语句的执行代码与 if 关键字在同一行...可以吗?
  • 是的,约瑟夫,这是真的。第一个错误是因为代码与 if 语句在同一行。我已经更新了问题以更清楚地表明我的意思。

标签: emacs jslint wsh jshint jscript


【解决方案1】:

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

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

【讨论】:

  • 嗨,很高兴认识你。不 - 我理解在同一条线上组合的问题。但请查看该屏幕截图中其他红色突出显示的行。这些都是 JSHINT 抱怨缩进的迹象。如果我修复了第一个,其他所有的都将保留。我发现了这篇文章:github.com/jshint/jshint/issues/87,看起来很相似。然后,我修改了我的版本中修改后的 JSHINT.js,第 2264 行,进行了这些更改,它停止了抱怨。你怎么看?
  • 为了回答您的问题,是的,我通过附加一些样板来修改 JSHINT.js 代码,以允许 JSHINT.js 在通过 WSH 运行的 Windows 上从命令行读取其输入。它不会更改任何 JSHINT.js 代码 - 只会追加。并设置选项。您可以在code.google.com/p/jslint-for-wsh/downloads/list 找到它
  • 我检查了最新的 master 并意识到我从 JSHint 的源代码中删除了 white 选项。这个选项是 Crockford 的 JSLint 遗留下来的,我不使用它。
  • 好的,所以......这对我来说意味着什么?我在设置选项时做错了吗?问题 #87 中建议的更改 - 这些更改是否正确?它们似乎对我有用,但我没有测试套件。
  • 还没看那张票,下周再看,更新票。如果您使用 white 选项,您基本上是在告诉 JSHint 按照 Crockford 的 Good Parts 书处理您的代码。如果是这样,我建议将一行语句用大括号括起来。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2016-03-30
    • 2014-06-04
    • 2011-05-05
    • 1970-01-01
    • 2016-03-11
    • 2016-02-06
    • 1970-01-01
    • 2011-08-17
    • 2018-09-03
    相关资源
    最近更新 更多