on master help sign in
Fine-tune placement of lambdas after operators
8fdc973mrkkrp
data/examples/declaration/value/function/lambda-multi-line-out.hs+13
@@ -7,3 +7,16 @@ bar x = \y ->
7 if x > y
7 if x > y
8 then 10
8 then 10
9 else 12
9 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 ->
7 if x > y
7 if x > y
8 then 10
8 then 10
9 else 12
9 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
213 unless whereIsEmpty $ do
213 unless whereIsEmpty $ do
214 breakpoint
214 breakpoint
215 inci (located grhssLocalBinds p_hsLocalBinds)
215 inci (located grhssLocalBinds p_hsLocalBinds)
216− case style of
217− Lambda -> placeHanging placement $
218− switchLayout [patGrhssSpan] p_body
216+ switchLayout [patGrhssSpan] $
219− _ -> switchLayout [patGrhssSpan] $
220− placeHanging placement p_body
217+ placeHanging placement p_body
221
218
222p_grhs :: GroupStyle -> GRHS GhcPs (LHsExpr GhcPs) -> R ()
219p_grhs :: GroupStyle -> GRHS GhcPs (LHsExpr GhcPs) -> R ()
223p_grhs = p_grhs' p_hsExpr
220p_grhs = p_grhs' p_hsExpr
@@ -457,7 +454,14 @@ p_hsExpr = \case
457 EWildPat NoExt -> backticks
454 EWildPat NoExt -> backticks
458 _ -> id
455 _ -> id
459 located op (opWrapper . p_hsExpr)
456 located op (opWrapper . p_hsExpr)
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)))
460− placeHanging (exprPlacement (unLoc y)) $
462+ then exprPlacement (unLoc y)
463+ else Normal
464+ placeHanging placement $
461 located y p_hsExpr
465 located y p_hsExpr
462 NegApp NoExt e _ -> do
466 NegApp NoExt e _ -> do
463 txt "- "
467 txt "- "
@@ -612,7 +616,8 @@ p_hsExpr = \case
612 inci (p_pat x)
616 inci (p_pat x)
613 breakpoint
617 breakpoint
614 txt "->"
618 txt "->"
615− placeHanging (cmdTopPlacement (unLoc e)) (located e p_hsCmdTop)
619+ placeHanging (cmdTopPlacement (unLoc e)) $
620+ located e p_hsCmdTop
616 HsStatic _ e -> do
621 HsStatic _ e -> do
617 txt "static"
622 txt "static"
618 breakpoint
623 breakpoint