eslint/no-shadow-restricted-names 正しさ
何をするか
undefined、NaN、Infinity、eval、globalThis、arguments などのグローバル変数の再定義を禁止します。
なぜ問題か
グローバルオブジェクトの値プロパティである NaN、Infinity、undefined、globalThis および厳格モードで制限された識別子である eval と arguments は、JavaScript において制限名とみなされます。これらを別の意味に定義すると、予期しない結果が生じる可能性があり、コードを読む他の開発者を混乱させます。たとえば、次のように書くことは何も阻止されていません:
javascript
var undefined = "foo";この場合、同じスコープ内で使用されるすべてのコードは、グローバルな undefined ではなく、意味が全く異なるローカル版の undefined を参照することになります。
例
このルールに違反する不適切なコードの例:
javascript
function NaN() {}
!function (Infinity) {};
var undefined = 5;
try {
} catch (eval) {}
const globalThis = "foo";javascript
import NaN from "foo";
import { undefined } from "bar";
class Infinity {}このルールに準拠する適切なコードの例:
javascript
var Object;
function f(a, b) {}
// 異常:変数が値を割り当てられなければ、`undefined` のシャドーイングは許可される。
var undefined;javascript
import { undefined as undef } from "bar";設定
このルールは以下のプロパティを持つ設定オブジェクトを受け入れます。
reportGlobalThis
type: boolean
default: true
true の場合、globalThis もシャドーイングを報告対象とする。
使用方法
設定ファイルまたは CLI を使ってこのルールを有効化するには、次のように記述します:
json
{
"rules": {
"no-shadow-restricted-names": "error"
}
}bash
oxlint --deny no-shadow-restricted-names