Now query() returns maybe

master
Paul Loyd 2017-12-03 14:55:18 +03:00
parent d2e2e6ea63
commit 5d406112e5
3 changed files with 13 additions and 11 deletions

View File

@ -48,7 +48,7 @@ export default class Context {
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);
if (param) {

View File

@ -54,7 +54,7 @@ function processInterfaceDeclaration(ctx: Context, node: InterfaceDeclaration) {
const {name} = extend.id;
const type = ctx.query(name);
invariant(type.id);
invariant(type && 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);
invariant(base.id);
invariant(base && base.id);
const baseRef = t.createReference(t.clone(base.id));
const intersection = t.createIntersection([baseRef, type]);
@ -269,8 +269,12 @@ function makeReference(ctx: Context, node: GenericTypeAnnotation): ?Type {
const type = ctx.query(name, params);
if (!type) {
return null;
}
if (!type.id) {
return type;
return t.clone(type);
}
return t.createReference(t.clone(type.id));

View File

@ -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);
// TODO: warning.
@ -153,11 +153,7 @@ export default class Collector {
case 'special':
default:
const resolve = id => this._fund.take(id);
const type = result.call(params, resolve);
invariant(type);
return type;
return result.call(params, resolve);
}
}
@ -165,7 +161,9 @@ export default class Collector {
for (const [scope, name] of module.exports()) {
const type = this._query(scope, name, []);
this._fund.put(type, true);
if (type) {
this._fund.put(type, true);
}
}
}
}