diff options
Diffstat (limited to 'crates/ra_ide/src/display')
-rw-r--r-- | crates/ra_ide/src/display/function_signature.rs | 20 | ||||
-rw-r--r-- | crates/ra_ide/src/display/structure.rs | 44 |
2 files changed, 56 insertions, 8 deletions
diff --git a/crates/ra_ide/src/display/function_signature.rs b/crates/ra_ide/src/display/function_signature.rs index 324ad9552..ddc53a52b 100644 --- a/crates/ra_ide/src/display/function_signature.rs +++ b/crates/ra_ide/src/display/function_signature.rs | |||
@@ -34,6 +34,8 @@ pub struct FunctionSignature { | |||
34 | pub generic_parameters: Vec<String>, | 34 | pub generic_parameters: Vec<String>, |
35 | /// Parameters of the function | 35 | /// Parameters of the function |
36 | pub parameters: Vec<String>, | 36 | pub parameters: Vec<String>, |
37 | /// Parameter names of the function | ||
38 | pub parameter_names: Vec<String>, | ||
37 | /// Optional return type | 39 | /// Optional return type |
38 | pub ret_type: Option<String>, | 40 | pub ret_type: Option<String>, |
39 | /// Where predicates | 41 | /// Where predicates |
@@ -75,6 +77,7 @@ impl FunctionSignature { | |||
75 | name: node.name().map(|n| n.text().to_string()), | 77 | name: node.name().map(|n| n.text().to_string()), |
76 | ret_type: node.name().map(|n| n.text().to_string()), | 78 | ret_type: node.name().map(|n| n.text().to_string()), |
77 | parameters: params, | 79 | parameters: params, |
80 | parameter_names: vec![], | ||
78 | generic_parameters: generic_parameters(&node), | 81 | generic_parameters: generic_parameters(&node), |
79 | where_predicates: where_predicates(&node), | 82 | where_predicates: where_predicates(&node), |
80 | doc: None, | 83 | doc: None, |
@@ -114,6 +117,7 @@ impl FunctionSignature { | |||
114 | name: Some(name), | 117 | name: Some(name), |
115 | ret_type: None, | 118 | ret_type: None, |
116 | parameters: params, | 119 | parameters: params, |
120 | parameter_names: vec![], | ||
117 | generic_parameters: vec![], | 121 | generic_parameters: vec![], |
118 | where_predicates: vec![], | 122 | where_predicates: vec![], |
119 | doc: None, | 123 | doc: None, |
@@ -134,6 +138,7 @@ impl FunctionSignature { | |||
134 | name: node.name().map(|n| n.text().to_string()), | 138 | name: node.name().map(|n| n.text().to_string()), |
135 | ret_type: None, | 139 | ret_type: None, |
136 | parameters: params, | 140 | parameters: params, |
141 | parameter_names: vec![], | ||
137 | generic_parameters: vec![], | 142 | generic_parameters: vec![], |
138 | where_predicates: vec![], | 143 | where_predicates: vec![], |
139 | doc: None, | 144 | doc: None, |
@@ -157,6 +162,20 @@ impl From<&'_ ast::FnDef> for FunctionSignature { | |||
157 | res | 162 | res |
158 | } | 163 | } |
159 | 164 | ||
165 | fn param_name_list(node: &ast::FnDef) -> Vec<String> { | ||
166 | let mut res = vec![]; | ||
167 | if let Some(param_list) = node.param_list() { | ||
168 | if let Some(self_param) = param_list.self_param() { | ||
169 | res.push(self_param.syntax().text().to_string()) | ||
170 | } | ||
171 | |||
172 | res.extend(param_list.params().map(|param| { | ||
173 | param.pat().map(|pat| pat.syntax().text().to_string()).unwrap_or_default() | ||
174 | })); | ||
175 | } | ||
176 | res | ||
177 | } | ||
178 | |||
160 | FunctionSignature { | 179 | FunctionSignature { |
161 | kind: CallableKind::Function, | 180 | kind: CallableKind::Function, |
162 | visibility: node.visibility().map(|n| n.syntax().text().to_string()), | 181 | visibility: node.visibility().map(|n| n.syntax().text().to_string()), |
@@ -166,6 +185,7 @@ impl From<&'_ ast::FnDef> for FunctionSignature { | |||
166 | .and_then(|r| r.type_ref()) | 185 | .and_then(|r| r.type_ref()) |
167 | .map(|n| n.syntax().text().to_string()), | 186 | .map(|n| n.syntax().text().to_string()), |
168 | parameters: param_list(node), | 187 | parameters: param_list(node), |
188 | parameter_names: param_name_list(node), | ||
169 | generic_parameters: generic_parameters(node), | 189 | generic_parameters: generic_parameters(node), |
170 | where_predicates: where_predicates(node), | 190 | where_predicates: where_predicates(node), |
171 | // docs are processed separately | 191 | // docs are processed separately |
diff --git a/crates/ra_ide/src/display/structure.rs b/crates/ra_ide/src/display/structure.rs index a80d65ac7..944cc79df 100644 --- a/crates/ra_ide/src/display/structure.rs +++ b/crates/ra_ide/src/display/structure.rs | |||
@@ -151,11 +151,11 @@ fn structure_node(node: &SyntaxNode) -> Option<StructureNode> { | |||
151 | Some(node) | 151 | Some(node) |
152 | }, | 152 | }, |
153 | ast::MacroCall(it) => { | 153 | ast::MacroCall(it) => { |
154 | let first_token = it.syntax().first_token().unwrap(); | 154 | match it.path().and_then(|it| it.segment()).and_then(|it| it.name_ref()) { |
155 | if first_token.text().as_str() != "macro_rules" { | 155 | Some(path_segment) if path_segment.text() == "macro_rules" |
156 | return None; | 156 | => decl(it), |
157 | _ => None, | ||
157 | } | 158 | } |
158 | decl(it) | ||
159 | }, | 159 | }, |
160 | _ => None, | 160 | _ => None, |
161 | } | 161 | } |
@@ -198,6 +198,16 @@ macro_rules! mc { | |||
198 | () => {} | 198 | () => {} |
199 | } | 199 | } |
200 | 200 | ||
201 | #[macro_export] | ||
202 | macro_rules! mcexp { | ||
203 | () => {} | ||
204 | } | ||
205 | |||
206 | /// Doc comment | ||
207 | macro_rules! mcexp { | ||
208 | () => {} | ||
209 | } | ||
210 | |||
201 | #[deprecated] | 211 | #[deprecated] |
202 | fn obsolete() {} | 212 | fn obsolete() {} |
203 | 213 | ||
@@ -374,9 +384,27 @@ fn very_obsolete() {} | |||
374 | }, | 384 | }, |
375 | StructureNode { | 385 | StructureNode { |
376 | parent: None, | 386 | parent: None, |
387 | label: "mcexp", | ||
388 | navigation_range: [334; 339), | ||
389 | node_range: [305; 356), | ||
390 | kind: MACRO_CALL, | ||
391 | detail: None, | ||
392 | deprecated: false, | ||
393 | }, | ||
394 | StructureNode { | ||
395 | parent: None, | ||
396 | label: "mcexp", | ||
397 | navigation_range: [387; 392), | ||
398 | node_range: [358; 409), | ||
399 | kind: MACRO_CALL, | ||
400 | detail: None, | ||
401 | deprecated: false, | ||
402 | }, | ||
403 | StructureNode { | ||
404 | parent: None, | ||
377 | label: "obsolete", | 405 | label: "obsolete", |
378 | navigation_range: [322; 330), | 406 | navigation_range: [428; 436), |
379 | node_range: [305; 335), | 407 | node_range: [411; 441), |
380 | kind: FN_DEF, | 408 | kind: FN_DEF, |
381 | detail: Some( | 409 | detail: Some( |
382 | "fn()", | 410 | "fn()", |
@@ -386,8 +414,8 @@ fn very_obsolete() {} | |||
386 | StructureNode { | 414 | StructureNode { |
387 | parent: None, | 415 | parent: None, |
388 | label: "very_obsolete", | 416 | label: "very_obsolete", |
389 | navigation_range: [375; 388), | 417 | navigation_range: [481; 494), |
390 | node_range: [337; 393), | 418 | node_range: [443; 499), |
391 | kind: FN_DEF, | 419 | kind: FN_DEF, |
392 | detail: Some( | 420 | detail: Some( |
393 | "fn()", | 421 | "fn()", |