1
1
mod infer_manager;
2
2
mod merge_type;
3
3
mod resolve;
4
+ mod resolve_closure_param;
4
5
5
6
use crate :: {
6
7
db_index:: { DbIndex , LuaDeclId , LuaMemberId , LuaSignatureId } ,
@@ -9,7 +10,11 @@ use crate::{
9
10
use emmylua_parser:: { LuaCallExpr , LuaExpr } ;
10
11
use infer_manager:: InferManager ;
11
12
pub use merge_type:: { merge_decl_expr_type, merge_member_type} ;
12
- use resolve:: { try_resolve_decl, try_resolve_iter_var, try_resolve_member, try_resolve_module, try_resolve_return_point} ;
13
+ use resolve:: {
14
+ try_resolve_decl, try_resolve_iter_var, try_resolve_member,
15
+ try_resolve_module, try_resolve_return_point,
16
+ } ;
17
+ use resolve_closure_param:: try_resolve_closure_params;
13
18
14
19
use super :: { lua:: LuaReturnPoint , AnalyzeContext } ;
15
20
@@ -34,33 +39,28 @@ fn try_resolve(
34
39
let mut changed = false ;
35
40
for i in 0 ..unresolves. len ( ) {
36
41
let un_resolve = & mut unresolves[ i] ;
37
-
42
+ let file_id = un_resolve. get_file_id ( ) . unwrap_or ( FileId { id : 0 } ) ;
43
+ let config = infer_manager. get_infer_config ( file_id) ;
38
44
let resolve = match un_resolve {
39
45
UnResolve :: Decl ( un_resolve_decl) => {
40
- let config = infer_manager. get_infer_config ( un_resolve_decl. file_id ) ;
41
46
try_resolve_decl ( db, config, un_resolve_decl) . unwrap_or ( false )
42
47
}
43
48
UnResolve :: Member ( ref mut un_resolve_member) => {
44
- let config = infer_manager. get_infer_config ( un_resolve_member. file_id ) ;
45
49
try_resolve_member ( db, config, un_resolve_member) . unwrap_or ( false )
46
50
}
47
51
UnResolve :: Module ( un_resolve_module) => {
48
- let config = infer_manager. get_infer_config ( un_resolve_module. file_id ) ;
49
52
try_resolve_module ( db, config, un_resolve_module) . unwrap_or ( false )
50
53
}
51
54
UnResolve :: Return ( un_resolve_return) => {
52
- let config = infer_manager. get_infer_config ( un_resolve_return. file_id ) ;
53
55
try_resolve_return_point ( db, config, un_resolve_return) . unwrap_or ( false )
54
56
}
55
- // UnResolve::ClosureParams(un_resolve_closure_params) => {
56
- // todo!();
57
- // true
58
- // }
57
+ UnResolve :: ClosureParams ( un_resolve_closure_params) => {
58
+ try_resolve_closure_params ( db, config, un_resolve_closure_params) . unwrap_or ( false )
59
+ }
59
60
UnResolve :: IterDecl ( un_resolve_iter_var) => {
60
- let config = infer_manager. get_infer_config ( un_resolve_iter_var. file_id ) ;
61
61
try_resolve_iter_var ( db, config, un_resolve_iter_var) . unwrap_or ( false )
62
62
}
63
- UnResolve :: ClosureParams ( _ ) | UnResolve :: None => continue ,
63
+ UnResolve :: None => continue ,
64
64
} ;
65
65
66
66
if resolve {
@@ -72,7 +72,6 @@ fn try_resolve(
72
72
changed
73
73
}
74
74
75
- #[ allow( dead_code) ]
76
75
#[ derive( Debug ) ]
77
76
pub enum UnResolve {
78
77
None ,
@@ -84,6 +83,27 @@ pub enum UnResolve {
84
83
ClosureParams ( Box < UnResolveClosureParams > ) ,
85
84
}
86
85
86
+ #[ allow( dead_code) ]
87
+ impl UnResolve {
88
+ pub fn is_none ( & self ) -> bool {
89
+ matches ! ( self , UnResolve :: None )
90
+ }
91
+
92
+ pub fn get_file_id ( & self ) -> Option < FileId > {
93
+ match self {
94
+ UnResolve :: Decl ( un_resolve_decl) => Some ( un_resolve_decl. file_id ) ,
95
+ UnResolve :: IterDecl ( un_resolve_iter_var) => Some ( un_resolve_iter_var. file_id ) ,
96
+ UnResolve :: Member ( un_resolve_member) => Some ( un_resolve_member. file_id ) ,
97
+ UnResolve :: Module ( un_resolve_module) => Some ( un_resolve_module. file_id ) ,
98
+ UnResolve :: Return ( un_resolve_return) => Some ( un_resolve_return. file_id ) ,
99
+ UnResolve :: ClosureParams ( un_resolve_closure_params) => {
100
+ Some ( un_resolve_closure_params. file_id )
101
+ }
102
+ UnResolve :: None => None ,
103
+ }
104
+ }
105
+ }
106
+
87
107
#[ derive( Debug ) ]
88
108
pub struct UnResolveDecl {
89
109
pub file_id : FileId ,
@@ -138,7 +158,6 @@ impl From<UnResolveReturn> for UnResolve {
138
158
}
139
159
}
140
160
141
- #[ allow( unused) ]
142
161
#[ derive( Debug ) ]
143
162
pub struct UnResolveClosureParams {
144
163
pub file_id : FileId ,
0 commit comments