Skip to content

Commit e53fd20

Browse files
committed
fix build_func_stat_override_hint
1 parent 88cfab5 commit e53fd20

File tree

2 files changed

+36
-10
lines changed

2 files changed

+36
-10
lines changed

crates/emmylua_ls/src/handlers/inlay_hint/build_inlay_hint.rs

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -435,18 +435,20 @@ fn get_super_member_id(
435435
member_key: &LuaMemberKey,
436436
infer_guard: &mut InferGuard,
437437
) -> Option<LuaMemberId> {
438-
if let LuaType::Ref(super_type_id) = &super_type {
439-
infer_guard.check(super_type_id).ok()?;
440-
let member_map = semantic_model.get_member_info_map(&super_type)?;
441-
442-
if let Some(member_infos) = member_map.get(&member_key) {
443-
let first_property = member_infos.first()?.property_owner_id.clone()?;
444-
if let LuaSemanticDeclId::Member(member_id) = first_property {
445-
return Some(member_id);
446-
}
438+
let super_type_id = match &super_type {
439+
LuaType::Ref(id) => id,
440+
LuaType::Generic(generic) => generic.get_base_type_id_ref(),
441+
_ => return None,
442+
};
443+
infer_guard.check(super_type_id).ok()?;
444+
let member_map = semantic_model.get_member_info_map(&super_type)?;
445+
446+
if let Some(member_infos) = member_map.get(&member_key) {
447+
let first_property = member_infos.first()?.property_owner_id.clone()?;
448+
if let LuaSemanticDeclId::Member(member_id) = first_property {
449+
return Some(member_id);
447450
}
448451
}
449-
450452
None
451453
}
452454

crates/emmylua_ls/src/handlers/test/inlay_hint_test.rs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -319,4 +319,28 @@ mod tests {
319319
.unwrap();
320320
assert_eq!(result.len(), 1);
321321
}
322+
323+
#[test]
324+
fn test_generic_type_override() {
325+
let mut ws = ProviderVirtualWorkspace::new();
326+
ws.def(
327+
r#"
328+
---@class A<T>
329+
---@field aaa fun(a: integer): integer
330+
"#,
331+
);
332+
let result = ws
333+
.check_inlay_hint(
334+
r#"
335+
---@class B<T>: A<T>
336+
local B
337+
338+
function B:aaa(a)
339+
return a
340+
end
341+
"#,
342+
)
343+
.unwrap();
344+
assert_eq!(result.len(), 1);
345+
}
322346
}

0 commit comments

Comments
 (0)