]> git.lizzy.rs Git - rust.git/commitdiff
remove Cancelable from source binders
authorAleksey Kladov <aleksey.kladov@gmail.com>
Tue, 15 Jan 2019 15:13:11 +0000 (18:13 +0300)
committerAleksey Kladov <aleksey.kladov@gmail.com>
Tue, 15 Jan 2019 15:13:49 +0000 (18:13 +0300)
16 files changed:
crates/ra_hir/src/code_model_api.rs
crates/ra_hir/src/code_model_impl/module.rs
crates/ra_hir/src/db.rs
crates/ra_hir/src/ids.rs
crates/ra_hir/src/impl_block.rs
crates/ra_hir/src/nameres/tests.rs
crates/ra_hir/src/query_definitions.rs
crates/ra_hir/src/source_binder.rs
crates/ra_hir/src/ty/tests.rs
crates/ra_ide_api/src/completion/completion_context.rs
crates/ra_ide_api/src/goto_definition.rs
crates/ra_ide_api/src/hover.rs
crates/ra_ide_api/src/imp.rs
crates/ra_ide_api/src/parent_module.rs
crates/ra_ide_api/src/runnables.rs
crates/ra_ide_api/src/symbol_index.rs

index 91b23559475b26e14106099a936c7d517ce6e4bf..5db53a34fca3fac3b3e55c717b2049e81205d737 100644 (file)
@@ -109,7 +109,7 @@ pub fn crate_root(&self, db: &impl HirDatabase) -> Cancelable<Module> {
     }
 
     /// Finds a child module with the specified name.
