diff --git a/crates/ra_hir/src/code_model.rs b/crates/ra_hir/src/code_model.rs
index 5a0bd0c192..2fd4ccb109 100644
--- a/crates/ra_hir/src/code_model.rs
+++ b/crates/ra_hir/src/code_model.rs
@@ -550,7 +550,7 @@ where
}
fn body(self, db: &impl HirDatabase) -> Arc
{
- db.body_hir(self.into())
+ db.body(self.into())
}
fn body_source_map(self, db: &impl HirDatabase) -> Arc {
@@ -564,7 +564,7 @@ impl HasBody for DefWithBody {
}
fn body(self, db: &impl HirDatabase) -> Arc {
- db.body_hir(self)
+ db.body(self)
}
fn body_source_map(self, db: &impl HirDatabase) -> Arc {
@@ -666,7 +666,7 @@ impl Function {
}
pub fn body(self, db: &impl HirDatabase) -> Arc {
- db.body_hir(self.into())
+ db.body(self.into())
}
pub fn ty(self, db: &impl HirDatabase) -> Ty {
@@ -1079,7 +1079,7 @@ pub struct Local {
impl Local {
pub fn name(self, db: &impl HirDatabase) -> Option {
- let body = db.body_hir(self.parent);
+ let body = db.body(self.parent);
match &body[self.pat_id] {
Pat::Bind { name, .. } => Some(name.clone()),
_ => None,
@@ -1091,7 +1091,7 @@ impl Local {
}
pub fn is_mut(self, db: &impl HirDatabase) -> bool {
- let body = db.body_hir(self.parent);
+ let body = db.body(self.parent);
match &body[self.pat_id] {
Pat::Bind { mode, .. } => match mode {
BindingAnnotation::Mutable | BindingAnnotation::RefMut => true,
diff --git a/crates/ra_hir/src/db.rs b/crates/ra_hir/src/db.rs
index 75c322c999..abf4ae4023 100644
--- a/crates/ra_hir/src/db.rs
+++ b/crates/ra_hir/src/db.rs
@@ -8,6 +8,7 @@ use ra_syntax::SmolStr;
use crate::{
debug::HirDebugDatabase,
+ expr::{Body, BodySourceMap},
generics::{GenericDef, GenericParams},
ids,
impl_block::{ImplBlock, ImplSourceMap, ModuleImplBlocks},
@@ -112,14 +113,11 @@ pub trait HirDatabase: DefDatabase + AstDatabase {
#[salsa::invoke(crate::ty::generic_defaults_query)]
fn generic_defaults(&self, def: GenericDef) -> Substs;
- #[salsa::invoke(crate::expr::body_with_source_map_query)]
- fn body_with_source_map(
- &self,
- def: DefWithBody,
- ) -> (Arc, Arc);
+ #[salsa::invoke(Body::body_with_source_map_query)]
+ fn body_with_source_map(&self, def: DefWithBody) -> (Arc, Arc);
- #[salsa::invoke(crate::expr::body_hir_query)]
- fn body_hir(&self, def: DefWithBody) -> Arc;
+ #[salsa::invoke(Body::body_query)]
+ fn body(&self, def: DefWithBody) -> Arc;
#[salsa::invoke(crate::ty::method_resolution::CrateImplBlocks::impls_in_crate_query)]
fn impls_in_crate(&self, krate: Crate) -> Arc;
diff --git a/crates/ra_hir/src/expr.rs b/crates/ra_hir/src/expr.rs
index 6e23197a4d..53da7f0bf0 100644
--- a/crates/ra_hir/src/expr.rs
+++ b/crates/ra_hir/src/expr.rs
@@ -75,6 +75,36 @@ pub struct BodySourceMap {
}
impl Body {
+ pub(crate) fn body_with_source_map_query(
+ db: &impl HirDatabase,
+ def: DefWithBody,
+ ) -> (Arc, Arc) {
+ let mut params = None;
+
+ let (file_id, body) = match def {
+ DefWithBody::Function(f) => {
+ let src = f.source(db);
+ params = src.ast.param_list();
+ (src.file_id, src.ast.body().map(ast::Expr::from))
+ }
+ DefWithBody::Const(c) => {
+ let src = c.source(db);
+ (src.file_id, src.ast.body())
+ }
+ DefWithBody::Static(s) => {
+ let src = s.source(db);
+ (src.file_id, src.ast.body())
+ }
+ };
+
+ let (body, source_map) = lower::lower(db, def.resolver(db), file_id, def, params, body);
+ (Arc::new(body), Arc::new(source_map))
+ }
+
+ pub(crate) fn body_query(db: &impl HirDatabase, def: DefWithBody) -> Arc {
+ db.body_with_source_map(def).0
+ }
+
pub fn params(&self) -> &[PatId] {
&self.params
}
@@ -542,34 +572,3 @@ impl Pat {
}
}
}
-
-// Queries
-pub(crate) fn body_with_source_map_query(
- db: &impl HirDatabase,
- def: DefWithBody,
-) -> (Arc, Arc) {
- let mut params = None;
-
- let (file_id, body) = match def {
- DefWithBody::Function(f) => {
- let src = f.source(db);
- params = src.ast.param_list();
- (src.file_id, src.ast.body().map(ast::Expr::from))
- }
- DefWithBody::Const(c) => {
- let src = c.source(db);
- (src.file_id, src.ast.body())
- }
- DefWithBody::Static(s) => {
- let src = s.source(db);
- (src.file_id, src.ast.body())
- }
- };
-
- let (body, source_map) = lower::lower(db, def.resolver(db), file_id, def, params, body);
- (Arc::new(body), Arc::new(source_map))
-}
-
-pub(crate) fn body_hir_query(db: &impl HirDatabase, def: DefWithBody) -> Arc {
- db.body_with_source_map(def).0
-}
diff --git a/crates/ra_hir/src/expr/scope.rs b/crates/ra_hir/src/expr/scope.rs
index daf8d8d079..0e49a28d6c 100644
--- a/crates/ra_hir/src/expr/scope.rs
+++ b/crates/ra_hir/src/expr/scope.rs
@@ -46,7 +46,7 @@ pub(crate) struct ScopeData {
impl ExprScopes {
pub(crate) fn expr_scopes_query(db: &impl HirDatabase, def: DefWithBody) -> Arc {
- let body = db.body_hir(def);
+ let body = db.body(def);
let res = ExprScopes::new(body);
Arc::new(res)
}
diff --git a/crates/ra_hir/src/ty/traits/chalk.rs b/crates/ra_hir/src/ty/traits/chalk.rs
index 14c54b9fb4..de322dd523 100644
--- a/crates/ra_hir/src/ty/traits/chalk.rs
+++ b/crates/ra_hir/src/ty/traits/chalk.rs
@@ -714,7 +714,7 @@ fn closure_fn_trait_impl_datum(
let fn_once_trait = get_fn_trait(db, krate, super::FnTrait::FnOnce)?;
let trait_ = get_fn_trait(db, krate, data.fn_trait)?; // get corresponding fn trait
- let num_args: u16 = match &db.body_hir(data.def)[data.expr] {
+ let num_args: u16 = match &db.body(data.def)[data.expr] {
crate::expr::Expr::Lambda { args, .. } => args.len() as u16,
_ => {
log::warn!("closure for closure type {:?} not found", data);
diff --git a/crates/ra_ide_api/src/change.rs b/crates/ra_ide_api/src/change.rs
index 4416421ae0..010b45141f 100644
--- a/crates/ra_ide_api/src/change.rs
+++ b/crates/ra_ide_api/src/change.rs
@@ -276,7 +276,7 @@ impl RootDatabase {
self.query(hir::db::ExprScopesQuery).sweep(sweep);
self.query(hir::db::InferQuery).sweep(sweep);
- self.query(hir::db::BodyHirQuery).sweep(sweep);
+ self.query(hir::db::BodyQuery).sweep(sweep);
}
pub(crate) fn per_query_memory_usage(&mut self) -> Vec<(String, Bytes)> {
@@ -333,7 +333,7 @@ impl RootDatabase {
hir::db::GenericPredicatesQuery
hir::db::GenericDefaultsQuery
hir::db::BodyWithSourceMapQuery
- hir::db::BodyHirQuery
+ hir::db::BodyQuery
hir::db::ImplsInCrateQuery
hir::db::ImplsForTraitQuery
hir::db::AssociatedTyDataQuery