@@ -10,6 +10,7 @@ module Ormolu.Printer.Meat.Declaration.Value
13+import Ormolu.Printer.Internal
13import Bag (bagToList)
14import Bag (bagToList)
14import BasicTypes
15import BasicTypes
15import Control.Monad
16import Control.Monad
@@ -633,34 +634,29 @@ p_hsExpr = \case
633p_patSynBind :: PatSynBind GhcPs GhcPs -> R ()
634p_patSynBind :: PatSynBind GhcPs GhcPs -> R ()
634p_patSynBind PSB {..} = do
635p_patSynBind PSB {..} = do
635 txt "pattern "
636 txt "pattern "
636− let nonEmptySynDetails = \case
637− PrefixCon (_:_) -> True
638− RecCon (_:_) -> True
640 case psb_dir of
637 case psb_dir of
641 Unidirectional -> do
638 Unidirectional -> do
642 p_rdrName psb_id
639 p_rdrName psb_id
643− when (nonEmptySynDetails psb_args) space
640+ inci $ do
644− p_patSynDetails psb_args
641+ p_patSynDetails psb_args
645− txt " <-"
642+ txt " <-"
646− breakpoint
643+ breakpoint
647− inci (located psb_def p_pat)
644+ located psb_def p_pat
648 ImplicitBidirectional -> do
645 ImplicitBidirectional -> do
649 p_rdrName psb_id
646 p_rdrName psb_id
650− when (nonEmptySynDetails psb_args) space
647+ inci $ do
651− p_patSynDetails psb_args
648+ p_patSynDetails psb_args
652− txt " ="
649+ txt " ="
653− breakpoint
650+ breakpoint
654− inci (located psb_def p_pat)
651+ located psb_def p_pat
655 ExplicitBidirectional mgroup -> do
652 ExplicitBidirectional mgroup -> do
656 p_rdrName psb_id
653 p_rdrName psb_id
657− when (nonEmptySynDetails psb_args) space
658− p_patSynDetails psb_args
661− inci (located psb_def p_pat)
663 inci $ do
654 inci $ do
655+ p_patSynDetails psb_args
658+ located psb_def p_pat
664 line (txt "where")
660 line (txt "where")
665 inci (p_matchGroup (Function psb_id) mgroup)
661 inci (p_matchGroup (Function psb_id) mgroup)
666p_patSynBind (XPatSynBind NoExt) = notImplemented "XPatSynBind"
662p_patSynBind (XPatSynBind NoExt) = notImplemented "XPatSynBind"
@@ -668,9 +664,13 @@ p_patSynBind (XPatSynBind NoExt) = notImplemented "XPatSynBind"
668p_patSynDetails :: HsPatSynDetails (Located RdrName) -> R ()
664p_patSynDetails :: HsPatSynDetails (Located RdrName) -> R ()
669p_patSynDetails = \case
665p_patSynDetails = \case
670 PrefixCon xs ->
666 PrefixCon xs ->
667+ switchLayout (getLoc <$> xs) $ do
668+ unless (null xs) breakpoint
671− sitcc $ sep breakpoint p_rdrName xs
669+ sitcc (sep breakpoint p_rdrName xs)
672 RecCon xs ->
670 RecCon xs ->
671+ switchLayout (getLoc . recordPatSynPatVar <$> xs) $ do
672+ unless (null xs) breakpoint
673− sitcc $ sep breakpoint (p_rdrName . recordPatSynPatVar) xs
673+ braces . sitcc $ sep (comma >> breakpoint) (p_rdrName . recordPatSynPatVar) xs
674 InfixCon _ _ -> notImplemented "InfixCon"
674 InfixCon _ _ -> notImplemented "InfixCon"
676p_pat :: Pat GhcPs -> R ()
676p_pat :: Pat GhcPs -> R ()