Skip to content

Commit dcbbc8e

Browse files
committed
update check_generic_type_compact
1 parent 23c1b6e commit dcbbc8e

File tree

2 files changed

+28
-3
lines changed

2 files changed

+28
-3
lines changed

crates/emmylua_code_analysis/src/diagnostic/test/return_type_mismatch_test.rs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -496,4 +496,28 @@ mod tests {
496496
"#
497497
));
498498
}
499+
500+
#[test]
501+
fn test_generic_type_2() {
502+
let mut ws = VirtualWorkspace::new();
503+
ws.def(
504+
r#"
505+
---@class Observable<T>
506+
---@class CountObservable<T>: Observable<integer>
507+
CountObservable = {}
508+
---@return CountObservable<T>
509+
function CountObservable:new()
510+
end
511+
"#,
512+
);
513+
assert!(ws.check_code_for(
514+
DiagnosticCode::ReturnTypeMismatch,
515+
r#"
516+
---@return Observable<integer>
517+
local function count()
518+
return CountObservable:new()
519+
end
520+
"#
521+
));
522+
}
499523
}

crates/emmylua_code_analysis/src/semantic/type_check/generic_type.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
use std::{collections::HashMap, sync::Arc};
22

33
use crate::{
4-
humanize_type, semantic::member::find_members, DbIndex, LuaGenericType, LuaMemberOwner,
5-
LuaType, LuaTypeCache, RenderLevel, TypeSubstitutor,
4+
humanize_type,
5+
semantic::{member::find_members, type_check::is_sub_type_of},
6+
DbIndex, LuaGenericType, LuaMemberOwner, LuaType, LuaTypeCache, RenderLevel, TypeSubstitutor,
67
};
78

89
use super::{
@@ -79,7 +80,7 @@ fn check_generic_type_compact_generic(
7980
) -> TypeCheckResult {
8081
let source_base_id = source_generic.get_base_type_id();
8182
let compact_base_id = compact_generic.get_base_type_id();
82-
if source_base_id != compact_base_id {
83+
if !is_sub_type_of(db, &compact_base_id, &source_base_id) {
8384
return Err(TypeCheckFailReason::TypeNotMatch);
8485
}
8586

0 commit comments

Comments
 (0)