@@ -182,7 +182,8 @@ p_match' placer pretty style isInfix strictness m_pats m_grhss = do
182 BangPat _ _ -> True
182 BangPat _ _ -> True
183 SplicePat _ _ -> True
183 SplicePat _ _ -> True
184 _ -> False
184 _ -> False
185− txt (if needsSpace then "\\ " else "\\")
186+ when needsSpace space
186 sitcc stdCase
187 sitcc stdCase
187 LambdaCase -> stdCase
188 LambdaCase -> stdCase
188 return inci'
189 return inci'
@@ -203,10 +204,10 @@ p_match' placer pretty style isInfix strictness m_pats m_grhss = do
203 unless (length grhssGRHSs > 1) $ do
204 unless (length grhssGRHSs > 1) $ do
204 case style of
205 case style of
205 Function _ | hasGuards -> return ()
206 Function _ | hasGuards -> return ()
206− Function _ -> txt " ="
207+ Function _ -> space >> txt "="
207− PatternBind -> txt " ="
208+ PatternBind -> space >> txt "="
208 s | isCase s && hasGuards -> return ()
209 s | isCase s && hasGuards -> return ()
209− _ -> txt " ->"
210+ _ -> space >> txt "->"
210 let grhssSpan = combineSrcSpans' $
211 let grhssSpan = combineSrcSpans' $
211 getGRHSSpan . unLoc <$> NE.fromList grhssGRHSs
212 getGRHSSpan . unLoc <$> NE.fromList grhssGRHSs
212 patGrhssSpan = maybe grhssSpan
213 patGrhssSpan = maybe grhssSpan
@@ -250,7 +251,8 @@ p_grhs' pretty style (GRHS NoExt guards body) =
250 case guards of
251 case guards of
251 [] -> p_body
252 [] -> p_body
253− txt "| "
254+ txt "|"
254 sitcc (sep (comma >> breakpoint) (sitcc . located' p_stmt) xs)
256 sitcc (sep (comma >> breakpoint) (sitcc . located' p_stmt) xs)
256 txt $ case style of
258 txt $ case style of
@@ -266,9 +268,10 @@ p_hsCmd :: HsCmd GhcPs -> R ()
266p_hsCmd = \case
268p_hsCmd = \case
267 HsCmdArrApp NoExt body input arrType _ -> do
269 HsCmdArrApp NoExt body input arrType _ -> do
268 located body p_hsExpr
270 located body p_hsExpr
269− txt $ case arrType of
272+ case arrType of
270− HsFirstOrderApp -> " -<"
273+ HsFirstOrderApp -> txt "-<"
271− HsHigherOrderApp -> " -<<"
274+ HsHigherOrderApp -> txt "-<<"
272 placeHanging (exprPlacement (unLoc input)) $
275 placeHanging (exprPlacement (unLoc input)) $
273 located input p_hsExpr
276 located input p_hsExpr
274 HsCmdArrForm NoExt form Prefix _ cmds -> banana $ sitcc $ do
277 HsCmdArrForm NoExt form Prefix _ cmds -> banana $ sitcc $ do
@@ -290,13 +293,16 @@ p_hsCmd = \case
290 HsCmdLam NoExt mgroup -> p_matchGroup' cmdPlacement p_hsCmd Lambda mgroup
293 HsCmdLam NoExt mgroup -> p_matchGroup' cmdPlacement p_hsCmd Lambda mgroup
291 HsCmdPar NoExt c -> parens (located c p_hsCmd)
294 HsCmdPar NoExt c -> parens (located c p_hsCmd)
292 HsCmdCase NoExt e mgroup -> do
295 HsCmdCase NoExt e mgroup -> do
293− txt "case "
296+ txt "case"
294 located e p_hsExpr
298 located e p_hsExpr
295− txt " of"
300+ txt "of"
296 breakpoint
301 breakpoint
297 inci (p_matchGroup' cmdPlacement p_hsCmd Case mgroup)
302 inci (p_matchGroup' cmdPlacement p_hsCmd Case mgroup)
298 HsCmdIf NoExt _ if' then' else' -> do
303 HsCmdIf NoExt _ if' then' else' -> do
299− txt "if "
304+ txt "if"
300 located if' p_hsExpr
306 located if' p_hsExpr
301 breakpoint
307 breakpoint
302 txt "then"
308 txt "then"
@@ -309,10 +315,12 @@ p_hsCmd = \case
309 breakpoint
315 breakpoint
310 inci (p_hsCmd x)
316 inci (p_hsCmd x)
311 HsCmdLet NoExt localBinds c -> do
317 HsCmdLet NoExt localBinds c -> do
312− txt "let "
318+ txt "let"
313 sitcc (located localBinds p_hsLocalBinds)
320 sitcc (located localBinds p_hsLocalBinds)
314 breakpoint
321 breakpoint
315− txt "in "
322+ txt "in"
316 sitcc (located c p_hsCmd)
324 sitcc (located c p_hsCmd)
317 HsCmdDo NoExt es -> do
325 HsCmdDo NoExt es -> do
@@ -345,7 +353,8 @@ p_stmt' pretty = \case
345 ApplicativeStmt {} -> notImplemented "ApplicativeStmt" -- generated by renamer
353 ApplicativeStmt {} -> notImplemented "ApplicativeStmt" -- generated by renamer
346 BodyStmt NoExt body _ _ -> located body pretty
354 BodyStmt NoExt body _ _ -> located body pretty
347 LetStmt NoExt binds -> do
355 LetStmt NoExt binds -> do
348− txt "let "
356+ txt "let"
349 sitcc $ located binds p_hsLocalBinds
358 sitcc $ located binds p_hsLocalBinds
350 ParStmt {} ->
359 ParStmt {} ->
351 -- NOTE 'ParStmt' should always be eliminated in 'gatherStmt' already,
360 -- NOTE 'ParStmt' should always be eliminated in 'gatherStmt' already,
@@ -386,7 +395,8 @@ p_stmt' pretty = \case
386 breakpoint
395 breakpoint
387 inci (p_hsExpr x)
396 inci (p_hsExpr x)
388 RecStmt {..} -> do
397 RecStmt {..} -> do
389− txt "rec "
398+ txt "rec"
390 sitcc $ sepSemi (located' (p_stmt' pretty)) recS_stmts
400 sitcc $ sepSemi (located' (p_stmt' pretty)) recS_stmts
391 XStmtLR {} -> notImplemented "XStmtLR"
401 XStmtLR {} -> notImplemented "XStmtLR"
@@ -429,7 +439,8 @@ p_hsLocalBinds = \case
429 -- Second argument of IPBind is always Left before type-checking.
439 -- Second argument of IPBind is always Left before type-checking.
430 let p_ipBind (IPBind NoExt (Left name) expr) = do
440 let p_ipBind (IPBind NoExt (Left name) expr) = do
431 atom name
441 atom name
432− txt " ="
443+ txt "="
433 breakpoint
444 breakpoint
434 useBraces $ inci $ located expr p_hsExpr
445 useBraces $ inci $ located expr p_hsExpr
435 p_ipBind _ = notImplemented "XHsIPBinds"
446 p_ipBind _ = notImplemented "XHsIPBinds"
@@ -445,7 +456,8 @@ p_hsRecField
445p_hsRecField = \HsRecField {..} -> do
456p_hsRecField = \HsRecField {..} -> do
446 located hsRecFieldLbl atom
457 located hsRecFieldLbl atom
447 unless hsRecPun $ do
458 unless hsRecPun $ do
448− txt " ="
460+ txt "="
449 let placement = exprPlacement (unLoc hsRecFieldArg)
461 let placement = exprPlacement (unLoc hsRecFieldArg)
450 placeHanging placement $ located hsRecFieldArg p_hsExpr
462 placeHanging placement $ located hsRecFieldArg p_hsExpr
@@ -513,7 +525,8 @@ p_hsExpr = \case
514 located y p_hsExpr
526 located y p_hsExpr
515 NegApp NoExt e _ -> do
527 NegApp NoExt e _ -> do
516− txt "- "
528+ txt "-"
517 located e p_hsExpr
530 located e p_hsExpr
518 HsPar NoExt e -> parens (located e p_hsExpr)
531 HsPar NoExt e -> parens (located e p_hsExpr)
519 SectionL NoExt x op -> do
532 SectionL NoExt x op -> do
@@ -541,13 +554,16 @@ p_hsExpr = \case
541 ExplicitSum NoExt tag arity e ->
554 ExplicitSum NoExt tag arity e ->
542 p_unboxedSum tag arity (located e p_hsExpr)
555 p_unboxedSum tag arity (located e p_hsExpr)
543 HsCase NoExt e mgroup -> do
556 HsCase NoExt e mgroup -> do
544− txt "case "
557+ txt "case"
545 located e p_hsExpr
559 located e p_hsExpr
546− txt " of"
561+ txt "of"
547 breakpoint
562 breakpoint
548 inci (p_matchGroup Case mgroup)
563 inci (p_matchGroup Case mgroup)
549 HsIf NoExt _ if' then' else' -> do
564 HsIf NoExt _ if' then' else' -> do
550− txt "if "
565+ txt "if"
551 located if' p_hsExpr
567 located if' p_hsExpr
552 breakpoint
568 breakpoint
553 inci $ do
569 inci $ do
@@ -563,10 +579,12 @@ p_hsExpr = \case
563 breakpoint
579 breakpoint
564 inci . sitcc $ sep newline (located' (p_grhs RightArrow)) guards
580 inci . sitcc $ sep newline (located' (p_grhs RightArrow)) guards
565 HsLet NoExt localBinds e -> do
581 HsLet NoExt localBinds e -> do
566− txt "let "
582+ txt "let"
567 dontUseBraces $ sitcc (located localBinds p_hsLocalBinds)
584 dontUseBraces $ sitcc (located localBinds p_hsLocalBinds)
568− vlayout space (newline >> space)
585+ vlayout space (newline >> txt " ")
569− txt "in "
586+ txt "in"
570 sitcc (located e p_hsExpr)
588 sitcc (located e p_hsExpr)
571 HsDo NoExt ctx es -> do
589 HsDo NoExt ctx es -> do
572 let doBody header = do
590 let doBody header = do
@@ -586,7 +604,8 @@ p_hsExpr = \case
586 lists = foldr (liftAppend . gatherStmt) [] stmts
604 lists = foldr (liftAppend . gatherStmt) [] stmts
587 located yield p_stmt
605 located yield p_stmt
588 breakpoint
606 breakpoint
589− txt "| "
607+ txt "|"
590 p_parBody lists
609 p_parBody lists
591 case ctx of
610 case ctx of
592 DoExpr -> doBody "do"
611 DoExpr -> doBody "do"
@@ -619,7 +638,8 @@ p_hsExpr = \case
619 located x p_hsExpr
638 located x p_hsExpr
620 breakpoint
639 breakpoint
621 inci $ do
640 inci $ do
622− txt ":: "
641+ txt "::"
623 let HsWC {..} = affix
643 let HsWC {..} = affix
624 HsIB {..} = hswc_body
644 HsIB {..} = hswc_body
625 located hsib_body p_hsType
645 located hsib_body p_hsType
@@ -636,12 +656,14 @@ p_hsExpr = \case
636 FromTo from to -> brackets . sitcc $ do
656 FromTo from to -> brackets . sitcc $ do
637 located from p_hsExpr
657 located from p_hsExpr
638 breakpoint
658 breakpoint
639− txt ".. "
659+ txt ".."
640 located to p_hsExpr
661 located to p_hsExpr
641 FromThenTo from next to -> brackets . sitcc $ do
662 FromThenTo from next to -> brackets . sitcc $ do
642 sitcc $ sep (comma >> breakpoint) (located' p_hsExpr) [from, next]
663 sitcc $ sep (comma >> breakpoint) (located' p_hsExpr) [from, next]
643 breakpoint
664 breakpoint
644− txt ".. "
665+ txt ".."
645 located to p_hsExpr
667 located to p_hsExpr
646 HsSCC NoExt _ name x -> do
668 HsSCC NoExt _ name x -> do
647 txt "{-# SCC "
669 txt "{-# SCC "
@@ -688,27 +710,31 @@ p_hsExpr = \case
689p_patSynBind :: PatSynBind GhcPs GhcPs -> R ()
711p_patSynBind :: PatSynBind GhcPs GhcPs -> R ()
690p_patSynBind PSB {..} = do
712p_patSynBind PSB {..} = do
691− txt "pattern "
713+ txt "pattern"
692 case psb_dir of
715 case psb_dir of
693 Unidirectional -> do
716 Unidirectional -> do
694 p_rdrName psb_id
717 p_rdrName psb_id
695 inci $ do
718 inci $ do
696 p_patSynDetails psb_args
719 p_patSynDetails psb_args
697− txt " <-"
721+ txt "<-"
698 breakpoint
722 breakpoint
699 located psb_def p_pat
723 located psb_def p_pat
700 ImplicitBidirectional -> do
724 ImplicitBidirectional -> do
701 p_rdrName psb_id
725 p_rdrName psb_id
702 inci $ do
726 inci $ do
703 p_patSynDetails psb_args
727 p_patSynDetails psb_args
704− txt " ="
729+ txt "="
705 breakpoint
730 breakpoint
706 located psb_def p_pat
731 located psb_def p_pat
707 ExplicitBidirectional mgroup -> do
732 ExplicitBidirectional mgroup -> do
708 p_rdrName psb_id
733 p_rdrName psb_id
709 inci $ do
734 inci $ do
710 p_patSynDetails psb_args
735 p_patSynDetails psb_args
711− txt " <-"
737+ txt "<-"
712 breakpoint
738 breakpoint
713 located psb_def p_pat
739 located psb_def p_pat
@@ -779,7 +805,8 @@ p_pat = \case
779 ConPatOut {} -> notImplemented "ConPatOut" -- presumably created by renamer?
805 ConPatOut {} -> notImplemented "ConPatOut" -- presumably created by renamer?
780 ViewPat NoExt expr pat -> sitcc $ do
806 ViewPat NoExt expr pat -> sitcc $ do
781 located expr p_hsExpr
807 located expr p_hsExpr
782− txt " ->"
809+ txt "->"
783 breakpoint
810 breakpoint
784 inci (located pat p_pat)
811 inci (located pat p_pat)
785 SplicePat NoExt splice -> p_hsSplice splice
812 SplicePat NoExt splice -> p_hsSplice splice
@@ -789,7 +816,8 @@ p_pat = \case
789 p_rdrName n
816 p_rdrName n
790 breakpoint
817 breakpoint
791 inci $ do
818 inci $ do
792− txt "+ "
819+ txt "+"
793 located k (atom . ol_val)
821 located k (atom . ol_val)
794 SigPat hswc pat -> do
822 SigPat hswc pat -> do
795 located pat p_pat
823 located pat p_pat
@@ -802,7 +830,8 @@ p_pat_hsRecField HsRecField {..} = do
802 located hsRecFieldLbl $ \x ->
830 located hsRecFieldLbl $ \x ->
803 p_rdrName (rdrNameFieldOcc x)
831 p_rdrName (rdrNameFieldOcc x)
804 unless hsRecPun $ do
832 unless hsRecPun $ do
805− txt " ="
834+ txt "="
806 breakpoint
835 breakpoint
807 inci (located hsRecFieldArg p_pat)
836 inci (located hsRecFieldArg p_pat)