Spec-Zone.ru › ESLint

no-return-assign

Запрещает операторы присваивания в инструкциях return

Одна из интересных, а иногда и сбивающих с толку особенностей JavaScript заключается в том, что присваивание может происходить практически в любом месте. Поэтому случайно поставленный знак равенства может привести к присваиванию, хотя на самом деле предполагалось выполнить сравнение. Особенно часто это случается при использовании инструкции return. Например:

function doSomething() {
    return foo = bar + 2;
}

Здесь сложно понять, что подразумевалось в инструкции return. Возможно, функция должна возвращать результат bar + 2, но тогда зачем присваивать значение foo? Также возможно, что предполагалось использовать оператор сравнения, например ==, и этот код содержит ошибку.

Из-за этой неоднозначности рекомендуется не использовать присваивание в инструкциях return.

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

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

Параметры

Правило принимает один параметр — строку, которая должна содержать одно из следующих значений:

  • except-parens (по умолчанию): запрещает присваивания, если они не заключены в круглые скобки.
  • always: запрещает все присваивания.

except-parens

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

Примеры неправильного кода для параметра "except-parens" по умолчанию:

Открыть в песочнице
/*eslint no-return-assign: "error"*/

function doSomething() {
    return foo = bar + 2;
}

function doSomethingElse() {
    return foo += 2;
}

const foo = (a, b) => a = b

const bar = (a, b, c) => (a = b, c == b)

function doSomethingMore() {
    return foo = bar && foo > 0;
}

Примеры правильного кода для параметра "except-parens" по умолчанию:

Открыть в песочнице
/*eslint no-return-assign: "error"*/

function doSomething() {
    return foo == bar + 2;
}

function doSomethingElse() {
    return foo === bar + 2;
}

function doSomethingMore() {
    return (foo = bar + 2);
}

const foo = (a, b) => (a = b)

const bar = (a, b, c) => ((a = b), c == b)

function doAnotherThing() {
    return (foo = bar) && foo > 0;
}

always

Этот параметр запрещает все присваивания в инструкциях return. Все присваивания считаются проблемой.

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

Открыть в песочнице
/*eslint no-return-assign: ["error", "always"]*/

function doSomething() {
    return foo = bar + 2;
}

function doSomethingElse() {
    return foo += 2;
}

function doSomethingMore() {
    return (foo = bar + 2);
}

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

Открыть в песочнице
/*eslint no-return-assign: ["error", "always"]*/

function doSomething() {
    return foo == bar + 2;
}

function doSomethingElse() {
    return foo === bar + 2;
}

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

Если вы хотите разрешить использование операторов присваивания в инструкции return, это правило можно отключить.

Версия

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

Ресурсы

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

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

Spec-Zone.ru

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