Skip to content

Commit 74defb4

Browse files
committed
fix #416
1 parent 9e68126 commit 74defb4

File tree

2 files changed

+48
-1
lines changed

2 files changed

+48
-1
lines changed

crates/emmylua_code_analysis/src/compilation/test/closure_param_infer_test.rs

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -274,4 +274,49 @@ mod test {
274274
let expected = ws.ty("number");
275275
assert_eq!(ws.humanize_type(ty), ws.humanize_type(expected));
276276
}
277+
278+
#[test]
279+
fn test_issue_416() {
280+
let mut ws = VirtualWorkspace::new();
281+
ws.def_files(vec![
282+
(
283+
"test.lua",
284+
r#"
285+
---@class CustomEvent
286+
---@field private custom_event_manager? EventManager
287+
local M = {}
288+
289+
---@return EventManager
290+
function newEventManager()
291+
end
292+
293+
function M:event_on()
294+
if not self.custom_event_manager then
295+
self.custom_event_manager = newEventManager()
296+
end
297+
local trigger = self.custom_event_manager:get_trigger()
298+
A = trigger
299+
return trigger
300+
end
301+
"#,
302+
),
303+
(
304+
"test2.lua",
305+
r#"
306+
---@class Trigger
307+
308+
---@class EventManager
309+
local EventManager
310+
311+
---@return Trigger
312+
function EventManager:get_trigger()
313+
end
314+
"#,
315+
),
316+
]);
317+
318+
let ty = ws.expr_ty("A");
319+
let expected = ws.ty("Trigger");
320+
assert_eq!(ws.humanize_type(ty), ws.humanize_type(expected));
321+
}
277322
}

crates/emmylua_code_analysis/src/db_index/type/type_assert.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,9 @@ impl TypeAssertion {
9595
TypeAssertion::Or(a) => {
9696
let mut result = vec![];
9797
for assertion in a.iter() {
98-
result.push(assertion.tighten_type(db, config, root, source.clone())?);
98+
if let Ok(t) = assertion.tighten_type(db, config, root, source.clone()) {
99+
result.push(t);
100+
}
99101
}
100102

101103
match result.len() {

0 commit comments

Comments
 (0)