Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
fix(scope-manager): support rest function type parameters (#2491)
Fixes #2449
- Loading branch information
Showing
with
310 additions
and 1 deletion.
- +8 −0 packages/eslint-plugin/tests/rules/no-unused-vars.test.ts
- +11 −1 packages/scope-manager/src/referencer/TypeVisitor.ts
- +1 −0 packages/scope-manager/tests/fixtures/type-declaration/function/params/array-pattern.ts
- +96 −0 packages/scope-manager/tests/fixtures/type-declaration/function/params/array-pattern.ts.shot
- +1 −0 packages/scope-manager/tests/fixtures/type-declaration/function/params/object-pattern.ts
- +96 −0 packages/scope-manager/tests/fixtures/type-declaration/function/params/object-pattern.ts.shot
- +1 −0 packages/scope-manager/tests/fixtures/type-declaration/function/params/rest-element.ts
- +96 −0 packages/scope-manager/tests/fixtures/type-declaration/function/params/rest-element.ts.shot
@@ -0,0 +1 @@ | ||
type Fn<A extends unknown[]> = ([a]: A) => unknown; |
@@ -0,0 +1,96 @@ | ||
// Jest Snapshot v1, https://goo.gl/fbAQLP | ||
|
||
exports[`type-declaration function params array-pattern 1`] = ` | ||
ScopeManager { | ||
variables: Array [ | ||
Variable$1 { | ||
defs: Array [ | ||
TypeDefinition$1 { | ||
name: Identifier<"Fn">, | ||
node: TSTypeAliasDeclaration$1, | ||
}, | ||
], | ||
name: "Fn", | ||
references: Array [], | ||
isValueVariable: false, | ||
isTypeVariable: true, | ||
}, | ||
Variable$2 { | ||
defs: Array [ | ||
TypeDefinition$2 { | ||
name: Identifier<"A">, | ||
node: TSTypeParameter$2, | ||
}, | ||
], | ||
name: "A", | ||
references: Array [ | ||
Reference$1 { | ||
identifier: Identifier<"A">, | ||
isRead: true, | ||
isTypeReference: true, | ||
isValueReference: false, | ||
isWrite: false, | ||
resolved: Variable$2, | ||
}, | ||
], | ||
isValueVariable: false, | ||
isTypeVariable: true, | ||
}, | ||
Variable$3 { | ||
defs: Array [ | ||
ParameterDefinition$3 { | ||
name: Identifier<"a">, | ||
node: TSFunctionType$3, | ||
}, | ||
], | ||
name: "a", | ||
references: Array [], | ||
isValueVariable: true, | ||
isTypeVariable: false, | ||
}, | ||
], | ||
scopes: Array [ | ||
GlobalScope$1 { | ||
block: Program$4, | ||
isStrict: false, | ||
references: Array [], | ||
set: Map { | ||
"Fn" => Variable$1, | ||
}, | ||
type: "global", | ||
upper: null, | ||
variables: Array [ | ||
Variable$1, | ||
], | ||
}, | ||
TypeScope$2 { | ||
block: TSTypeAliasDeclaration$1, | ||
isStrict: true, | ||
references: Array [], | ||
set: Map { | ||
"A" => Variable$2, | ||
}, | ||
type: "type", | ||
upper: GlobalScope$1, | ||
variables: Array [ | ||
Variable$2, | ||
], | ||
}, | ||
FunctionTypeScope$3 { | ||
block: TSFunctionType$3, | ||
isStrict: true, | ||
references: Array [ | ||
Reference$1, | ||
], | ||
set: Map { | ||
"a" => Variable$3, | ||
}, | ||
type: "functionType", | ||
upper: TypeScope$2, | ||
variables: Array [ | ||
Variable$3, | ||
], | ||
}, | ||
], | ||
} | ||
`; |
@@ -0,0 +1 @@ | ||
type Fn<A extends { a: string }> = ({ a }: A) => unknown; |
@@ -0,0 +1,96 @@ | ||
// Jest Snapshot v1, https://goo.gl/fbAQLP | ||
|
||
exports[`type-declaration function params object-pattern 1`] = ` | ||
ScopeManager { | ||
variables: Array [ | ||
Variable$1 { | ||
defs: Array [ | ||
TypeDefinition$1 { | ||
name: Identifier<"Fn">, | ||
node: TSTypeAliasDeclaration$1, | ||
}, | ||
], | ||
name: "Fn", | ||
references: Array [], | ||
isValueVariable: false, | ||
isTypeVariable: true, | ||
}, | ||
Variable$2 { | ||
defs: Array [ | ||
TypeDefinition$2 { | ||
name: Identifier<"A">, | ||
node: TSTypeParameter$2, | ||
}, | ||
], | ||
name: "A", | ||
references: Array [ | ||
Reference$1 { | ||
identifier: Identifier<"A">, | ||
isRead: true, | ||
isTypeReference: true, | ||
isValueReference: false, | ||
isWrite: false, | ||
resolved: Variable$2, | ||
}, | ||
], | ||
isValueVariable: false, | ||
isTypeVariable: true, | ||
}, | ||
Variable$3 { | ||
defs: Array [ | ||
ParameterDefinition$3 { | ||
name: Identifier<"a">, | ||
node: TSFunctionType$3, | ||
}, | ||
], | ||
name: "a", | ||
references: Array [], | ||
isValueVariable: true, | ||
isTypeVariable: false, | ||
}, | ||
], | ||
scopes: Array [ | ||
GlobalScope$1 { | ||
block: Program$4, | ||
isStrict: false, | ||
references: Array [], | ||
set: Map { | ||
"Fn" => Variable$1, | ||
}, | ||
type: "global", | ||
upper: null, | ||
variables: Array [ | ||
Variable$1, | ||
], | ||
}, | ||
TypeScope$2 { | ||
block: TSTypeAliasDeclaration$1, | ||
isStrict: true, | ||
references: Array [], | ||
set: Map { | ||
"A" => Variable$2, | ||
}, | ||
type: "type", | ||
upper: GlobalScope$1, | ||
variables: Array [ | ||
Variable$2, | ||
], | ||
}, | ||
FunctionTypeScope$3 { | ||
block: TSFunctionType$3, | ||
isStrict: true, | ||
references: Array [ | ||
Reference$1, | ||
], | ||
set: Map { | ||
"a" => Variable$3, | ||
}, | ||
type: "functionType", | ||
upper: TypeScope$2, | ||
variables: Array [ | ||
Variable$3, | ||
], | ||
}, | ||
], | ||
} | ||
`; |
@@ -0,0 +1 @@ | ||
type Fn<A extends unknown[]> = (...a: A) => unknown; |
@@ -0,0 +1,96 @@ | ||
// Jest Snapshot v1, https://goo.gl/fbAQLP | ||
|
||
exports[`type-declaration function params rest-element 1`] = ` | ||
ScopeManager { | ||
variables: Array [ | ||
Variable$1 { | ||
defs: Array [ | ||
TypeDefinition$1 { | ||
name: Identifier<"Fn">, | ||
node: TSTypeAliasDeclaration$1, | ||
}, | ||
], | ||
name: "Fn", | ||
references: Array [], | ||
isValueVariable: false, | ||
isTypeVariable: true, | ||
}, | ||
Variable$2 { | ||
defs: Array [ | ||
TypeDefinition$2 { | ||
name: Identifier<"A">, | ||
node: TSTypeParameter$2, | ||
}, | ||
], | ||
name: "A", | ||
references: Array [ | ||
Reference$1 { | ||
identifier: Identifier<"A">, | ||
isRead: true, | ||
isTypeReference: true, | ||
isValueReference: false, | ||
isWrite: false, | ||
resolved: Variable$2, | ||
}, | ||
], | ||
isValueVariable: false, | ||
isTypeVariable: true, | ||
}, | ||
Variable$3 { | ||
defs: Array [ | ||
ParameterDefinition$3 { | ||
name: Identifier<"a">, | ||
node: TSFunctionType$3, | ||
}, | ||
], | ||
name: "a", | ||
references: Array [], | ||
isValueVariable: true, | ||
isTypeVariable: false, | ||
}, | ||
], | ||
scopes: Array [ | ||
GlobalScope$1 { | ||
block: Program$4, | ||
isStrict: false, | ||
references: Array [], | ||
set: Map { | ||
"Fn" => Variable$1, | ||
}, | ||
type: "global", | ||
upper: null, | ||
variables: Array [ | ||
Variable$1, | ||
], | ||
}, | ||
TypeScope$2 { | ||
block: TSTypeAliasDeclaration$1, | ||
isStrict: true, | ||
references: Array [], | ||
set: Map { | ||
"A" => Variable$2, | ||
}, | ||
type: "type", | ||
upper: GlobalScope$1, | ||
variables: Array [ | ||
Variable$2, | ||
], | ||
}, | ||
FunctionTypeScope$3 { | ||
block: TSFunctionType$3, | ||
isStrict: true, | ||
references: Array [ | ||
Reference$1, | ||
], | ||
set: Map { | ||
"a" => Variable$3, | ||
}, | ||
type: "functionType", | ||
upper: TypeScope$2, | ||
variables: Array [ | ||
Variable$3, | ||
], | ||
}, | ||
], | ||
} | ||
`; |