-    pub fn child(&self, db: &impl HirDatabase, name: &Name) -> Cancelable<Option<Module>> {
+    pub fn child(&self, db: &impl HirDatabase, name: &Name) -> Option<Module> {
         self.child_impl(db, name)
     }
 
index 2ec3ab469618801b842dc508429eeb2d56f9847b..67808d2827b2bcd918d84b811201545652c8df1d 100644 (file)
@@ -18,7 +18,7 @@ pub(crate) fn from_module_id(
         db: &impl HirDatabase,
         source_root_id: SourceRootId,
         module_id: ModuleId,
-    ) -> Cancelable<Self> {
+    ) -> Self {
         let module_tree = db.module_tree(source_root_id);
         let def_loc = DefLoc {
             kind: DefKind::Module,
@@ -27,8 +27,7 @@ pub(crate) fn from_module_id(
             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<Option<Name>> {
@@ -84,15 +83,15 @@ pub(crate) fn crate_root_impl(&self, db: &impl HirDatabase) -> Cancelable<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<Option<Module>> {
+    pub fn child_impl(&self, db: &impl HirDatabase, name: &Name) -> Option<Module> {
         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 @@ pub fn children_impl(&self, db: &impl HirDatabase) -> Cancelable<impl Iterator<I
             .module_id
             .children(&module_tree)
             .map(|(_, module_id)| Module::from_module_id(db, loc.source_root_id, module_id))
-            .collect::<Cancelable<Vec<_>>>()?;
+            .collect::<Vec<_>>();
         Ok(children.into_iter())
     }
 
@@ -114,7 +113,11 @@ pub fn parent_impl(&self, db: &impl HirDatabase) -> Cancelable<Option<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.
index 68c3eb4e4d73384830016ae885d6d3f966edca6f..3b2498d5a5e793a06ad4dad792f27a169eca6cbf 100644 (file)
@@ -82,7 +82,7 @@ fn submodules(source: SourceItemId) -> Arc<Vec<crate::module_tree::Submodule>> {
         use fn crate::module_tree::Submodule::submodules_query;
     }
 
-    fn input_module_items(source_root_id: SourceRootId, module_id: ModuleId) -> Cancelable<Arc<InputModuleItems>> {
+    fn input_module_items(source_root_id: SourceRootId, module_id: ModuleId) -> Arc<InputModuleItems> {
         type InputModuleItemsQuery;
         use fn query_definitions::input_module_items;
     }
index 316896dce21131b7bdb3698f7d18e10e14d78722..d7cc9b4ca30693c46179d9aceb71a096332ce02d 100644 (file)
@@ -163,7 +163,7 @@ pub fn resolve(self, db: &impl HirDatabase) -> Cancelable<Def> {
         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 @@ pub(crate) fn source(self, db: &impl HirDatabase) -> (HirFileId, TreeArc<SyntaxN
     /// For a module, returns that module; for any other def, returns the containing module.
     pub fn module(self, db: &impl HirDatabase) -> Cancelable<Module> {
         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.
index d0b08630810eaa9b7591e3b9abf1505279bdda7e..c9a9fb99ffbfa335abe3bc97ea2b2fd25c96cd56 100644 (file)
@@ -196,7 +196,7 @@ pub(crate) fn impls_in_module(
     module_id: ModuleId,
 ) -> Cancelable<Arc<ModuleImplBlocks>> {
     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))
 }
index 647fd92aad01e430f88d961e25f6c10d575111d2..ea8ab4c832e6c715b474011d7fa8f154333f9d3f 100644 (file)
@@ -15,9 +15,7 @@
 fn item_map(fixture: &str) -> (Arc<ItemMap>, 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 @@ pub mod b {
 
     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();
 
index d84efbf957ac3e33aa3066a17237faf3834508bf..7ff942f6a657bd098f83c7cc16818a49ff9c33df 100644 (file)
@@ -47,7 +47,7 @@ pub(super) fn input_module_items(
     db: &impl HirDatabase,
     source_root_id: SourceRootId,
     module_id: ModuleId,
-) -> Cancelable<Arc<InputModuleItems>> {
+) -> Arc<InputModuleItems> {
     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::<Cancelable<FxHashMap<_, _>>>()?;
+        .map(|id| (id, db.input_module_items(source_root, id)))
+        .collect::<FxHashMap<_, _>>();
 
     let resolver = Resolver::new(db, &input, source_root, module_tree);
     let res = resolver.resolve()?;
index 70dd850d7c31053f57e8211ca69385f004084afb..7ab8eeae209bfc8cccb56d6f7ea4c9a097cc2b25 100644 (file)
@@ -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 @@
 };
 
 /// Locates the module by `FileId`. Picks topmost module in the file.
-pub fn module_from_file_id(db: &impl HirDatabase, file_id: FileId) -> Cancelable<Option<Module>> {
+pub fn module_from_file_id(db: &impl HirDatabase, file_id: FileId) -> Option<Module> {
     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<Option<Module>> {
-    let parent_module = module_from_file_id(db, file_id)?;
+) -> Option<Module> {
+    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<Option<Module>> {
+pub fn module_from_position(db: &impl HirDatabase, position: FilePosition) -> Option<Module> {
     let file = db.source_file(position.file_id);
     match find_node_at_offset::<ast::Module>(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<Module>> {
+) -> Option<Module> {
     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<Module>> {
+) -> Option<Module> {
     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<Option<Module>> {
+fn module_from_source(db: &impl HirDatabase, source: SourceItemId) -> Option<Module> {
     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<Option<Function>> {
+pub fn function_from_position(db: &impl HirDatabase, position: FilePosition) -> Option<Function> {
     let file = db.source_file(position.file_id);
-    let fn_def = ctry!(find_node_at_offset::<ast::FnDef>(
-        file.syntax(),
-        position.offset
-    ));
+    let fn_def = find_node_at_offset::<ast::FnDef>(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<Option<Function>> {
-    let module = ctry!(module_from_child_node(db, file_id, fn_def.syntax())?);
+) -> Option<Function> {
+    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<Option<Function>> {
-    let fn_def = ctry!(node.ancestors().find_map(ast::FnDef::cast));
+) -> Option<Function> {
+    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<Vec<(SmolStr, TextRange)>> {
-    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
 }
index 8aacb1a7fde5939b65cbe82943f2bd78c5f09f2a..b81d91e80e7b746f1dba594dfc037a865176f150 100644 (file)
@@ -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 foo() -> i32 {
         }
     ",
     );
-    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();
index 113f6c070b6847f8354dc57efdc8d723b18a6d3e..f5b5ed689685a9da82e8f905893d6de56fa9d425 100644 (file)
@@ -42,7 +42,7 @@ pub(super) fn new(
         original_file: &'a SourceFile,
         position: FilePosition,
     ) -> Cancelable<Option<CompletionContext<'a>>> {
-        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 {
index 332a2fb8d3ed2710556c4bea12895e8110741224..f759f73390a96e24667122a22df091266ae5de25 100644 (file)
@@ -48,7 +48,7 @@ pub(crate) fn reference_definition(
 ) -> Cancelable<ReferenceResult> {
     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]));
index 107b2383385390ecaedd6d3274b92edba63a7a25..26f3ced7005cf7459432f2d051a9ec9c24bad342 100644 (file)
@@ -72,7 +72,7 @@ pub(crate) fn type_of(db: &RootDatabase, frange: FileRange) -> Cancelable<Option
         db,
         frange.file_id,
         parent_fn
-    )?);
+    ));
     let infer = function.infer(db)?;
     let syntax_mapping = function.body_syntax_mapping(db)?;
     if let Some(expr) = ast::Expr::cast(node).and_then(|e| syntax_mapping.node_expr(e)) {
index ba4aa0fd5790731a69e87b5c1bea234e125cdbed..98b507ab385e00d1166477354082ff1866a59664 100644 (file)
@@ -100,7 +100,7 @@ fn gc_syntax_trees(&mut self) {
 impl db::RootDatabase {
     /// Returns `Vec` for the same reason as `parent_module`
     pub(crate) fn crate_for(&self, file_id: FileId) -> Cancelable<Vec<CrateId>> {
-        let module = match source_binder::module_from_file_id(self, file_id)? {
+        let module = match source_binder::module_from_file_id(self, file_id) {
             Some(it) => it,
             None => return Ok(Vec::new()),
         };
@@ -147,7 +147,7 @@ fn find_binding<'a>(
                     db,
                     position.file_id,
                     binding.syntax(),
-                )?);
+                ));
                 return Ok(Some((binding, descr)));
             };
             let name_ref = ctry!(find_node_at_offset::<ast::NameRef>(syntax, position.offset));
@@ -155,7 +155,7 @@ fn find_binding<'a>(
                 db,
                 position.file_id,
                 name_ref.syntax(),
-            )?);
+            ));
             let scope = descr.scopes(db)?;
             let resolved = ctry!(scope.resolve_local_name(name_ref));
             let resolved = resolved.ptr().resolve(source_file);
@@ -179,7 +179,7 @@ pub(crate) fn diagnostics(&self, file_id: FileId) -> Cancelable<Vec<Diagnostic>>
                 fix: d.fix.map(|fix| SourceChange::from_local_edit(file_id, fix)),
             })
             .collect::<Vec<_>>();
-        if let Some(m) = source_binder::module_from_file_id(self, file_id)? {
+        if let Some(m) = source_binder::module_from_file_id(self, file_id) {
             for (name_node, problem) in m.problems(self)? {
                 let source_root = self.file_source_root(file_id);
                 let diag = match problem {
index 675042a6c0ff7f4b84eda6d66327628e61275d58..451304739562725f6e22e7f7346d351a7017b05c 100644 (file)
@@ -8,7 +8,7 @@ pub(crate) fn parent_module(
     db: &RootDatabase,
     position: FilePosition,
 ) -> Cancelable<Vec<NavigationTarget>> {
-    let module = match hir::source_binder::module_from_position(db, position)? {
+    let module = match hir::source_binder::module_from_position(db, position) {
         None => return Ok(Vec::new()),
         Some(it) => it,
     };
index f1de28094f0c3b4883b531c980a98abb545463c0..9fa0f79a60ac3ae871b2697e5632a30d07d5df67 100644 (file)
@@ -75,8 +75,7 @@ fn runnable_mod(db: &RootDatabase, file_id: FileId, module: &ast::Module) -> Opt
         return None;
     }
     let range = module.syntax().range();
-    let module =
-        hir::source_binder::module_from_child_node(db, file_id, module.syntax()).ok()??;
+    let module = hir::source_binder::module_from_child_node(db, file_id, module.syntax())?;
 
     // FIXME: thread cancellation instead of `.ok`ing
     let path = module
index b7a3a35503ba425cd042a3b103aa2aed55f24c8a..e7827fdc9bdccad0ced214a50f213668be66be0d 100644 (file)
@@ -63,7 +63,7 @@ fn file_symbols(db: &impl SymbolsDatabase, file_id: FileId) -> Cancelable<Arc<Sy
         .map(move |(name, ptr)| FileSymbol { name, ptr, file_id })
         .collect::<Vec<_>>();
 
-    for (name, text_range) in hir::source_binder::macro_symbols(db, file_id)? {
+    for (name, text_range) in hir::source_binder::macro_symbols(db, file_id) {
         let node = find_covering_node(source_file.syntax(), text_range);
         let ptr = LocalSyntaxPtr::new(node);
         symbols.push(FileSymbol { file_id, name, ptr })