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() {
}
function doSomethingElse() {
}
const foo =
const bar =
function doSomethingMore() {
}
Примеры правильного кода для параметра "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() {
}
function doSomethingElse() {
}
function doSomethingMore() {
}
Примеры правильного кода для параметра "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