diff --git a/source/library/Language/Haskell/Brittany/Internal/S3_ToBriDocTools.hs b/source/library/Language/Haskell/Brittany/Internal/S3_ToBriDocTools.hs index 10886a4..6f9c9d4 100644 --- a/source/library/Language/Haskell/Brittany/Internal/S3_ToBriDocTools.hs +++ b/source/library/Language/Haskell/Brittany/Internal/S3_ToBriDocTools.hs @@ -720,6 +720,10 @@ instance DocFlushCommsPost (Maybe GHC.RealSrcSpan) (ToBriDocM BriDocNumbered) wh bd <- bdm pure (i1, BDFlushCommentsPost (GHC.realSrcSpanEnd loc) shouldMark bd) +instance DocFlushCommsPost GHC.EpaLocation (ToBriDocM BriDocNumbered) where + docFlushCommsPost shouldMark epaLocation = + docFlushCommsPost shouldMark (Just $ GHC.epaLocationRealSrcSpan epaLocation) + instance DocFlushCommsPost ann (ToBriDocM BriDocNumbered) => DocFlushCommsPost ann (ToBriDocM [BriDocNumbered]) where docFlushCommsPost shouldMark loc bdm = do diff --git a/source/library/Language/Haskell/Brittany/Internal/ToBriDoc/Expr.hs b/source/library/Language/Haskell/Brittany/Internal/ToBriDoc/Expr.hs index e8d3ff0..a6a9b1b 100644 --- a/source/library/Language/Haskell/Brittany/Internal/ToBriDoc/Expr.hs +++ b/source/library/Language/Haskell/Brittany/Internal/ToBriDoc/Expr.hs @@ -556,7 +556,10 @@ layoutExpr lexpr@(L _ expr) = do -- to making brittany idempotent, even though the result is non-optimal -- if "let" is moved horizontally as part of the transformation, as the -- comments before the first let item are moved horizontally with it. - letDoc <- shareDoc $ wrapLet $ docLit $ Text.pack "let" + letDoc <- shareDoc + $ docFlushCommsPost True spanLet + $ wrapLet + $ docLitS "let" inDoc <- shareDoc $ wrapIn $ docLit $ Text.pack "in" docSetBaseAndIndent $ case fmap snd mBindDocs of Just [bindDoc] -> runFilteredAlternative $ do diff --git a/source/library/Language/Haskell/Brittany/Internal/ToBriDoc/Stmt.hs b/source/library/Language/Haskell/Brittany/Internal/ToBriDoc/Stmt.hs index 5561ab1..25959c5 100644 --- a/source/library/Language/Haskell/Brittany/Internal/ToBriDoc/Stmt.hs +++ b/source/library/Language/Haskell/Brittany/Internal/ToBriDoc/Stmt.hs @@ -47,18 +47,20 @@ layoutStmt lstmt@(L _ stmt) = do ] ] LetStmt epAnn binds -> docHandleComms epAnn $ do + let spanLet = obtainAnnPos epAnn AnnLet + letDoc <- shareDoc $ docFlushCommsPost True spanLet $ docLitS "let" let isFree = indentPolicy == IndentPolicyFree let indentFourPlus = indentAmount >= 4 (wrapBinds, bindrDocsMay) <- callLayouter layout_localBinds binds case bindrDocsMay of - Nothing -> docLit $ Text.pack "let" + Nothing -> letDoc -- i just tested the above, and it is indeed allowed. heh. - Just (_, []) -> docLit $ Text.pack "let" -- this probably never happens + Just (_, []) -> letDoc -- this probably never happens Just (_, [bindDoc]) -> docAlt [ -- let bind = expr docCols ColDoLet - [ appSep $ docLit $ Text.pack "let" + [ appSep $ letDoc , let f = case indentPolicy of IndentPolicyFree -> docSetBaseAndIndent @@ -71,7 +73,7 @@ layoutStmt lstmt@(L _ stmt) = do , -- let -- bind = expr docAddBaseY BrIndentRegular $ docPar - (docLit $ Text.pack "let") + letDoc (wrapBinds $ docSetBaseAndIndent $ return bindDoc) ] Just (_, bindDocs) -> runFilteredAlternative $ do @@ -79,7 +81,7 @@ layoutStmt lstmt@(L _ stmt) = do -- bbb = exprb -- ccc = exprc addAlternativeCond (isFree || indentFourPlus) $ docSeq - [ appSep $ docLit $ Text.pack "let" + [ appSep $ letDoc , let f = if indentFourPlus then docEnsureIndent BrIndentRegular @@ -93,7 +95,7 @@ layoutStmt lstmt@(L _ stmt) = do addAlternativeCond (not indentFourPlus) $ docAddBaseY BrIndentRegular $ docPar - (docLit $ Text.pack "let") + letDoc (wrapBinds $ docSetBaseAndIndent $ docLines $ return <$> bindDocs) RecStmt epAnn (L _ stmts) _ _ _ _ _ -> docHandleComms epAnn $ runFilteredAlternative $ do