no-shadow-restricted-names
Запрещает идентификаторам затенять зарезервированные имена
Использование конфигурации recommended из @eslint/js в файле конфигурации включает это правило
Согласно ES2020 §18.1 «Свойства значений глобального объекта» (globalThis, NaN, Infinity, undefined), а также идентификаторы eval и arguments, зарезервированные в строгом режиме, считаются зарезервированными именами в JavaScript. Переопределение их значений может привести к непредвиденным последствиям и запутать других читателей кода. Например, ничто не мешает написать:
const undefined = "foo";
Тогда код, выполняющийся в той же области видимости, будет использовать не глобальный undefined, а локальную версию с совершенно другим значением.
Подробное описание правила
Примеры неправильного кода для этого правила:
/*eslint no-shadow-restricted-names: "error"*/
function (){}
!function(){};
const = 5;
try {} catch(){}
/*eslint no-shadow-restricted-names: "error"*/
import from "foo";
import { } from "bar";
class {}
Примеры правильного кода для этого правила:
/*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;
/*eslint no-shadow-restricted-names: "error"*/
import { undefined as undef } from "bar";
Параметры
У этого правила есть параметр-объект:
-
"reportGlobalThis":true(по умолчанию) сообщает об объявленияхglobalThis.
reportGlobalThis
Примеры неправильного кода для параметра { "reportGlobalThis": true } по умолчанию:
/*eslint no-shadow-restricted-names: ["error", { "reportGlobalThis": true }]*/
const = "foo";
/*eslint no-shadow-restricted-names: ["error", { "reportGlobalThis": true }]*/
function () {}
/*eslint no-shadow-restricted-names: ["error", { "reportGlobalThis": true }]*/
import { } from "bar";
/*eslint no-shadow-restricted-names: ["error", { "reportGlobalThis": true }]*/
class {}
Примеры правильного кода для параметра { "reportGlobalThis": true } по умолчанию:
/*eslint no-shadow-restricted-names: ["error", { "reportGlobalThis": true }]*/
const foo = globalThis;
function bar() {
return globalThis;
}
import { globalThis as baz } from "foo";
Примеры правильного кода для параметра { "reportGlobalThis": false }:
/*eslint no-shadow-restricted-names: ["error", { "reportGlobalThis": false }]*/
const globalThis = "foo";
/*eslint no-shadow-restricted-names: ["error", { "reportGlobalThis": false }]*/
function globalThis() {}
/*eslint no-shadow-restricted-names: ["error", { "reportGlobalThis": false }]*/
import { globalThis } from "bar";
/*eslint no-shadow-restricted-names: ["error", { "reportGlobalThis": false }]*/
class globalThis {}
Связанные правила
Версия
Это правило появилось в ESLint v0.1.4.
Дополнительные материалы
Ресурсы
© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/rules/no-shadow-restricted-names