Spec-Zone.ru › ESLint

no-useless-assignment

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

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

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

В Википедии «мёртвая запись» описывается так:

В программировании локальная переменная, которой присвоено значение, но которая не считывается ни одной последующей инструкцией, называется мёртвой записью.

«Мёртвые записи» расходуют процессорное время и память, поэтому ненужные присваивания переменным лучше удалять.

Кроме того, если автор намеревался использовать переменную, вероятно, в коде с мёртвой записью допущена ошибка. Например:

  • нужно было использовать сохранённое значение, но вы забыли это сделать;
  • вы ошиблись в имени переменной, которой нужно было присвоить значение.
let id = "x1234";    // this is a "dead store" - this value ("x1234") is never read

id = generateId();

doSomethingWith(id);

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

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

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

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

function fn1() {
    let v = 'used';
    doSomething(v);
    v = 'unused';
}

function fn2() {
    let v = 'used';
    if (condition) {
        v = 'unused';
        return
    }
    doSomething(v);
}

function fn3() {
    let v = 'used';
    if (condition) {
        doSomething(v);
    } else {
        v = 'unused';
    }
}

function fn4() {
    let v = 'unused';
    if (condition) {
        v = 'used';
        doSomething(v);
        return
    }
}

function fn5() {
    let v = 'used';
    if (condition) {
        let v = 'used';
        console.log(v);
        v = 'unused';
    }
    console.log(v);
}

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

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

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

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

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

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

  • no-unused-vars

Версия

Это правило появилось в ESLint v9.0.0-alpha.1.

Дополнительные материалы

Мёртвая запись — Википедия
en.wikipedia.org
Статический анализ кода JavaScript: неиспользуемые присваивания следует удалять
rules.sonarsource.com
CWE — CWE-563: Присваивание переменной без использования (4.13)
cwe.mitre.org
MSC13-C. Обнаружение и удаление неиспользуемых значений — стандарт кодирования SEI CERT C — Confluence
wiki.sei.cmu.edu
MSC56-J. Обнаружение и удаление избыточного кода и значений — стандарт кодирования SEI CERT Oracle для Java — Confluence
wiki.sei.cmu.edu

Ресурсы

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

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

Spec-Zone.ru

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