From 5d406112e53279ebf9c1d85d1accf652b28f3416 Mon Sep 17 00:00:00 2001 From: Paul Loyd Date: Sun, 3 Dec 2017 14:55:18 +0300 Subject: [PATCH] Now query() returns maybe --- src/collector/context.js | 2 +- src/collector/definitions.js | 10 +++++++--- src/collector/index.js | 12 +++++------- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/src/collector/context.js b/src/collector/context.js index d62193e..793572e 100644 --- a/src/collector/context.js +++ b/src/collector/context.js @@ -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) { diff --git a/src/collector/definitions.js b/src/collector/definitions.js index a3a2d58..0a2f1a5 100644 --- a/src/collector/definitions.js +++ b/src/collector/definitions.js @@ -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)); diff --git a/src/collector/index.js b/src/collector/index.js index 852428f..880caaf 100644 --- a/src/collector/index.js +++ b/src/collector/index.js @@ -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); + } } } }