mirror of
https://github.com/rust-lang/rust-analyzer
synced 2024-12-28 14:03:35 +00:00
Auto merge of #12123 - rainy-me:feat/impl-self-completion, r=Veykril
feat: provide Self in record literal completion close #12106
This commit is contained in:
commit
f83dccf5b9
1 changed files with 61 additions and 0 deletions
|
@ -89,6 +89,12 @@ pub(crate) fn complete_record_literal(
|
|||
.filter(|it| it.len() > 1);
|
||||
|
||||
acc.add_struct_literal(ctx, strukt, path, None);
|
||||
|
||||
let impl_ = ctx.impl_def.as_ref()?;
|
||||
let impl_adt = ctx.sema.to_def(impl_)?.self_ty(ctx.db).as_adt()?;
|
||||
if hir::Adt::Struct(strukt) == impl_adt {
|
||||
acc.add_struct_literal(ctx, strukt, None, Some(hir::known::SELF_TYPE));
|
||||
}
|
||||
}
|
||||
hir::Adt::Union(un) if ctx.path_qual().is_none() => {
|
||||
let path = ctx
|
||||
|
@ -133,6 +139,61 @@ fn baz() {
|
|||
)
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn literal_struct_impl_self_completion() {
|
||||
check_edit(
|
||||
"Self {…}",
|
||||
r#"
|
||||
struct Foo {
|
||||
bar: u64,
|
||||
}
|
||||
|
||||
impl Foo {
|
||||
fn new() -> Foo {
|
||||
Self$0
|
||||
}
|
||||
}
|
||||
"#,
|
||||
r#"
|
||||
struct Foo {
|
||||
bar: u64,
|
||||
}
|
||||
|
||||
impl Foo {
|
||||
fn new() -> Foo {
|
||||
Self { bar: ${1:()} }$0
|
||||
}
|
||||
}
|
||||
"#,
|
||||
);
|
||||
|
||||
check_edit(
|
||||
"Self(…)",
|
||||
r#"
|
||||
mod submod {
|
||||
pub struct Foo(pub u64);
|
||||
}
|
||||
|
||||
impl submod::Foo {
|
||||
fn new() -> submod::Foo {
|
||||
Self$0
|
||||
}
|
||||
}
|
||||
"#,
|
||||
r#"
|
||||
mod submod {
|
||||
pub struct Foo(pub u64);
|
||||
}
|
||||
|
||||
impl submod::Foo {
|
||||
fn new() -> submod::Foo {
|
||||
Self(${1:()})$0
|
||||
}
|
||||
}
|
||||
"#,
|
||||
)
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn literal_struct_completion_from_sub_modules() {
|
||||
check_edit(
|
||||
|
|
Loading…
Reference in a new issue