Make it possible to retrieve hir::Function's return type

This is done by adding a `ret_type` method to `hir::Function`.
I followed `assoc_fn_params` convention by creating a new `RetType` type,
that contains the actual return type accessible via a `ty` method.
This commit is contained in:
Arnaud 2021-01-04 18:58:42 +01:00
parent 0708bfeb72
commit a6dc7cf36d

View File

@ -743,6 +743,18 @@ pub fn name(self, db: &dyn HirDatabase) -> Name {
db.function_data(self.id).name.clone()
}
pub fn ret_type(self, db: &dyn HirDatabase) -> RetType {
let resolver = self.id.resolver(db.upcast());
let ret_type = &db.function_data(self.id).ret_type;
let ctx = hir_ty::TyLoweringContext::new(db, &resolver);
let environment = TraitEnvironment::lower(db, &resolver);
let ty = Type {
krate: self.id.lookup(db.upcast()).container.module(db.upcast()).krate,
ty: InEnvironment { value: Ty::from_hir_ext(&ctx, ret_type).0, environment },
};
RetType { ty }
}
pub fn self_param(self, db: &dyn HirDatabase) -> Option<SelfParam> {
if !db.function_data(self.id).has_self_param {
return None;
@ -826,6 +838,17 @@ fn from(mutability: Mutability) -> Access {
}
}
#[derive(Debug)]
pub struct RetType {
ty: Type,
}
impl RetType {
pub fn ty(&self) -> &Type {
&self.ty
}
}
#[derive(Debug)]
pub struct Param {
ty: Type,