@@ -10241,9 +10241,12 @@ namespace ts {
10241
10241
return unknownType;
10242
10242
}
10243
10243
10244
- if (noUnusedIdentifiers && (prop.flags & SymbolFlags.ClassMember)) {
10244
+ if (noUnusedIdentifiers &&
10245
+ (prop.flags & SymbolFlags.ClassMember) &&
10246
+ prop.valueDeclaration && (prop.valueDeclaration.flags & NodeFlags.Private)) {
10245
10247
if (prop.flags & SymbolFlags.Instantiated) {
10246
10248
getSymbolLinks(prop).target.isReferenced = true;
10249
+
10247
10250
}
10248
10251
else {
10249
10252
prop.isReferenced = true;
@@ -14513,10 +14516,11 @@ namespace ts {
14513
14516
checkUnusedTypeParameters(<InterfaceDeclaration>node);
14514
14517
break;
14515
14518
case SyntaxKind.Block:
14519
+ case SyntaxKind.CaseBlock:
14516
14520
case SyntaxKind.ForStatement:
14517
14521
case SyntaxKind.ForInStatement:
14518
14522
case SyntaxKind.ForOfStatement:
14519
- checkUnusedLocalsAndParameters(<Block | ForInStatement | ForStatement | ForOfStatement> node);
14523
+ checkUnusedLocalsAndParameters(node);
14520
14524
break;
14521
14525
case SyntaxKind.Constructor:
14522
14526
case SyntaxKind.FunctionExpression:
@@ -14543,7 +14547,7 @@ namespace ts {
14543
14547
}
14544
14548
}
14545
14549
14546
- function checkUnusedLocalsAndParameters(node: FunctionLikeDeclaration | ForStatement | Block ): void {
14550
+ function checkUnusedLocalsAndParameters(node: Node ): void {
14547
14551
if (node.parent.kind !== SyntaxKind.InterfaceDeclaration && noUnusedIdentifiers && !isInAmbientContext(node)) {
14548
14552
for (const key in node.locals) {
14549
14553
if (hasProperty(node.locals, key)) {
@@ -14568,13 +14572,13 @@ namespace ts {
14568
14572
if (node.members) {
14569
14573
for (const member of node.members) {
14570
14574
if (member.kind === SyntaxKind.MethodDeclaration || member.kind === SyntaxKind.PropertyDeclaration) {
14571
- if (isPrivateNode( member) && ! member.symbol.isReferenced ) {
14575
+ if (! member.symbol.isReferenced && member.flags & NodeFlags.Private ) {
14572
14576
error(member.name, Diagnostics._0_is_declared_but_never_used, member.symbol.name);
14573
14577
}
14574
14578
}
14575
14579
else if (member.kind === SyntaxKind.Constructor) {
14576
14580
for (const parameter of (<ConstructorDeclaration>member).parameters) {
14577
- if (isPrivateNode( parameter) && ! parameter.symbol.isReferenced ) {
14581
+ if (! parameter.symbol.isReferenced && parameter.flags & NodeFlags.Private ) {
14578
14582
error(parameter.name, Diagnostics._0_is_declared_but_never_used, parameter.symbol.name);
14579
14583
}
14580
14584
}
@@ -14596,10 +14600,6 @@ namespace ts {
14596
14600
}
14597
14601
}
14598
14602
14599
- function isPrivateNode(node: Node): boolean {
14600
- return (node.flags & NodeFlags.Private) !== 0;
14601
- }
14602
-
14603
14603
function checkUnusedModuleMembers(node: ModuleDeclaration | SourceFile): void {
14604
14604
if (compilerOptions.noUnusedLocals && !isInAmbientContext(node)) {
14605
14605
for (const key in node.locals) {
@@ -15090,7 +15090,9 @@ namespace ts {
15090
15090
if (node.condition) checkExpression(node.condition);
15091
15091
if (node.incrementor) checkExpression(node.incrementor);
15092
15092
checkSourceElement(node.statement);
15093
- registerForUnusedIdentifiersCheck(node);
15093
+ if (node.locals) {
15094
+ registerForUnusedIdentifiersCheck(node);
15095
+ }
15094
15096
}
15095
15097
15096
15098
function checkForOfStatement(node: ForOfStatement): void {
@@ -15556,6 +15558,9 @@ namespace ts {
15556
15558
}
15557
15559
forEach(clause.statements, checkSourceElement);
15558
15560
});
15561
+ if (node.caseBlock.locals) {
15562
+ registerForUnusedIdentifiersCheck(node.caseBlock);
15563
+ }
15559
15564
}
15560
15565
15561
15566
function checkLabeledStatement(node: LabeledStatement) {
0 commit comments