on master help sign in
Fine-tune placement of lambdas after operators
commit8fdc9739f04ec0d70fb33b91d547484e0c1c9a14 authormrkkrp <mark.karpov@tweag.io> dateMon 5 Aug 2019, 21:15 (7 years ago) parent8870acd
3 files changed+38−7
data/examples/declaration/value/function/lambda-multi-line-out.hs+13 data/examples/declaration/value/function/lambda-multi-line.hs+13 src/Ormolu/Printer/Meat/Declaration/Value.hs+12−7
data/examples/declaration/value/function/lambda-multi-line-out.hs+13
@@ -7,3 +7,16 @@ bar x = \y ->
77 if x > y
88 then 10
99 else 12
10+
11+tricky0 =
12+ flip all (zip ws gs) $ \(wt, gt) ->
13+ canUnify poly_given_ok wt gt || go False wt gt
14+
15+tricky1 =
16+ flip all (zip ws gs) $
17+ \(wt, gt) -> canUnify poly_given_ok wt gt || go False wt gt
18+
19+tricky2 =
20+ flip all (zip ws gs) $
21+ \(wt, gt) ->
22+ canUnify poly_given_ok wt gt || go False wt gt
data/examples/declaration/value/function/lambda-multi-line.hs+13
@@ -7,3 +7,16 @@ bar x = \y ->
77 if x > y
88 then 10
99 else 12
10+
11+tricky0 =
12+ flip all (zip ws gs) $ \(wt, gt) ->
13+ canUnify poly_given_ok wt gt || go False wt gt
14+
15+tricky1 =
16+ flip all (zip ws gs) $
17+ \(wt, gt) -> canUnify poly_given_ok wt gt || go False wt gt
18+
19+tricky2 =
20+ flip all (zip ws gs) $
21+ \(wt, gt) ->
22+ canUnify poly_given_ok wt gt || go False wt gt
src/Ormolu/Printer/Meat/Declaration/Value.hs+12−7
@@ -213,11 +213,8 @@ p_match' placer pretty style isInfix strictness m_pats m_grhss = do
213213 unless whereIsEmpty $ do
214214 breakpoint
215215 inci (located grhssLocalBinds p_hsLocalBinds)
216− case style of
217− Lambda -> placeHanging placement $
218− switchLayout [patGrhssSpan] p_body
219− _ -> switchLayout [patGrhssSpan] $
220− placeHanging placement p_body
216+ switchLayout [patGrhssSpan] $
217+ placeHanging placement p_body
221218
222219p_grhs :: GroupStyle -> GRHS GhcPs (LHsExpr GhcPs) -> R ()
223220p_grhs = p_grhs' p_hsExpr
@@ -457,7 +454,14 @@ p_hsExpr = \case
457454 EWildPat NoExt -> backticks
458455 _ -> id
459456 located op (opWrapper . p_hsExpr)
460− placeHanging (exprPlacement (unLoc y)) $
457+ let placement =
458+ -- NOTE If end of operator and start of second argument are on
459+ -- different lines, always use normal placement.
460+ if isOneLineSpan
461+ (mkSrcSpan (srcSpanEnd (getLoc op)) (srcSpanStart (getLoc y)))
462+ then exprPlacement (unLoc y)
463+ else Normal
464+ placeHanging placement $
461465 located y p_hsExpr
462466 NegApp NoExt e _ -> do
463467 txt "- "
@@ -612,7 +616,8 @@ p_hsExpr = \case
612616 inci (p_pat x)
613617 breakpoint
614618 txt "->"
615− placeHanging (cmdTopPlacement (unLoc e)) (located e p_hsCmdTop)
619+ placeHanging (cmdTopPlacement (unLoc e)) $
620+ located e p_hsCmdTop
616621 HsStatic _ e -> do
617622 txt "static"
618623 breakpoint