Skip to content

Commit b1c4e43

Browse files
committed
Fix inference in chained calls
1 parent 7938d32 commit b1c4e43

File tree

10 files changed

+39
-35
lines changed

10 files changed

+39
-35
lines changed

Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/code_analysis/src/compilation/analyzer/decl/exprs.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use emmylua_parser::{
2-
LuaAstNode, LuaAstToken, LuaClosureExpr, LuaIndexExpr, LuaIndexKey, LuaLiteralExpr,
3-
LuaLiteralToken, LuaNameExpr, LuaTableExpr, LuaVarExpr,
2+
LuaAstNode, LuaAstToken, LuaClosureExpr, LuaExpr, LuaIndexExpr, LuaIndexKey, LuaLiteralExpr,
3+
LuaLiteralToken, LuaNameExpr, LuaTableExpr,
44
};
55

66
use crate::{
@@ -70,7 +70,7 @@ pub fn analyze_index_expr(analyzer: &mut DeclAnalyzer, index_expr: LuaIndexExpr)
7070
let file_id = analyzer.get_file_id();
7171
let syntax_id = index_expr.get_syntax_id();
7272
let prefix = index_expr.get_prefix_expr()?;
73-
if let LuaVarExpr::NameExpr(name_expr) = prefix {
73+
if let LuaExpr::NameExpr(name_expr) = prefix {
7474
let name_token = name_expr.get_name_token()?;
7575
let name_token_text = name_token.get_name_text();
7676
if name_token_text == "_G" || name_token_text == "_ENV" {

crates/code_analysis/src/compilation/analyzer/decl/stats.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use emmylua_parser::{
2-
LuaAssignStat, LuaAstNode, LuaAstToken, LuaForRangeStat, LuaForStat, LuaFuncStat, LuaIndexExpr,
3-
LuaLocalFuncStat, LuaLocalStat, LuaSyntaxKind, LuaVarExpr,
2+
LuaAssignStat, LuaAstNode, LuaAstToken, LuaExpr, LuaForRangeStat, LuaForStat, LuaFuncStat,
3+
LuaIndexExpr, LuaLocalFuncStat, LuaLocalStat, LuaSyntaxKind, LuaVarExpr,
44
};
55

66
use crate::{
@@ -117,7 +117,7 @@ fn analyze_maybe_global_index_expr(
117117
) -> Option<()> {
118118
let file_id = analyzer.get_file_id();
119119
let prefix = index_expr.get_prefix_expr()?;
120-
if let LuaVarExpr::NameExpr(name_expr) = prefix {
120+
if let LuaExpr::NameExpr(name_expr) = prefix {
121121
let name_token = name_expr.get_name_token()?;
122122
let name_token_text = name_token.get_name_text();
123123
if name_token_text == "_G" || name_token_text == "_ENV" {

crates/code_analysis/src/db_index/declaration/decl_tree.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use crate::{
77
};
88
use decl::{LuaDecl, LuaDeclId};
99
use emmylua_parser::{
10-
LuaAstNode, LuaChunk, LuaFuncStat, LuaNameExpr, LuaSyntaxId, LuaSyntaxKind, LuaVarExpr,
10+
LuaAstNode, LuaChunk, LuaExpr, LuaFuncStat, LuaNameExpr, LuaSyntaxId, LuaSyntaxKind, LuaVarExpr,
1111
};
1212
use rowan::{TextRange, TextSize};
1313
use scope::{LuaScope, LuaScopeId, LuaScopeKind, ScopeOrDeclId};
@@ -283,7 +283,7 @@ impl LuaDeclarationTree {
283283
if let LuaVarExpr::IndexExpr(index_name) = func_name {
284284
let prefix = index_name.get_prefix_expr()?;
285285
match prefix {
286-
LuaVarExpr::NameExpr(prefix_name) => {
286+
LuaExpr::NameExpr(prefix_name) => {
287287
let name = prefix_name.get_name_text()?;
288288
let decl = self.find_local_decl(&name, prefix_name.get_position());
289289
if let Some(decl) = decl {
@@ -295,10 +295,11 @@ impl LuaDeclarationTree {
295295
.get_global_decl_id(&LuaMemberKey::Name(name.into()))?;
296296
return Some(LuaDeclOrMemberId::Decl(id));
297297
}
298-
LuaVarExpr::IndexExpr(prefx_index) => {
298+
LuaExpr::IndexExpr(prefx_index) => {
299299
let member_id = LuaMemberId::new(prefx_index.get_syntax_id(), self.file_id);
300300
return Some(LuaDeclOrMemberId::Member(member_id));
301301
}
302+
_ => return None,
302303
}
303304
}
304305

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

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
use emmylua_parser::{
2-
LuaAstNode, LuaExpr, LuaIndexExpr, LuaIndexKey, LuaSyntaxId, LuaSyntaxKind, LuaSyntaxNode,
3-
LuaTableExpr, LuaVarExpr,
2+
LuaAstNode, LuaIndexExpr, LuaIndexKey, LuaSyntaxId, LuaSyntaxKind, LuaSyntaxNode, LuaTableExpr,
43
};
54
use rowan::TextRange;
65
use smol_str::SmolStr;
@@ -27,15 +26,7 @@ pub fn infer_index_expr(
2726
index_expr: LuaIndexExpr,
2827
) -> InferResult {
2928
let prefix_expr = index_expr.get_prefix_expr()?;
30-
let prefix_type = match prefix_expr {
31-
LuaVarExpr::IndexExpr(prefix_index) => {
32-
infer_expr(db, config, LuaExpr::IndexExpr(prefix_index))?
33-
}
34-
LuaVarExpr::NameExpr(prefix_name) => {
35-
infer_expr(db, config, LuaExpr::NameExpr(prefix_name))?
36-
}
37-
};
38-
29+
let prefix_type = infer_expr(db, config, prefix_expr)?;
3930
let member_key = index_expr.get_index_key()?;
4031
if let Some(member_type) = infer_member_by_member_key(
4132
db,

crates/code_analysis/src/semantic/semantic_info/infer_expr_property_owner.rs

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use emmylua_parser::{LuaAstNode, LuaExpr, LuaIndexExpr, LuaNameExpr, LuaVarExpr};
1+
use emmylua_parser::{LuaAstNode, LuaExpr, LuaIndexExpr, LuaNameExpr};
22

33
use crate::{
44
semantic::{
@@ -97,14 +97,7 @@ fn infer_index_expr_property_owner(
9797
index_expr: LuaIndexExpr,
9898
) -> Option<LuaPropertyOwnerId> {
9999
let prefix_expr = index_expr.get_prefix_expr()?;
100-
let prefix_type = match prefix_expr {
101-
LuaVarExpr::IndexExpr(prefix_index) => {
102-
infer_expr(db, infer_config, LuaExpr::IndexExpr(prefix_index))?
103-
}
104-
LuaVarExpr::NameExpr(prefix_name) => {
105-
infer_expr(db, infer_config, LuaExpr::NameExpr(prefix_name))?
106-
}
107-
};
100+
let prefix_type = infer_expr(db, infer_config, prefix_expr.into())?;
108101

109102
let member_key = index_expr.get_index_key()?.into();
110103
if let Some(member_info) = infer_member_property_owner_by_member_key(

crates/emmylua_parser/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "emmylua_parser"
3-
version = "0.8.1"
3+
version = "0.9.0"
44
edition = "2021"
55
authors = ["CppCXY"]
66
description = "A parser for EmmyLua and luals"

crates/emmylua_parser/src/grammar/lua/test.rs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1094,4 +1094,24 @@ Syntax(Chunk)@0..205
10941094

10951095
assert_ast_eq!(code, result);
10961096
}
1097+
1098+
#[test]
1099+
fn test_error_for_completion() {
1100+
let code = "a():";
1101+
let result = r#"
1102+
Syntax(Chunk)@0..4
1103+
Syntax(Block)@0..4
1104+
Syntax(AssignStat)@0..4
1105+
Syntax(IndexExpr)@0..4
1106+
Syntax(CallExpr)@0..3
1107+
Syntax(NameExpr)@0..1
1108+
Token(TkName)@0..1 "a"
1109+
Syntax(CallArgList)@1..3
1110+
Token(TkLeftParen)@1..2 "("
1111+
Token(TkRightParen)@2..3 ")"
1112+
Token(TkColon)@3..4 ":"
1113+
"#;
1114+
1115+
assert_ast_eq!(code, result);
1116+
}
10971117
}

crates/emmylua_parser/src/syntax/node/lua/expr.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -257,7 +257,7 @@ impl LuaAstNode for LuaIndexExpr {
257257
}
258258

259259
impl LuaIndexExpr {
260-
pub fn get_prefix_expr(&self) -> Option<LuaVarExpr> {
260+
pub fn get_prefix_expr(&self) -> Option<LuaExpr> {
261261
self.child()
262262
}
263263

crates/emmylua_parser/src/syntax/node/test.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
#[cfg(test)]
22
mod tests {
33
use crate::{
4-
parser::ParserConfig, syntax::traits::LuaAstNode, LuaAst, LuaDocDescription, LuaLocalStat,
5-
LuaParser, LuaVarExpr,
4+
parser::ParserConfig, syntax::traits::LuaAstNode, LuaAst, LuaDocDescription, LuaExpr, LuaLocalStat, LuaParser, LuaVarExpr
65
};
76

87
#[allow(unused)]
@@ -211,7 +210,7 @@ mod tests {
211210
}
212211
LuaVarExpr::IndexExpr(field_exp) => {
213212
match field_exp.get_prefix_expr().unwrap() {
214-
LuaVarExpr::NameExpr(name) => {
213+
LuaExpr::NameExpr(name) => {
215214
assert_eq!(name.get_name_token().unwrap().get_name_text(), "t");
216215
}
217216
_ => {}

0 commit comments

Comments
 (0)