@@ -85,9 +85,9 @@ p_matchGroup'
8585 -> MatchGroup GhcPs (Located body)
8686 -> R ()
8787p_matchGroup' placer pretty style MG {..} =
88− locatedVia Nothing mg_alts $
89− newlineSep (located' (\m@Match {..} ->
90− p_match' placer pretty style (isInfixMatch m) (matchStrictness m) m_pats m_grhss))
88+ sep newline (located' (\m@Match {..} ->
89+ p_match' placer pretty style (isInfixMatch m) (matchStrictness m) m_pats m_grhss))
90+ (unLoc mg_alts)
9191p_matchGroup' _ _ _ (XMatchGroup NoExt) = notImplemented "XMatchGroup"
9292
9393matchStrictness :: Match id body -> SrcStrictness
@@ -137,8 +137,8 @@ p_match' placer pretty style isInfix strictness m_pats m_grhss = do
137137 inci' = if isOneLineSpan combinedSpans
138138 then id
139139 else inci
140− switchLayout combinedSpans $ do
141− let stdCase = velt' (located' p_pat <$> m_pats)
140+ switchLayout [combinedSpans] $ do
141+ let stdCase = sep breakpoint (located' p_pat) m_pats
142142 case style of
143143 Function name ->
144144 p_infixDefHelper
@@ -201,12 +201,12 @@ p_match' placer pretty style isInfix strictness m_pats m_grhss = do
201201 if isCase style && hasGuards
202202 then RightArrow
203203 else EqualSign
204− newlineSep (located' (p_grhs' pretty groupStyle)) grhssGRHSs
204+ sep newline (located' (p_grhs' pretty groupStyle)) grhssGRHSs
205205 let whereLocation = combineSrcSpans patGrhssSpan $ getLoc grhssLocalBinds
206206 whereIsEmpty = GHC.isEmptyLocalBindsPR (unLoc grhssLocalBinds)
207207 unless (GHC.eqEmptyLocalBinds (unLoc grhssLocalBinds))
208208 . inciLocalBinds
209− . switchLayout whereLocation $ do
209+ . switchLayout [whereLocation] $ do
210210 if whereIsEmpty then newline else breakpoint
211211 txt "where"
212212 unless whereIsEmpty $ do
@@ -214,8 +214,8 @@ p_match' placer pretty style isInfix strictness m_pats m_grhss = do
214214 inci (located grhssLocalBinds p_hsLocalBinds)
215215 case style of
216216 Lambda -> placeHanging placement $
217− switchLayout patGrhssSpan p_body
218− _ -> switchLayout patGrhssSpan $
217+ switchLayout [patGrhssSpan] p_body
218+ _ -> switchLayout [patGrhssSpan] $
219219 placeHanging placement p_body
220220
221221p_grhs :: GroupStyle -> GRHS GhcPs (LHsExpr GhcPs) -> R ()
@@ -232,7 +232,7 @@ p_grhs' pretty style (GRHS NoExt guards body) =
232232 [] -> p_body
233233 xs -> do
234234 txt "| "
235− velt $ withSep comma (located' p_stmt) xs
235+ sitcc (sep (comma >> breakpoint) (sitcc . located' p_stmt) xs)
236236 space
237237 txt $ case style of
238238 EqualSign -> "="
@@ -298,7 +298,7 @@ p_hsCmd = \case
298298 HsCmdDo NoExt es -> do
299299 txt "do"
300300 newline
301− inci (located es (newlineSep (located' (sitcc . p_stmt' p_hsCmd))))
301+ inci (located es (sitcc . sep newline (located' (sitcc . p_stmt' p_hsCmd))))
302302 HsCmdWrap {} -> notImplemented "HsCmdWrap"
303303 XCmd {} -> notImplemented "XCmd"
304304
@@ -368,7 +368,7 @@ p_stmt' pretty = \case
368368 inci (p_hsExpr x)
369369 RecStmt {..} -> do
370370 txt "rec "
371− sitcc $ newlineSep (located' (p_stmt' pretty)) recS_stmts
371+ sitcc $ sep newline (located' (p_stmt' pretty)) recS_stmts
372372 XStmtLR {} -> notImplemented "XStmtLR"
373373
374374gatherStmt :: ExprLStmt GhcPs -> [[ExprLStmt GhcPs]]
@@ -393,7 +393,7 @@ p_hsLocalBinds = \case
393393 (Left <$> bagToList bag) ++ (Right <$> lsigs)
394394 p_item (Left x) = located x p_valDecl'
395395 p_item (Right x) = located x p_sigDecl'
396− newlineSep (sitcc . p_item) (sortOn ssStart items)
396+ sitcc $ sep newline (sitcc . p_item) (sortOn ssStart items)
397397 HsValBinds NoExt _ -> notImplemented "HsValBinds"
398398 HsIPBinds NoExt _ -> notImplemented "HsIPBinds"
399399 EmptyLocalBinds NoExt -> return ()
@@ -439,7 +439,7 @@ p_hsExpr = \case
439439 txt "\\case"
440440 newline
441441 inci (p_matchGroup LambdaCase mgroup)
442− HsApp NoExt f x -> do
442+ HsApp NoExt f x -> sitcc $ do
443443 located f p_hsExpr
444444 breakpoint
445445 inci (located x p_hsExpr)
@@ -479,9 +479,11 @@ p_hsExpr = \case
479479 case boxity of
480480 Boxed -> parens
481481 Unboxed -> parensHash
482− parens' $ if isSection
483− then sequence_ (withSep (txt ",") (located' p_hsTupArg) args)
484− else velt (withSep comma (located' p_hsTupArg) args)
482+ if isSection
483+ then switchLayout [] . parens' $
484+ sep comma (located' p_hsTupArg) args
485+ else switchLayout (getLoc <$> args) . parens' . sitcc $
486+ sep (comma >> breakpoint) (sitcc . located' p_hsTupArg) args
485487 ExplicitSum NoExt tag arity e -> do
486488 let before = tag - 1
487489 after = arity - before - 1
@@ -496,7 +498,7 @@ p_hsExpr = \case
496498 unless isFirst space
497499 located l p_hsExpr
498500 unless isLast space
499− parensHash $ sequence_ (withSep (txt "|") f (zip args [0..]))
501+ parensHash $ sep (txt "|") f (zip args [0..])
500502 HsCase NoExt e mgroup -> do
501503 txt "case "
502504 located e p_hsExpr
@@ -518,7 +520,7 @@ p_hsExpr = \case
518520 inci (p_hsExpr x)
519521 HsMultiIf NoExt guards -> do
520522 txt "if "
521− sitcc $ newlineSep (located' (p_grhs RightArrow)) guards
523+ sitcc $ sep newline (located' (p_grhs RightArrow)) guards
522524 HsLet NoExt localBinds e -> do
523525 txt "let "
524526 sitcc (located localBinds p_hsLocalBinds)
@@ -529,16 +531,14 @@ p_hsExpr = \case
529531 let doBody header = do
530532 txt header
531533 newline
532− inci $ located es (newlineSep (located' (sitcc . p_stmt)))
533− compBody = brackets $ located es $ \xs -> do
534− let p_parBody =
535− sequence_ .
536− intersperse breakpoint .
537− withSep (txt "| ") p_seqBody
538− p_seqBody =
539− sequence_ .
540− intersperse (vlayout (pure ()) newline) .
541− withSep comma (located' (sitcc . p_stmt))
534+ inci $ located es (sep newline (located' (sitcc . p_stmt)))
535+ compBody = brackets $ located es $ \xs -> do
536+ let p_parBody = sitcc . sep
537+ (breakpoint >> txt "| ")
538+ p_seqBody
539+ p_seqBody = sitcc . sep
540+ (comma >> breakpoint)
541+ (located' (sitcc . p_stmt))
542542 stmts = init xs
543543 yield = last xs
544544 lists = foldr (liftAppend . gatherStmt) [] stmts
@@ -557,7 +557,7 @@ p_hsExpr = \case
557557 ParStmtCtxt _ -> notImplemented "ParStmtCtxt"
558558 TransStmtCtxt _ -> notImplemented "TransStmtCtxt"
559559 ExplicitList _ _ xs ->
560− brackets $ velt (withSep comma (located' p_hsExpr) xs)
560+ brackets . sitcc $ sep (comma >> breakpoint) (sitcc . located' p_hsExpr) xs
561561 RecordCon {..} -> do
562562 located rcon_con_name atom
563563 breakpoint
@@ -567,11 +567,12 @@ p_hsExpr = \case
567567 case rec_dotdot of
568568 Just {} -> [txt ".."]
569569 Nothing -> []
570− inci $ braces $ velt (withSep comma id (fields <> dotdot))
570+ inci . braces . sitcc $ sep (comma >> breakpoint) sitcc (fields <> dotdot)
571571 RecordUpd {..} -> do
572572 located rupd_expr p_hsExpr
573573 breakpoint
574− inci $ braces $ velt (withSep comma (located' p_hsRecField) rupd_flds)
574+ inci . braces . sitcc $
575+ sep (comma >> breakpoint) (sitcc . located' p_hsRecField) rupd_flds
575576 ExprWithTySig affix x -> sitcc $ do
576577 located x p_hsExpr
577578 breakpoint
@@ -582,21 +583,21 @@ p_hsExpr = \case
582583 located hsib_body p_hsType
583584 ArithSeq NoExt _ x -> do
584585 case x of
585− From from -> brackets $ do
586+ From from -> brackets . sitcc $ do
586587 located from p_hsExpr
587588 breakpoint
588589 txt ".."
589− FromThen from next -> brackets $ do
590− velt (withSep comma (located' p_hsExpr) [from, next])
590+ FromThen from next -> brackets . sitcc $ do
591+ sitcc $ sep (comma >> breakpoint) (located' p_hsExpr) [from, next]
591592 breakpoint
592593 txt ".."
593− FromTo from to -> brackets $ do
594+ FromTo from to -> brackets . sitcc $ do
594595 located from p_hsExpr
595596 breakpoint
596597 txt ".. "
597598 located to p_hsExpr
598− FromThenTo from next to -> brackets $ do
599− velt (withSep comma (located' p_hsExpr) [from, next])
599+ FromThenTo from next to -> brackets . sitcc $ do
600+ sitcc $ sep (comma >> breakpoint) (located' p_hsExpr) [from, next]
600601 breakpoint
601602 txt ".. "
602603 located to p_hsExpr
@@ -680,9 +681,9 @@ p_patSynBind (XPatSynBind NoExt) = notImplemented "XPatSynBind"
680681p_patSynDetails :: HsPatSynDetails (Located RdrName) -> R ()
681682p_patSynDetails = \case
682683 PrefixCon xs ->
683− velt' (p_rdrName <$> xs)
684+ sitcc $ sep breakpoint p_rdrName xs
684685 RecCon xs ->
685− velt' (p_rdrName . recordPatSynPatVar <$> xs)
686+ sitcc $ sep breakpoint (p_rdrName . recordPatSynPatVar) xs
686687 InfixCon _ _ -> notImplemented "InfixCon"
687688
688689p_pat :: Pat GhcPs -> R ()
@@ -702,13 +703,13 @@ p_pat = \case
702703 txt "!"
703704 located pat p_pat
704705 ListPat NoExt pats -> do
705− brackets $ velt (withSep comma (located' p_pat) pats)
706+ brackets . sitcc $ sep (comma >> breakpoint) (located' p_pat) pats
706707 TuplePat NoExt pats boxing -> do
707708 let f =
708709 case boxing of
709710 Boxed -> parens
710711 Unboxed -> parensHash
711− f $ velt (withSep comma (located' p_pat) pats)
712+ f . sitcc $ sep (comma >> breakpoint) (sitcc . located' p_pat) pats
712713 SumPat NoExt pat _ _ -> do
713714 -- XXX I'm not sure about this one.
714715 located pat p_pat
@@ -718,14 +719,14 @@ p_pat = \case
718719 p_rdrName pat
719720 unless (null xs) $ do
720721 breakpoint
721− inci $ velt' (located' p_pat <$> xs)
722+ inci . sitcc $ sep breakpoint (sitcc . located' p_pat) xs
722723 RecCon (HsRecFields fields dotdot) -> do
723724 p_rdrName pat
724725 breakpoint
725726 let f = \case
726727 Nothing -> txt ".."
727728 Just x -> located x p_pat_hsRecField
728− inci . braces . velt . withSep comma f $ case dotdot of
729+ inci . braces . sitcc . sep (comma >> breakpoint) f $ case dotdot of
729730 Nothing -> Just <$> fields
730731 Just n -> (Just <$> take n fields) ++ [Nothing]
731732 InfixCon x y -> do
@@ -899,7 +900,7 @@ exprPlacement = \case
899900 RecordCon NoExt _ _ -> Hanging
900901 HsProc NoExt (L s _) _ ->
901902 -- Indentation breaks if pattern is longer than one line and left hanging.
902− -- Consequentally, once apply hanging when it is safe.
903+ -- Consequently, only apply hanging when it is safe.
903904 if isOneLineSpan s
904905 then Hanging
905906 else Normal