no-unexpected-multiline
Запрещает вводящие в заблуждение многострочные выражения
Использование конфигурации recommended из @eslint/js в файле конфигурации включает это правило
В JavaScript точки с запятой обычно необязательны благодаря автоматической вставке точек с запятой (ASI). Требовать или запрещать точки с запятой можно с помощью правила semi.
Правила ASI относительно просты: как однажды описал Айзек Шлютер, символ новой строки всегда завершает инструкцию, как и точка с запятой, за исключением следующих случаев:
- В инструкции есть незакрытая круглая скобка, литерал массива или литерал объекта либо она заканчивается иным образом, который не может завершить инструкцию. (Например, заканчивается на
.или,.) - Строка содержит
--или++(в этом случае следующий токен будет уменьшен/увеличен). - Это
for(),while(),do,if()илиelse, и отсутствует{ - Следующая строка начинается с
[,(,+,*,/,-,,,.или другого бинарного оператора, который может встречаться только между двумя токенами одного выражения.
В тех случаях, когда новая строка не завершает инструкцию, опечатка в виде пропущенной точки с запятой приводит к тому, что две несвязанные соседние строки интерпретируются как одно выражение. Особенно при стиле написания кода без точек с запятой читатели могут не заметить ошибку. Хотя такой код синтаксически корректен, при выполнении он может вызывать исключения.
Описание правила
Это правило запрещает вводящие в заблуждение многострочные выражения, в которых кажется, что новая строка завершает инструкцию, хотя на самом деле это не так.
Примеры неправильного кода для этого правила:
/*eslint no-unexpected-multiline: "error"*/
const foo = bar
1 || 2).baz();
const hello = 'world'
1, 2, 3].forEach(addNumber);
const x = function() {}
hello`
const y = function() {}
y
hello`
const z = foo
regex/g.test(bar)
Примеры правильного кода для этого правила:
/*eslint no-unexpected-multiline: "error"*/
const foo = bar;
(1 || 2).baz();
const baz = bar
;(1 || 2).baz()
const hello = 'world';
[1, 2, 3].forEach(addNumber);
const hi = 'world'
void [1, 2, 3].forEach(addNumber);
const x = function() {};
`hello`
const 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