def _resolve_type_expr(texpr: qlast.TypeExpr, *, ctx: LayoutTraceContext): if isinstance(texpr, qlast.TypeName): if texpr.subtypes: return qltracer.Type(name=texpr.maintype.name) else: refname = ctx.get_ref_name(texpr.maintype) obj = ctx.objects.get(refname) if obj is None: obj = ctx.schema.get(refname, default=None) return obj elif isinstance(texpr, qlast.TypeOp): if texpr.op == '|': return qltracer.UnionType([ _resolve_type_expr(texpr.left, ctx=ctx), _resolve_type_expr(texpr.right, ctx=ctx), ]) else: raise NotImplementedError( f'unsupported type operation: {texpr.op}') else: raise NotImplementedError(f'unsupported type expression: {texpr!r}')
def _resolve_type_expr( texpr: qlast.TypeExpr, *, ctx: LayoutTraceContext, ) -> qltracer.TypeLike: if isinstance(texpr, qlast.TypeName): if texpr.subtypes: return qltracer.Type(name=s_name.QualName(module='__coll__', name=texpr.name or ''), ) else: return cast( qltracer.TypeLike, _resolve_type_name( texpr.maintype, tracer_type=qltracer.Type, real_type=s_types.Type, ctx=ctx, )) elif isinstance(texpr, qlast.TypeOp): if texpr.op == '|': return qltracer.UnionType([ _resolve_type_expr(texpr.left, ctx=ctx), _resolve_type_expr(texpr.right, ctx=ctx), ]) else: raise NotImplementedError( f'unsupported type operation: {texpr.op}') else: raise NotImplementedError(f'unsupported type expression: {texpr!r}')