Skip to content

Commit 81e921a

Browse files
authored
Merge pull request #268 from CppCXY/refactor-infer
refactor infer
2 parents 1b8e037 + 8ec63b8 commit 81e921a

50 files changed

Lines changed: 1504 additions & 1023 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

crates/emmylua_code_analysis/src/compilation/analyzer/lua/closure.rs

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ use crate::{
77
UnResolveClosureParams, UnResolveClosureReturn, UnResolveReturn,
88
},
99
db_index::{LuaDocReturnInfo, LuaSignatureId},
10-
infer_expr, DbIndex, LuaInferCache, LuaMultiReturn, LuaType, SignatureReturnStatus, TypeOps,
10+
infer_expr, DbIndex, InferFailReason, LuaInferCache, LuaMultiReturn, LuaType,
11+
SignatureReturnStatus, TypeOps,
1112
};
1213

1314
use super::{func_body::analyze_func_body_returns, LuaAnalyzer, LuaReturnPoint};
@@ -99,12 +100,20 @@ fn analyze_return(
99100
let return_points = analyze_func_body_returns(block);
100101
let returns =
101102
match analyze_return_point(&analyzer.db, &mut analyzer.infer_cache, &return_points) {
102-
Some(returns) => returns,
103-
None => {
103+
Ok(returns) => returns,
104+
Err(InferFailReason::None) => {
105+
vec![LuaDocReturnInfo {
106+
type_ref: LuaType::Unknown,
107+
description: None,
108+
name: None,
109+
}]
110+
}
111+
Err(reason) => {
104112
let unresolve = UnResolveReturn {
105113
file_id: analyzer.file_id,
106114
signature_id: signature_id.clone(),
107115
return_points,
116+
reason,
108117
};
109118

110119
analyzer.add_unresolved(unresolve.into());
@@ -150,7 +159,7 @@ pub fn analyze_return_point(
150159
db: &DbIndex,
151160
cache: &mut LuaInferCache,
152161
return_points: &Vec<LuaReturnPoint>,
153-
) -> Option<Vec<LuaDocReturnInfo>> {
162+
) -> Result<Vec<LuaDocReturnInfo>, InferFailReason> {
154163
let mut return_type = LuaType::Unknown;
155164
for point in return_points {
156165
match point {
@@ -174,7 +183,7 @@ pub fn analyze_return_point(
174183
}
175184
}
176185

177-
Some(vec![LuaDocReturnInfo {
186+
Ok(vec![LuaDocReturnInfo {
178187
type_ref: return_type,
179188
description: None,
180189
name: None,

crates/emmylua_code_analysis/src/compilation/analyzer/lua/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ use crate::{
1919
db_index::{DbIndex, LuaType},
2020
profile::Profile,
2121
semantic::{infer_expr, LuaInferCache},
22-
CacheOptions, FileId, LuaAnalysisPhase, LuaMemberId, LuaMemberOwner,
22+
CacheOptions, FileId, InferFailReason, LuaAnalysisPhase, LuaMemberId, LuaMemberOwner,
2323
};
2424

2525
use super::{unresolve::UnResolve, AnalyzeContext};
@@ -120,7 +120,7 @@ impl LuaAnalyzer<'_> {
120120
}
121121

122122
impl LuaAnalyzer<'_> {
123-
pub fn infer_expr(&mut self, expr: &LuaExpr) -> Option<LuaType> {
123+
pub fn infer_expr(&mut self, expr: &LuaExpr) -> Result<LuaType, InferFailReason> {
124124
infer_expr(self.db, &mut self.infer_cache, expr.clone())
125125
}
126126

crates/emmylua_code_analysis/src/compilation/analyzer/lua/module.rs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
use emmylua_parser::{LuaAstNode, LuaChunk, LuaExpr};
22

33
use crate::{
4-
compilation::analyzer::unresolve::UnResolveModule, db_index::LuaType, LuaSemanticDeclId,
5-
LuaSignatureId,
4+
compilation::analyzer::unresolve::UnResolveModule, db_index::LuaType, InferFailReason,
5+
LuaSemanticDeclId, LuaSignatureId,
66
};
77

88
use super::{func_body::analyze_func_body_returns, LuaAnalyzer, LuaReturnPoint};
@@ -13,13 +13,14 @@ pub fn analyze_chunk_return(analyzer: &mut LuaAnalyzer, chunk: LuaChunk) -> Opti
1313
for point in return_exprs {
1414
match point {
1515
LuaReturnPoint::Expr(expr) => {
16-
let expr_type = analyzer.infer_expr(&expr);
17-
let expr_type = match expr_type {
18-
Some(expr_type) => expr_type,
19-
None => {
16+
let expr_type = match analyzer.infer_expr(&expr) {
17+
Ok(expr_type) => expr_type,
18+
Err(InferFailReason::None) => LuaType::Unknown,
19+
Err(reason) => {
2020
let unresolve = UnResolveModule {
2121
file_id: analyzer.file_id,
2222
expr,
23+
reason,
2324
};
2425
analyzer.add_unresolved(unresolve.into());
2526
return None;

0 commit comments

Comments
 (0)