File tree Expand file tree Collapse file tree 2 files changed +26
-2
lines changed Expand file tree Collapse file tree 2 files changed +26
-2
lines changed Original file line number Diff line number Diff line change @@ -200,8 +200,19 @@ impl<'a> Formatter<'a> {
200200 }
201201
202202 fn format_type_specifier ( & self , token : & Token < ' _ > , query : & mut String ) {
203+ const WHITESPACE_BEFORE : & [ TokenKind ] = & [
204+ TokenKind :: Reserved ,
205+ TokenKind :: ReservedNewline ,
206+ TokenKind :: ReservedNewlineAfter ,
207+ ] ;
203208 self . trim_all_spaces_end ( query) ;
204209 query. push_str ( token. value ) ;
210+ if self
211+ . next_non_whitespace_token ( 1 )
212+ . is_some_and ( |t| WHITESPACE_BEFORE . contains ( & t. kind ) )
213+ {
214+ query. push ( ' ' )
215+ }
205216 }
206217 fn format_block_comment ( & mut self , token : & Token < ' _ > , query : & mut String ) {
207218 self . add_new_line ( query) ;
@@ -573,6 +584,17 @@ impl<'a> Formatter<'a> {
573584 }
574585 }
575586
587+ fn next_non_whitespace_token ( & self , idx : usize ) -> Option < & Token < ' _ > > {
588+ let index = self . index . checked_add ( idx) ;
589+ if let Some ( index) = index {
590+ self . tokens [ index..]
591+ . iter ( )
592+ . find ( |t| t. kind != TokenKind :: Whitespace )
593+ } else {
594+ None
595+ }
596+ }
597+
576598 fn next_token ( & self , idx : usize ) -> Option < & Token < ' _ > > {
577599 let index = self . index . checked_add ( idx) ;
578600 if let Some ( index) = index {
Original file line number Diff line number Diff line change @@ -471,15 +471,17 @@ mod tests {
471471
472472 #[ test]
473473 fn it_formats_type_specifiers ( ) {
474- let input = "SELECT id, ARRAY [] :: UUID [] FROM UNNEST($1 :: UUID []);" ;
474+ let input = "SELECT id, ARRAY [] :: UUID [] FROM UNNEST($1 :: UUID []) WHERE $1::UUID[] IS NOT NULL ;" ;
475475 let options = FormatOptions :: default ( ) ;
476476 let expected = indoc ! (
477477 "
478478 SELECT
479479 id,
480480 ARRAY[]::UUID[]
481481 FROM
482- UNNEST($1::UUID[]);"
482+ UNNEST($1::UUID[])
483+ WHERE
484+ $1::UUID[] IS NOT NULL;"
483485 ) ;
484486
485487 assert_eq ! ( format( input, & QueryParams :: None , & options) , expected) ;
You can’t perform that action at this time.
0 commit comments