diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index 0da394ac80d56..1a20f59e2cb1e 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -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: diff --git a/tests/baselines/reference/noUnusedLocals_potentialPredicateUnusedParam.errors.txt b/tests/baselines/reference/noUnusedLocals_potentialPredicateUnusedParam.errors.txt new file mode 100644 index 0000000000000..929eb5a565a75 --- /dev/null +++ b/tests/baselines/reference/noUnusedLocals_potentialPredicateUnusedParam.errors.txt @@ -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(); + } + \ No newline at end of file diff --git a/tests/baselines/reference/noUnusedLocals_potentialPredicateUnusedParam.symbols b/tests/baselines/reference/noUnusedLocals_potentialPredicateUnusedParam.symbols new file mode 100644 index 0000000000000..3decedaf23158 --- /dev/null +++ b/tests/baselines/reference/noUnusedLocals_potentialPredicateUnusedParam.symbols @@ -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, --, --)) +} + diff --git a/tests/baselines/reference/noUnusedLocals_potentialPredicateUnusedParam.types b/tests/baselines/reference/noUnusedLocals_potentialPredicateUnusedParam.types new file mode 100644 index 0000000000000..090e1ae0fb609 --- /dev/null +++ b/tests/baselines/reference/noUnusedLocals_potentialPredicateUnusedParam.types @@ -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 +> : ^^^^^^ +} + diff --git a/tests/cases/compiler/noUnusedLocals_potentialPredicateUnusedParam.ts b/tests/cases/compiler/noUnusedLocals_potentialPredicateUnusedParam.ts new file mode 100644 index 0000000000000..f711939d6d7b9 --- /dev/null +++ b/tests/cases/compiler/noUnusedLocals_potentialPredicateUnusedParam.ts @@ -0,0 +1,8 @@ +// @strict: true +// @noEmit: true +// @noUnusedLocals: true +// @noUnusedParameters: true + +function potentialPredicateUnusedParam(a: unknown) { + return !!Math.random(); +}