From bdee27cb5989931dc4a634c240c407b10d85a865 Mon Sep 17 00:00:00 2001
From: Lennart Spitzner <hexagoxel@hexagoxel.de>
Date: Fri, 25 May 2018 17:57:36 +0200
Subject: [PATCH] Add spaces around record braces (single-line) (fixes #126)

---
 src-literatetests/15-regressions.blt          |  8 ++++----
 src-literatetests/30-tests-context-free.blt   |  2 +-
 .../Brittany/Internal/Layouters/Expr.hs       | 20 ++++++++++---------
 3 files changed, 16 insertions(+), 14 deletions(-)

diff --git a/src-literatetests/15-regressions.blt b/src-literatetests/15-regressions.blt
index 2d769d9..e066ca4 100644
--- a/src-literatetests/15-regressions.blt
+++ b/src-literatetests/15-regressions.blt
@@ -43,7 +43,7 @@ func = do
     }
 
 #test record construction 1
-func = Foo {_lstate_indent = _lstate_indent state}
+func = Foo { _lstate_indent = _lstate_indent state }
 
 #test record construction 2
 func = Foo
@@ -478,17 +478,17 @@ foo =
 #test issue 52 a
 
 {-# LANGUAGE RecordWildCards #-}
-v = A {a = 1, ..} where b = 2
+v = A { a = 1, .. } where b = 2
 
 #test issue 52 b
 
 {-# LANGUAGE RecordWildCards #-}
-v = A {..} where b = 2
+v = A { .. } where b = 2
 
 #test issue 52 c
 
 {-# LANGUAGE RecordWildCards #-}
-v = A {a = 1, b = 2, c = 3}
+v = A { a = 1, b = 2, c = 3 }
 
 #test issue 63 a
 #pending fix does not work on 8.0.2
diff --git a/src-literatetests/30-tests-context-free.blt b/src-literatetests/30-tests-context-free.blt
index 2d1c421..3ecae6f 100644
--- a/src-literatetests/30-tests-context-free.blt
+++ b/src-literatetests/30-tests-context-free.blt
@@ -931,7 +931,7 @@ func = do
     }
 
 #test record construction 1
-func = Foo {_lstate_indent = _lstate_indent state}
+func = Foo { _lstate_indent = _lstate_indent state }
 
 #test record construction 2
 func = Foo
diff --git a/src/Language/Haskell/Brittany/Internal/Layouters/Expr.hs b/src/Language/Haskell/Brittany/Internal/Layouters/Expr.hs
index 80f9d6a..4ee0920 100644
--- a/src/Language/Haskell/Brittany/Internal/Layouters/Expr.hs
+++ b/src/Language/Haskell/Brittany/Internal/Layouters/Expr.hs
@@ -749,8 +749,8 @@ layoutExpr lexpr@(L _ expr) = do
           then return Nothing
           else Just <$> docSharedWrapper layoutExpr fExpr
         return (fieldl, lrdrNameToText lnameF, fExpDoc)
-      let line1 appender wrapper =
-            [ appender $ docLit $ Text.pack "{"
+      let line1 wrapper =
+            [ appSep $ docLit $ Text.pack "{"
             , docWrapNodePrior fd1l $ appSep $ docLit fd1n
             , case fd1e of
                 Just x -> docSeq
@@ -776,8 +776,9 @@ layoutExpr lexpr@(L _ expr) = do
       docAlt
         [  docSeq
         $  [docNodeAnnKW lexpr Nothing nameDoc, docSeparator]
-        ++ line1 id docForceSingleline
+        ++ line1 docForceSingleline
         ++ join (lineR docForceSingleline)
+        ++ [docSeparator]
         ++ lineN
         , docSetParSpacing
         $ docAddBaseY BrIndentRegular
@@ -785,14 +786,14 @@ layoutExpr lexpr@(L _ expr) = do
             (docNodeAnnKW lexpr Nothing nameDoc)
             ( docNonBottomSpacing
             $ docLines
-            $  [docCols ColRecUpdate $ line1 appSep (docAddBaseY BrIndentRegular)]
+            $  [docCols ColRecUpdate $ line1 (docAddBaseY BrIndentRegular)]
             ++ (docCols ColRecUpdate <$> lineR (docAddBaseY BrIndentRegular))
             ++ [docSeq lineN]
             )
         ]
     RecordCon lname _ _ (HsRecFields [] (Just 0)) -> do
       let t = lrdrNameToText lname
-      docWrapNode lname $ docLit $ t <> Text.pack " {..}"
+      docWrapNode lname $ docLit $ t <> Text.pack " { .. }"
     RecordCon lname _ _ (HsRecFields fs@(_:_) (Just dotdoti)) | dotdoti == length fs -> do
       let nameDoc = docWrapNode lname $ docLit $ lrdrNameToText lname
       ((fd1l, fd1n, fd1e):fdr) <- fs `forM` \fieldl@(L _ (HsRecField (L _ (FieldOcc lnameF _)) fExpr pun)) -> do
@@ -800,8 +801,8 @@ layoutExpr lexpr@(L _ expr) = do
           then return Nothing
           else Just <$> docSharedWrapper layoutExpr fExpr
         return (fieldl, lrdrNameToText lnameF, fExpDoc)
-      let line1 appender wrapper =
-            [ appender $ docLit $ Text.pack "{"
+      let line1 wrapper =
+            [ appSep $ docLit $ Text.pack "{"
             , docWrapNodePrior fd1l $ appSep $ docLit fd1n
             , case fd1e of
                 Just x -> docSeq
@@ -831,9 +832,10 @@ layoutExpr lexpr@(L _ expr) = do
       docAlt
         [  docSeq
         $  [docNodeAnnKW lexpr Nothing nameDoc, docSeparator]
-        ++ line1 id docForceSingleline
+        ++ line1 docForceSingleline
         ++ join (lineR docForceSingleline)
         ++ lineDot
+        ++ [docSeparator]
         ++ lineN
         , docSetParSpacing
         $ docAddBaseY BrIndentRegular
@@ -841,7 +843,7 @@ layoutExpr lexpr@(L _ expr) = do
             (docNodeAnnKW lexpr Nothing nameDoc)
             ( docNonBottomSpacing
             $ docLines
-            $  [docCols ColRecUpdate $ line1 appSep (docAddBaseY BrIndentRegular)]
+            $  [docCols ColRecUpdate $ line1 (docAddBaseY BrIndentRegular)]
             ++ (docCols ColRecUpdate <$> lineR (docAddBaseY BrIndentRegular))
             ++ [docSeq lineDot, docSeq lineN]
             )