Implement HsLet/ExprWithTySig/NPat
parent
beaf121b66
commit
f96dceb74b
|
@ -5,6 +5,7 @@ module Language.Haskell.Brittany.Layouters.Expr
|
||||||
, litBriDoc
|
, litBriDoc
|
||||||
, isExpressionTypeHeadPar
|
, isExpressionTypeHeadPar
|
||||||
, isExpressionTypeHeadPar'
|
, isExpressionTypeHeadPar'
|
||||||
|
, overLitValBriDoc
|
||||||
)
|
)
|
||||||
where
|
where
|
||||||
|
|
||||||
|
@ -26,6 +27,7 @@ import BasicTypes
|
||||||
import Language.Haskell.Brittany.Layouters.Pattern
|
import Language.Haskell.Brittany.Layouters.Pattern
|
||||||
import Language.Haskell.Brittany.Layouters.Decl
|
import Language.Haskell.Brittany.Layouters.Decl
|
||||||
import Language.Haskell.Brittany.Layouters.Stmt
|
import Language.Haskell.Brittany.Layouters.Stmt
|
||||||
|
import Language.Haskell.Brittany.Layouters.Type
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -294,9 +296,62 @@ layoutExpr lexpr@(L _ expr) = docWrapNode lexpr $ case expr of
|
||||||
docAddBaseY BrIndentRegular $ docPar
|
docAddBaseY BrIndentRegular $ docPar
|
||||||
(docLit $ Text.pack "if")
|
(docLit $ Text.pack "if")
|
||||||
(layoutPatternBindFinal binderDoc Nothing clauseDocs Nothing)
|
(layoutPatternBindFinal binderDoc Nothing clauseDocs Nothing)
|
||||||
HsLet{} -> do
|
HsLet binds exp1 -> do
|
||||||
-- TODO
|
expDoc1 <- docSharedWrapper layoutExpr exp1
|
||||||
briDocByExact lexpr
|
mBindDocs <- layoutLocalBinds binds
|
||||||
|
case mBindDocs of
|
||||||
|
Just [bindDoc] -> docAlt
|
||||||
|
[ docSeq
|
||||||
|
[ appSep $ docLit $ Text.pack "let"
|
||||||
|
, appSep $ docForceSingleline $ return bindDoc
|
||||||
|
, appSep $ docLit $ Text.pack "in"
|
||||||
|
, docForceSingleline $ expDoc1
|
||||||
|
]
|
||||||
|
, docLines
|
||||||
|
[ docSeq
|
||||||
|
[ appSep $ docLit $ Text.pack "let"
|
||||||
|
, docSetBaseY $ docSetIndentLevel $ return bindDoc
|
||||||
|
]
|
||||||
|
, docSeq
|
||||||
|
[ appSep $ docLit $ Text.pack "in "
|
||||||
|
, docSetBaseY $ docSetIndentLevel $ expDoc1
|
||||||
|
]
|
||||||
|
]
|
||||||
|
, docLines
|
||||||
|
[ docAddBaseY BrIndentRegular
|
||||||
|
$ docPar
|
||||||
|
(appSep $ docLit $ Text.pack "let")
|
||||||
|
(docSetIndentLevel $ return bindDoc)
|
||||||
|
, docAddBaseY BrIndentRegular
|
||||||
|
$ docPar
|
||||||
|
(appSep $ docLit $ Text.pack "in")
|
||||||
|
(docSetIndentLevel $ expDoc1)
|
||||||
|
]
|
||||||
|
]
|
||||||
|
Just bindDocs@(_:_) -> docAlt
|
||||||
|
[ docLines
|
||||||
|
[ docSeq
|
||||||
|
[ appSep $ docLit $ Text.pack "let"
|
||||||
|
, docSetBaseY $ docSetIndentLevel $ docLines $ return <$> bindDocs
|
||||||
|
]
|
||||||
|
, docSeq
|
||||||
|
[ appSep $ docLit $ Text.pack "in "
|
||||||
|
, docSetBaseY $ docSetIndentLevel $ expDoc1
|
||||||
|
]
|
||||||
|
]
|
||||||
|
, docLines
|
||||||
|
[ docAddBaseY BrIndentRegular
|
||||||
|
$ docPar
|
||||||
|
(appSep $ docLit $ Text.pack "let")
|
||||||
|
(docSetIndentLevel $ docLines $ return <$> bindDocs)
|
||||||
|
, docAddBaseY BrIndentRegular
|
||||||
|
$ docPar
|
||||||
|
(appSep $ docLit $ Text.pack "in")
|
||||||
|
(docSetIndentLevel $ expDoc1)
|
||||||
|
]
|
||||||
|
]
|
||||||
|
_ -> docSeq [appSep $ docLit $ Text.pack "let in", expDoc1]
|
||||||
|
-- docSeq [appSep $ docLit "let in", expDoc1]
|
||||||
HsDo DoExpr (L _ stmts) _ -> do
|
HsDo DoExpr (L _ stmts) _ -> do
|
||||||
stmtDocs <- docSharedWrapper layoutStmt `mapM` stmts
|
stmtDocs <- docSharedWrapper layoutStmt `mapM` stmts
|
||||||
docAddBaseY BrIndentRegular
|
docAddBaseY BrIndentRegular
|
||||||
|
@ -449,9 +504,14 @@ layoutExpr lexpr@(L _ expr) = docWrapNode lexpr $ case expr of
|
||||||
lineN = docLit $ Text.pack "}"
|
lineN = docLit $ Text.pack "}"
|
||||||
in [line1] ++ lineR ++ [lineN])
|
in [line1] ++ lineR ++ [lineN])
|
||||||
]
|
]
|
||||||
ExprWithTySig{} -> do
|
ExprWithTySig exp1 (HsIB _ (HsWC _ _ typ1)) -> do
|
||||||
-- TODO
|
expDoc <- docSharedWrapper layoutExpr exp1
|
||||||
briDocByExact lexpr
|
typDoc <- docSharedWrapper layoutType typ1
|
||||||
|
docSeq
|
||||||
|
[ appSep expDoc
|
||||||
|
, appSep $ docLit $ Text.pack "::"
|
||||||
|
, typDoc
|
||||||
|
]
|
||||||
ExprWithTySigOut{} -> do
|
ExprWithTySigOut{} -> do
|
||||||
-- TODO
|
-- TODO
|
||||||
briDocByExact lexpr
|
briDocByExact lexpr
|
||||||
|
|
|
@ -5,6 +5,7 @@ module Language.Haskell.Brittany.Layouters.Expr
|
||||||
, litBriDoc
|
, litBriDoc
|
||||||
, isExpressionTypeHeadPar
|
, isExpressionTypeHeadPar
|
||||||
, isExpressionTypeHeadPar'
|
, isExpressionTypeHeadPar'
|
||||||
|
, overLitValBriDoc
|
||||||
)
|
)
|
||||||
where
|
where
|
||||||
|
|
||||||
|
@ -31,3 +32,5 @@ litBriDoc :: HsLit -> BriDocFInt
|
||||||
|
|
||||||
isExpressionTypeHeadPar :: LHsExpr RdrName -> Bool
|
isExpressionTypeHeadPar :: LHsExpr RdrName -> Bool
|
||||||
isExpressionTypeHeadPar' :: LHsExpr RdrName -> Bool
|
isExpressionTypeHeadPar' :: LHsExpr RdrName -> Bool
|
||||||
|
|
||||||
|
overLitValBriDoc :: OverLitVal -> BriDocFInt
|
||||||
|
|
|
@ -107,6 +107,8 @@ layoutPat lpat@(L _ pat) = docWrapNode lpat $ case pat of
|
||||||
BangPat pat1 -> do
|
BangPat pat1 -> do
|
||||||
patDoc <- docSharedWrapper layoutPat pat1
|
patDoc <- docSharedWrapper layoutPat pat1
|
||||||
docSeq [docLit $ Text.pack "!", patDoc]
|
docSeq [docLit $ Text.pack "!", patDoc]
|
||||||
|
NPat llit@(L _ (OverLit olit _ _ _)) _ _ _ -> do
|
||||||
|
docWrapNode llit $ allocateNode $ overLitValBriDoc olit
|
||||||
|
|
||||||
-- #if MIN_VERSION_ghc(8,0,0)
|
-- #if MIN_VERSION_ghc(8,0,0)
|
||||||
-- VarPat n -> return $ stringLayouter lpat $ lrdrNameToText n
|
-- VarPat n -> return $ stringLayouter lpat $ lrdrNameToText n
|
||||||
|
|
Loading…
Reference in New Issue