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
:: (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

View File

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