Complete union fields after dot
This commit is contained in:
parent
07f690ddf6
commit
8cb139090f
@ -1157,18 +1157,21 @@ fn go(ty: &Ty) -> bool {
|
|||||||
|
|
||||||
pub fn fields(&self, db: &dyn HirDatabase) -> Vec<(Field, Type)> {
|
pub fn fields(&self, db: &dyn HirDatabase) -> Vec<(Field, Type)> {
|
||||||
if let Ty::Apply(a_ty) = &self.ty.value {
|
if let Ty::Apply(a_ty) = &self.ty.value {
|
||||||
if let TypeCtor::Adt(AdtId::StructId(s)) = a_ty.ctor {
|
let variant_id = match a_ty.ctor {
|
||||||
let var_def = s.into();
|
TypeCtor::Adt(AdtId::StructId(s)) => s.into(),
|
||||||
return db
|
TypeCtor::Adt(AdtId::UnionId(u)) => u.into(),
|
||||||
.field_types(var_def)
|
_ => return Vec::new(),
|
||||||
.iter()
|
};
|
||||||
.map(|(local_id, ty)| {
|
|
||||||
let def = Field { parent: var_def.into(), id: local_id };
|
return db
|
||||||
let ty = ty.clone().subst(&a_ty.parameters);
|
.field_types(variant_id)
|
||||||
(def, self.derived(ty))
|
.iter()
|
||||||
})
|
.map(|(local_id, ty)| {
|
||||||
.collect();
|
let def = Field { parent: variant_id.into(), id: local_id };
|
||||||
}
|
let ty = ty.clone().subst(&a_ty.parameters);
|
||||||
|
(def, self.derived(ty))
|
||||||
|
})
|
||||||
|
.collect();
|
||||||
};
|
};
|
||||||
Vec::new()
|
Vec::new()
|
||||||
}
|
}
|
||||||
|
@ -249,6 +249,44 @@ fn foo(a: inner::A) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_union_field_completion() {
|
||||||
|
assert_debug_snapshot!(
|
||||||
|
do_ref_completion(
|
||||||
|
r"
|
||||||
|
union Un {
|
||||||
|
field: u8,
|
||||||
|
other: u16,
|
||||||
|
}
|
||||||
|
|
||||||
|
fn foo(u: Un) {
|
||||||
|
u.<|>
|
||||||
|
}
|
||||||
|
",
|
||||||
|
),
|
||||||
|
@r###"
|
||||||
|
[
|
||||||
|
CompletionItem {
|
||||||
|
label: "field",
|
||||||
|
source_range: 140..140,
|
||||||
|
delete: 140..140,
|
||||||
|
insert: "field",
|
||||||
|
kind: Field,
|
||||||
|
detail: "u8",
|
||||||
|
},
|
||||||
|
CompletionItem {
|
||||||
|
label: "other",
|
||||||
|
source_range: 140..140,
|
||||||
|
delete: 140..140,
|
||||||
|
insert: "other",
|
||||||
|
kind: Field,
|
||||||
|
detail: "u16",
|
||||||
|
},
|
||||||
|
]
|
||||||
|
"###
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_method_completion() {
|
fn test_method_completion() {
|
||||||
assert_debug_snapshot!(
|
assert_debug_snapshot!(
|
||||||
|
Loading…
Reference in New Issue
Block a user