diff --git a/tsc/internal/checker/checker.go b/tsc/internal/checker/checker.go index 845f62365bb84..73a64f434a20f 100644 --- a/tsc/internal/checker/checker.go +++ b/tsc/internal/checker/checker.go @@ -2863,6 +2863,9 @@ func (c *Checker) checkClassStaticBlockDeclaration(node *ast.Node) { // Grammar checking c.checkGrammarModifiers(node) node.ForEachChild(c.checkSourceElement) + if len(node.Locals()) != 0 { + c.registerForUnusedIdentifiersCheck(node) + } } func (c *Checker) checkConstructorDeclaration(node *ast.Node) { @@ -7220,7 +7223,7 @@ func (c *Checker) checkUnusedIdentifiers(potentiallyUnusedIdentifiers []*ast.Nod c.checkUnusedClassMembers(node) c.checkUnusedTypeParameters(node) case ast.KindSourceFile, ast.KindModuleDeclaration, ast.KindBlock, ast.KindCaseBlock, ast.KindForStatement, ast.KindForInStatement, - ast.KindForOfStatement: + ast.KindForOfStatement, ast.KindClassStaticBlockDeclaration: c.checkUnusedLocalsAndParameters(node) case ast.KindConstructor, ast.KindFunctionExpression, ast.KindFunctionDeclaration, ast.KindArrowFunction, ast.KindMethodDeclaration, ast.KindGetAccessor, ast.KindSetAccessor: diff --git a/tsc/testdata/baselines/reference/compiler/unusedLocalsAndParameters.errors.txt b/tsc/testdata/baselines/reference/compiler/unusedLocalsAndParameters.errors.txt index ed6545a77f36c..bbfd4ea9d2e49 100644 --- a/tsc/testdata/baselines/reference/compiler/unusedLocalsAndParameters.errors.txt +++ b/tsc/testdata/baselines/reference/compiler/unusedLocalsAndParameters.errors.txt @@ -19,13 +19,15 @@ unusedLocalsAndParameters.ts(71,11): error TS6133: 'c' is declared but its value unusedLocalsAndParameters.ts(74,11): error TS6133: 'c' is declared but its value is never read. unusedLocalsAndParameters.ts(79,11): error TS6133: 'N' is declared but its value is never read. unusedLocalsAndParameters.ts(80,9): error TS6133: 'x' is declared but its value is never read. -unusedLocalsAndParameters.ts(83,13): error TS2304: Cannot find name 'y'. -unusedLocalsAndParameters.ts(83,14): error TS1005: ',' expected. -unusedLocalsAndParameters.ts(84,6): error TS1005: ',' expected. -unusedLocalsAndParameters.ts(85,1): error TS1109: Expression expected. +unusedLocalsAndParameters.ts(84,7): error TS6196: 'C1' is declared but never used. +unusedLocalsAndParameters.ts(86,13): error TS6133: 'foo' is declared but its value is never read. +unusedLocalsAndParameters.ts(90,13): error TS2304: Cannot find name 'y'. +unusedLocalsAndParameters.ts(90,14): error TS1005: ',' expected. +unusedLocalsAndParameters.ts(91,6): error TS1005: ',' expected. +unusedLocalsAndParameters.ts(92,1): error TS1109: Expression expected. -==== unusedLocalsAndParameters.ts (25 errors) ==== +==== unusedLocalsAndParameters.ts (27 errors) ==== export { }; // function declaration paramter @@ -150,6 +152,17 @@ unusedLocalsAndParameters.ts(85,1): error TS1109: Expression expected. !!! error TS6133: 'x' is declared but its value is never read. } + // in a class static block + class C1 { + ~~ +!!! error TS6196: 'C1' is declared but never used. + static { + let foo = 1; + ~~~ +!!! error TS6133: 'foo' is declared but its value is never read. + } + } + for (let x: y) { ~ !!! error TS2304: Cannot find name 'y'. diff --git a/tsc/testdata/baselines/reference/compiler/unusedLocalsAndParameters.js b/tsc/testdata/baselines/reference/compiler/unusedLocalsAndParameters.js index 28438ba1b5c01..1649e09d721aa 100644 --- a/tsc/testdata/baselines/reference/compiler/unusedLocalsAndParameters.js +++ b/tsc/testdata/baselines/reference/compiler/unusedLocalsAndParameters.js @@ -83,6 +83,13 @@ namespace N { var x; } +// in a class static block +class C1 { + static { + let foo = 1; + } +} + for (let x: y) { z(x); } @@ -154,6 +161,12 @@ var N; (function (N) { var x; })(N || (N = {})); +// in a class static block +class C1 { +} +(() => { + let foo = 1; +})(); for (let x, { z }; (x); ) ; export {}; diff --git a/tsc/testdata/baselines/reference/compiler/unusedLocalsAndParameters.symbols b/tsc/testdata/baselines/reference/compiler/unusedLocalsAndParameters.symbols index f1a978a3e6da3..02e8478653bc3 100644 --- a/tsc/testdata/baselines/reference/compiler/unusedLocalsAndParameters.symbols +++ b/tsc/testdata/baselines/reference/compiler/unusedLocalsAndParameters.symbols @@ -133,12 +133,22 @@ namespace N { >x : Symbol(x, Decl(unusedLocalsAndParameters.ts, 79, 7)) } +// in a class static block +class C1 { +>C1 : Symbol(C1, Decl(unusedLocalsAndParameters.ts, 80, 1)) + + static { + let foo = 1; +>foo : Symbol(foo, Decl(unusedLocalsAndParameters.ts, 85, 11)) + } +} + for (let x: y) { ->x : Symbol(x, Decl(unusedLocalsAndParameters.ts, 82, 8)) +>x : Symbol(x, Decl(unusedLocalsAndParameters.ts, 89, 8)) >y : Symbol(y) z(x); ->z : Symbol(z, Decl(unusedLocalsAndParameters.ts, 82, 16)) ->x : Symbol(x, Decl(unusedLocalsAndParameters.ts, 82, 8)) +>z : Symbol(z, Decl(unusedLocalsAndParameters.ts, 89, 16)) +>x : Symbol(x, Decl(unusedLocalsAndParameters.ts, 89, 8)) } diff --git a/tsc/testdata/baselines/reference/compiler/unusedLocalsAndParameters.types b/tsc/testdata/baselines/reference/compiler/unusedLocalsAndParameters.types index 972c927fe99c3..e437bb7268a10 100644 --- a/tsc/testdata/baselines/reference/compiler/unusedLocalsAndParameters.types +++ b/tsc/testdata/baselines/reference/compiler/unusedLocalsAndParameters.types @@ -154,6 +154,17 @@ namespace N { >x : any } +// in a class static block +class C1 { +>C1 : C1 + + static { + let foo = 1; +>foo : number +>1 : 1 + } +} + for (let x: y) { >x : y diff --git a/tsc/testdata/tests/cases/compiler/unusedLocalsAndParameters.ts b/tsc/testdata/tests/cases/compiler/unusedLocalsAndParameters.ts index cd812120b58b9..cdcdb5da35cef 100644 --- a/tsc/testdata/tests/cases/compiler/unusedLocalsAndParameters.ts +++ b/tsc/testdata/tests/cases/compiler/unusedLocalsAndParameters.ts @@ -85,6 +85,13 @@ namespace N { var x; } +// in a class static block +class C1 { + static { + let foo = 1; + } +} + for (let x: y) { z(x); }