diff --git a/data/10-structured/expression-list.blt b/data/10-structured/expression-list.blt new file mode 100644 index 0000000..ad8c8f2 --- /dev/null +++ b/data/10-structured/expression-list.blt @@ -0,0 +1,23 @@ +#group expression/list + +#golden list format into singleline should not keep spacing +foo = + [ 1 + , 2 + , 3 + , 4 + , 5 + ] +#expected +foo = [1, 2, 3, 4, 5] + +#golden singleline list with comment +foo = [1 {- a -}, {- b -} 2, {- c -} 3, 4, 5] +#expected +foo = + [ 1 {- a -} + , {- b -} 2 + , {- c -} 3 + , 4 + , 5 + ] diff --git a/source/library/Language/Haskell/Brittany/Internal/S3_ToBriDocTools.hs b/source/library/Language/Haskell/Brittany/Internal/S3_ToBriDocTools.hs index fc43352..ba57df0 100644 --- a/source/library/Language/Haskell/Brittany/Internal/S3_ToBriDocTools.hs +++ b/source/library/Language/Haskell/Brittany/Internal/S3_ToBriDocTools.hs @@ -795,7 +795,8 @@ docHandleListElemComms layouter e = case obtainListElemStartCommaLocs e of docHandleListElemCommsProperPost :: (LocatedA ast -> ToBriDocM BriDocNumbered) -> [LocatedA ast] - -> ToBriDocM [(Maybe GHC.RealSrcLoc, ToBriDocM BriDocNumbered)] + -> ToBriDocM + [(Maybe GHC.RealSrcLoc, LocatedA ast, ToBriDocM BriDocNumbered)] docHandleListElemCommsProperPost layouter es = case es of [] -> pure [] (e1 : rest) -> case obtainListElemStartCommaLocs e1 of @@ -803,7 +804,8 @@ docHandleListElemCommsProperPost layouter es = case es of res <- go posComma rest pure $ ( Nothing - , docFlushCommsPost True e1 $ docHandleComms posStart $ layouter e1 + , e1 + , docHandleComms posStart $ layouter e1 ) : res where @@ -813,7 +815,8 @@ docHandleListElemCommsProperPost layouter es = case es of res <- go posComma rest pure $ ( intoComma - , docFlushCommsPost True e1 $ docHandleComms posStart $ layouter e1 + , e1 + , docHandleComms posStart $ layouter e1 ) : res diff --git a/source/library/Language/Haskell/Brittany/Internal/ToBriDoc/Expr.hs b/source/library/Language/Haskell/Brittany/Internal/ToBriDoc/Expr.hs index 8d94308..278e93b 100644 --- a/source/library/Language/Haskell/Brittany/Internal/ToBriDoc/Expr.hs +++ b/source/library/Language/Haskell/Brittany/Internal/ToBriDoc/Expr.hs @@ -699,17 +699,23 @@ layoutExpr lexpr@(L _ expr) = do let hasComments = hasAnyCommentsBelow lexpr case splitFirstLast elemDocs of FirstLastEmpty -> docSeq [docLit $ Text.pack "[", closeDoc] - FirstLastSingleton (_, e) -> docAlt + FirstLastSingleton (_, ast, e) -> docAlt [ docSeq [openDoc, docForceSingleline e, closeDoc] , docSetBaseY $ docLines - [docSeq [openDoc, docSeparator, docSetBaseY $ e], closeDoc] + [ docSeq + [ openDoc + , docSeparator + , docSetBaseY $ docFlushCommsPost True ast e + ] + , closeDoc + ] ] - FirstLast (_, e1) ems (finalCommaPos, eN) -> runFilteredAlternative $ do + FirstLast (_, _, e1) ems (finalCommaPos, _, eN) -> runFilteredAlternative $ do addAlternativeCond (not hasComments) $ docSeq $ [openDoc, docForceSingleline e1] ++ [ x - | (commaPos, e) <- ems + | (commaPos, _, e) <- ems , x <- [docHandleComms commaPos docCommaSep, docForceSingleline e] ] ++ [ docHandleComms finalCommaPos docCommaSep @@ -717,8 +723,12 @@ layoutExpr lexpr@(L _ expr) = do , closeDoc] addAlternative $ let start = docCols ColList [appSep $ openDoc, e1] - linesM = ems <&> \(p, d) -> - docCols ColList [docHandleComms p docCommaSep, d] + linesM = ems <&> \(p, ast, d) -> + docCols + ColList + [ docHandleComms p docCommaSep + , docFlushCommsPost True ast $ d + ] lineN = docCols ColList [docHandleComms finalCommaPos $ docCommaSep, eN] in docSetBaseY