mirror of
https://github.com/rust-lang/rust-analyzer
synced 2024-12-29 06:23:25 +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);
|
.filter(|it| it.len() > 1);
|
||||||
|
|
||||||
acc.add_struct_literal(ctx, strukt, path, None);
|
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() => {
|
hir::Adt::Union(un) if ctx.path_qual().is_none() => {
|
||||||
let path = ctx
|
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]
|
#[test]
|
||||||
fn literal_struct_completion_from_sub_modules() {
|
fn literal_struct_completion_from_sub_modules() {
|
||||||
check_edit(
|
check_edit(
|
||||||
|
|
Loading…
Reference in a new issue