From 6721a443597731ff58821141d9585bf6429213ca Mon Sep 17 00:00:00 2001
From: Lennart Spitzner <hexagoxel@hexagoxel.de>
Date: Sat, 20 May 2023 16:09:01 +0200
Subject: [PATCH] Retain comments after lambdacase and at record fields

---
 data/15-regressions.blt                       | 12 ++++++++++
 .../Brittany/Internal/ToBriDoc/Expr.hs        | 23 +++++++++++--------
 2 files changed, 25 insertions(+), 10 deletions(-)

diff --git a/data/15-regressions.blt b/data/15-regressions.blt
index 8e9517c..f101136 100644
--- a/data/15-regressions.blt
+++ b/data/15-regressions.blt
@@ -1015,3 +1015,15 @@ catchFunc = do
         aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
     )
     `catch` catcher
+
+#test comment after lambdacase
+func = \case
+  -- zzz
+  False -> 0
+  True  -> 1
+
+#test comment for recordfield
+func = myRecord { field      = -- comment
+                               if some condition then option one else option two
+                , otherfield = "text"
+                }
diff --git a/source/library/Language/Haskell/Brittany/Internal/ToBriDoc/Expr.hs b/source/library/Language/Haskell/Brittany/Internal/ToBriDoc/Expr.hs
index a6a9b1b..a808a6f 100644
--- a/source/library/Language/Haskell/Brittany/Internal/ToBriDoc/Expr.hs
+++ b/source/library/Language/Haskell/Brittany/Internal/ToBriDoc/Expr.hs
@@ -124,19 +124,22 @@ layoutExpr lexpr@(L _ expr) = do
       docSetParSpacing
         $ docAddBaseY BrIndentRegular
         $ (docLit $ Text.pack "\\case {}")
-    HsLamCase _ (MG _ lmatches@(L _ matches) _) -> do
+    HsLamCase epAnn (MG _ lmatches@(L _ matches) _) -> do
       binderDoc   <- docLit $ Text.pack "->"
       layouters <- mAsk
       funcPatDocs <-
         layout_patternBind layouters Nothing binderDoc `mapM` matches
-      docSetParSpacing $ docAddBaseY BrIndentRegular $ docPar
-        (docLit $ Text.pack "\\case")
-        ( docSetBaseAndIndent
-        $ docNonBottomSpacing
-        $ docHandleComms lmatches
-        $ docLines
-        $ return <$> funcPatDocs
-        )
+      docSetParSpacing
+        $ docAddBaseY BrIndentRegular
+        $ docHandleComms epAnn
+        $ docPar
+          (docLit $ Text.pack "\\case")
+          ( docSetBaseAndIndent
+          $ docNonBottomSpacing
+          $ docHandleComms lmatches
+          $ docLines
+          $ return <$> funcPatDocs
+          )
     HsApp _ exp1 _ -> do
       let gather
             :: [(EpAnnCO, LHsExpr GhcPs)]
@@ -1015,7 +1018,7 @@ recordExpression dotdot wrapO wrapDD wrapC indentPolicy _lexpr nameDoc nameLayou
                   [AddCommaAnn span] -> Just $ epaLocationRealSrcSpanStart span
                   _                  -> Nothing
                 SrcSpanAnn EpAnnNotUsed _ -> Nothing
-          fnameDoc <- shareDoc $ nameLayouter nameThing
+          fnameDoc <- shareDoc $ docHandleComms fEpAnn $ nameLayouter nameThing
           if pun
             then pure $ Left (posStart, fnameDoc)
             else do