Skip to content

Commit b8843b0

Browse files
committed
fix self infer
1 parent 5757fa3 commit b8843b0

File tree

1 file changed

+31
-7
lines changed

1 file changed

+31
-7
lines changed

crates/code_analysis/src/semantic/infer/infer_name.rs

Lines changed: 31 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -76,14 +76,38 @@ fn infer_self(db: &DbIndex, config: &LuaInferConfig, name_expr: LuaNameExpr) ->
7676
LuaDeclOrMemberId::Decl(decl_id) => {
7777
let decl = db.get_decl_index().get_decl(&decl_id)?;
7878
let name = decl.get_name();
79-
if decl.is_global() {
80-
return Some(
81-
db.get_decl_index()
82-
.get_global_decl_type(&name.into())?
83-
.clone(),
84-
);
79+
let mut decl_type = if decl.is_global() {
80+
db.get_decl_index()
81+
.get_global_decl_type(&LuaMemberKey::Name(name.into()))?
82+
.clone()
83+
} else if let Some(typ) = decl.get_type() {
84+
typ.clone()
85+
} else if decl.is_param() {
86+
match &decl.extra {
87+
LuaDeclExtra::Param { idx, signature_id } => {
88+
let signature = db.get_signature_index().get(&signature_id)?;
89+
if let Some(param_info) = signature.get_param_info_by_id(*idx) {
90+
let mut typ = param_info.type_ref.clone();
91+
if param_info.nullable && !typ.is_nullable() {
92+
typ = LuaType::Nullable(typ.into());
93+
}
94+
95+
typ
96+
} else {
97+
LuaType::Unknown
98+
}
99+
}
100+
_ => unreachable!(),
101+
}
102+
} else {
103+
LuaType::Unknown
104+
};
105+
106+
if let LuaType::Ref(id) = decl_type {
107+
decl_type = LuaType::Def(id);
85108
}
86-
Some(decl.get_type()?.clone())
109+
110+
Some(decl_type)
87111
}
88112
LuaDeclOrMemberId::Member(member_id) => {
89113
let member = db.get_member_index().get_member(&member_id)?;

0 commit comments

Comments
 (0)