@@ -310,7 +310,7 @@ p_hsCmd = \case
310 -- does. Open an issue and ping @yumiova if this ever occurs in output.
310 -- does. Open an issue and ping @yumiova if this ever occurs in output.
311 notImplemented "HsCmdApp"
311 notImplemented "HsCmdApp"
312 HsCmdLam NoExt mgroup -> p_matchGroup' cmdPlacement p_hsCmd Lambda mgroup
312 HsCmdLam NoExt mgroup -> p_matchGroup' cmdPlacement p_hsCmd Lambda mgroup
313− HsCmdPar NoExt c -> parens (located c p_hsCmd)
313+ HsCmdPar NoExt c -> parens N (located c p_hsCmd)
314 HsCmdCase NoExt e mgroup -> do
314 HsCmdCase NoExt e mgroup -> do
315 txt "case"
315 txt "case"
@@ -338,6 +338,7 @@ p_hsCmd = \case
339 sitcc (located localBinds p_hsLocalBinds)
339 sitcc (located localBinds p_hsLocalBinds)
340 breakpoint
340 breakpoint
341+ vlayout space (newline >> txt " ")
343 sitcc (located c p_hsCmd)
344 sitcc (located c p_hsCmd)
@@ -486,7 +487,10 @@ p_hsTupArg = \case
486 XTupArg {} -> notImplemented "XTupArg"
487 XTupArg {} -> notImplemented "XTupArg"
488p_hsExpr :: HsExpr GhcPs -> R ()
489p_hsExpr :: HsExpr GhcPs -> R ()
489−p_hsExpr = \case
490+p_hsExpr = p_hsExpr' N
492+p_hsExpr' :: BracketStyle -> HsExpr GhcPs -> R ()
490 HsVar NoExt name -> p_rdrName name
494 HsVar NoExt name -> p_rdrName name
491 HsUnboundVar NoExt _ -> notImplemented "HsUnboundVar"
495 HsUnboundVar NoExt _ -> notImplemented "HsUnboundVar"
492 HsConLikeOut NoExt _ -> notImplemented "HsConLikeOut"
496 HsConLikeOut NoExt _ -> notImplemented "HsConLikeOut"
@@ -504,8 +508,8 @@ p_hsExpr = \case
504 HsOverLit NoExt v -> atom (ol_val v)
508 HsOverLit NoExt v -> atom (ol_val v)
505 HsLit NoExt lit ->
509 HsLit NoExt lit ->
506 case lit of
510 case lit of
507− HsString (SourceText s) _ -> p_stringLit s
511+ HsString (SourceText stxt) _ -> p_stringLit stxt
508− HsStringPrim (SourceText s) _ -> p_stringLit s
512+ HsStringPrim (SourceText stxt) _ -> p_stringLit stxt
509 r -> atom r
513 r -> atom r
510 HsLam NoExt mgroup ->
514 HsLam NoExt mgroup ->
511 p_matchGroup Lambda mgroup
515 p_matchGroup Lambda mgroup
@@ -519,8 +523,8 @@ p_hsExpr = \case
519 -- and then use 'p_withoutHanging' for the descendants.
523 -- and then use 'p_withoutHanging' for the descendants.
520 let p_withoutHanging (HsApp NoExt f' x') = do
524 let p_withoutHanging (HsApp NoExt f' x') = do
521 case f' of
525 case f' of
522− (L _ (HsApp _ _ _)) -> located f' p_withoutHanging
526+ L _ (HsApp _ _ _) -> located f' p_withoutHanging
523− _ -> located f' p_hsExpr
527+ _ -> located f' (p_hsExpr' s)
524 breakpoint
528 breakpoint
525 inci $ located x' p_hsExpr
529 inci $ located x' p_hsExpr
526 p_withoutHanging e = p_hsExpr e
530 p_withoutHanging e = p_hsExpr e
@@ -552,12 +556,12 @@ p_hsExpr = \case
552 getOpName = \case
556 getOpName = \case
553 HsVar NoExt (L _ a) -> Just a
557 HsVar NoExt (L _ a) -> Just a
554 _ -> Nothing
558 _ -> Nothing
555− p_exprOpTree (reassociateOpTree getOpName opTree)
559+ p_exprOpTree s (reassociateOpTree getOpName opTree)
556 NegApp NoExt e _ -> do
560 NegApp NoExt e _ -> do
559 located e p_hsExpr
563 located e p_hsExpr
560− HsPar NoExt e -> parens (located e p_hsExpr)
564+ HsPar NoExt e -> parens s (located e p_hsExpr)
561 SectionL NoExt x op -> do
565 SectionL NoExt x op -> do
562 located x p_hsExpr
566 located x p_hsExpr
563 breakpoint
567 breakpoint
@@ -576,12 +580,12 @@ p_hsExpr = \case
576 Boxed -> parens
580 Boxed -> parens
577 Unboxed -> parensHash
581 Unboxed -> parensHash
578 if isSection
582 if isSection
579− then switchLayout [] . parens' $
583+ then switchLayout [] . parens' s $
580 sep comma (located' p_hsTupArg) args
584 sep comma (located' p_hsTupArg) args
581− else switchLayout (getLoc <$> args) . parens' . sitcc $
585+ else switchLayout (getLoc <$> args) . parens' s . sitcc $
582 sep (comma >> breakpoint) (sitcc . located' p_hsTupArg) args
586 sep (comma >> breakpoint) (sitcc . located' p_hsTupArg) args
583 ExplicitSum NoExt tag arity e ->
587 ExplicitSum NoExt tag arity e ->
584− p_unboxedSum tag arity (located e p_hsExpr)
588+ p_unboxedSum N tag arity (located e p_hsExpr)
585 HsCase NoExt e mgroup -> do
589 HsCase NoExt e mgroup -> do
586 txt "case"
590 txt "case"
@@ -620,8 +624,8 @@ p_hsExpr = \case
620 txt header
624 txt header
621 breakpoint
625 breakpoint
622 ub <- vlayout (return useBraces) (return id)
626 ub <- vlayout (return useBraces) (return id)
623− inci $ sepSemi (located' (ub . p_stmt)) (unLoc es)
627+ inci $ sepSemi (located' (ub . p_stmt' (p_hsExpr' S))) (unLoc es)
624− compBody = brackets $ located es $ \xs -> do
628+ compBody = brackets N $ located es $ \xs -> do
625 let p_parBody = sep
629 let p_parBody = sep
626 (breakpoint >> txt "| ")
630 (breakpoint >> txt "| ")
627 p_seqBody
631 p_seqBody
@@ -647,7 +651,8 @@ p_hsExpr = \case
647 ParStmtCtxt _ -> notImplemented "ParStmtCtxt"
651 ParStmtCtxt _ -> notImplemented "ParStmtCtxt"
648 TransStmtCtxt _ -> notImplemented "TransStmtCtxt"
652 TransStmtCtxt _ -> notImplemented "TransStmtCtxt"
649 ExplicitList _ _ xs ->
653 ExplicitList _ _ xs ->
654+ brackets s . sitcc $
650− brackets . sitcc $ sep (comma >> breakpoint) (sitcc . located' p_hsExpr) xs
655+ sep (comma >> breakpoint) (sitcc . located' p_hsExpr) xs
651 RecordCon {..} -> do
656 RecordCon {..} -> do
652 located rcon_con_name atom
657 located rcon_con_name atom
653 breakpoint
658 breakpoint
@@ -662,7 +667,8 @@ p_hsExpr = \case
662 case rec_dotdot of
667 case rec_dotdot of
663 Just {} -> [txt ".."]
668 Just {} -> [txt ".."]
664 Nothing -> []
669 Nothing -> []
670+ inci . braces N . sitcc $
665− inci . braces . sitcc $ sep (comma >> breakpoint) sitcc (fields <> dotdot)
671+ sep (comma >> breakpoint) sitcc (fields <> dotdot)
666 RecordUpd {..} -> do
672 RecordUpd {..} -> do
667 located rupd_expr p_hsExpr
673 located rupd_expr p_hsExpr
668 breakpoint
674 breakpoint
@@ -672,7 +678,7 @@ p_hsExpr = \case
672 Unambiguous _ n -> n
678 Unambiguous _ n -> n
673 XAmbiguousFieldOcc _ -> notImplemented "XAmbiguousFieldOcc"
679 XAmbiguousFieldOcc _ -> notImplemented "XAmbiguousFieldOcc"
675− inci . braces . sitcc $
681+ inci . braces N . sitcc $
677 (comma >> breakpoint)
683 (comma >> breakpoint)
678 (sitcc . located' (p_hsRecField . updName))
684 (sitcc . located' (p_hsRecField . updName))
@@ -688,21 +694,21 @@ p_hsExpr = \case
688 located hsib_body p_hsType
694 located hsib_body p_hsType
689 ArithSeq NoExt _ x -> do
695 ArithSeq NoExt _ x -> do
690 case x of
696 case x of
691− From from -> brackets . sitcc $ do
697+ From from -> brackets s . sitcc $ do
692 located from p_hsExpr
698 located from p_hsExpr
693 breakpoint
699 breakpoint
695− FromThen from next -> brackets . sitcc $ do
701+ FromThen from next -> brackets s . sitcc $ do
696 sitcc $ sep (comma >> breakpoint) (located' p_hsExpr) [from, next]
702 sitcc $ sep (comma >> breakpoint) (located' p_hsExpr) [from, next]
697 breakpoint
703 breakpoint
699− FromTo from to -> brackets . sitcc $ do
705+ FromTo from to -> brackets s . sitcc $ do
700 located from p_hsExpr
706 located from p_hsExpr
701 breakpoint
707 breakpoint
704 located to p_hsExpr
710 located to p_hsExpr
705− FromThenTo from next to -> brackets . sitcc $ do
711+ FromThenTo from next to -> brackets s . sitcc $ do
706 sitcc $ sep (comma >> breakpoint) (located' p_hsExpr) [from, next]
712 sitcc $ sep (comma >> breakpoint) (located' p_hsExpr) [from, next]
707 breakpoint
713 breakpoint
@@ -799,7 +805,7 @@ p_patSynBind PSB {..} = do
799 inci $ do
805 inci $ do
800 switchLayout (getLoc . recordPatSynPatVar <$> xs) $ do
806 switchLayout (getLoc . recordPatSynPatVar <$> xs) $ do
801 unless (null xs) breakpoint
807 unless (null xs) breakpoint
802− braces . sitcc $
808+ braces N . sitcc $
803 sep (comma >> breakpoint) (p_rdrName . recordPatSynPatVar) xs
809 sep (comma >> breakpoint) (p_rdrName . recordPatSynPatVar) xs
804 breakpoint
810 breakpoint
@@ -829,20 +835,20 @@ p_pat = \case
830 located pat p_pat
836 located pat p_pat
831 ParPat NoExt pat ->
837 ParPat NoExt pat ->
832− located pat (parens . p_pat)
838+ located pat (parens S . p_pat)
833 BangPat NoExt pat -> do
839 BangPat NoExt pat -> do
835 located pat p_pat
841 located pat p_pat
836 ListPat NoExt pats -> do
842 ListPat NoExt pats -> do
837− brackets . sitcc $ sep (comma >> breakpoint) (located' p_pat) pats
843+ brackets S . sitcc $ sep (comma >> breakpoint) (located' p_pat) pats
838 TuplePat NoExt pats boxing -> do
844 TuplePat NoExt pats boxing -> do
840 case boxing of
846 case boxing of
841− Boxed -> parens
847+ Boxed -> parens S
842− Unboxed -> parensHash
848+ Unboxed -> parensHash S
843 f . sitcc $ sep (comma >> breakpoint) (sitcc . located' p_pat) pats
849 f . sitcc $ sep (comma >> breakpoint) (sitcc . located' p_pat) pats
844 SumPat NoExt pat tag arity ->
850 SumPat NoExt pat tag arity ->
845− p_unboxedSum tag arity (located pat p_pat)
851+ p_unboxedSum S tag arity (located pat p_pat)
846 ConPatIn pat details ->
852 ConPatIn pat details ->
847 case details of
853 case details of
848 PrefixCon xs -> sitcc $ do
854 PrefixCon xs -> sitcc $ do
@@ -856,9 +862,10 @@ p_pat = \case
856 let f = \case
862 let f = \case
857 Nothing -> txt ".."
863 Nothing -> txt ".."
858 Just x -> located x p_pat_hsRecField
864 Just x -> located x p_pat_hsRecField
859− inci . braces . sitcc . sep (comma >> breakpoint) f $ case dotdot of
865+ inci . braces N . sitcc . sep (comma >> breakpoint) f $
860− Nothing -> Just <$> fields
867+ Nothing -> Just <$> fields
861− Just n -> (Just <$> take n fields) ++ [Nothing]
868+ Just n -> (Just <$> take n fields) ++ [Nothing]
862 InfixCon x y -> do
869 InfixCon x y -> do
863 located x p_pat
870 located x p_pat
@@ -898,8 +905,8 @@ p_pat_hsRecField HsRecField {..} = do
898 breakpoint
905 breakpoint
899 inci (located hsRecFieldArg p_pat)
906 inci (located hsRecFieldArg p_pat)
901−p_unboxedSum :: ConTag -> Arity -> R () -> R ()
908+p_unboxedSum :: BracketStyle -> ConTag -> Arity -> R () -> R ()
902−p_unboxedSum tag arity m = do
909+p_unboxedSum s tag arity m = do
903 let before = tag - 1
910 let before = tag - 1
904 after = arity - before - 1
911 after = arity - before - 1
905 args = replicate before Nothing <> [Just m] <> replicate after Nothing
912 args = replicate before Nothing <> [Just m] <> replicate after Nothing
@@ -913,7 +920,7 @@ p_unboxedSum tag arity m = do
913 unless isFirst space
920 unless isFirst space
915 unless isLast space
922 unless isLast space
916− parensHash $ sep (txt "|") f (zip args [0..])
923+ parensHash s $ sep (txt "|") f (zip args [0..])
918p_hsSplice :: HsSplice GhcPs -> R ()
925p_hsSplice :: HsSplice GhcPs -> R ()
919p_hsSplice = \case
926p_hsSplice = \case
@@ -938,7 +945,7 @@ p_hsSpliceTH
938p_hsSpliceTH isTyped expr = \case
945p_hsSpliceTH isTyped expr = \case
939 HasParens -> do
946 HasParens -> do
940 txt decoSymbol
947 txt decoSymbol
941− parens (located expr (sitcc . p_hsExpr))
948+ parens N (located expr (sitcc . p_hsExpr))
942 HasDollar -> do
949 HasDollar -> do
943 txt decoSymbol
950 txt decoSymbol
944 located expr (sitcc . p_hsExpr)
951 located expr (sitcc . p_hsExpr)
@@ -971,7 +978,7 @@ p_hsBracket = \case
971 (\i -> isPunctuation i || isSymbol i)
978 (\i -> isPunctuation i || isSymbol i)
972 (showOutputable (rdrNameOcc name))
979 (showOutputable (rdrNameOcc name))
973 && not (doesNotNeedExtraParens name)
980 && not (doesNotNeedExtraParens name)
974− wrapper = if isOperator then parens else id
981+ wrapper = if isOperator then parens N else id
975 wrapper $ p_rdrName (noLoc name)
982 wrapper $ p_rdrName (noLoc name)
976 TExpBr NoExt expr -> do
983 TExpBr NoExt expr -> do
977 txt "[||"
984 txt "[||"
@@ -1136,9 +1143,9 @@ exprOpTree :: LHsExpr GhcPs -> OpTree (LHsExpr GhcPs) (LHsExpr GhcPs)
1136exprOpTree (L _ (OpApp NoExt x op y)) = OpBranch (exprOpTree x) op (exprOpTree y)
1143exprOpTree (L _ (OpApp NoExt x op y)) = OpBranch (exprOpTree x) op (exprOpTree y)
1137exprOpTree n = OpNode n
1144exprOpTree n = OpNode n
1139−p_exprOpTree :: OpTree (LHsExpr GhcPs) (LHsExpr GhcPs) -> R ()
1146+p_exprOpTree :: BracketStyle -> OpTree (LHsExpr GhcPs) (LHsExpr GhcPs) -> R ()
1140−p_exprOpTree (OpNode x) = located x p_hsExpr
1147+p_exprOpTree s (OpNode x) = located x (p_hsExpr' s)
1141−p_exprOpTree (OpBranch x op y) = do
1148+p_exprOpTree s (OpBranch x op y) = do
1142 -- NOTE If the beginning of the first argument and the second argument
1149 -- NOTE If the beginning of the first argument and the second argument
1143 -- are on the same line, and the second argument has a hanging form, use
1150 -- are on the same line, and the second argument has a hanging form, use
1144 -- hanging placement.
1151 -- hanging placement.
@@ -1158,12 +1165,12 @@ p_exprOpTree (OpBranch x op y) = do
1158 Hanging -> useBraces
1165 Hanging -> useBraces
1159 Normal -> dontUseBraces)
1166 Normal -> dontUseBraces)
1160 switchLayout [opTreeLoc x] $
1167 switchLayout [opTreeLoc x] $
1161− ub $ p_exprOpTree x
1168+ ub $ p_exprOpTree s x
1162 placeHanging placement $ do
1169 placeHanging placement $ do
1163 located op (opWrapper . p_hsExpr)
1170 located op (opWrapper . p_hsExpr)
1165 switchLayout [opTreeLoc y] $
1172 switchLayout [opTreeLoc y] $
1166− p_exprOpTree y
1173+ p_exprOpTree N y
1168-- | Get annotations for the enclosing element.
1175-- | Get annotations for the enclosing element.