Don't qualify self as crate in add_missing_impl_members assist

This commit is contained in:
Lukas Wirth 2021-07-27 19:29:47 +02:00
parent d571ca814e
commit 456f5c6d09
2 changed files with 39 additions and 1 deletions

View File

@ -812,4 +812,39 @@ impl Foo for () {
"#,
)
}
#[test]
fn does_not_requalify_self_as_crate() {
check_assist(
add_missing_default_members,
r"
struct Wrapper<T>(T);
trait T {
fn f(self) -> Wrapper<Self> {
Wrapper(self)
}
}
impl T for () {
$0
}
",
r"
struct Wrapper<T>(T);
trait T {
fn f(self) -> Wrapper<Self> {
Wrapper(self)
}
}
impl T for () {
$0fn f(self) -> Wrapper<Self> {
Wrapper(self)
}
}
",
);
}
}

View File

@ -101,8 +101,11 @@ impl<'a> Ctx<'a> {
if path.qualifier().is_some() {
return None;
}
if path.segment().and_then(|s| s.param_list()).is_some() {
if path.segment().map_or(false, |s| {
s.param_list().is_some() || (s.self_token().is_some() && path.parent_path().is_none())
}) {
// don't try to qualify `Fn(Foo) -> Bar` paths, they are in prelude anyway
// don't try to qualify sole `self` either, they are usually locals, but are returned as modules due to namespace classing
return None;
}