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.rs61
1 files changed, 30 insertions, 31 deletions
diff --git a/crates/ra_hir/src/expr.rs b/crates/ra_hir/src/expr.rs
index 6e23197a4..53da7f0bf 100644
--- a/crates/ra_hir/src/expr.rs
+++ b/crates/ra_hir/src/expr.rs
@@ -75,6 +75,36 @@ pub struct BodySourceMap {
75} 75}
76 76
77impl Body { 77impl Body {
78 pub(crate) fn body_with_source_map_query(
79 db: &impl HirDatabase,
80 def: DefWithBody,
81 ) -> (Arc<Body>, Arc<BodySourceMap>) {
82 let mut params = None;
83
84 let (file_id, body) = match def {
85 DefWithBody::Function(f) => {
86 let src = f.source(db);
87 params = src.ast.param_list();
88 (src.file_id, src.ast.body().map(ast::Expr::from))
89 }
90 DefWithBody::Const(c) => {
91 let src = c.source(db);
92 (src.file_id, src.ast.body())
93 }
94 DefWithBody::Static(s) => {
95 let src = s.source(db);
96 (src.file_id, src.ast.body())
97 }
98 };
99
100 let (body, source_map) = lower::lower(db, def.resolver(db), file_id, def, params, body);
101 (Arc::new(body), Arc::new(source_map))
102 }
103
104 pub(crate) fn body_query(db: &impl HirDatabase, def: DefWithBody) -> Arc<Body> {
105 db.body_with_source_map(def).0
106 }
107
78 pub fn params(&self) -> &[PatId] { 108 pub fn params(&self) -> &[PatId] {
79 &self.params 109 &self.params
80 } 110 }
@@ -542,34 +572,3 @@ impl Pat {
542 } 572 }
543 } 573 }
544} 574}
545
546// Queries
547pub(crate) fn body_with_source_map_query(
548 db: &impl HirDatabase,
549 def: DefWithBody,
550) -> (Arc<Body>, Arc<BodySourceMap>) {
551 let mut params = None;
552
553 let (file_id, body) = match def {
554 DefWithBody::Function(f) => {
555 let src = f.source(db);
556 params = src.ast.param_list();
557 (src.file_id, src.ast.body().map(ast::Expr::from))
558 }
559 DefWithBody::Const(c) => {
560 let src = c.source(db);
561 (src.file_id, src.ast.body())
562 }
563 DefWithBody::Static(s) => {
564 let src = s.source(db);
565 (src.file_id, src.ast.body())
566 }
567 };
568
569 let (body, source_map) = lower::lower(db, def.resolver(db), file_id, def, params, body);
570 (Arc::new(body), Arc::new(source_map))
571}
572
573pub(crate) fn body_hir_query(db: &impl HirDatabase, def: DefWithBody) -> Arc<Body> {
574 db.body_with_source_map(def).0
575}