[flow] Process polymorphic type bounds on functions (babel/babel-eslint#444)
This commit is contained in:
parent
2bee348c9a
commit
65413344bd
@ -176,6 +176,18 @@ function monkeypatch() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function visitTypeParameters(typeParameters) {
|
||||||
|
var params = typeParameters.params;
|
||||||
|
|
||||||
|
// visit bounds on polymorphpic types, eg; `Foo` in `fn<T: Foo>(a: T): T`
|
||||||
|
for (var i = 0; i < params.length; i++) {
|
||||||
|
var param = params[i];
|
||||||
|
if (param.typeAnnotation) {
|
||||||
|
visitTypeAnnotation.call(this, param.typeAnnotation);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function checkIdentifierOrVisit(node) {
|
function checkIdentifierOrVisit(node) {
|
||||||
if (node.typeAnnotation) {
|
if (node.typeAnnotation) {
|
||||||
visitTypeAnnotation.call(this, node.typeAnnotation);
|
visitTypeAnnotation.call(this, node.typeAnnotation);
|
||||||
@ -249,6 +261,7 @@ function monkeypatch() {
|
|||||||
var typeParamScope;
|
var typeParamScope;
|
||||||
if (node.typeParameters) {
|
if (node.typeParameters) {
|
||||||
typeParamScope = nestTypeParamScope(this.scopeManager, node);
|
typeParamScope = nestTypeParamScope(this.scopeManager, node);
|
||||||
|
visitTypeParameters.call(this, node.typeParameters);
|
||||||
}
|
}
|
||||||
if (node.returnType) {
|
if (node.returnType) {
|
||||||
checkIdentifierOrVisit.call(this, node.returnType);
|
checkIdentifierOrVisit.call(this, node.returnType);
|
||||||
|
|||||||
@ -222,13 +222,13 @@ describe("verify", () => {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("type parameters", () => {
|
it("type parameter bounds", () => {
|
||||||
verifyAndAssertMessages(
|
verifyAndAssertMessages(
|
||||||
unpad(`
|
unpad(`
|
||||||
import type Foo from 'foo';
|
import type Foo from 'foo';
|
||||||
import type Foo2 from 'foo';
|
import type Foo2 from 'foo';
|
||||||
function log<T1, T2>(a: T1, b: T2) { return a + b; }
|
function log<T1: Foo, T2: Foo2>(a: T1, b: T2) { return a + b; }
|
||||||
log<Foo, Foo2>(1, 2);
|
log(1, 2);
|
||||||
`),
|
`),
|
||||||
{ "no-unused-vars": 1, "no-undef": 1 },
|
{ "no-unused-vars": 1, "no-undef": 1 },
|
||||||
[]
|
[]
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user