Fix concatenation of super
mod paths
This commit is contained in:
parent
6824722f54
commit
7e8b96f07c
@ -790,13 +790,25 @@ 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,
|
||||
}
|
||||
|
@ -890,3 +890,38 @@ pub struct Struct;
|
||||
"#]],
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn braced_supers_in_use_tree() {
|
||||
cov_mark::check!(concat_super_mod_paths);
|
||||
check(
|
||||
r#"
|
||||
mod some_module {
|
||||
pub fn unknown_func() {}
|
||||
}
|
||||
|
||||
mod other_module {
|
||||
mod some_submodule {
|
||||
use { super::{ super::unknown_func, }, };
|
||||
}
|
||||
}
|
||||
|
||||
use some_module::unknown_func;
|
||||
"#,
|
||||
expect![[r#"
|
||||
crate
|
||||
other_module: t
|
||||
some_module: t
|
||||
unknown_func: v
|
||||
|
||||
crate::some_module
|
||||
unknown_func: v
|
||||
|
||||
crate::other_module
|
||||
some_submodule: t
|
||||
|
||||
crate::other_module::some_submodule
|
||||
unknown_func: v
|
||||
"#]],
|
||||
)
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user