diff --git a/packages/scope-manager/src/referencer/ClassVisitor.ts b/packages/scope-manager/src/referencer/ClassVisitor.ts index 92dab53ca90a..47e0bdef41cd 100644 --- a/packages/scope-manager/src/referencer/ClassVisitor.ts +++ b/packages/scope-manager/src/referencer/ClassVisitor.ts @@ -322,6 +322,10 @@ class ClassVisitor extends Visitor { this.visitType(node); } + protected visitStaticBlock(node: TSESTree.StaticBlock): void { + this.#referencer.scopeManager.nestClassStaticBlockScope(node); + } + ///////////////////// // Visit selectors // ///////////////////// @@ -359,6 +363,10 @@ class ClassVisitor extends Visitor { protected PrivateIdentifier(): void { // intentionally skip } + + protected StaticBlock(node: TSESTree.StaticBlock): void { + this.visitStaticBlock(node); + } } /** diff --git a/packages/scope-manager/src/scope/ClassStaticBlockScope.ts b/packages/scope-manager/src/scope/ClassStaticBlockScope.ts index 40a5d54b37cf..2bb3915e966c 100644 --- a/packages/scope-manager/src/scope/ClassStaticBlockScope.ts +++ b/packages/scope-manager/src/scope/ClassStaticBlockScope.ts @@ -6,7 +6,7 @@ import { ScopeManager } from '../ScopeManager'; class ClassStaticBlockScope extends ScopeBase< ScopeType.classStaticBlock, - TSESTree.Expression, + TSESTree.StaticBlock, Scope > { constructor( diff --git a/packages/scope-manager/tests/fixtures/class/declaration/static-block.ts b/packages/scope-manager/tests/fixtures/class/declaration/static-block.ts new file mode 100644 index 000000000000..93b92f6cf1f1 --- /dev/null +++ b/packages/scope-manager/tests/fixtures/class/declaration/static-block.ts @@ -0,0 +1,3 @@ +class A { + static {} +} diff --git a/packages/scope-manager/tests/fixtures/class/declaration/static-block.ts.shot b/packages/scope-manager/tests/fixtures/class/declaration/static-block.ts.shot new file mode 100644 index 000000000000..b49013a55755 --- /dev/null +++ b/packages/scope-manager/tests/fixtures/class/declaration/static-block.ts.shot @@ -0,0 +1,72 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`class declaration static-block 1`] = ` +ScopeManager { + variables: Array [ + ImplicitGlobalConstTypeVariable, + Variable$2 { + defs: Array [ + ClassNameDefinition$1 { + name: Identifier<"A">, + node: ClassDeclaration$1, + }, + ], + name: "A", + references: Array [], + isValueVariable: true, + isTypeVariable: true, + }, + Variable$3 { + defs: Array [ + ClassNameDefinition$2 { + name: Identifier<"A">, + node: ClassDeclaration$1, + }, + ], + name: "A", + references: Array [], + isValueVariable: true, + isTypeVariable: true, + }, + ], + scopes: Array [ + GlobalScope$1 { + block: Program$2, + isStrict: false, + references: Array [], + set: Map { + "const" => ImplicitGlobalConstTypeVariable, + "A" => Variable$2, + }, + type: "global", + upper: null, + variables: Array [ + ImplicitGlobalConstTypeVariable, + Variable$2, + ], + }, + ClassScope$2 { + block: ClassDeclaration$1, + isStrict: true, + references: Array [], + set: Map { + "A" => Variable$3, + }, + type: "class", + upper: GlobalScope$1, + variables: Array [ + Variable$3, + ], + }, + ClassStaticBlockScope$3 { + block: StaticBlock$3, + isStrict: true, + references: Array [], + set: Map {}, + type: "class-static-block", + upper: ClassScope$2, + variables: Array [], + }, + ], +} +`;