Spec-Zone.ru › ESLint

no-shadow-restricted-names

Запрещает идентификаторам затенять зарезервированные имена

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

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

Согласно ES2020 §18.1 «Свойства значений глобального объекта» (globalThis, NaN, Infinity, undefined), а также идентификаторы eval и arguments, зарезервированные в строгом режиме, считаются зарезервированными именами в JavaScript. Переопределение их значений может привести к непредвиденным последствиям и запутать других читателей кода. Например, ничто не мешает написать:

const undefined = "foo";

Тогда код, выполняющийся в той же области видимости, будет использовать не глобальный undefined, а локальную версию с совершенно другим значением.

Подробное описание правила

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

Открыть в Playground
/*eslint no-shadow-restricted-names: "error"*/

function NaN(){}

!function(Infinity){};

const undefined = 5;

try {} catch(eval){}
Открыть в Playground
/*eslint no-shadow-restricted-names: "error"*/

import NaN from "foo";

import { undefined } from "bar";

class Infinity {}

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

Открыть в Playground
/*eslint no-shadow-restricted-names: "error"*/

let Object;

function f(a, b){}

// Exception: `undefined` may be shadowed if the variable is never assigned a value.
let undefined;
Открыть в Playground
/*eslint no-shadow-restricted-names: "error"*/

import { undefined as undef } from "bar";

Параметры

У этого правила есть параметр-объект:

  • "reportGlobalThis": true (по умолчанию) сообщает об объявлениях globalThis.

reportGlobalThis

Примеры неправильного кода для параметра { "reportGlobalThis": true } по умолчанию:

Открыть в Playground
/*eslint no-shadow-restricted-names: ["error", { "reportGlobalThis": true }]*/

const globalThis = "foo";
Открыть в Playground
/*eslint no-shadow-restricted-names: ["error", { "reportGlobalThis": true }]*/

function globalThis() {}
Открыть в Playground
/*eslint no-shadow-restricted-names: ["error", { "reportGlobalThis": true }]*/

import { globalThis } from "bar";
Открыть в Playground
/*eslint no-shadow-restricted-names: ["error", { "reportGlobalThis": true }]*/

class globalThis {}

Примеры правильного кода для параметра { "reportGlobalThis": true } по умолчанию:

Открыть в Playground
/*eslint no-shadow-restricted-names: ["error", { "reportGlobalThis": true }]*/

const foo = globalThis;

function bar() {
    return globalThis;
}

import { globalThis as baz } from "foo";

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

Открыть в Playground
/*eslint no-shadow-restricted-names: ["error", { "reportGlobalThis": false }]*/

const globalThis = "foo";
Открыть в Playground
/*eslint no-shadow-restricted-names: ["error", { "reportGlobalThis": false }]*/

function globalThis() {}
Открыть в Playground
/*eslint no-shadow-restricted-names: ["error", { "reportGlobalThis": false }]*/

import { globalThis } from "bar";
Открыть в Playground
/*eslint no-shadow-restricted-names: ["error", { "reportGlobalThis": false }]*/

class globalThis {}

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

  • no-shadow

Версия

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

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

Спецификация языка ECMAScript® 2020
262.ecma-international.org
Спецификация языка ECMAScript® 2020
262.ecma-international.org

Ресурсы

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

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

Spec-Zone.ru

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