From 0057d1e10d1bc94557e94e551079be0c9c281d3f Mon Sep 17 00:00:00 2001 From: Josh Mcguigan Date: Sat, 29 Feb 2020 20:53:01 -0800 Subject: [PATCH] fix completion for super::super:: --- crates/ra_hir_def/src/path/lower.rs | 8 +++- crates/ra_ide/src/completion/complete_dot.rs | 39 ++++++++++++++++++++ 2 files changed, 45 insertions(+), 2 deletions(-) diff --git a/crates/ra_hir_def/src/path/lower.rs b/crates/ra_hir_def/src/path/lower.rs index 62aafd508e1..0934520d70f 100644 --- a/crates/ra_hir_def/src/path/lower.rs +++ b/crates/ra_hir_def/src/path/lower.rs @@ -101,8 +101,12 @@ pub(super) fn lower_path(mut path: ast::Path, hygiene: &Hygiene) -> Option break; } ast::PathSegmentKind::SuperKw => { - kind = PathKind::Super(1); - break; + let nested_super_count = if let PathKind::Super(n) = kind { + n + } else { + 0 + }; + kind = PathKind::Super(nested_super_count + 1); } } path = match qualifier(&path) { diff --git a/crates/ra_ide/src/completion/complete_dot.rs b/crates/ra_ide/src/completion/complete_dot.rs index a6e0158b2a1..9145aa183dc 100644 --- a/crates/ra_ide/src/completion/complete_dot.rs +++ b/crates/ra_ide/src/completion/complete_dot.rs @@ -545,4 +545,43 @@ mod tests { "### ) } + + #[test] + fn test_super_super_completion() { + assert_debug_snapshot!( + do_ref_completion( + r" + mod a { + const A: usize = 0; + + mod b { + const B: usize = 0; + + mod c { + use super::super::<|> + } + } + } + ", + ), + @r###" + [ + CompletionItem { + label: "A", + source_range: [217; 217), + delete: [217; 217), + insert: "A", + kind: Const, + }, + CompletionItem { + label: "b", + source_range: [217; 217), + delete: [217; 217), + insert: "b", + kind: Module, + }, + ] + "### + ); + } }