Spec-Zone.ru › ESLint

no-unexpected-multiline

Запрещает вводящие в заблуждение многострочные выражения

✅ Рекомендуется

Использование конфигурации recommended из @eslint/js в файле конфигурации включает это правило

В JavaScript точки с запятой обычно необязательны благодаря автоматической вставке точек с запятой (ASI). Требовать или запрещать точки с запятой можно с помощью правила semi.

Правила ASI относительно просты: как однажды описал Айзек Шлютер, символ новой строки всегда завершает инструкцию, как и точка с запятой, за исключением следующих случаев:

  • В инструкции есть незакрытая круглая скобка, литерал массива или литерал объекта либо она заканчивается иным образом, который не может завершить инструкцию. (Например, заканчивается на . или ,.)
  • Строка содержит -- или ++ (в этом случае следующий токен будет уменьшен/увеличен).
  • Это for(), while(), do, if() или else, и отсутствует {
  • Следующая строка начинается с [, (, +, *, /, -, ,, . или другого бинарного оператора, который может встречаться только между двумя токенами одного выражения.

В тех случаях, когда новая строка не завершает инструкцию, опечатка в виде пропущенной точки с запятой приводит к тому, что две несвязанные соседние строки интерпретируются как одно выражение. Особенно при стиле написания кода без точек с запятой читатели могут не заметить ошибку. Хотя такой код синтаксически корректен, при выполнении он может вызывать исключения.

Описание правила

Это правило запрещает вводящие в заблуждение многострочные выражения, в которых кажется, что новая строка завершает инструкцию, хотя на самом деле это не так.

Примеры неправильного кода для этого правила:

Открыть в Playground
/*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)

Примеры правильного кода для этого правила:

Открыть в Playground
/*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.

Связанные правила

  • func-call-spacing
  • semi
  • space-unary-ops

Версия

Это правило появилось в ESLint v0.24.0.

Ресурсы

  • Исходный код правила
  • Исходный код тестов

© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/rules/no-unexpected-multiline

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API