Implement `IndentPolicyLeft` for one HsApp case

pull/66/head
Lennart Spitzner 2017-09-21 23:27:21 +02:00
parent 4568bd3553
commit 88cbaf813a
1 changed files with 35 additions and 22 deletions

View File

@ -32,6 +32,11 @@ import Language.Haskell.Brittany.Internal.Layouters.Type
layoutExpr :: ToBriDoc HsExpr layoutExpr :: ToBriDoc HsExpr
layoutExpr lexpr@(L _ expr) = do layoutExpr lexpr@(L _ expr) = do
indentPolicy <- mAsk
<&> _conf_layout
.> _lconfig_indentPolicy
.> confUnpack
let allowFreeIndent = indentPolicy == IndentPolicyFree
docWrapNode lexpr $ case expr of docWrapNode lexpr $ case expr of
HsVar vname -> do HsVar vname -> do
docLit =<< lrdrNameToTextAnn vname docLit =<< lrdrNameToTextAnn vname
@ -114,42 +119,50 @@ layoutExpr lexpr@(L _ expr) = do
let (headE, paramEs) = gather [exp2] exp1 let (headE, paramEs) = gather [exp2] exp1
headDoc <- docSharedWrapper layoutExpr headE headDoc <- docSharedWrapper layoutExpr headE
paramDocs <- docSharedWrapper layoutExpr `mapM` paramEs paramDocs <- docSharedWrapper layoutExpr `mapM` paramEs
docAlt docAltFilter
[ -- foo x y [ -- foo x y
docCols ColApp ( True
, docCols ColApp
$ appSep (docForceSingleline headDoc) $ appSep (docForceSingleline headDoc)
: spacifyDocs (docForceSingleline <$> paramDocs) : spacifyDocs (docForceSingleline <$> paramDocs)
)
, -- foo x , -- foo x
-- y -- y
docSeq ( allowFreeIndent
, docSeq
[ appSep (docForceSingleline headDoc) [ appSep (docForceSingleline headDoc)
, docSetBaseY , docSetBaseY
$ docAddBaseY BrIndentRegular $ docAddBaseY BrIndentRegular
$ docLines $ docLines
$ (docForceSingleline <$> paramDocs) $ (docForceSingleline <$> paramDocs)
] ]
)
, -- foo , -- foo
-- x -- x
-- y -- y
docSetParSpacing ( True
, docSetParSpacing
$ docAddBaseY BrIndentRegular $ docAddBaseY BrIndentRegular
$ docPar $ docPar
(docForceSingleline headDoc) (docForceSingleline headDoc)
( docNonBottomSpacing ( docNonBottomSpacing
$ docLines paramDocs $ docLines paramDocs
) )
)
, -- ( multi , -- ( multi
-- line -- line
-- function -- function
-- ) -- )
-- x -- x
-- y -- y
docAddBaseY BrIndentRegular ( True
, docAddBaseY BrIndentRegular
$ docPar $ docPar
headDoc headDoc
( docNonBottomSpacing ( docNonBottomSpacing
$ docLines paramDocs $ docLines paramDocs
) )
)
] ]
HsApp exp1 exp2 -> do HsApp exp1 exp2 -> do
-- TODO: if expDoc1 is some literal, we may want to create a docCols here. -- TODO: if expDoc1 is some literal, we may want to create a docCols here.