Skip to content

Commit 7f15cb4

Browse files
committed
Fix generic alias code completion
1 parent 7564280 commit 7f15cb4

File tree

1 file changed

+17
-12
lines changed

1 file changed

+17
-12
lines changed

crates/emmylua_code_analysis/src/semantic/member/find_members.rs

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -404,11 +404,17 @@ fn find_generic_members(
404404
infer_guard: &InferGuardRef,
405405
filter: &FindMemberFilter,
406406
) -> FindMembersResult {
407-
let base_type = generic_type.get_base_type();
408-
let mut members = find_members_guard(db, &base_type, infer_guard, filter)?;
409-
407+
let base_ref_id = generic_type.get_base_type_id_ref();
410408
let generic_params = generic_type.get_params();
411409
let substitutor = TypeSubstitutor::from_type_array(generic_params.clone());
410+
let type_decl = db.get_type_index().get_type_decl(&base_ref_id)?;
411+
if let Some(origin) = type_decl.get_alias_origin(db, Some(&substitutor)) {
412+
return find_members_guard(db, &origin, infer_guard, filter);
413+
}
414+
415+
let mut members =
416+
find_members_guard(db, &LuaType::Ref(base_ref_id.clone()), infer_guard, filter)?;
417+
412418
for info in members.iter_mut() {
413419
info.typ = instantiate_type_generic(db, &info.typ, &substitutor);
414420
}
@@ -417,15 +423,14 @@ fn find_generic_members(
417423
// like `---@class box<T>: T`. Should be rewritten: generic types should
418424
// be passed to the called instantiate_type_generic() in some kind of a
419425
// context.
420-
if let LuaType::Ref(base_type_decl_id) = base_type {
421-
members.extend(find_generic_members_from_super_generics(
422-
db,
423-
&base_type_decl_id,
424-
&substitutor,
425-
infer_guard,
426-
filter,
427-
))
428-
};
426+
427+
members.extend(find_generic_members_from_super_generics(
428+
db,
429+
&base_ref_id,
430+
&substitutor,
431+
infer_guard,
432+
filter,
433+
));
429434

430435
Some(members)
431436
}

0 commit comments

Comments
 (0)