diff options
Diffstat (limited to 'crates/ra_analysis/src')
-rw-r--r-- | crates/ra_analysis/src/hir/function/mod.rs | 17 | ||||
-rw-r--r-- | crates/ra_analysis/src/hir/mod.rs | 3 | ||||
-rw-r--r-- | crates/ra_analysis/src/imp.rs | 12 | ||||
-rw-r--r-- | crates/ra_analysis/src/lib.rs | 4 |
4 files changed, 21 insertions, 15 deletions
diff --git a/crates/ra_analysis/src/hir/function/mod.rs b/crates/ra_analysis/src/hir/function/mod.rs index 8161a604f..5e44a88a7 100644 --- a/crates/ra_analysis/src/hir/function/mod.rs +++ b/crates/ra_analysis/src/hir/function/mod.rs | |||
@@ -42,10 +42,15 @@ impl FunctionDescriptor { | |||
42 | pub(crate) fn scope(&self, db: &impl HirDatabase) -> Arc<FnScopes> { | 42 | pub(crate) fn scope(&self, db: &impl HirDatabase) -> Arc<FnScopes> { |
43 | db.fn_scopes(self.fn_id) | 43 | db.fn_scopes(self.fn_id) |
44 | } | 44 | } |
45 | |||
46 | pub(crate) fn signature_info(&self, db: &impl HirDatabase) -> Option<FnSignatureInfo> { | ||
47 | let syntax = db.fn_syntax(self.fn_id); | ||
48 | FnSignatureInfo::new(syntax.borrowed()) | ||
49 | } | ||
45 | } | 50 | } |
46 | 51 | ||
47 | #[derive(Debug, Clone)] | 52 | #[derive(Debug, Clone)] |
48 | pub struct FnDescriptor { | 53 | pub struct FnSignatureInfo { |
49 | pub name: String, | 54 | pub name: String, |
50 | pub label: String, | 55 | pub label: String, |
51 | pub ret_type: Option<String>, | 56 | pub ret_type: Option<String>, |
@@ -53,8 +58,8 @@ pub struct FnDescriptor { | |||
53 | pub doc: Option<String>, | 58 | pub doc: Option<String>, |
54 | } | 59 | } |
55 | 60 | ||
56 | impl FnDescriptor { | 61 | impl FnSignatureInfo { |
57 | pub fn new(node: ast::FnDef) -> Option<Self> { | 62 | fn new(node: ast::FnDef) -> Option<Self> { |
58 | let name = node.name()?.text().to_string(); | 63 | let name = node.name()?.text().to_string(); |
59 | 64 | ||
60 | let mut doc = None; | 65 | let mut doc = None; |
@@ -73,7 +78,7 @@ impl FnDescriptor { | |||
73 | node.syntax().text().to_string() | 78 | node.syntax().text().to_string() |
74 | }; | 79 | }; |
75 | 80 | ||
76 | if let Some((comment_range, docs)) = FnDescriptor::extract_doc_comments(node) { | 81 | if let Some((comment_range, docs)) = FnSignatureInfo::extract_doc_comments(node) { |
77 | let comment_range = comment_range | 82 | let comment_range = comment_range |
78 | .checked_sub(node.syntax().range().start()) | 83 | .checked_sub(node.syntax().range().start()) |
79 | .unwrap(); | 84 | .unwrap(); |
@@ -105,10 +110,10 @@ impl FnDescriptor { | |||
105 | } | 110 | } |
106 | } | 111 | } |
107 | 112 | ||
108 | let params = FnDescriptor::param_list(node); | 113 | let params = FnSignatureInfo::param_list(node); |
109 | let ret_type = node.ret_type().map(|r| r.syntax().text().to_string()); | 114 | let ret_type = node.ret_type().map(|r| r.syntax().text().to_string()); |
110 | 115 | ||
111 | Some(FnDescriptor { | 116 | Some(FnSignatureInfo { |
112 | name, | 117 | name, |
113 | ret_type, | 118 | ret_type, |
114 | params, | 119 | params, |
diff --git a/crates/ra_analysis/src/hir/mod.rs b/crates/ra_analysis/src/hir/mod.rs index 1d37fae32..5a9086cef 100644 --- a/crates/ra_analysis/src/hir/mod.rs +++ b/crates/ra_analysis/src/hir/mod.rs | |||
@@ -29,8 +29,7 @@ pub(crate) use self::{ | |||
29 | function::{FunctionDescriptor, FnScopes}, | 29 | function::{FunctionDescriptor, FnScopes}, |
30 | }; | 30 | }; |
31 | 31 | ||
32 | //TODO: FIXME | 32 | pub use self::function::FnSignatureInfo; |
33 | pub use self::function::FnDescriptor; | ||
34 | 33 | ||
35 | pub(crate) enum Def { | 34 | pub(crate) enum Def { |
36 | Module(ModuleDescriptor), | 35 | Module(ModuleDescriptor), |
diff --git a/crates/ra_analysis/src/imp.rs b/crates/ra_analysis/src/imp.rs index 347d44638..b16edb969 100644 --- a/crates/ra_analysis/src/imp.rs +++ b/crates/ra_analysis/src/imp.rs | |||
@@ -20,7 +20,7 @@ use crate::{ | |||
20 | completion::{completions, CompletionItem}, | 20 | completion::{completions, CompletionItem}, |
21 | db::{self, FileSyntaxQuery, SyntaxDatabase}, | 21 | db::{self, FileSyntaxQuery, SyntaxDatabase}, |
22 | hir::{ | 22 | hir::{ |
23 | FnDescriptor, FunctionDescriptor, ModuleDescriptor, | 23 | FunctionDescriptor, FnSignatureInfo, ModuleDescriptor, |
24 | Problem, | 24 | Problem, |
25 | DeclarationDescriptor, | 25 | DeclarationDescriptor, |
26 | }, | 26 | }, |
@@ -445,7 +445,7 @@ impl AnalysisImpl { | |||
445 | pub fn resolve_callable( | 445 | pub fn resolve_callable( |
446 | &self, | 446 | &self, |
447 | position: FilePosition, | 447 | position: FilePosition, |
448 | ) -> Cancelable<Option<(FnDescriptor, Option<usize>)>> { | 448 | ) -> Cancelable<Option<(FnSignatureInfo, Option<usize>)>> { |
449 | let file = self.db.file_syntax(position.file_id); | 449 | let file = self.db.file_syntax(position.file_id); |
450 | let syntax = file.syntax(); | 450 | let syntax = file.syntax(); |
451 | 451 | ||
@@ -455,11 +455,13 @@ impl AnalysisImpl { | |||
455 | 455 | ||
456 | // Resolve the function's NameRef (NOTE: this isn't entirely accurate). | 456 | // Resolve the function's NameRef (NOTE: this isn't entirely accurate). |
457 | let file_symbols = self.index_resolve(name_ref)?; | 457 | let file_symbols = self.index_resolve(name_ref)?; |
458 | for (fn_fiel_id, fs) in file_symbols { | 458 | for (fn_file_id, fs) in file_symbols { |
459 | if fs.kind == FN_DEF { | 459 | if fs.kind == FN_DEF { |
460 | let fn_file = self.db.file_syntax(fn_fiel_id); | 460 | let fn_file = self.db.file_syntax(fn_file_id); |
461 | if let Some(fn_def) = find_node_at_offset(fn_file.syntax(), fs.node_range.start()) { | 461 | if let Some(fn_def) = find_node_at_offset(fn_file.syntax(), fs.node_range.start()) { |
462 | if let Some(descriptor) = FnDescriptor::new(fn_def) { | 462 | let descr = |
463 | FunctionDescriptor::guess_from_source(&*self.db, fn_file_id, fn_def); | ||
464 | if let Some(descriptor) = descr.signature_info(&*self.db) { | ||
463 | // If we have a calling expression let's find which argument we are on | 465 | // If we have a calling expression let's find which argument we are on |
464 | let mut current_parameter = None; | 466 | let mut current_parameter = None; |
465 | 467 | ||
diff --git a/crates/ra_analysis/src/lib.rs b/crates/ra_analysis/src/lib.rs index a3088c5ad..c0e43544e 100644 --- a/crates/ra_analysis/src/lib.rs +++ b/crates/ra_analysis/src/lib.rs | |||
@@ -42,7 +42,7 @@ use crate::{ | |||
42 | 42 | ||
43 | pub use crate::{ | 43 | pub use crate::{ |
44 | completion::CompletionItem, | 44 | completion::CompletionItem, |
45 | hir::FnDescriptor, | 45 | hir::FnSignatureInfo, |
46 | input::{CrateGraph, CrateId, FileId, FileResolver}, | 46 | input::{CrateGraph, CrateId, FileId, FileResolver}, |
47 | }; | 47 | }; |
48 | pub use ra_editor::{ | 48 | pub use ra_editor::{ |
@@ -305,7 +305,7 @@ impl Analysis { | |||
305 | pub fn resolve_callable( | 305 | pub fn resolve_callable( |
306 | &self, | 306 | &self, |
307 | position: FilePosition, | 307 | position: FilePosition, |
308 | ) -> Cancelable<Option<(FnDescriptor, Option<usize>)>> { | 308 | ) -> Cancelable<Option<(FnSignatureInfo, Option<usize>)>> { |
309 | self.imp.resolve_callable(position) | 309 | self.imp.resolve_callable(position) |
310 | } | 310 | } |
311 | } | 311 | } |