Eslint
规则 | Rules

no-unexpected-multiline

disallow confusing multiline expressions (no-unexpected-multiline)

"extends": "eslint:recommended"配置文件中的属性启用此规则。

由于自动分号插入(ASI),分号通常在 JavaScript 中是可选的。您可以根据半规则要求或禁用分号。

ASI 的规则相对简单:正如 Isaac Schlueter 所描述的那样,换行符总是结束一个语句,就像分号一样,除非出现以下情况之一:

  • 该语句具有未关闭的 paren,数组字面量或对象字面量,或以其他方式结束,这不是结束语句的有效方式。(例如,以.或结尾,

  • 该行是--++(在这种情况下,它会减少/增加下一个标记。)

  • 这是一个for()while()doif(),或else,并没有{

  • 下一行开头[(+*/-,.,或只能在两个标记之间在一个表达式中找到一些其他二进制运算符。

在一个换行符就异常结束声明,打错了省略分号导致两个相关的连续行被解释为一个表达式。特别是对于没有分号的编码风格,读者可能会忽略错误。尽管语法正确,但代码在执行时可能会引发异常。

规则细节

这条规则不允许混淆多行表达式,换行符看起来像是结束语句,但不是。

此规则的错误代码示例:

/*eslint no-unexpected-multiline: "error"*/ var foo = bar (1 || 2).baz( var hello = 'world' [1, 2, 3].forEach(addNumber let x = function() {} `hello` let x = function() {} x `hello` let x = foo /regex/g.test(bar)

此规则的正确代码示例:

/*eslint no-unexpected-multiline: "error"*/ var foo = bar; (1 || 2).baz( var foo = bar ;(1 || 2).baz() var hello = 'world'; [1, 2, 3].forEach(addNumber var hello = 'world' void [1, 2, 3].forEach(addNumber let x = function() {}; `hello` let tag = function() {} tag `hello`

何时不使用它

如果您确信自己不会不小心引入这样的代码,则可以关闭此规则。

请注意,所考虑的模式不会被半规则标记。

相关规则

  • func-call-spacing

  • semi

  • space-unary-ops

版本

该规则在 ESLint 0.24.0 中引入。

资源