]> git.lizzy.rs Git - rust.git/commitdiff
update ide_api to new hir
authorAleksey Kladov <aleksey.kladov@gmail.com>
Thu, 24 Jan 2019 12:40:52 +0000 (15:40 +0300)
committerAleksey Kladov <aleksey.kladov@gmail.com>
Thu, 24 Jan 2019 12:40:52 +0000 (15:40 +0300)
crates/ra_ide_api/src/completion/complete_path.rs
crates/ra_ide_api/src/completion/completion_context.rs
crates/ra_ide_api/src/completion/completion_item.rs
crates/ra_ide_api/src/goto_definition.rs
crates/ra_ide_api/src/navigation_target.rs

index 0d794249682bc28613d36dafefbc8fee89f53a50..3aef479d97a6ecf64a8e21f16fc1304a1e86c932 100644 (file)
@@ -44,6 +44,8 @@ pub(super) fn complete_path(acc: &mut Completions, ctx: &CompletionContext) {
             }
             _ => return,
         },
+
+        hir::ModuleDef::Function(_) => return,
     };
 }
 
index ca2069e2a74dfe4224d4838fc708fb6b77a0c6cf..578af6e5b3b839043f19dbda25b59e8053ecb54a 100644 (file)
@@ -127,7 +127,7 @@ fn classify_name_ref(&mut self, original_file: &'a SourceFile, name_ref: &ast::N
             .ancestors()
             .take_while(|it| it.kind() != SOURCE_FILE && it.kind() != MODULE)
             .find_map(ast::FnDef::cast);
-        match (&self.module, self.function_syntax) {
+        match (self.module, self.function_syntax) {
             (Some(module), Some(fn_def)) => {
                 let function = source_binder::function_from_module(self.db, module, fn_def);
                 self.function = Some(function);
index 5d6718a8d0d93e58598d147fafddca7c5a3a44f7..5b2ba7e4a472a0b5cfa892f610cb5b83d69dedfa 100644 (file)
@@ -219,6 +219,7 @@ pub(super) fn from_resolution(
         };
         let (kind, docs) = match def {
             hir::ModuleDef::Module(_) => (CompletionItemKind::Module, None),
+            hir::ModuleDef::Function(func) => return self.from_function(ctx, func),
             hir::ModuleDef::Def(def_id) => match def_id.resolve(ctx.db) {
                 hir::Def::Struct(it) => (CompletionItemKind::Struct, it.docs(ctx.db)),
                 hir::Def::Enum(it) => (CompletionItemKind::Enum, it.docs(ctx.db)),
@@ -226,7 +227,6 @@ pub(super) fn from_resolution(
                 hir::Def::Type(it) => (CompletionItemKind::TypeAlias, it.docs(ctx.db)),
                 hir::Def::Const(it) => (CompletionItemKind::Const, it.docs(ctx.db)),
                 hir::Def::Static(it) => (CompletionItemKind::Static, it.docs(ctx.db)),
-                hir::Def::Function(function) => return self.from_function(ctx, function),
                 _ => return self,
             },
         };
index 323bb1cc111841a33488907435b754eadc068668..46bdde00d73339cd98388bd70d1da4539c9f5578 100644 (file)
@@ -63,13 +63,11 @@ pub(crate) fn reference_definition(
             let infer_result = function.infer(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
+            if let Some(func) = syntax_mapping
                 .node_expr(expr)
                 .and_then(|it| infer_result.method_resolution(it))
             {
-                if let Some(target) = NavigationTarget::from_def(db, hir::ModuleDef::Def(def_id)) {
-                    return Exact(target);
-                }
+                return Exact(NavigationTarget::from_function(db, func));
             };
         }
     }
index 1eb1776653c21ea69e26579391e9d493325afeda..19cea2fd6756cf309bdea2153ae693c53d76c316 100644 (file)
@@ -96,6 +96,11 @@ pub(crate) fn from_module_to_decl(db: &RootDatabase, module: hir::Module) -> Nav
         NavigationTarget::from_module(db, module)
     }
 
+    pub(crate) fn from_function(db: &RootDatabase, func: hir::Function) -> NavigationTarget {
+        let (file_id, fn_def) = func.source(db);
+        NavigationTarget::from_named(file_id.original_file(db), &*fn_def)
+    }
+
     // TODO once Def::Item is gone, this should be able to always return a NavigationTarget
     pub(crate) fn from_def(
         db: &RootDatabase,
@@ -106,6 +111,9 @@ pub(crate) fn from_def(
             hir::ModuleDef::Module(module) => {
                 return Some(NavigationTarget::from_module(db, module));
             }
+            hir::ModuleDef::Function(func) => {
+                return Some(NavigationTarget::from_function(db, func));
+            }
         };
 
         let res = match def {
@@ -121,10 +129,6 @@ pub(crate) fn from_def(
                 let (file_id, node) = ev.source(db);
                 NavigationTarget::from_named(file_id.original_file(db), &*node)
             }
-            Def::Function(f) => {
-                let (file_id, node) = f.source(db);
-                NavigationTarget::from_named(file_id.original_file(db), &*node)
-            }
             Def::Trait(f) => {
                 let (file_id, node) = f.source(db);
                 NavigationTarget::from_named(file_id.original_file(db), &*node)