From a0f619ab03e3aad1ce7008f06fd35f3fd72689b0 Mon Sep 17 00:00:00 2001 From: Randy Hudson Date: Thu, 10 Sep 2020 15:40:28 -0400 Subject: [PATCH] fixes #2526 --- packages/eslint-plugin/tests/rules/no-shadow.test.ts | 8 ++++++++ packages/scope-manager/src/referencer/TypeVisitor.ts | 4 +++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/packages/eslint-plugin/tests/rules/no-shadow.test.ts b/packages/eslint-plugin/tests/rules/no-shadow.test.ts index bbaad211a25f..d7c81d834492 100644 --- a/packages/eslint-plugin/tests/rules/no-shadow.test.ts +++ b/packages/eslint-plugin/tests/rules/no-shadow.test.ts @@ -11,6 +11,14 @@ const ruleTester = new RuleTester({ ruleTester.run('no-shadow TS tests', rule, { valid: [ + // nested conditional types + ` +export type ArrayInput = Func extends (arg0: Array) => any + ? T[] + : Func extends (...args: infer T) => any + ? T + : never; + `, ` function foo() { var Object = 0; diff --git a/packages/scope-manager/src/referencer/TypeVisitor.ts b/packages/scope-manager/src/referencer/TypeVisitor.ts index 5e43f83bb326..536fa761740a 100644 --- a/packages/scope-manager/src/referencer/TypeVisitor.ts +++ b/packages/scope-manager/src/referencer/TypeVisitor.ts @@ -94,9 +94,11 @@ class TypeVisitor extends Visitor { // which are only accessible from inside the conditional parameter this.#referencer.scopeManager.nestConditionalTypeScope(node); - this.visitChildren(node); + this.visitChildren(node, ['falseType']); this.#referencer.close(node); + + this.visit(node.falseType); } protected TSConstructorType(node: TSESTree.TSConstructorType): void {