From fc47372005d78e9727a7251c2a599fcee4f24ca8 Mon Sep 17 00:00:00 2001 From: Lennart Spitzner Date: Fri, 2 Sep 2016 00:15:26 +0200 Subject: [PATCH] Restore aligning on non-function bindings --- src/Language/Haskell/Brittany/Layouters/Decl.hs | 15 ++++++++------- src/Language/Haskell/Brittany/Layouters/Expr.hs | 2 +- src/Language/Haskell/Brittany/Types.hs | 2 +- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/Language/Haskell/Brittany/Layouters/Decl.hs b/src/Language/Haskell/Brittany/Layouters/Decl.hs index 2b68e20..64202d1 100644 --- a/src/Language/Haskell/Brittany/Layouters/Decl.hs +++ b/src/Language/Haskell/Brittany/Layouters/Decl.hs @@ -84,7 +84,7 @@ layoutBind lbind@(L _ bind) = case bind of clauseDocs <- layoutGrhs `mapM` grhss mWhereDocs <- layoutLocalBinds whereBinds binderDoc <- docLit $ Text.pack "=" - fmap Right $ docWrapNode lbind $ layoutPatternBindFinal Text.empty binderDoc (Just patDoc) clauseDocs mWhereDocs + fmap Right $ docWrapNode lbind $ layoutPatternBindFinal Nothing binderDoc (Just patDoc) clauseDocs mWhereDocs _ -> Right <$> unknownNodeError "" lbind data BagBindOrSig = BagBind (LHsBindLR RdrName RdrName) @@ -144,10 +144,11 @@ layoutPatternBind mIdStr binderDoc lmatch@(L _ match@(Match _ pats _ (GRHSs grhs $ (List.intersperse docSeparator $ docForceSingleline <$> ps) clauseDocs <- docWrapNodeRest lmatch $ layoutGrhs `mapM` grhss mWhereDocs <- layoutLocalBinds whereBinds - layoutPatternBindFinal (fromMaybe Text.empty mIdStr) binderDoc (Just patDoc) clauseDocs mWhereDocs + let alignmentToken = if null pats then Nothing else mIdStr + layoutPatternBindFinal alignmentToken binderDoc (Just patDoc) clauseDocs mWhereDocs -layoutPatternBindFinal :: Text -> BriDocNumbered -> Maybe BriDocNumbered -> [([BriDocNumbered], BriDocNumbered, LHsExpr RdrName)] -> Maybe [BriDocNumbered] -> ToBriDocM BriDocNumbered -layoutPatternBindFinal idStr binderDoc mPatDoc clauseDocs mWhereDocs = do +layoutPatternBindFinal :: Maybe Text -> BriDocNumbered -> Maybe BriDocNumbered -> [([BriDocNumbered], BriDocNumbered, LHsExpr RdrName)] -> Maybe [BriDocNumbered] -> ToBriDocM BriDocNumbered +layoutPatternBindFinal alignmentToken binderDoc mPatDoc clauseDocs mWhereDocs = do let patPartInline = case mPatDoc of Nothing -> [] Just patDoc -> [appSep $ docForceSingleline $ return patDoc] @@ -175,7 +176,7 @@ layoutPatternBindFinal idStr binderDoc mPatDoc clauseDocs mWhereDocs = do ] docAlt $ -- one-line solution - [ docCols (ColBindingLine idStr) + [ docCols (ColBindingLine alignmentToken) [ docSeq (patPartInline ++ [guardPart]) , docSeq @@ -203,7 +204,7 @@ layoutPatternBindFinal idStr binderDoc mPatDoc clauseDocs mWhereDocs = do ] ++ -- one-line solution + where in next line(s) [ docLines - $ [ docCols (ColBindingLine idStr) + $ [ docCols (ColBindingLine alignmentToken) [ docSeq (patPartInline ++ [guardPart]) , docSeq @@ -242,7 +243,7 @@ layoutPatternBindFinal idStr binderDoc mPatDoc clauseDocs mWhereDocs = do -- pattern and exactly one clause in single line, body as par; -- where in following lines [ docLines - $ [ docCols (ColBindingLine idStr) + $ [ docCols (ColBindingLine alignmentToken) [ docSeq (patPartInline ++ [appSep guardPart]) , docSeq diff --git a/src/Language/Haskell/Brittany/Layouters/Expr.hs b/src/Language/Haskell/Brittany/Layouters/Expr.hs index 7811b2b..9ba6acf 100644 --- a/src/Language/Haskell/Brittany/Layouters/Expr.hs +++ b/src/Language/Haskell/Brittany/Layouters/Expr.hs @@ -392,7 +392,7 @@ layoutExpr lexpr@(L _ expr) = docWrapNode lexpr $ case expr of binderDoc <- docLit $ Text.pack " ->" docAddBaseY BrIndentRegular $ docPar (docLit $ Text.pack "if") - (layoutPatternBindFinal Text.empty binderDoc Nothing clauseDocs Nothing) + (layoutPatternBindFinal Nothing binderDoc Nothing clauseDocs Nothing) HsLet binds exp1 -> do expDoc1 <- docSharedWrapper layoutExpr exp1 mBindDocs <- layoutLocalBinds binds diff --git a/src/Language/Haskell/Brittany/Types.hs b/src/Language/Haskell/Brittany/Types.hs index 87ff39f..8d6049e 100644 --- a/src/Language/Haskell/Brittany/Types.hs +++ b/src/Language/Haskell/Brittany/Types.hs @@ -146,7 +146,7 @@ data ColSig -- Has variable number of columns depending on the number of patterns. | ColPatterns | ColCasePattern - | ColBindingLine Text + | ColBindingLine (Maybe Text) -- e.g. "func pat pat = expr" -- 1111111111111222222 -- or "pat | stmt -> expr"