Spec-Zone.ru › ESLint

неожиданные многострочные выражения

Запрет запутывающих многострочных выражений

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

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

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

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

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

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

Подробное описание правила

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

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

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

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

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

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

  • 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