@@ -2532,23 +2532,46 @@ fn try_format_simple_inline_closure_expr(
25322532 }
25332533
25342534 let mut stats = block. get_stats ( ) ;
2535- let LuaStat :: ReturnStat ( return_stat) = stats. next ( ) ? else {
2536- return None ;
2537- } ;
2538- if stats. next ( ) . is_some ( ) || node_has_direct_comment_child ( return_stat. syntax ( ) ) {
2539- return None ;
2540- }
2541-
2542- let mut returned_exprs = return_stat. get_expr_list ( ) ;
2543- let returned_expr = returned_exprs. next ( ) ?;
2544- if returned_exprs. next ( ) . is_some ( ) {
2535+ let first_stat = stats. next ( ) ?;
2536+ if stats. next ( ) . is_some ( ) || node_has_direct_comment_child ( first_stat. syntax ( ) ) {
25452537 return None ;
25462538 }
25472539
2548- let returned_docs = format_expr ( ctx, plan, & returned_expr) ;
2549- if ir:: ir_has_forced_line_break ( & returned_docs) {
2550- return None ;
2551- }
2540+ // Format a single-statement closure inline: `function (args) stmt end`.
2541+ // Supports return, call, and other statement types subject to line-width constraint.
2542+ let body_docs: Vec < DocIR > = match & first_stat {
2543+ LuaStat :: ReturnStat ( return_stat) => {
2544+ let mut returned_exprs = return_stat. get_expr_list ( ) ;
2545+ let returned_expr = returned_exprs. next ( ) ?;
2546+ if returned_exprs. next ( ) . is_some ( ) {
2547+ return None ;
2548+ }
2549+ let returned_docs = format_expr ( ctx, plan, & returned_expr) ;
2550+ if ir:: ir_has_forced_line_break ( & returned_docs) {
2551+ return None ;
2552+ }
2553+ let mut docs = vec ! [ ir:: syntax_token( LuaTokenKind :: TkReturn ) ] ;
2554+ docs. push ( ir:: space ( ) ) ;
2555+ docs. extend ( returned_docs) ;
2556+ docs
2557+ }
2558+ LuaStat :: CallExprStat ( call_stat) => {
2559+ let call_expr = call_stat. get_call_expr ( ) ?;
2560+ let docs = format_expr ( ctx, plan, & call_expr. into ( ) ) ;
2561+ if ir:: ir_has_forced_line_break ( & docs) {
2562+ return None ;
2563+ }
2564+ docs
2565+ }
2566+ _ => {
2567+ let stmt_text = first_stat. syntax ( ) . text ( ) . to_string ( ) ;
2568+ let trimmed = stmt_text. trim ( ) ;
2569+ if trimmed. contains ( '\n' ) {
2570+ return None ;
2571+ }
2572+ vec ! [ ir:: source_node_trimmed( first_stat. syntax( ) . clone( ) ) ]
2573+ }
2574+ } ;
25522575
25532576 let mut docs = vec ! [ ir:: syntax_token( LuaTokenKind :: TkFunction ) ] ;
25542577 if let Some ( params) = expr. get_params_list ( ) {
@@ -2557,9 +2580,7 @@ fn try_format_simple_inline_closure_expr(
25572580 }
25582581 docs. extend ( shell_plan. params ) ;
25592582 docs. push ( ir:: space ( ) ) ;
2560- docs. push ( ir:: syntax_token ( LuaTokenKind :: TkReturn ) ) ;
2561- docs. push ( ir:: space ( ) ) ;
2562- docs. extend ( returned_docs) ;
2583+ docs. extend ( body_docs) ;
25632584 docs. push ( ir:: space ( ) ) ;
25642585 docs. push ( ir:: syntax_token ( LuaTokenKind :: TkEnd ) ) ;
25652586
0 commit comments