Skip to content

Commit cce99ca

Browse files
committed
Merge branch 'fix402' into completion
2 parents c0461d7 + a20d743 commit cce99ca

File tree

2 files changed

+34
-2
lines changed

2 files changed

+34
-2
lines changed

crates/emmylua_code_analysis/src/compilation/analyzer/flow/build_flow_tree.rs

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ fn build_name_expr_flow(
6767
) -> Option<()> {
6868
let parent = name_expr.get_parent::<LuaAst>()?;
6969
let mut is_assign = false;
70-
match parent {
70+
match &parent {
7171
LuaAst::LuaIndexExpr(_) | LuaAst::LuaCallExpr(_) | LuaAst::LuaFuncStat(_) => return None,
7272
LuaAst::LuaAssignStat(assign_stat) => {
7373
let eq_pos = assign_stat
@@ -87,7 +87,20 @@ fn build_name_expr_flow(
8787
let mut ref_id: Option<VarRefId> = None;
8888
if let Some(local_refs) = db.get_reference_index().get_local_reference(&file_id) {
8989
if let Some(decl_id) = local_refs.get_decl_id(&name_expr.get_range()) {
90-
ref_id = Some(VarRefId::DeclId(decl_id.clone()));
90+
if let Some(decl) = db.get_decl_index().get_decl(&decl_id) {
91+
// 处理`self`作为参数传入的特殊情况
92+
if decl.is_param()
93+
&& name_expr
94+
.get_name_text()
95+
.map_or(false, |name| name == "self")
96+
{
97+
ref_id = Some(VarRefId::Name(SmolStr::new("self")));
98+
} else {
99+
ref_id = Some(VarRefId::DeclId(decl_id.clone()));
100+
}
101+
} else {
102+
ref_id = Some(VarRefId::DeclId(decl_id.clone()));
103+
}
91104
}
92105
}
93106

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

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,4 +33,23 @@ mod test {
3333
"#
3434
));
3535
}
36+
37+
#[test]
38+
fn test_issue_402() {
39+
let mut ws = VirtualWorkspace::new();
40+
assert!(ws.check_code_for(
41+
DiagnosticCode::NeedCheckNil,
42+
r#"
43+
---@class A
44+
local a = {}
45+
46+
---@param self table?
47+
function a.new(self)
48+
if self then
49+
self.a = 1
50+
end
51+
end
52+
"#
53+
));
54+
}
3655
}

0 commit comments

Comments
 (0)