From 7960c8b27681ebeb72d83930c4a2bbf43a982c52 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Wed, 5 Dec 2018 12:17:38 +0300 Subject: restore index-based gotodef --- crates/ra_analysis/src/imp.rs | 9 ++++----- crates/ra_analysis/tests/tests.rs | 17 +++++++++++++++++ 2 files changed, 21 insertions(+), 5 deletions(-) (limited to 'crates/ra_analysis') diff --git a/crates/ra_analysis/src/imp.rs b/crates/ra_analysis/src/imp.rs index fe1dfefea..ab6d111c2 100644 --- a/crates/ra_analysis/src/imp.rs +++ b/crates/ra_analysis/src/imp.rs @@ -214,7 +214,7 @@ impl AnalysisImpl { { let scope = fn_descr.scope(&*self.db); // First try to resolve the symbol locally - return if let Some(entry) = scope.resolve_local_name(name_ref) { + if let Some(entry) = scope.resolve_local_name(name_ref) { let mut vec = vec![]; vec.push(( position.file_id, @@ -224,12 +224,11 @@ impl AnalysisImpl { kind: NAME, }, )); - Ok(vec) - } else { - // If that fails try the index based approach. - self.index_resolve(name_ref) + return Ok(vec); }; } + // If that fails try the index based approach. + return self.index_resolve(name_ref); } if let Some(name) = find_node_at_offset::(syntax, position.offset) { if let Some(module) = name.syntax().parent().and_then(ast::Module::cast) { diff --git a/crates/ra_analysis/tests/tests.rs b/crates/ra_analysis/tests/tests.rs index fbe89f444..71d20dbe9 100644 --- a/crates/ra_analysis/tests/tests.rs +++ b/crates/ra_analysis/tests/tests.rs @@ -18,6 +18,23 @@ fn get_signature(text: &str) -> (FnSignatureInfo, Option) { analysis.resolve_callable(position).unwrap().unwrap() } +#[test] +fn approximate_resolve_works_in_items() { + let (analysis, pos) = analysis_and_position( + " + //- /lib.rs + struct Foo; + enum E { X(Foo<|>) } + ", + ); + + let symbols = analysis.approximately_resolve_symbol(pos).unwrap(); + assert_eq_dbg( + r#"[(FileId(1), FileSymbol { name: "Foo", node_range: [0; 11), kind: STRUCT_DEF })]"#, + &symbols, + ); +} + #[test] fn test_resolve_module() { let (analysis, pos) = analysis_and_position( -- cgit v1.2.3