Do not retain newlines when refactoring list into single line

ghc92
Lennart Spitzner 2023-05-28 16:32:49 +02:00
parent 48522b596c
commit 10dc48b74d
3 changed files with 45 additions and 9 deletions

View File

@ -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
]

View File

@ -795,7 +795,8 @@ docHandleListElemComms layouter e = case obtainListElemStartCommaLocs e of
docHandleListElemCommsProperPost docHandleListElemCommsProperPost
:: (LocatedA ast -> ToBriDocM BriDocNumbered) :: (LocatedA ast -> ToBriDocM BriDocNumbered)
-> [LocatedA ast] -> [LocatedA ast]
-> ToBriDocM [(Maybe GHC.RealSrcLoc, ToBriDocM BriDocNumbered)] -> ToBriDocM
[(Maybe GHC.RealSrcLoc, LocatedA ast, ToBriDocM BriDocNumbered)]
docHandleListElemCommsProperPost layouter es = case es of docHandleListElemCommsProperPost layouter es = case es of
[] -> pure [] [] -> pure []
(e1 : rest) -> case obtainListElemStartCommaLocs e1 of (e1 : rest) -> case obtainListElemStartCommaLocs e1 of
@ -803,7 +804,8 @@ docHandleListElemCommsProperPost layouter es = case es of
res <- go posComma rest res <- go posComma rest
pure pure
$ ( Nothing $ ( Nothing
, docFlushCommsPost True e1 $ docHandleComms posStart $ layouter e1 , e1
, docHandleComms posStart $ layouter e1
) )
: res : res
where where
@ -813,7 +815,8 @@ docHandleListElemCommsProperPost layouter es = case es of
res <- go posComma rest res <- go posComma rest
pure pure
$ ( intoComma $ ( intoComma
, docFlushCommsPost True e1 $ docHandleComms posStart $ layouter e1 , e1
, docHandleComms posStart $ layouter e1
) )
: res : res

View File

@ -699,17 +699,23 @@ layoutExpr lexpr@(L _ expr) = do
let hasComments = hasAnyCommentsBelow lexpr let hasComments = hasAnyCommentsBelow lexpr
case splitFirstLast elemDocs of case splitFirstLast elemDocs of
FirstLastEmpty -> docSeq [docLit $ Text.pack "[", closeDoc] FirstLastEmpty -> docSeq [docLit $ Text.pack "[", closeDoc]
FirstLastSingleton (_, e) -> docAlt FirstLastSingleton (_, ast, e) -> docAlt
[ docSeq [openDoc, docForceSingleline e, closeDoc] [ docSeq [openDoc, docForceSingleline e, closeDoc]
, docSetBaseY $ docLines , docSetBaseY $ docLines
[docSeq [openDoc, docSeparator, docSetBaseY $ e], closeDoc] [ docSeq
[ openDoc
, docSeparator
, docSetBaseY $ docFlushCommsPost True ast e
] ]
FirstLast (_, e1) ems (finalCommaPos, eN) -> runFilteredAlternative $ do , closeDoc
]
]
FirstLast (_, _, e1) ems (finalCommaPos, _, eN) -> runFilteredAlternative $ do
addAlternativeCond (not hasComments) addAlternativeCond (not hasComments)
$ docSeq $ docSeq
$ [openDoc, docForceSingleline e1] $ [openDoc, docForceSingleline e1]
++ [ x ++ [ x
| (commaPos, e) <- ems | (commaPos, _, e) <- ems
, x <- [docHandleComms commaPos docCommaSep, docForceSingleline e] , x <- [docHandleComms commaPos docCommaSep, docForceSingleline e]
] ]
++ [ docHandleComms finalCommaPos docCommaSep ++ [ docHandleComms finalCommaPos docCommaSep
@ -717,8 +723,12 @@ layoutExpr lexpr@(L _ expr) = do
, closeDoc] , closeDoc]
addAlternative addAlternative
$ let start = docCols ColList [appSep $ openDoc, e1] $ let start = docCols ColList [appSep $ openDoc, e1]
linesM = ems <&> \(p, d) -> linesM = ems <&> \(p, ast, d) ->
docCols ColList [docHandleComms p docCommaSep, d] docCols
ColList
[ docHandleComms p docCommaSep
, docFlushCommsPost True ast $ d
]
lineN = docCols ColList lineN = docCols ColList
[docHandleComms finalCommaPos $ docCommaSep, eN] [docHandleComms finalCommaPos $ docCommaSep, eN]
in docSetBaseY in docSetBaseY