@@ -4,6 +4,7 @@
44
55module Ormolu.Printer.Meat.Declaration.Value
66 ( p_valDecl
7+ , p_pat
78 )
89where
910
@@ -15,7 +16,6 @@ import Data.List (sortOn)
1516import GHC
1617import Ormolu.Printer.Combinators
1718import Ormolu.Printer.Meat.Common
18−import Ormolu.Printer.Meat.Declaration.Pat
1919import Ormolu.Printer.Meat.Declaration.Signature
2020import Ormolu.Printer.Meat.Type
2121import Ormolu.Utils
@@ -428,6 +428,78 @@ p_patSynDetails = \case
428428 velt' (p_rdrName . recordPatSynPatVar <$> xs)
429429 InfixCon _ _ -> notImplemented "InfixCon"
430430
431+p_pat :: Pat GhcPs -> R ()
432+p_pat = \case
433+ WildPat NoExt -> txt "_"
434+ VarPat NoExt name -> p_rdrName name
435+ LazyPat NoExt pat -> do
436+ txt "~"
437+ located pat p_pat
438+ AsPat NoExt name pat -> do
439+ p_rdrName name
440+ txt "@"
441+ located pat p_pat
442+ ParPat NoExt pat ->
443+ located pat (parens . p_pat)
444+ BangPat NoExt pat -> do
445+ txt "!"
446+ located pat p_pat
447+ ListPat NoExt pats -> do
448+ brackets $ velt (withSep comma (located' p_pat) pats)
449+ TuplePat NoExt pats boxing -> do
450+ let f =
451+ case boxing of
452+ Boxed -> parens
453+ Unboxed -> parensHash
454+ f $ velt (withSep comma (located' p_pat) pats)
455+ SumPat NoExt pat _ _ -> do
456+ -- XXX I'm not sure about this one.
457+ located pat p_pat
458+ ConPatIn pat details ->
459+ case details of
460+ PrefixCon xs -> sitcc $ do
461+ p_rdrName pat
462+ unless (null xs) $ do
463+ breakpoint
464+ inci $ velt' (located' p_pat <$> xs)
465+ RecCon (HsRecFields fields dotdot) -> do
466+ p_rdrName pat
467+ breakpoint
468+ let f = \case
469+ Nothing -> txt ".."
470+ Just x -> located x p_pat_hsRecField
471+ inci . braces . velt . withSep comma f $ case dotdot of
472+ Nothing -> Just <$> fields
473+ Just n -> (Just <$> take n fields) ++ [Nothing]
474+ InfixCon x y -> do
475+ located x p_pat
476+ space
477+ p_rdrName pat
478+ breakpoint
479+ inci (located y p_pat)
480+ ConPatOut {} -> notImplemented "ConPatOut"
481+ ViewPat NoExt expr pat -> sitcc $ do
482+ located expr p_hsExpr
483+ txt " ->"
484+ breakpoint
485+ inci (located pat p_pat)
486+ SplicePat {} -> notImplemented "SplicePat"
487+ LitPat NoExt p -> atom p
488+ NPat NoExt v _ _ -> located v (atom . ol_val)
489+ NPlusKPat {} -> notImplemented "NPlusKPat"
490+ SigPat {} -> notImplemented "SigPat"
491+ CoPat {} -> notImplemented "CoPat"
492+ XPat NoExt -> notImplemented "XPat"
493+
494+p_pat_hsRecField :: HsRecField' (FieldOcc GhcPs) (LPat GhcPs) -> R ()
495+p_pat_hsRecField HsRecField {..} = do
496+ located hsRecFieldLbl $ \x ->
497+ p_rdrName (rdrNameFieldOcc x)
498+ unless hsRecPun $ do
499+ txt " ="
500+ breakpoint
501+ inci (located hsRecFieldArg p_pat)
502+
431503----------------------------------------------------------------------------
432504-- Helpers
433505