no-useless-assignment
Запрещает присваивать переменным значения, которые не используются
Использование конфигурации recommended из @eslint/js в файле конфигурации включает это правило
В Википедии «мёртвая запись» описывается так:
В программировании локальная переменная, которой присвоено значение, но которая не считывается ни одной последующей инструкцией, называется мёртвой записью.
«Мёртвые записи» расходуют процессорное время и память, поэтому ненужные присваивания переменным лучше удалять.
Кроме того, если автор намеревался использовать переменную, вероятно, в коде с мёртвой записью допущена ошибка. Например:
- нужно было использовать сохранённое значение, но вы забыли это сделать;
- вы ошиблись в имени переменной, которой нужно было присвоить значение.
let id = "x1234"; // this is a "dead store" - this value ("x1234") is never read
id = generateId();
doSomethingWith(id);
Описание правила
Это правило сообщает о присваиваниях переменным значений, которые не используются.
Примеры некорректного кода для этого правила:
/* eslint no-useless-assignment: "error" */
function fn1() {
let v = 'used';
doSomething(v);
= 'unused';
}
function fn2() {
let v = 'used';
if (condition) {
= 'unused';
return
}
doSomething(v);
}
function fn3() {
let v = 'used';
if (condition) {
doSomething(v);
} else {
= 'unused';
}
}
function fn4() {
let = 'unused';
if (condition) {
v = 'used';
doSomething(v);
return
}
}
function fn5() {
let v = 'used';
if (condition) {
let v = 'used';
console.log(v);
= 'unused';
}
console.log(v);
}
Примеры корректного кода для этого правила:
/* eslint no-useless-assignment: "error" */
function fn1() {
let v = 'used';
doSomething(v);
v = 'used-2';
doSomething(v);
}
function fn2() {
let v = 'used';
if (condition) {
v = 'used-2';
doSomething(v);
return
}
doSomething(v);
}
function fn3() {
let v = 'used';
if (condition) {
doSomething(v);
} else {
v = 'used-2';
doSomething(v);
}
}
function fn4() {
let v = 'used';
for (let i = 0; i < 10; i++) {
doSomething(v);
v = 'used in next iteration';
}
}
Это правило не сообщает о переменных, которые никогда не считываются, поскольку они явно не используются. Если нужно выявлять такие переменные, включите правило no-unused-vars.
/* eslint no-useless-assignment: "error" */
function fn() {
let v = 'unused';
v = 'unused-2'
doSomething();
}
Параметры
У этого правила нет параметров.
Известные ограничения
Это правило не сообщает о некоторых повторных присваиваниях переменным, если они происходят внутри блока try. Это сделано намеренно, поскольку такие присваивания всё ещё могут быть обнаружены в соответствующем блоке catch или после конструкции try-catch из-за возможного досрочного выхода или обработки ошибок.
function foo() {
let bar;
try {
bar = 2;
unsafeFn();
return { error: undefined };
} catch {
return { bar }; // `bar` is observed in the catch block
}
}
function unsafeFn() {
throw new Error();
}
function foo() {
let bar;
try {
bar = 2; // This assignment is relevant if unsafeFn() throws an error
unsafeFn();
bar = 4;
} catch {
// Error handling
}
return bar;
}
function unsafeFn() {
throw new Error();
}
Когда не следует использовать это правило
Если вы не хотите получать предупреждения о значениях, которые никогда не считываются, это правило можно отключить.
Связанные правила
Версия
Это правило появилось в ESLint v9.0.0-alpha.1.
Дополнительные материалы
rules.sonarsource.com
Ресурсы
© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/rules/no-useless-assignment