неожиданные многострочные выражения
Запрет запутывающих многострочных выражений
Использование конфигурации recommended из @eslint/js в файле конфигурации включает это правило
В JavaScript точки с запятой обычно необязательны из-за автоматической вставки точек с запятой (ASI). Вы можете потребовать или запретить точки с запятой с помощью правила semi.
Правила ASI относительно просты: как однажды описал Айзек Шультер, символ новой строки всегда завершает оператор, как и точка с запятой, за исключением случаев, когда выполняется одно из следующих условий:
- Оператор содержит незакрытую скобку, литерал массива или литерал объекта или завершается каким-либо другим способом, который не является допустимым способом завершения оператора. (Например, завершение с
.или,.) - Строка содержит
--или++(в этом случае она будет декрементировать/инкрементировать следующий токен.) - Это
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 y = function() {}
y
hello`
let z = 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`
Когда не следует использовать
Вы можете отключить это правило, если уверены, что не будете случайно вводить такой код.
Обратите внимание, что шаблоны, рассматриваемые как проблемы, не отмечаются правилом semi.
Связанные правила
Версия
Это правило было добавлено в ESLint v0.24.0.
Ресурсы
© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/rules/no-unexpected-multiline