diff --git a/crates/ra_hir/src/code_model_api.rs b/crates/ra_hir/src/code_model_api.rs index f28e077c66..4d7925ac47 100644 --- a/crates/ra_hir/src/code_model_api.rs +++ b/crates/ra_hir/src/code_model_api.rs @@ -301,17 +301,17 @@ impl Function { def_id_to_ast(db, self.def_id) } - pub fn body_syntax_mapping(&self, db: &impl HirDatabase) -> Cancelable> { + pub fn body_syntax_mapping(&self, db: &impl HirDatabase) -> Arc { db.body_syntax_mapping(self.def_id) } - pub fn scopes(&self, db: &impl HirDatabase) -> Cancelable { - let scopes = db.fn_scopes(self.def_id)?; - let syntax_mapping = db.body_syntax_mapping(self.def_id)?; - Ok(ScopesWithSyntaxMapping { + pub fn scopes(&self, db: &impl HirDatabase) -> ScopesWithSyntaxMapping { + let scopes = db.fn_scopes(self.def_id); + let syntax_mapping = db.body_syntax_mapping(self.def_id); + ScopesWithSyntaxMapping { scopes, syntax_mapping, - }) + } } pub fn signature(&self, db: &impl HirDatabase) -> Arc { diff --git a/crates/ra_hir/src/code_model_impl/function.rs b/crates/ra_hir/src/code_model_impl/function.rs index 8d6b7fc19f..d34803e325 100644 --- a/crates/ra_hir/src/code_model_impl/function.rs +++ b/crates/ra_hir/src/code_model_impl/function.rs @@ -20,7 +20,7 @@ impl Function { Function { def_id } } - pub(crate) fn body(&self, db: &impl HirDatabase) -> Cancelable> { + pub(crate) fn body(&self, db: &impl HirDatabase) -> Arc { db.body_hir(self.def_id) } diff --git a/crates/ra_hir/src/db.rs b/crates/ra_hir/src/db.rs index 6229f97788..d20c03f434 100644 --- a/crates/ra_hir/src/db.rs +++ b/crates/ra_hir/src/db.rs @@ -32,7 +32,7 @@ pub trait HirDatabase: SyntaxDatabase use fn crate::macros::expand_macro_invocation; } - fn fn_scopes(def_id: DefId) -> Cancelable> { + fn fn_scopes(def_id: DefId) -> Arc { type FnScopesQuery; use fn query_definitions::fn_scopes; } @@ -107,12 +107,12 @@ pub trait HirDatabase: SyntaxDatabase use fn crate::ty::method_resolution::CrateImplBlocks::impls_in_crate_query; } - fn body_hir(def_id: DefId) -> Cancelable> { + fn body_hir(def_id: DefId) -> Arc { type BodyHirQuery; use fn crate::expr::body_hir; } - fn body_syntax_mapping(def_id: DefId) -> Cancelable> { + fn body_syntax_mapping(def_id: DefId) -> Arc { type BodySyntaxMappingQuery; use fn crate::expr::body_syntax_mapping; } diff --git a/crates/ra_hir/src/expr.rs b/crates/ra_hir/src/expr.rs index a1e8da3480..4e8dc0c546 100644 --- a/crates/ra_hir/src/expr.rs +++ b/crates/ra_hir/src/expr.rs @@ -4,10 +4,8 @@ use std::sync::Arc; use rustc_hash::FxHashMap; use ra_arena::{Arena, RawId, impl_arena_id, map::ArenaMap}; -use ra_db::{LocalSyntaxPtr, Cancelable}; -use ra_syntax::{ - ast::{self, AstNode, LoopBodyOwner, ArgListOwner, NameOwner, LiteralFlavor} -}; +use ra_db::LocalSyntaxPtr; +use ra_syntax::ast::{self, AstNode, LoopBodyOwner, ArgListOwner, NameOwner, LiteralFlavor}; use crate::{Path, type_ref::{Mutability, TypeRef}, Name, HirDatabase, DefId, Def, name::AsName}; use crate::ty::primitive::{UintTy, UncertainIntTy, UncertainFloatTy}; @@ -358,8 +356,8 @@ impl Pat { // Queries -pub(crate) fn body_hir(db: &impl HirDatabase, def_id: DefId) -> Cancelable> { - Ok(Arc::clone(&body_syntax_mapping(db, def_id)?.body)) +pub(crate) fn body_hir(db: &impl HirDatabase, def_id: DefId) -> Arc { + Arc::clone(&body_syntax_mapping(db, def_id).body) } struct ExprCollector { @@ -828,10 +826,7 @@ pub(crate) fn collect_fn_body_syntax(node: &ast::FnDef) -> BodySyntaxMapping { collector.into_body_syntax_mapping(params, body) } -pub(crate) fn body_syntax_mapping( - db: &impl HirDatabase, - def_id: DefId, -) -> Cancelable> { +pub(crate) fn body_syntax_mapping(db: &impl HirDatabase, def_id: DefId) -> Arc { let def = def_id.resolve(db); let body_syntax_mapping = match def { @@ -840,5 +835,5 @@ pub(crate) fn body_syntax_mapping( _ => panic!("Trying to get body for item type without body"), }; - Ok(Arc::new(body_syntax_mapping)) + Arc::new(body_syntax_mapping) } diff --git a/crates/ra_hir/src/query_definitions.rs b/crates/ra_hir/src/query_definitions.rs index 7ff942f6a6..8f33ec7073 100644 --- a/crates/ra_hir/src/query_definitions.rs +++ b/crates/ra_hir/src/query_definitions.rs @@ -18,10 +18,10 @@ use crate::{ nameres::{InputModuleItems, ItemMap, Resolver}, }; -pub(super) fn fn_scopes(db: &impl HirDatabase, def_id: DefId) -> Cancelable> { - let body = db.body_hir(def_id)?; +pub(super) fn fn_scopes(db: &impl HirDatabase, def_id: DefId) -> Arc { + let body = db.body_hir(def_id); let res = FnScopes::new(body); - Ok(Arc::new(res)) + Arc::new(res) } pub(super) fn file_items(db: &impl HirDatabase, file_id: HirFileId) -> Arc { diff --git a/crates/ra_hir/src/ty.rs b/crates/ra_hir/src/ty.rs index 3607969ed7..54eece1651 100644 --- a/crates/ra_hir/src/ty.rs +++ b/crates/ra_hir/src/ty.rs @@ -1205,8 +1205,8 @@ impl<'a, D: HirDatabase> InferenceContext<'a, D> { pub fn infer(db: &impl HirDatabase, def_id: DefId) -> Cancelable> { db.check_canceled(); let function = Function::new(def_id); // TODO: consts also need inference - let body = function.body(db)?; - let scopes = db.fn_scopes(def_id)?; + let body = function.body(db); + let scopes = db.fn_scopes(def_id); let module = function.module(db)?; let impl_block = function.impl_block(db)?; let mut ctx = InferenceContext::new(db, body, scopes, module, impl_block); diff --git a/crates/ra_hir/src/ty/tests.rs b/crates/ra_hir/src/ty/tests.rs index b81d91e80e..b44ac99876 100644 --- a/crates/ra_hir/src/ty/tests.rs +++ b/crates/ra_hir/src/ty/tests.rs @@ -322,7 +322,7 @@ fn infer(content: &str) -> String { { let func = source_binder::function_from_source(&db, file_id, fn_def).unwrap(); let inference_result = func.infer(&db).unwrap(); - let body_syntax_mapping = func.body_syntax_mapping(&db).unwrap(); + let body_syntax_mapping = func.body_syntax_mapping(&db); let mut types = Vec::new(); for (pat, ty) in inference_result.type_of_pat.iter() { let syntax_ptr = match body_syntax_mapping.pat_syntax(pat) { diff --git a/crates/ra_ide_api/src/completion/complete_dot.rs b/crates/ra_ide_api/src/completion/complete_dot.rs index 886dc54d45..cb86ba9a34 100644 --- a/crates/ra_ide_api/src/completion/complete_dot.rs +++ b/crates/ra_ide_api/src/completion/complete_dot.rs @@ -10,7 +10,7 @@ pub(super) fn complete_dot(acc: &mut Completions, ctx: &CompletionContext) -> Ca _ => return Ok(()), }; let infer_result = function.infer(ctx.db)?; - let syntax_mapping = function.body_syntax_mapping(ctx.db)?; + let syntax_mapping = function.body_syntax_mapping(ctx.db); let expr = match syntax_mapping.node_expr(receiver) { Some(expr) => expr, None => return Ok(()), diff --git a/crates/ra_ide_api/src/completion/complete_scope.rs b/crates/ra_ide_api/src/completion/complete_scope.rs index f422bb9a70..fdb64895e6 100644 --- a/crates/ra_ide_api/src/completion/complete_scope.rs +++ b/crates/ra_ide_api/src/completion/complete_scope.rs @@ -15,7 +15,7 @@ pub(super) fn complete_scope(acc: &mut Completions, ctx: &CompletionContext) -> None => return Ok(()), }; if let Some(function) = &ctx.function { - let scopes = function.scopes(ctx.db)?; + let scopes = function.scopes(ctx.db); complete_fn(acc, &scopes, ctx.offset); } diff --git a/crates/ra_ide_api/src/goto_definition.rs b/crates/ra_ide_api/src/goto_definition.rs index 7229293a47..5d522181b3 100644 --- a/crates/ra_ide_api/src/goto_definition.rs +++ b/crates/ra_ide_api/src/goto_definition.rs @@ -50,7 +50,7 @@ pub(crate) fn reference_definition( if let Some(function) = hir::source_binder::function_from_child_node(db, file_id, name_ref.syntax()) { - let scope = function.scopes(db)?; + let scope = function.scopes(db); // First try to resolve the symbol locally if let Some(entry) = scope.resolve_local_name(name_ref) { let nav = NavigationTarget::from_scope_entry(file_id, &entry); @@ -64,7 +64,7 @@ pub(crate) fn reference_definition( .and_then(ast::MethodCallExpr::cast) { let infer_result = function.infer(db)?; - let syntax_mapping = function.body_syntax_mapping(db)?; + let syntax_mapping = function.body_syntax_mapping(db); let expr = ast::Expr::cast(method_call.syntax()).unwrap(); if let Some(def_id) = syntax_mapping .node_expr(expr) diff --git a/crates/ra_ide_api/src/hover.rs b/crates/ra_ide_api/src/hover.rs index 26f3ced700..0e9c484217 100644 --- a/crates/ra_ide_api/src/hover.rs +++ b/crates/ra_ide_api/src/hover.rs @@ -74,7 +74,7 @@ pub(crate) fn type_of(db: &RootDatabase, frange: FileRange) -> Cancelable