Spec-Zone.ru › ESLint

бесполезное присваивание

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

Википедия описывает «мертвое хранилище» следующим образом:

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

«Мертвые хранилища» тратят ресурсы обработки и памяти, поэтому лучше удалить ненужные присваивания переменным.

Также, если автор намеревался использовать переменную, вероятно, есть ошибка, связанная с мертвым хранилищем. Например,

  • вы должны были использовать сохраненное значение, но забыли это сделать.
  • вы допустили ошибку в имени переменной для хранения.
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();
}

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

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

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

  • no-unused-vars

Версия

Это правило было введено в ESLint v9.0.0-alpha.1.

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

Мертвое хранилище - Википедия
Статический анализ кода JavaScript: Неиспользуемые присваивания следует удалить
CWE - CWE-563: Присваивание переменной без использования (4.13)
MSC13-C. Обнаружение и удаление неиспользуемых значений - Стандарт кодирования SEI CERT C - Confluence
MSC56-J. Обнаружение и удаление избыточного кода и значений - Стандарт кодирования SEI CERT Oracle для Java - Confluence

Источники

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

© 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