Spec-Zone.ru › ESLint

no-sequences

Запрет оператора запятая

Оператор запятая объединяет несколько выражений там, где ожидается только одно. Он вычисляет каждый операнд слева направо и возвращает значение последнего операнда. Однако это часто скрывает побочные эффекты, и его использование нередко бывает случайным. Вот несколько примеров последовательностей:

let a = (3, 5); // a = 5

a = b += 5, a + b;

while (a = next(), a && a.length);

(0, eval)("doSomething();");

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

Это правило запрещает использование оператора запятая, за следующими исключениями:

  • В частях инициализации или обновления инструкции for.
  • По умолчанию — если последовательность выражений явно заключена в круглые скобки. Это исключение можно отключить с помощью параметра allowInParentheses.

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

Открыть в Playground
/*eslint no-sequences: "error"*/

foo = doSomething(), val;

0, eval("doSomething();");

do {} while (doSomething(), !!test);

for (; doSomething(), !!test; );

if (doSomething(), !!test);

switch (val = foo(), val) {}

while (val = foo(), val < 42);

with (doSomething(), val) {}

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

Открыть в Playground
/*eslint no-sequences: "error"*/

foo = (doSomething(), val);

(0, eval)("doSomething();");

do {} while ((doSomething(), !!test));

for (i = 0, j = 10; i < j; i++, j--);

if ((doSomething(), !!test));

switch ((val = foo(), val)) {}

while ((val = foo(), val < 42));

with ((doSomething(), val)) {}

Примечание о телах стрелочных функций

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

Примеры неправильного кода для стрелочных функций:

Открыть в Playground
/*eslint no-sequences: "error"*/
const foo = (val) => (console.log('bar'), val);

const baz = () => ((bar = 123), 10);

const qux = () => { return (bar = 123), 10 }

Примеры правильного кода для стрелочных функций:

Открыть в Playground
/*eslint no-sequences: "error"*/
const foo = (val) => ((console.log('bar'), val));

const baz = () => (((bar = 123), 10));

const qux = () => { return ((bar = 123), 10) }

Параметры

Это правило принимает один параметр — объект со следующими свойствами:

  • "allowInParentheses": Если установлено значение true (по умолчанию), это правило допускает последовательности выражений, явно заключённые в круглые скобки.

allowInParentheses

Примеры неправильного кода для этого правила с параметром { "allowInParentheses": false }:

Открыть в Playground
/*eslint no-sequences: ["error", { "allowInParentheses": false }]*/

foo = (doSomething(), val);

(0, eval)("doSomething();");

do {} while ((doSomething(), !!test));

for (; (doSomething(), !!test); );

if ((doSomething(), !!test));

switch ((val = foo(), val)) {}

while ((val = foo(), val < 42));

with ((doSomething(), val)) {}

const foo = (val) => ((console.log('bar'), val));

Примеры правильного кода для этого правила с параметром { "allowInParentheses": false }:

Открыть в Playground
/*eslint no-sequences: ["error", { "allowInParentheses": false }]*/

for (i = 0, j = 10; i < j; i++, j--);

Когда не следует использовать это правило

Отключите это правило, если последовательности выражений с оператором запятая допустимы. Другой случай — когда необходимо сообщать обо всех использованиях оператора запятая, в том числе в цикле for. Для этого можно использовать правило no-restricted-syntax:

{
    "rules": {
        "no-restricted-syntax": ["error", "SequenceExpression"]
    }
}

Версия

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

Ресурсы

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

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

Spec-Zone.ru

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