11mod infer_manager;
22mod merge_type;
33mod resolve;
4+ mod resolve_closure_param;
45
56use crate :: {
67 db_index:: { DbIndex , LuaDeclId , LuaMemberId , LuaSignatureId } ,
@@ -9,7 +10,11 @@ use crate::{
910use emmylua_parser:: { LuaCallExpr , LuaExpr } ;
1011use infer_manager:: InferManager ;
1112pub 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;
1318
1419use super :: { lua:: LuaReturnPoint , AnalyzeContext } ;
1520
@@ -34,33 +39,28 @@ fn try_resolve(
3439 let mut changed = false ;
3540 for i in 0 ..unresolves. len ( ) {
3641 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) ;
3844 let resolve = match un_resolve {
3945 UnResolve :: Decl ( un_resolve_decl) => {
40- let config = infer_manager. get_infer_config ( un_resolve_decl. file_id ) ;
4146 try_resolve_decl ( db, config, un_resolve_decl) . unwrap_or ( false )
4247 }
4348 UnResolve :: Member ( ref mut un_resolve_member) => {
44- let config = infer_manager. get_infer_config ( un_resolve_member. file_id ) ;
4549 try_resolve_member ( db, config, un_resolve_member) . unwrap_or ( false )
4650 }
4751 UnResolve :: Module ( un_resolve_module) => {
48- let config = infer_manager. get_infer_config ( un_resolve_module. file_id ) ;
4952 try_resolve_module ( db, config, un_resolve_module) . unwrap_or ( false )
5053 }
5154 UnResolve :: Return ( un_resolve_return) => {
52- let config = infer_manager. get_infer_config ( un_resolve_return. file_id ) ;
5355 try_resolve_return_point ( db, config, un_resolve_return) . unwrap_or ( false )
5456 }
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+ }
5960 UnResolve :: IterDecl ( un_resolve_iter_var) => {
60- let config = infer_manager. get_infer_config ( un_resolve_iter_var. file_id ) ;
6161 try_resolve_iter_var ( db, config, un_resolve_iter_var) . unwrap_or ( false )
6262 }
63- UnResolve :: ClosureParams ( _ ) | UnResolve :: None => continue ,
63+ UnResolve :: None => continue ,
6464 } ;
6565
6666 if resolve {
@@ -72,7 +72,6 @@ fn try_resolve(
7272 changed
7373}
7474
75- #[ allow( dead_code) ]
7675#[ derive( Debug ) ]
7776pub enum UnResolve {
7877 None ,
@@ -84,6 +83,27 @@ pub enum UnResolve {
8483 ClosureParams ( Box < UnResolveClosureParams > ) ,
8584}
8685
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+
87107#[ derive( Debug ) ]
88108pub struct UnResolveDecl {
89109 pub file_id : FileId ,
@@ -138,7 +158,6 @@ impl From<UnResolveReturn> for UnResolve {
138158 }
139159}
140160
141- #[ allow( unused) ]
142161#[ derive( Debug ) ]
143162pub struct UnResolveClosureParams {
144163 pub file_id : FileId ,
0 commit comments