Fixed a regression with reporting unused parameters in potential predicates (#58514)

This commit is contained in:
Mateusz Burzyński 2024-06-12 22:29:59 +02:00 committed by GitHub
parent 346df34b17
commit 359646b48b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 60 additions and 2 deletions

View File

@ -11461,7 +11461,7 @@ export function createNameResolver({
}
break;
}
if (isSelfReferenceLocation(location)) {
if (isSelfReferenceLocation(location, lastLocation)) {
lastSelfReferenceLocation = location;
}
lastLocation = location;
@ -11595,6 +11595,7 @@ export function createNameResolver({
}
type SelfReferenceLocation =
| ParameterDeclaration
| FunctionDeclaration
| ClassDeclaration
| InterfaceDeclaration
@ -11602,8 +11603,10 @@ export function createNameResolver({
| TypeAliasDeclaration
| ModuleDeclaration;
function isSelfReferenceLocation(node: Node): node is SelfReferenceLocation {
function isSelfReferenceLocation(node: Node, lastLocation: Node | undefined): node is SelfReferenceLocation {
switch (node.kind) {
case SyntaxKind.Parameter:
return !!lastLocation && lastLocation === (node as ParameterDeclaration).name;
case SyntaxKind.FunctionDeclaration:
case SyntaxKind.ClassDeclaration:
case SyntaxKind.InterfaceDeclaration:

View File

@ -0,0 +1,10 @@
noUnusedLocals_potentialPredicateUnusedParam.ts(1,40): error TS6133: 'a' is declared but its value is never read.
==== noUnusedLocals_potentialPredicateUnusedParam.ts (1 errors) ====
function potentialPredicateUnusedParam(a: unknown) {
~
!!! error TS6133: 'a' is declared but its value is never read.
return !!Math.random();
}

View File

@ -0,0 +1,13 @@
//// [tests/cases/compiler/noUnusedLocals_potentialPredicateUnusedParam.ts] ////
=== noUnusedLocals_potentialPredicateUnusedParam.ts ===
function potentialPredicateUnusedParam(a: unknown) {
>potentialPredicateUnusedParam : Symbol(potentialPredicateUnusedParam, Decl(noUnusedLocals_potentialPredicateUnusedParam.ts, 0, 0))
>a : Symbol(a, Decl(noUnusedLocals_potentialPredicateUnusedParam.ts, 0, 39))
return !!Math.random();
>Math.random : Symbol(Math.random, Decl(lib.es5.d.ts, --, --))
>Math : Symbol(Math, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
>random : Symbol(Math.random, Decl(lib.es5.d.ts, --, --))
}

View File

@ -0,0 +1,24 @@
//// [tests/cases/compiler/noUnusedLocals_potentialPredicateUnusedParam.ts] ////
=== noUnusedLocals_potentialPredicateUnusedParam.ts ===
function potentialPredicateUnusedParam(a: unknown) {
>potentialPredicateUnusedParam : (a: unknown) => boolean
> : ^ ^^ ^^^^^^^^^^^^
>a : unknown
> : ^^^^^^^
return !!Math.random();
>!!Math.random() : boolean
> : ^^^^^^^
>!Math.random() : boolean
> : ^^^^^^^
>Math.random() : number
> : ^^^^^^
>Math.random : () => number
> : ^^^^^^
>Math : Math
> : ^^^^
>random : () => number
> : ^^^^^^
}

View File

@ -0,0 +1,8 @@
// @strict: true
// @noEmit: true
// @noUnusedLocals: true
// @noUnusedParameters: true
function potentialPredicateUnusedParam(a: unknown) {
return !!Math.random();
}