@@ -491,12 +491,14 @@ impl<'ast> State<'_, 'ast> {
491491 let params_format = match header_style {
492492 MultilineFuncHeaderStyle :: ParamsAlways => ListFormat :: always_break ( ) ,
493493 MultilineFuncHeaderStyle :: All
494- if header. parameters . len ( ) > 1 && !self . can_header_be_inlined ( header) =>
494+ if header. parameters . len ( ) > 1
495+ && !self . can_header_be_inlined ( header, body. is_some ( ) ) =>
495496 {
496497 ListFormat :: always_break ( )
497498 }
498499 MultilineFuncHeaderStyle :: AllParams
499- if !header. parameters . is_empty ( ) && !self . can_header_be_inlined ( header) =>
500+ if !header. parameters . is_empty ( )
501+ && !self . can_header_be_inlined ( header, body. is_some ( ) ) =>
500502 {
501503 ListFormat :: always_break ( )
502504 }
@@ -2552,9 +2554,7 @@ impl<'ast> State<'_, 'ast> {
25522554 els_opt. is_none_or ( |els| self . is_inline_stmt ( els, 6 ) )
25532555 }
25542556
2555- fn can_header_be_inlined ( & mut self , header : & ast:: FunctionHeader < ' _ > ) -> bool {
2556- const FUNCTION : usize = 8 ;
2557-
2557+ fn can_header_be_inlined ( & mut self , header : & ast:: FunctionHeader < ' _ > , has_body : bool ) -> bool {
25582558 // ' ' + visibility
25592559 let visibility = header. visibility . map_or ( 0 , |v| self . estimate_size ( v. span ) + 1 ) ;
25602560 // ' ' + state mutability
@@ -2568,19 +2568,25 @@ impl<'ast> State<'_, 'ast> {
25682568 let returns = header. returns . as_ref ( ) . map_or ( 0 , |ret| {
25692569 ret. vars
25702570 . iter ( )
2571- . fold ( 0 , |len, p| if len != 0 { len + 2 } else { 8 } + self . estimate_size ( p. span ) )
2571+ . fold ( 0 , |len, p| if len != 0 { len + 2 } else { 10 } + self . estimate_size ( p. span ) )
25722572 } ) ;
2573+ // ' {' or ';'
2574+ let end = if has_body { 2 } else { 1 } ;
25732575
2574- FUNCTION
2575- + self . estimate_header_params_size ( header)
2576+ self . estimate_header_params_size ( header) // accounts for 'function name(..)'
25762577 + visibility
25772578 + mutability
25782579 + modifiers
25792580 + override_
25802581 + returns
2582+ + end
25812583 <= self . space_left ( )
25822584 }
25832585
2586+ fn can_header_params_be_inlined ( & mut self , header : & ast:: FunctionHeader < ' _ > ) -> bool {
2587+ self . estimate_header_params_size ( header) <= self . space_left ( )
2588+ }
2589+
25842590 fn estimate_header_params_size ( & mut self , header : & ast:: FunctionHeader < ' _ > ) -> usize {
25852591 // '(' + param + (', ' + param) + ')'
25862592 let params = header
@@ -2593,10 +2599,6 @@ impl<'ast> State<'_, 'ast> {
25932599 9 + header. name . map_or ( 0 , |name| self . estimate_size ( name. span ) + 1 ) + params
25942600 }
25952601
2596- fn can_header_params_be_inlined ( & mut self , header : & ast:: FunctionHeader < ' _ > ) -> bool {
2597- self . estimate_header_params_size ( header) <= self . space_left ( )
2598- }
2599-
26002602 fn estimate_lhs_size ( & self , expr : & ast:: Expr < ' _ > , parent_op : & ast:: BinOp ) -> usize {
26012603 match & expr. kind {
26022604 ast:: ExprKind :: Binary ( lhs, op, _) if op. kind . group ( ) == parent_op. kind . group ( ) => {
0 commit comments