Support same-line let decl when indentAmount>=4
parent
dd53948a23
commit
4973298f30
|
@ -13,7 +13,10 @@ import Language.Haskell.Brittany.Internal.Types
|
|||
import Language.Haskell.Brittany.Internal.LayouterBasics
|
||||
import Language.Haskell.Brittany.Internal.Config.Types
|
||||
|
||||
import GHC ( runGhc, GenLocated(L), moduleNameString )
|
||||
import GHC ( runGhc
|
||||
, GenLocated(L)
|
||||
, moduleNameString
|
||||
)
|
||||
import HsSyn
|
||||
import Name
|
||||
import qualified FastString
|
||||
|
@ -28,6 +31,8 @@ import {-# SOURCE #-} Language.Haskell.Brittany.Internal.Layouters.Expr
|
|||
layoutStmt :: ToBriDoc' (StmtLR GhcPs GhcPs (LHsExpr GhcPs))
|
||||
layoutStmt lstmt@(L _ stmt) = do
|
||||
indentPolicy <- mAsk <&> _conf_layout .> _lconfig_indentPolicy .> confUnpack
|
||||
indentAmount :: Int <-
|
||||
mAsk <&> _conf_layout .> _lconfig_indentAmount .> confUnpack
|
||||
docWrapNode lstmt $ case stmt of
|
||||
LastStmt body False _ -> do
|
||||
layoutExpr body
|
||||
|
@ -47,21 +52,24 @@ layoutStmt lstmt@(L _ stmt) = do
|
|||
$ docPar (docLit $ Text.pack "<-") (expDoc)
|
||||
]
|
||||
]
|
||||
LetStmt binds -> layoutLocalBinds binds >>= \case
|
||||
Nothing -> docLit $ Text.pack "let" -- i just tested
|
||||
-- it, and it is
|
||||
-- indeed allowed.
|
||||
-- heh.
|
||||
LetStmt binds -> do
|
||||
let isFree = indentPolicy == IndentPolicyFree
|
||||
let indentFourPlus = indentAmount >= 4
|
||||
layoutLocalBinds binds >>= \case
|
||||
Nothing -> docLit $ Text.pack "let"
|
||||
-- i just tested the above, and it is indeed allowed. heh.
|
||||
Just [] -> docLit $ Text.pack "let" -- this probably never happens
|
||||
Just [bindDoc] -> docAlt
|
||||
[ -- let bind = expr
|
||||
docCols
|
||||
ColDoLet
|
||||
[ appSep $ docLit $ Text.pack "let"
|
||||
, let f = case indentPolicy of
|
||||
, let
|
||||
f = case indentPolicy of
|
||||
IndentPolicyFree -> docSetBaseAndIndent
|
||||
IndentPolicyLeft -> docForceSingleline
|
||||
IndentPolicyMultiple -> docForceSingleline
|
||||
IndentPolicyMultiple | indentFourPlus -> docSetBaseAndIndent
|
||||
| otherwise -> docForceSingleline
|
||||
in f $ return bindDoc
|
||||
]
|
||||
, -- let
|
||||
|
@ -74,17 +82,20 @@ layoutStmt lstmt@(L _ stmt) = do
|
|||
-- let aaa = expra
|
||||
-- bbb = exprb
|
||||
-- ccc = exprc
|
||||
-- TODO: Allow this for IndentPolicyMultiple when indentAmount = 4
|
||||
addAlternativeCond (indentPolicy == IndentPolicyFree) $ docSeq
|
||||
addAlternativeCond (isFree || indentFourPlus) $ docSeq
|
||||
[ appSep $ docLit $ Text.pack "let"
|
||||
, docSetBaseAndIndent $ docLines $ return <$> bindDocs
|
||||
, let f = if indentFourPlus
|
||||
then docEnsureIndent BrIndentRegular
|
||||
else docSetBaseAndIndent
|
||||
in f $ docLines $ return <$> bindDocs
|
||||
]
|
||||
-- let
|
||||
-- aaa = expra
|
||||
-- bbb = exprb
|
||||
-- ccc = exprc
|
||||
addAlternative $ docAddBaseY BrIndentRegular $ docPar
|
||||
(docLit $ Text.pack "let")
|
||||
addAlternativeCond (not indentFourPlus)
|
||||
$ docAddBaseY BrIndentRegular
|
||||
$ docPar (docLit $ Text.pack "let")
|
||||
(docSetBaseAndIndent $ docLines $ return <$> bindDocs)
|
||||
RecStmt stmts _ _ _ _ _ _ _ _ _ -> runFilteredAlternative $ do
|
||||
-- rec stmt1
|
||||
|
|
Loading…
Reference in New Issue