From 11f3c8afb23d67acde8cc7642aea3a2ca06a2361 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Tue, 15 Jan 2019 18:13:11 +0300 Subject: remove Cancelable from source binders --- crates/ra_hir/src/code_model_api.rs | 2 +- crates/ra_hir/src/code_model_impl/module.rs | 21 ++++---- crates/ra_hir/src/db.rs | 2 +- crates/ra_hir/src/ids.rs | 8 ++- crates/ra_hir/src/impl_block.rs | 2 +- crates/ra_hir/src/nameres/tests.rs | 16 ++---- crates/ra_hir/src/query_definitions.rs | 11 ++-- crates/ra_hir/src/source_binder.rs | 62 +++++++++------------- crates/ra_hir/src/ty/tests.rs | 8 +-- .../src/completion/completion_context.rs | 2 +- crates/ra_ide_api/src/goto_definition.rs | 7 ++- crates/ra_ide_api/src/hover.rs | 2 +- crates/ra_ide_api/src/imp.rs | 8 +-- crates/ra_ide_api/src/parent_module.rs | 2 +- crates/ra_ide_api/src/runnables.rs | 3 +- crates/ra_ide_api/src/symbol_index.rs | 2 +- 16 files changed, 68 insertions(+), 90 deletions(-) diff --git a/crates/ra_hir/src/code_model_api.rs b/crates/ra_hir/src/code_model_api.rs index 91b235594..5db53a34f 100644 --- a/crates/ra_hir/src/code_model_api.rs +++ b/crates/ra_hir/src/code_model_api.rs @@ -109,7 +109,7 @@ impl Module { } /// Finds a child module with the specified name. - pub fn child(&self, db: &impl HirDatabase, name: &Name) -> Cancelable> { + pub fn child(&self, db: &impl HirDatabase, name: &Name) -> Option { self.child_impl(db, name) } diff --git a/crates/ra_hir/src/code_model_impl/module.rs b/crates/ra_hir/src/code_model_impl/module.rs index 2ec3ab469..67808d282 100644 --- a/crates/ra_hir/src/code_model_impl/module.rs +++ b/crates/ra_hir/src/code_model_impl/module.rs @@ -18,7 +18,7 @@ impl Module { db: &impl HirDatabase, source_root_id: SourceRootId, module_id: ModuleId, - ) -> Cancelable { + ) -> Self { let module_tree = db.module_tree(source_root_id); let def_loc = DefLoc { kind: DefKind::Module, @@ -27,8 +27,7 @@ impl Module { source_item_id: module_id.source(&module_tree), }; let def_id = def_loc.id(db); - let module = Module::new(def_id); - Ok(module) + Module::new(def_id) } pub(crate) fn name_impl(&self, db: &impl HirDatabase) -> Cancelable> { @@ -84,15 +83,15 @@ impl Module { let loc = self.def_id.loc(db); let module_tree = db.module_tree(loc.source_root_id); let module_id = loc.module_id.crate_root(&module_tree); - Module::from_module_id(db, loc.source_root_id, module_id) + Ok(Module::from_module_id(db, loc.source_root_id, module_id)) } /// Finds a child module with the specified name. - pub fn child_impl(&self, db: &impl HirDatabase, name: &Name) -> Cancelable> { + pub fn child_impl(&self, db: &impl HirDatabase, name: &Name) -> Option { let loc = self.def_id.loc(db); let module_tree = db.module_tree(loc.source_root_id); - let child_id = ctry!(loc.module_id.child(&module_tree, name)); - Module::from_module_id(db, loc.source_root_id, child_id).map(Some) + let child_id = loc.module_id.child(&module_tree, name)?; + Some(Module::from_module_id(db, loc.source_root_id, child_id)) } /// Iterates over all child modules. @@ -106,7 +105,7 @@ impl Module { .module_id .children(&module_tree) .map(|(_, module_id)| Module::from_module_id(db, loc.source_root_id, module_id)) - .collect::>>()?; + .collect::>(); Ok(children.into_iter()) } @@ -114,7 +113,11 @@ impl Module { let loc = self.def_id.loc(db); let module_tree = db.module_tree(loc.source_root_id); let parent_id = ctry!(loc.module_id.parent(&module_tree)); - Module::from_module_id(db, loc.source_root_id, parent_id).map(Some) + Ok(Some(Module::from_module_id( + db, + loc.source_root_id, + parent_id, + ))) } /// Returns a `ModuleScope`: a set of items, visible in this module. diff --git a/crates/ra_hir/src/db.rs b/crates/ra_hir/src/db.rs index 68c3eb4e4..3b2498d5a 100644 --- a/crates/ra_hir/src/db.rs +++ b/crates/ra_hir/src/db.rs @@ -82,7 +82,7 @@ pub trait HirDatabase: SyntaxDatabase use fn crate::module_tree::Submodule::submodules_query; } - fn input_module_items(source_root_id: SourceRootId, module_id: ModuleId) -> Cancelable> { + fn input_module_items(source_root_id: SourceRootId, module_id: ModuleId) -> Arc { type InputModuleItemsQuery; use fn query_definitions::input_module_items; } diff --git a/crates/ra_hir/src/ids.rs b/crates/ra_hir/src/ids.rs index 316896dce..d7cc9b4ca 100644 --- a/crates/ra_hir/src/ids.rs +++ b/crates/ra_hir/src/ids.rs @@ -163,7 +163,7 @@ impl DefId { let loc = self.loc(db); let res = match loc.kind { DefKind::Module => { - let module = Module::from_module_id(db, loc.source_root_id, loc.module_id)?; + let module = Module::from_module_id(db, loc.source_root_id, loc.module_id); Def::Module(module) } DefKind::Function => { @@ -208,7 +208,11 @@ impl DefId { /// For a module, returns that module; for any other def, returns the containing module. pub fn module(self, db: &impl HirDatabase) -> Cancelable { let loc = self.loc(db); - Module::from_module_id(db, loc.source_root_id, loc.module_id) + Ok(Module::from_module_id( + db, + loc.source_root_id, + loc.module_id, + )) } /// Returns the containing crate. diff --git a/crates/ra_hir/src/impl_block.rs b/crates/ra_hir/src/impl_block.rs index d0b086308..c9a9fb99f 100644 --- a/crates/ra_hir/src/impl_block.rs +++ b/crates/ra_hir/src/impl_block.rs @@ -196,7 +196,7 @@ pub(crate) fn impls_in_module( module_id: ModuleId, ) -> Cancelable> { let mut result = ModuleImplBlocks::new(); - let module = Module::from_module_id(db, source_root_id, module_id)?; + let module = Module::from_module_id(db, source_root_id, module_id); result.collect(db, module)?; Ok(Arc::new(result)) } diff --git a/crates/ra_hir/src/nameres/tests.rs b/crates/ra_hir/src/nameres/tests.rs index 647fd92aa..ea8ab4c83 100644 --- a/crates/ra_hir/src/nameres/tests.rs +++ b/crates/ra_hir/src/nameres/tests.rs @@ -15,9 +15,7 @@ use crate::{ fn item_map(fixture: &str) -> (Arc, ModuleId) { let (db, pos) = MockDatabase::with_position(fixture); let source_root = db.file_source_root(pos.file_id); - let module = crate::source_binder::module_from_position(&db, pos) - .unwrap() - .unwrap(); + let module = crate::source_binder::module_from_position(&db, pos).unwrap(); let module_id = module.def_id.loc(&db).module_id; (db.item_map(source_root).unwrap(), module_id) } @@ -242,9 +240,7 @@ fn item_map_across_crates() { db.set_crate_graph(crate_graph); let source_root = db.file_source_root(main_id); - let module = crate::source_binder::module_from_file_id(&db, main_id) - .unwrap() - .unwrap(); + let module = crate::source_binder::module_from_file_id(&db, main_id).unwrap(); let module_id = module.def_id.loc(&db).module_id; let item_map = db.item_map(source_root).unwrap(); @@ -296,9 +292,7 @@ fn import_across_source_roots() { db.set_crate_graph(crate_graph); - let module = crate::source_binder::module_from_file_id(&db, main_id) - .unwrap() - .unwrap(); + let module = crate::source_binder::module_from_file_id(&db, main_id).unwrap(); let module_id = module.def_id.loc(&db).module_id; let item_map = db.item_map(source_root).unwrap(); @@ -341,9 +335,7 @@ fn reexport_across_crates() { db.set_crate_graph(crate_graph); let source_root = db.file_source_root(main_id); - let module = crate::source_binder::module_from_file_id(&db, main_id) - .unwrap() - .unwrap(); + let module = crate::source_binder::module_from_file_id(&db, main_id).unwrap(); let module_id = module.def_id.loc(&db).module_id; let item_map = db.item_map(source_root).unwrap(); diff --git a/crates/ra_hir/src/query_definitions.rs b/crates/ra_hir/src/query_definitions.rs index d84efbf95..7ff942f6a 100644 --- a/crates/ra_hir/src/query_definitions.rs +++ b/crates/ra_hir/src/query_definitions.rs @@ -47,7 +47,7 @@ pub(super) fn input_module_items( db: &impl HirDatabase, source_root_id: SourceRootId, module_id: ModuleId, -) -> Cancelable> { +) -> Arc { let module_tree = db.module_tree(source_root_id); let source = module_id.source(&module_tree); let file_id = source.file_id; @@ -90,7 +90,7 @@ pub(super) fn input_module_items( } } }; - Ok(Arc::new(res)) + Arc::new(res) } pub(super) fn item_map( @@ -101,11 +101,8 @@ pub(super) fn item_map( let module_tree = db.module_tree(source_root); let input = module_tree .modules() - .map(|id| { - let items = db.input_module_items(source_root, id)?; - Ok((id, items)) - }) - .collect::>>()?; + .map(|id| (id, db.input_module_items(source_root, id))) + .collect::>(); let resolver = Resolver::new(db, &input, source_root, module_tree); let res = resolver.resolve()?; diff --git a/crates/ra_hir/src/source_binder.rs b/crates/ra_hir/src/source_binder.rs index 70dd850d7..7ab8eeae2 100644 --- a/crates/ra_hir/src/source_binder.rs +++ b/crates/ra_hir/src/source_binder.rs @@ -5,7 +5,7 @@ /// /// So, this modules should not be used during hir construction, it exists /// purely for "IDE needs". -use ra_db::{FileId, FilePosition, Cancelable}; +use ra_db::{FileId, FilePosition}; use ra_syntax::{ SmolStr, TextRange, SyntaxNode, ast::{self, AstNode, NameOwner}, @@ -18,7 +18,7 @@ use crate::{ }; /// Locates the module by `FileId`. Picks topmost module in the file. -pub fn module_from_file_id(db: &impl HirDatabase, file_id: FileId) -> Cancelable> { +pub fn module_from_file_id(db: &impl HirDatabase, file_id: FileId) -> Option { let module_source = SourceItemId { file_id: file_id.into(), item_id: None, @@ -31,25 +31,22 @@ pub fn module_from_declaration( db: &impl HirDatabase, file_id: FileId, decl: &ast::Module, -) -> Cancelable> { - let parent_module = module_from_file_id(db, file_id)?; +) -> Option { + let parent_module = module_from_file_id(db, file_id); let child_name = decl.name(); match (parent_module, child_name) { (Some(parent_module), Some(child_name)) => { - if let Some(child) = parent_module.child(db, &child_name.as_name())? { - return Ok(Some(child)); + if let Some(child) = parent_module.child(db, &child_name.as_name()) { + return Some(child); } } _ => (), } - Ok(None) + None } /// Locates the module by position in the source code. -pub fn module_from_position( - db: &impl HirDatabase, - position: FilePosition, -) -> Cancelable> { +pub fn module_from_position(db: &impl HirDatabase, position: FilePosition) -> Option { let file = db.source_file(position.file_id); match find_node_at_offset::(file.syntax(), position.offset) { Some(m) if !m.has_semi() => module_from_inline(db, position.file_id.into(), m), @@ -61,7 +58,7 @@ fn module_from_inline( db: &impl HirDatabase, file_id: FileId, module: &ast::Module, -) -> Cancelable> { +) -> Option { assert!(!module.has_semi()); let file_id = file_id.into(); let file_items = db.file_items(file_id); @@ -78,7 +75,7 @@ pub fn module_from_child_node( db: &impl HirDatabase, file_id: FileId, child: &SyntaxNode, -) -> Cancelable> { +) -> Option { if let Some(m) = child .ancestors() .filter_map(ast::Module::cast) @@ -90,22 +87,16 @@ pub fn module_from_child_node( } } -fn module_from_source(db: &impl HirDatabase, source: SourceItemId) -> Cancelable> { +fn module_from_source(db: &impl HirDatabase, source: SourceItemId) -> Option { let source_root_id = db.file_source_root(source.file_id.as_original_file()); let module_tree = db.module_tree(source_root_id); - let module_id = ctry!(module_tree.find_module_by_source(source)); - Ok(Some(Module::from_module_id(db, source_root_id, module_id)?)) + let module_id = module_tree.find_module_by_source(source)?; + Some(Module::from_module_id(db, source_root_id, module_id)) } -pub fn function_from_position( - db: &impl HirDatabase, - position: FilePosition, -) -> Cancelable> { +pub fn function_from_position(db: &impl HirDatabase, position: FilePosition) -> Option { let file = db.source_file(position.file_id); - let fn_def = ctry!(find_node_at_offset::( - file.syntax(), - position.offset - )); + let fn_def = find_node_at_offset::(file.syntax(), position.offset)?; function_from_source(db, position.file_id, fn_def) } @@ -113,10 +104,10 @@ pub fn function_from_source( db: &impl HirDatabase, file_id: FileId, fn_def: &ast::FnDef, -) -> Cancelable> { - let module = ctry!(module_from_child_node(db, file_id, fn_def.syntax())?); +) -> Option { + let module = module_from_child_node(db, file_id, fn_def.syntax())?; let res = function_from_module(db, &module, fn_def); - Ok(Some(res)) + Some(res) } pub fn function_from_module( @@ -145,21 +136,18 @@ pub fn function_from_child_node( db: &impl HirDatabase, file_id: FileId, node: &SyntaxNode, -) -> Cancelable> { - let fn_def = ctry!(node.ancestors().find_map(ast::FnDef::cast)); +) -> Option { + let fn_def = node.ancestors().find_map(ast::FnDef::cast)?; function_from_source(db, file_id, fn_def) } -pub fn macro_symbols( - db: &impl HirDatabase, - file_id: FileId, -) -> Cancelable> { - let module = match module_from_file_id(db, file_id)? { +pub fn macro_symbols(db: &impl HirDatabase, file_id: FileId) -> Vec<(SmolStr, TextRange)> { + let module = match module_from_file_id(db, file_id) { Some(it) => it, - None => return Ok(Vec::new()), + None => return Vec::new(), }; let loc = module.def_id.loc(db); - let items = db.input_module_items(loc.source_root_id, loc.module_id)?; + let items = db.input_module_items(loc.source_root_id, loc.module_id); let mut res = Vec::new(); for macro_call_id in items @@ -184,5 +172,5 @@ pub fn macro_symbols( } } - Ok(res) + res } diff --git a/crates/ra_hir/src/ty/tests.rs b/crates/ra_hir/src/ty/tests.rs index 8aacb1a7f..b81d91e80 100644 --- a/crates/ra_hir/src/ty/tests.rs +++ b/crates/ra_hir/src/ty/tests.rs @@ -320,9 +320,7 @@ fn infer(content: &str) -> String { .descendants() .filter_map(ast::FnDef::cast) { - let func = source_binder::function_from_source(&db, file_id, fn_def) - .unwrap() - .unwrap(); + 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 mut types = Vec::new(); @@ -404,9 +402,7 @@ fn typing_whitespace_inside_a_function_should_not_invalidate_types() { } ", ); - let func = source_binder::function_from_position(&db, pos) - .unwrap() - .unwrap(); + let func = source_binder::function_from_position(&db, pos).unwrap(); { let events = db.log_executed(|| { func.infer(&db).unwrap(); diff --git a/crates/ra_ide_api/src/completion/completion_context.rs b/crates/ra_ide_api/src/completion/completion_context.rs index 113f6c070..f5b5ed689 100644 --- a/crates/ra_ide_api/src/completion/completion_context.rs +++ b/crates/ra_ide_api/src/completion/completion_context.rs @@ -42,7 +42,7 @@ impl<'a> CompletionContext<'a> { original_file: &'a SourceFile, position: FilePosition, ) -> Cancelable>> { - let module = source_binder::module_from_position(db, position)?; + let module = source_binder::module_from_position(db, position); let leaf = ctry!(find_leaf_at_offset(original_file.syntax(), position.offset).left_biased()); let mut ctx = CompletionContext { diff --git a/crates/ra_ide_api/src/goto_definition.rs b/crates/ra_ide_api/src/goto_definition.rs index 332a2fb8d..f759f7339 100644 --- a/crates/ra_ide_api/src/goto_definition.rs +++ b/crates/ra_ide_api/src/goto_definition.rs @@ -48,7 +48,7 @@ pub(crate) fn reference_definition( ) -> Cancelable { use self::ReferenceResult::*; if let Some(function) = - hir::source_binder::function_from_child_node(db, file_id, name_ref.syntax())? + hir::source_binder::function_from_child_node(db, file_id, name_ref.syntax()) { let scope = function.scopes(db)?; // First try to resolve the symbol locally @@ -77,8 +77,7 @@ pub(crate) fn reference_definition( } } // Then try module name resolution - if let Some(module) = - hir::source_binder::module_from_child_node(db, file_id, name_ref.syntax())? + if let Some(module) = hir::source_binder::module_from_child_node(db, file_id, name_ref.syntax()) { if let Some(path) = name_ref .syntax() @@ -111,7 +110,7 @@ fn name_definition( if let Some(module) = name.syntax().parent().and_then(ast::Module::cast) { if module.has_semi() { if let Some(child_module) = - hir::source_binder::module_from_declaration(db, file_id, module)? + hir::source_binder::module_from_declaration(db, file_id, module) { let nav = NavigationTarget::from_module(db, child_module)?; return Ok(Some(vec![nav])); diff --git a/crates/ra_ide_api/src/hover.rs b/crates/ra_ide_api/src/hover.rs index 107b23833..26f3ced70 100644 --- a/crates/ra_ide_api/src/hover.rs +++ b/crates/ra_ide_api/src/hover.rs @@ -72,7 +72,7 @@ pub(crate) fn type_of(db: &RootDatabase, frange: FileRange) -> Cancelable