Improve layouting for OpApp (special-case for dollar/HsVar)

pull/35/head
Lennart Spitzner 2017-05-21 13:43:39 +02:00
parent b8396da1d6
commit 4ee44388f7
2 changed files with 39 additions and 6 deletions

View File

@ -843,6 +843,24 @@ parserCompactLocation =
] ]
] ]
#test opapp-specialcasing-1
func = fooooooooooooooooooooooooooooooooo $ foooooooooooooooooooooooooooooooo
foooooooooooooooooooooooooooooooo
foooooooooooooooooooooooooooooooo
#test opapp-specialcasing-2
func =
fooooooooooooooooooooooooooooooooo
+ foooooooooooooooooooooooooooooooo foooooooooooooooooooooooooooooooo
foooooooooooooooooooooooooooooooo
#test opapp-specialcasing-2
func = fooooooooooooooooooooooooooooooooo + foooooooooooooooooooooooooooooooo
[ foooooooooooooooooooooooooooooooo
, foooooooooooooooooooooooooooooooo
, foooooooooooooooooooooooooooooooo
]
############################################################################### ###############################################################################
############################################################################### ###############################################################################

View File

@ -186,6 +186,11 @@ layoutExpr lexpr@(L _ expr) = docWrapNode lexpr $ case expr of
] ]
opLastDoc <- docSharedWrapper layoutExpr expOp opLastDoc <- docSharedWrapper layoutExpr expOp
expLastDoc <- docSharedWrapper layoutExpr expRight expLastDoc <- docSharedWrapper layoutExpr expRight
let allowPar = case (expOp, expRight) of
(L _ (HsVar (L _ (Unqual occname))), _)
| occNameString occname == "$" -> True
(_, L _ (HsApp _ (L _ HsVar{}))) -> False
_ -> True
docAlt docAlt
[ docSeq [ docSeq
[ appSep $ docForceSingleline leftOperandDoc [ appSep $ docForceSingleline leftOperandDoc
@ -196,7 +201,8 @@ layoutExpr lexpr@(L _ expr) = docWrapNode lexpr $ case expr of
] ]
) )
, appSep $ docForceSingleline opLastDoc , appSep $ docForceSingleline opLastDoc
, docForceParSpacing expLastDoc , (if allowPar then docForceParSpacing else docForceSingleline)
expLastDoc
] ]
-- this case rather leads to some unfortunate layouting than to anything -- this case rather leads to some unfortunate layouting than to anything
-- useful; disabling for now. (it interfers with cols stuff.) -- useful; disabling for now. (it interfers with cols stuff.)
@ -219,9 +225,15 @@ layoutExpr lexpr@(L _ expr) = docWrapNode lexpr $ case expr of
expDocLeft <- docSharedWrapper layoutExpr expLeft expDocLeft <- docSharedWrapper layoutExpr expLeft
expDocOp <- docSharedWrapper layoutExpr expOp expDocOp <- docSharedWrapper layoutExpr expOp
expDocRight <- docSharedWrapper layoutExpr expRight expDocRight <- docSharedWrapper layoutExpr expRight
docAlt let allowPar = case (expOp, expRight) of
(L _ (HsVar (L _ (Unqual occname))), _)
| occNameString occname == "$" -> True
(_, L _ (HsApp _ (L _ HsVar{}))) -> False
_ -> True
docAltFilter
$ [ -- one-line $ [ -- one-line
docSeq (,) True
$ docSeq
[ appSep $ docForceSingleline expDocLeft [ appSep $ docForceSingleline expDocLeft
, appSep $ docForceSingleline expDocOp , appSep $ docForceSingleline expDocOp
, docForceSingleline expDocRight , docForceSingleline expDocRight
@ -233,20 +245,23 @@ layoutExpr lexpr@(L _ expr) = docWrapNode lexpr $ case expr of
-- , docSetBaseY $ docAddBaseY BrIndentRegular expDocRight -- , docSetBaseY $ docAddBaseY BrIndentRegular expDocRight
-- ] -- ]
, -- two-line , -- two-line
docAddBaseY BrIndentRegular (,) True
$ docAddBaseY BrIndentRegular
$ docPar $ docPar
expDocLeft expDocLeft
( docForceSingleline ( docForceSingleline
$ docCols ColOpPrefix [appSep $ expDocOp, docSetBaseY expDocRight] $ docCols ColOpPrefix [appSep $ expDocOp, docSetBaseY expDocRight]
) )
, -- one-line + par , -- one-line + par
docSeq (,) allowPar
$ docSeq
[ appSep $ docForceSingleline expDocLeft [ appSep $ docForceSingleline expDocLeft
, appSep $ docForceSingleline expDocOp , appSep $ docForceSingleline expDocOp
, docForceParSpacing expDocRight , docForceParSpacing expDocRight
] ]
, -- more lines , -- more lines
docAddBaseY BrIndentRegular (,) True
$ docAddBaseY BrIndentRegular
$ docPar $ docPar
expDocLeft expDocLeft
(docCols ColOpPrefix [appSep $ expDocOp, docSetBaseY expDocRight]) (docCols ColOpPrefix [appSep $ expDocOp, docSetBaseY expDocRight])