Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir_def/src/item_tree.rs')
| -rw-r--r-- | crates/hir_def/src/item_tree.rs | 24 |
1 files changed, 18 insertions, 6 deletions
diff --git a/crates/hir_def/src/item_tree.rs b/crates/hir_def/src/item_tree.rs index c51201f675..0af5d654af 100644 --- a/crates/hir_def/src/item_tree.rs +++ b/crates/hir_def/src/item_tree.rs @@ -790,14 +790,26 @@ impl UseTree { } Some((prefix, ImportKind::Plain)) } - (Some(prefix), PathKind::Super(0)) => { - // `some::path::self` == `some::path` - if path.segments().is_empty() { - Some((prefix, ImportKind::TypeOnly)) - } else { - None + (Some(mut prefix), PathKind::Super(n)) + if *n > 0 && prefix.segments().is_empty() => + { + // `super::super` + `super::rest` + match &mut prefix.kind { + PathKind::Super(m) => { + cov_mark::hit!(concat_super_mod_paths); + *m += *n; + for segment in path.segments() { + prefix.push_segment(segment.clone()); + } + Some((prefix, ImportKind::Plain)) + } + _ => None, } } + (Some(prefix), PathKind::Super(0)) if path.segments().is_empty() => { + // `some::path::self` == `some::path` + Some((prefix, ImportKind::TypeOnly)) + } (Some(_), _) => None, } } |