From 22a658e794598ff893c63596b5ad289acc1eb8d9 Mon Sep 17 00:00:00 2001 From: Lennart Spitzner Date: Fri, 19 May 2023 19:55:01 +0200 Subject: [PATCH] Fix paren-multiline-expression in do block --- data/15-regressions.blt | 7 ++++ .../Brittany/Internal/ToBriDoc/OpTree.hs | 32 +++++++++++++------ .../Internal/Transformations/T1_Alt.hs | 2 +- .../Internal/Transformations/T4_Columns.hs | 4 +-- 4 files changed, 32 insertions(+), 13 deletions(-) diff --git a/data/15-regressions.blt b/data/15-regressions.blt index 8e2ee2a..8e9517c 100644 --- a/data/15-regressions.blt +++ b/data/15-regressions.blt @@ -1008,3 +1008,10 @@ dofunc = do -- abc more code + +#test do-block paren non-alignment +catchFunc = do + (func aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + ) + `catch` catcher diff --git a/source/library/Language/Haskell/Brittany/Internal/ToBriDoc/OpTree.hs b/source/library/Language/Haskell/Brittany/Internal/ToBriDoc/OpTree.hs index cb0421a..faa47f8 100644 --- a/source/library/Language/Haskell/Brittany/Internal/ToBriDoc/OpTree.hs +++ b/source/library/Language/Haskell/Brittany/Internal/ToBriDoc/OpTree.hs @@ -245,16 +245,28 @@ layoutOpTree allowSinglelinePar = \case wrapParenMlIf x innerHead innerLines = if x then wrapParenMl innerHead innerLines else docPar innerHead (docLines innerLines) - wrapParenMl innerHead innerLines = docSetBaseY $ docLines - ( [ docCols - ColOpPrefix - [ (if zeroOps then id else appSep) $ docLit $ Text.pack "(" - , docHandleComms locO $ innerHead - ] - ] - ++ innerLines - ++ [docHandleComms locC $ docLit $ Text.pack ")"] - ) + wrapParenMl innerHead innerLines = docAlt + [ docForceZeroAdd $ docSetBaseY $ docLines + ( [ docCols + ColOpPrefix + [ (if zeroOps then id else appSep) $ docLit $ Text.pack "(" + , docHandleComms locO $ innerHead + ] + ] + ++ innerLines + ++ [docHandleComms locC $ docLit $ Text.pack ")"] + ) + , docPar + (docCols + ColOpPrefix + [ (if zeroOps then id else appSep) $ docLit $ Text.pack "(" + , docHandleComms locO $ innerHead + ] + ) + ( docLines + $ innerLines ++ [docHandleComms locC $ docLit $ Text.pack ")"] + ) + ] configAllowsParInsert <- askLayoutConf _lconfig_fixityBasedAddAlignParens let allowParIns = configAllowsParInsert && case fixity of diff --git a/source/library/Language/Haskell/Brittany/Internal/Transformations/T1_Alt.hs b/source/library/Language/Haskell/Brittany/Internal/Transformations/T1_Alt.hs index 9a9a3d7..82d7421 100644 --- a/source/library/Language/Haskell/Brittany/Internal/Transformations/T1_Alt.hs +++ b/source/library/Language/Haskell/Brittany/Internal/Transformations/T1_Alt.hs @@ -205,7 +205,7 @@ transformAlts = let ind = _acp_indent acp + _acp_indentPrep acp + indAdd mSet $ acp { _acp_indent = ind, _acp_indentPrep = 0 - , _acp_indentPrepForced = False + , _acp_indentPrepForced = parentForced } sameLine' <- go sameLine mModify $ \acp' -> acp' diff --git a/source/library/Language/Haskell/Brittany/Internal/Transformations/T4_Columns.hs b/source/library/Language/Haskell/Brittany/Internal/Transformations/T4_Columns.hs index f0256aa..21ac49f 100644 --- a/source/library/Language/Haskell/Brittany/Internal/Transformations/T4_Columns.hs +++ b/source/library/Language/Haskell/Brittany/Internal/Transformations/T4_Columns.hs @@ -91,8 +91,8 @@ transformSimplifyColumns = Uniplate.rewrite $ \case ] BDPar ind col1@(BDCols sig1 _) col2@(BDCols sig2 _) | sig1 == sig2 -> Just $ BDAddBaseY ind (BDLines [col1, col2]) - BDPar ind col1@(BDCols sig1 _) (BDLines (col2@(BDCols sig2 _) : rest)) - | sig1 == sig2 -> Just $ BDPar ind (BDLines [col1, col2]) (BDLines rest) + -- BDPar ind col1@(BDCols sig1 _) (BDLines (col2@(BDCols sig2 _) : rest)) + -- | sig1 == sig2 -> Just $ BDPar ind (BDLines [col1, col2]) (BDLines rest) BDPar ind (BDLines lines1) col2@(BDCols sig2 _) | BDCols sig1 _ <- List.last lines1, sig1 == sig2 -> Just $ BDAddBaseY ind (BDLines $ lines1 ++ [col2])