no-unexpected-multiline
disallow confusing multiline expressions (no-unexpected-multiline)
"extends": "eslint:recommended"
配置文件中的属性启用此规则。
由于自动分号插入(ASI),分号通常在 JavaScript 中是可选的。您可以根据半规则要求或禁用分号。
ASI 的规则相对简单:正如 Isaac Schlueter 所描述的那样,换行符总是结束一个语句,就像分号一样,除非
出现以下情况之一:
- 该语句具有未关闭的 paren,数组字面量或对象字面量,或以其他方式结束,这不是结束语句的有效方式。(例如,以
.
或结尾,
)
- 该行是
--
或++
(在这种情况下,它会减少/增加下一个标记。)
- 这是一个
for()
,while()
,do
,if()
,或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 中引入。