@@ -94,8 +94,20 @@ impl<'interner, 'arena> Context<'interner, 'arena> {
9494 true => self . text ( "true" ) ,
9595 false => self . text ( "false" ) ,
9696 } ,
97- Pattern :: RecordLiteral ( _, _) => todo ! ( ) ,
98- Pattern :: Tuple ( _, _) => todo ! ( ) ,
97+ Pattern :: RecordLiteral ( _, pattern_fields) => {
98+ self . pretty_record ( pattern_fields, |field| {
99+ self . concat ( [
100+ self . string_id ( field. label . 1 ) ,
101+ self . space ( ) ,
102+ self . text ( "=" ) ,
103+ self . space ( ) ,
104+ self . pattern ( & field. pattern ) ,
105+ ] )
106+ } )
107+ }
108+ Pattern :: Tuple ( _, patterns) => {
109+ self . pretty_tuple ( patterns, |pattern| self . pattern ( pattern) )
110+ }
99111 }
100112 }
101113
@@ -262,49 +274,25 @@ impl<'interner, 'arena> Context<'interner, 'arena> {
262274 ) ,
263275 ] ) ,
264276 ) ,
265- Term :: RecordType ( _, type_fields) => self . sequence (
266- true ,
267- self . text ( "{" ) ,
268- type_fields. iter ( ) . map ( |field| {
269- self . concat ( [
270- self . string_id ( field. label . 1 ) ,
271- self . space ( ) ,
272- self . text ( ":" ) ,
273- self . space ( ) ,
274- self . term_prec ( Prec :: Top , & field. type_ ) ,
275- ] )
276- } ) ,
277- self . text ( "," ) ,
278- self . text ( "}" ) ,
279- ) ,
280- Term :: RecordLiteral ( _, expr_fields) => self . sequence (
281- true ,
282- self . text ( "{" ) ,
283- expr_fields. iter ( ) . map ( |field| {
284- self . concat ( [
285- self . string_id ( field. label . 1 ) ,
286- self . space ( ) ,
287- self . text ( "=" ) ,
288- self . space ( ) ,
289- self . term_prec ( Prec :: Top , & field. expr ) ,
290- ] )
291- } ) ,
292- self . text ( "," ) ,
293- self . text ( "}" ) ,
294- ) ,
295- Term :: Tuple ( _, terms) if terms. len ( ) == 1 => self . concat ( [
296- self . text ( "(" ) ,
297- self . term ( & terms[ 0 ] ) ,
298- self . text ( "," ) ,
299- self . text ( ")" ) ,
300- ] ) ,
301- Term :: Tuple ( _, terms) => self . sequence (
302- false ,
303- self . text ( "(" ) ,
304- terms. iter ( ) . map ( |term| self . term ( term) ) ,
305- self . text ( "," ) ,
306- self . text ( ")" ) ,
307- ) ,
277+ Term :: RecordType ( _, type_fields) => self . pretty_record ( type_fields, |field| {
278+ self . concat ( [
279+ self . string_id ( field. label . 1 ) ,
280+ self . space ( ) ,
281+ self . text ( ":" ) ,
282+ self . space ( ) ,
283+ self . term_prec ( Prec :: Top , & field. type_ ) ,
284+ ] )
285+ } ) ,
286+ Term :: RecordLiteral ( _, expr_fields) => self . pretty_record ( expr_fields, |field| {
287+ self . concat ( [
288+ self . string_id ( field. label . 1 ) ,
289+ self . space ( ) ,
290+ self . text ( "=" ) ,
291+ self . space ( ) ,
292+ self . term_prec ( Prec :: Top , & field. expr ) ,
293+ ] )
294+ } ) ,
295+ Term :: Tuple ( _, terms) => self . pretty_tuple ( terms, |term| self . term ( term) ) ,
308296 Term :: Proj ( _, head_expr, labels) => self . concat ( [
309297 self . term_prec ( Prec :: Atomic , head_expr) ,
310298 self . concat (
@@ -583,6 +571,45 @@ impl<'interner, 'arena> Context<'interner, 'arena> {
583571 self . paren ( prec > Prec :: Let , DocBuilder :: flat_alt ( multi, single) )
584572 . group ( )
585573 }
574+
575+ fn pretty_tuple < T > (
576+ & ' arena self ,
577+ terms : & [ T ] ,
578+ pretty : impl Fn ( & T ) -> DocBuilder < ' arena , Self > ,
579+ ) -> DocBuilder < ' arena , Self > {
580+ if terms. len ( ) == 1 {
581+ self . concat ( [
582+ self . text ( "(" ) ,
583+ pretty ( & terms[ 0 ] ) ,
584+ self . text ( "," ) ,
585+ self . text ( ")" ) ,
586+ ] )
587+ } else {
588+ #[ allow( clippy:: redundant_closure) ]
589+ self . sequence (
590+ false ,
591+ self . text ( "(" ) ,
592+ terms. iter ( ) . map ( |term| pretty ( term) ) ,
593+ self . text ( "," ) ,
594+ self . text ( ")" ) ,
595+ )
596+ }
597+ }
598+
599+ fn pretty_record < T > (
600+ & ' arena self ,
601+ fields : & [ T ] ,
602+ pretty : impl Fn ( & T ) -> DocBuilder < ' arena , Self > ,
603+ ) -> DocBuilder < ' arena , Self > {
604+ #[ allow( clippy:: redundant_closure) ]
605+ self . sequence (
606+ true ,
607+ self . text ( "{" ) ,
608+ fields. iter ( ) . map ( |field| pretty ( field) ) ,
609+ self . text ( "," ) ,
610+ self . text ( "}" ) ,
611+ )
612+ }
586613}
587614
588615macro_rules! borrowed_text {
0 commit comments