@@ -132,16 +132,35 @@ fn broadcast_up(
132132 if let Some ( ne_type_assert) = type_assert. get_negation ( ) {
133133 if let Some ( else_stat) = if_stat. get_else_clause ( ) {
134134 let block_range = else_stat. get_range ( ) ;
135- flow_chain. add_type_assert ( path, ne_type_assert, block_range, actual_range) ;
136- } else if is_block_has_return ( if_stat. get_block ( ) ?) . unwrap_or ( false ) {
135+ flow_chain. add_type_assert (
136+ path,
137+ ne_type_assert. clone ( ) ,
138+ block_range,
139+ actual_range,
140+ ) ;
141+ } else if is_block_has_return ( if_stat. get_block ( ) ) . unwrap_or ( false ) {
137142 let parent_block = if_stat. get_parent :: < LuaBlock > ( ) ?;
138143 let parent_range = parent_block. get_range ( ) ;
139144 let if_range = if_stat. get_range ( ) ;
140145 if if_range. end ( ) < parent_range. end ( ) {
141146 let range = TextRange :: new ( if_range. end ( ) , parent_range. end ( ) ) ;
142- flow_chain. add_type_assert ( path, ne_type_assert, range, actual_range) ;
147+ flow_chain. add_type_assert (
148+ path,
149+ ne_type_assert. clone ( ) ,
150+ range,
151+ actual_range,
152+ ) ;
143153 }
144154 }
155+ for else_if_clause in if_stat. get_else_if_clause_list ( ) {
156+ let block_range = else_if_clause. get_range ( ) ;
157+ flow_chain. add_type_assert (
158+ path,
159+ ne_type_assert. clone ( ) ,
160+ block_range,
161+ actual_range,
162+ ) ;
163+ }
145164 }
146165 }
147166 LuaAst :: LuaWhileStat ( while_stat) => {
@@ -445,10 +464,12 @@ fn infer_lua_type_assert(
445464 Some ( ( ) )
446465}
447466
448- fn is_block_has_return ( block : LuaBlock ) -> Option < bool > {
449- for stat in block. get_stats ( ) {
450- if is_stat_change_flow ( stat. clone ( ) ) . unwrap_or ( false ) {
451- return Some ( true ) ;
467+ fn is_block_has_return ( block : Option < LuaBlock > ) -> Option < bool > {
468+ if let Some ( block) = block {
469+ for stat in block. get_stats ( ) {
470+ if is_stat_change_flow ( stat. clone ( ) ) . unwrap_or ( false ) {
471+ return Some ( true ) ;
472+ }
452473 }
453474 }
454475
@@ -469,9 +490,7 @@ fn is_stat_change_flow(stat: LuaStat) -> Option<bool> {
469490 Some ( false )
470491 }
471492 LuaStat :: ReturnStat ( _) => Some ( true ) ,
472- LuaStat :: DoStat ( do_stat) => {
473- Some ( is_block_has_return ( do_stat. get_block ( ) ?) . unwrap_or ( false ) )
474- }
493+ LuaStat :: DoStat ( do_stat) => Some ( is_block_has_return ( do_stat. get_block ( ) ) . unwrap_or ( false ) ) ,
475494 _ => Some ( false ) ,
476495 }
477496}
0 commit comments