@@ -466,10 +466,7 @@ impl<'a> Formatter<'a> {
466466
467467 UntypedExpr :: BinOp {
468468 name, left, right, ..
469- } => self
470- . expr ( left)
471- . append ( name)
472- . append ( self . expr ( right. as_ref ( ) ) ) ,
469+ } => self . bin_op ( name, left, right) ,
473470
474471 UntypedExpr :: Let {
475472 value,
@@ -515,7 +512,33 @@ impl<'a> Formatter<'a> {
515512 commented ( document, comments)
516513 }
517514
515+ pub fn bin_op ( & mut self , name : & BinOp , left : & UntypedExpr , right : & UntypedExpr ) -> Document {
516+ let precedence = name. precedence ( ) ;
517+ let left_precedence = left. binop_precedence ( ) ;
518+ let right_precedence = right. binop_precedence ( ) ;
519+ let left = self . expr ( left) ;
520+ let right = self . expr ( right) ;
521+ self . operator_side ( left, precedence, left_precedence)
522+ . append ( name)
523+ . append ( self . operator_side ( right, precedence, right_precedence) )
524+ }
525+
526+ pub fn operator_side ( & mut self , doc : Document , op : u8 , side : u8 ) -> Document {
527+ if op > side {
528+ delim ( "{" )
529+ . append ( doc)
530+ . nest ( INDENT )
531+ . append ( break_ ( "" , " " ) )
532+ . append ( "}" )
533+ . group ( )
534+ } else {
535+ doc
536+ }
537+ }
538+
518539 fn pipe ( & mut self , left : & UntypedExpr , right : & UntypedExpr ) -> Document {
540+ let left_precedence = left. binop_precedence ( ) ;
541+ let right_precedence = right. binop_precedence ( ) ;
519542 let left = self . expr ( left) ;
520543 let right = match right {
521544 UntypedExpr :: Fn {
@@ -527,10 +550,10 @@ impl<'a> Formatter<'a> {
527550 _ => self . expr ( right) ,
528551 } ;
529552 force_break ( )
530- . append ( left)
553+ . append ( self . operator_side ( left, 4 , left_precedence ) )
531554 . append ( line ( ) )
532555 . append ( "|> " )
533- . append ( right)
556+ . append ( self . operator_side ( right, 4 , right_precedence ) )
534557 }
535558
536559 fn pipe_capture_right_hand_side ( & mut self , fun : & UntypedExpr ) -> Document {
0 commit comments