diff options
Diffstat (limited to 'crates/ra_ide_api/src/goto_type_definition.rs')
-rw-r--r-- | crates/ra_ide_api/src/goto_type_definition.rs | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/crates/ra_ide_api/src/goto_type_definition.rs b/crates/ra_ide_api/src/goto_type_definition.rs index 6ce5e214f..fc4b6e1af 100644 --- a/crates/ra_ide_api/src/goto_type_definition.rs +++ b/crates/ra_ide_api/src/goto_type_definition.rs | |||
@@ -13,15 +13,17 @@ pub(crate) fn goto_type_definition( | |||
13 | token | 13 | token |
14 | .parent() | 14 | .parent() |
15 | .ancestors() | 15 | .ancestors() |
16 | .find(|n| ast::Expr::cast(*n).is_some() || ast::Pat::cast(*n).is_some()) | 16 | .find(|n| ast::Expr::cast(n.clone()).is_some() || ast::Pat::cast(n.clone()).is_some()) |
17 | })?; | 17 | })?; |
18 | 18 | ||
19 | let analyzer = hir::SourceAnalyzer::new(db, position.file_id, node, None); | 19 | let analyzer = hir::SourceAnalyzer::new(db, position.file_id, &node, None); |
20 | 20 | ||
21 | let ty: hir::Ty = if let Some(ty) = ast::Expr::cast(node).and_then(|e| analyzer.type_of(db, e)) | 21 | let ty: hir::Ty = if let Some(ty) = |
22 | ast::Expr::cast(node.clone()).and_then(|e| analyzer.type_of(db, &e)) | ||
22 | { | 23 | { |
23 | ty | 24 | ty |
24 | } else if let Some(ty) = ast::Pat::cast(node).and_then(|p| analyzer.type_of_pat(db, p)) { | 25 | } else if let Some(ty) = ast::Pat::cast(node.clone()).and_then(|p| analyzer.type_of_pat(db, &p)) |
26 | { | ||
25 | ty | 27 | ty |
26 | } else { | 28 | } else { |
27 | return None; | 29 | return None; |