Now query() returns maybe
parent
d2e2e6ea63
commit
5d406112e5
|
@ -48,7 +48,7 @@ export default class Context {
|
||||||
this._scope.addExport(name, reference);
|
this._scope.addExport(name, reference);
|
||||||
}
|
}
|
||||||
|
|
||||||
query(name: string, params: ?(?Type)[]): Type {
|
query(name: string, params: ?(?Type)[]): ?Type {
|
||||||
const param = wu(this._params).find(p => p.name === name);
|
const param = wu(this._params).find(p => p.name === name);
|
||||||
|
|
||||||
if (param) {
|
if (param) {
|
||||||
|
|
|
@ -54,7 +54,7 @@ function processInterfaceDeclaration(ctx: Context, node: InterfaceDeclaration) {
|
||||||
const {name} = extend.id;
|
const {name} = extend.id;
|
||||||
const type = ctx.query(name);
|
const type = ctx.query(name);
|
||||||
|
|
||||||
invariant(type.id);
|
invariant(type && type.id);
|
||||||
|
|
||||||
const reference = t.createReference(t.clone(type.id));
|
const reference = t.createReference(t.clone(type.id));
|
||||||
|
|
||||||
|
@ -85,7 +85,7 @@ function processClassDeclaration(ctx: Context, node: ClassDeclaration) {
|
||||||
|
|
||||||
const base = ctx.query(node.superClass.name);
|
const base = ctx.query(node.superClass.name);
|
||||||
|
|
||||||
invariant(base.id);
|
invariant(base && base.id);
|
||||||
|
|
||||||
const baseRef = t.createReference(t.clone(base.id));
|
const baseRef = t.createReference(t.clone(base.id));
|
||||||
const intersection = t.createIntersection([baseRef, type]);
|
const intersection = t.createIntersection([baseRef, type]);
|
||||||
|
@ -269,8 +269,12 @@ function makeReference(ctx: Context, node: GenericTypeAnnotation): ?Type {
|
||||||
|
|
||||||
const type = ctx.query(name, params);
|
const type = ctx.query(name, params);
|
||||||
|
|
||||||
|
if (!type) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
if (!type.id) {
|
if (!type.id) {
|
||||||
return type;
|
return t.clone(type);
|
||||||
}
|
}
|
||||||
|
|
||||||
return t.createReference(t.clone(type.id));
|
return t.createReference(t.clone(type.id));
|
||||||
|
|
|
@ -86,7 +86,7 @@ export default class Collector {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_query(scope: Scope, name: string, params: (?Type)[]): Type {
|
_query(scope: Scope, name: string, params: (?Type)[]): ?Type {
|
||||||
let result = scope.query(name, params);
|
let result = scope.query(name, params);
|
||||||
|
|
||||||
// TODO: warning.
|
// TODO: warning.
|
||||||
|
@ -153,11 +153,7 @@ export default class Collector {
|
||||||
case 'special':
|
case 'special':
|
||||||
default:
|
default:
|
||||||
const resolve = id => this._fund.take(id);
|
const resolve = id => this._fund.take(id);
|
||||||
const type = result.call(params, resolve);
|
return result.call(params, resolve);
|
||||||
|
|
||||||
invariant(type);
|
|
||||||
|
|
||||||
return type;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -165,7 +161,9 @@ export default class Collector {
|
||||||
for (const [scope, name] of module.exports()) {
|
for (const [scope, name] of module.exports()) {
|
||||||
const type = this._query(scope, name, []);
|
const type = this._query(scope, name, []);
|
||||||
|
|
||||||
this._fund.put(type, true);
|
if (type) {
|
||||||
|
this._fund.put(type, true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue