aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir/src/expr.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_hir/src/expr.rs')
-rw-r--r--crates/ra_hir/src/expr.rs33
1 files changed, 32 insertions, 1 deletions
diff --git a/crates/ra_hir/src/expr.rs b/crates/ra_hir/src/expr.rs
index bfd250f38..5f6a4b320 100644
--- a/crates/ra_hir/src/expr.rs
+++ b/crates/ra_hir/src/expr.rs
@@ -12,7 +12,7 @@ use crate::{
12 path::GenericArgs, 12 path::GenericArgs,
13 ty::primitive::{UncertainFloatTy, UncertainIntTy}, 13 ty::primitive::{UncertainFloatTy, UncertainIntTy},
14 type_ref::{Mutability, TypeRef}, 14 type_ref::{Mutability, TypeRef},
15 DefWithBody, Either, HirDatabase, Name, Path, Resolver, 15 DefWithBody, Either, HasSource, HirDatabase, Name, Path, Resolver,
16}; 16};
17 17
18pub use self::scope::ExprScopes; 18pub use self::scope::ExprScopes;
@@ -524,3 +524,34 @@ impl Pat {
524 } 524 }
525 } 525 }
526} 526}
527
528// Queries
529pub(crate) fn body_with_source_map_query(
530 db: &impl HirDatabase,
531 def: DefWithBody,
532) -> (Arc<Body>, Arc<BodySourceMap>) {
533 let mut params = None;
534
535 let (file_id, body) = match def {
536 DefWithBody::Function(f) => {
537 let src = f.source(db);
538 params = src.ast.param_list();
539 (src.file_id, src.ast.body().map(ast::Expr::from))
540 }
541 DefWithBody::Const(c) => {
542 let src = c.source(db);
543 (src.file_id, src.ast.body())
544 }
545 DefWithBody::Static(s) => {
546 let src = s.source(db);
547 (src.file_id, src.ast.body())
548 }
549 };
550
551 let (body, source_map) = lower::lower(db, def.resolver(db), file_id, def, params, body);
552 (Arc::new(body), Arc::new(source_map))
553}
554
555pub(crate) fn body_hir_query(db: &impl HirDatabase, def: DefWithBody) -> Arc<Body> {
556 db.body_with_source_map(def).0
557}