@@ -332,12 +332,30 @@ impl<'a> Formatter<'a> {
332332 }
333333
334334 fn format_newline_reserved_word ( & mut self , token : & Token < ' _ > , query : & mut String ) {
335- if !self . inline_block . is_active ( )
336- && self
337- . options
338- . max_inline_arguments
339- . is_none_or ( |limit| limit < self . indentation . span ( ) )
335+ // line comments force a newline
336+ let after_line_comment = self
337+ . previous_non_whitespace_token ( 1 )
338+ . is_some_and ( |t| t. kind == TokenKind :: LineComment ) ;
339+
340+ if after_line_comment
341+ || !self . inline_block . is_active ( )
342+ && self
343+ . options
344+ . max_inline_arguments
345+ . is_none_or ( |limit| limit < self . indentation . span ( ) )
340346 {
347+ // We inlined something to the top level let's increase the indentation now
348+ if let Some ( ( _, s) ) = self . indentation . previous_top_level_reserved ( ) {
349+ if !s. newline_after {
350+ self . indentation . increase_top_level ( s. clone ( ) ) ;
351+ }
352+ }
353+
354+ // let's undo the line comment indentation
355+ if after_line_comment {
356+ self . trim_spaces_end ( query) ;
357+ }
358+
341359 self . add_new_line ( query) ;
342360 } else {
343361 self . trim_spaces_end ( query) ;
@@ -373,14 +391,15 @@ impl<'a> Formatter<'a> {
373391 let previous_non_whitespace_token = self . previous_non_whitespace_token ( 1 ) ;
374392 let fold_in_top_level = !inlined
375393 && self . options . max_inline_top_level . is_some ( )
376- && self
377- . previous_non_whitespace_token ( 1 )
378- . is_some_and ( |t| t. kind == TokenKind :: ReservedTopLevel )
394+ && previous_non_whitespace_token. is_some_and ( |t| t. kind == TokenKind :: ReservedTopLevel )
379395 && self
380396 . indentation
381397 . previous_top_level_reserved ( )
382398 . is_some_and ( |( _, span) | {
383- span. blocks == 1 && span. newline_after && span. arguments == 1
399+ // We can have the two following situations
400+ // top level ( block )
401+ // top level ( block ) AS word (args, ...)
402+ span. blocks <= 2 && span. newline_after && span. arguments == 1
384403 } ) ;
385404
386405 // Take out the preceding space unless there was whitespace there in the original query
@@ -503,7 +522,7 @@ impl<'a> Formatter<'a> {
503522
504523 if let Some ( ( _, span) ) = self . indentation . previous_top_level_reserved ( ) {
505524 let limit = self . options . max_inline_arguments . unwrap_or ( 0 ) ;
506- if limit > span. full_span {
525+ if limit >= span. full_span {
507526 return ;
508527 }
509528 }
@@ -700,18 +719,19 @@ impl<'a> Formatter<'a> {
700719 full_span += token. value . len ( ) ;
701720 }
702721
722+ let limit = self . options . max_inline_top_level . unwrap_or ( 0 ) ;
703723 // if we are inside an inline block we decide our behaviour as if were inline
704724 let block_len = self . inline_block . cur_len ( ) ;
705- let ( newline_before, newline_after) = if block_len > 0 {
706- let limit = self . options . max_inline_top_level . unwrap_or ( 0 ) ;
707- ( limit < block_len, limit < full_span)
725+
726+ let newline_before = block_len == 0 || limit < block_len;
727+
728+ // if we are going to format a list of arguments take in account also the limit for
729+ // arguments
730+ let arguments_limit = self . options . max_inline_arguments . unwrap_or ( 0 ) ;
731+ let newline_after = if arguments > 1 && arguments_limit != 0 {
732+ arguments_limit. min ( limit) < full_span
708733 } else {
709- (
710- true ,
711- self . options
712- . max_inline_top_level
713- . is_none_or ( |limit| limit < full_span) ,
714- )
734+ limit < full_span
715735 } ;
716736
717737 SpanInfo {
0 commit comments