diff --git a/packages/eslint-plugin/tests/rules/no-use-before-define.test.ts b/packages/eslint-plugin/tests/rules/no-use-before-define.test.ts index ad66ff7858e..23f2abb0473 100644 --- a/packages/eslint-plugin/tests/rules/no-use-before-define.test.ts +++ b/packages/eslint-plugin/tests/rules/no-use-before-define.test.ts @@ -347,6 +347,17 @@ const React = require('react'); ` type T = (value: unknown) => value is Id; `, + ` +global.foo = true; + +declare global { + namespace NodeJS { + interface Global { + foo?: boolean; + } + } +} + `, ], invalid: [ { diff --git a/packages/scope-manager/src/referencer/Referencer.ts b/packages/scope-manager/src/referencer/Referencer.ts index 6cccab10428..56c974055bc 100644 --- a/packages/scope-manager/src/referencer/Referencer.ts +++ b/packages/scope-manager/src/referencer/Referencer.ts @@ -765,7 +765,7 @@ class Referencer extends Visitor { } protected TSModuleDeclaration(node: TSESTree.TSModuleDeclaration): void { - if (node.id.type === AST_NODE_TYPES.Identifier) { + if (node.id.type === AST_NODE_TYPES.Identifier && !node.global) { this.currentScope().defineIdentifier( node.id, new TSModuleNameDefinition(node.id, node), diff --git a/packages/scope-manager/tests/fixtures/ts-module/global-augmentation.ts b/packages/scope-manager/tests/fixtures/ts-module/global-augmentation.ts new file mode 100644 index 00000000000..078de28ca2f --- /dev/null +++ b/packages/scope-manager/tests/fixtures/ts-module/global-augmentation.ts @@ -0,0 +1,3 @@ +//// @sourceType = module + +declare global {} diff --git a/packages/scope-manager/tests/fixtures/ts-module/global-augmentation.ts.shot b/packages/scope-manager/tests/fixtures/ts-module/global-augmentation.ts.shot new file mode 100644 index 00000000000..4a93b639545 --- /dev/null +++ b/packages/scope-manager/tests/fixtures/ts-module/global-augmentation.ts.shot @@ -0,0 +1,42 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`ts-module global-augmentation 1`] = ` +ScopeManager { + variables: Array [ + ImplicitGlobalConstTypeVariable, + ], + scopes: Array [ + GlobalScope$1 { + block: Program$1, + isStrict: false, + references: Array [], + set: Map { + "const" => ImplicitGlobalConstTypeVariable, + }, + type: "global", + upper: null, + variables: Array [ + ImplicitGlobalConstTypeVariable, + ], + }, + ModuleScope$2 { + block: Program$1, + isStrict: true, + references: Array [], + set: Map {}, + type: "module", + upper: GlobalScope$1, + variables: Array [], + }, + TSModuleScope$3 { + block: TSModuleDeclaration$2, + isStrict: true, + references: Array [], + set: Map {}, + type: "tsModule", + upper: ModuleScope$2, + variables: Array [], + }, + ], +} +`;