module HIndent.Ast.Declaration.Data.Deriving.Strategy ( DerivingStrategy , mkDerivingStrategy , isViaStrategy ) where import HIndent.Ast.NodeComments import qualified HIndent.GhcLibParserWrapper.GHC.Hs as GHC import {-# SOURCE #-} HIndent.Pretty import HIndent.Pretty.Combinators import HIndent.Pretty.NodeComments data DerivingStrategy = Stock | Anyclass | Newtype | Via (GHC.LHsSigType GHC.GhcPs) instance CommentExtraction DerivingStrategy where nodeComments :: DerivingStrategy -> NodeComments nodeComments Stock {} = [LEpaComment] -> [LEpaComment] -> [LEpaComment] -> NodeComments NodeComments [] [] [] nodeComments Anyclass {} = [LEpaComment] -> [LEpaComment] -> [LEpaComment] -> NodeComments NodeComments [] [] [] nodeComments Newtype {} = [LEpaComment] -> [LEpaComment] -> [LEpaComment] -> NodeComments NodeComments [] [] [] nodeComments Via {} = [LEpaComment] -> [LEpaComment] -> [LEpaComment] -> NodeComments NodeComments [] [] [] instance Pretty DerivingStrategy where pretty' :: DerivingStrategy -> Printer () pretty' DerivingStrategy Stock = HasCallStack => String -> Printer () String -> Printer () string String "stock" pretty' DerivingStrategy Anyclass = HasCallStack => String -> Printer () String -> Printer () string String "anyclass" pretty' DerivingStrategy Newtype = HasCallStack => String -> Printer () String -> Printer () string String "newtype" pretty' (Via LHsSigType GhcPs x) = HasCallStack => String -> Printer () String -> Printer () string String "via " Printer () -> Printer () -> Printer () forall a b. Printer a -> Printer b -> Printer b forall (m :: * -> *) a b. Monad m => m a -> m b -> m b >> GenLocated SrcSpanAnnA (HsSigType GhcPs) -> Printer () forall a. Pretty a => a -> Printer () pretty LHsSigType GhcPs GenLocated SrcSpanAnnA (HsSigType GhcPs) x mkDerivingStrategy :: GHC.DerivStrategy GHC.GhcPs -> DerivingStrategy mkDerivingStrategy :: DerivStrategy GhcPs -> DerivingStrategy mkDerivingStrategy GHC.StockStrategy {} = DerivingStrategy Stock mkDerivingStrategy GHC.AnyclassStrategy {} = DerivingStrategy Anyclass mkDerivingStrategy GHC.NewtypeStrategy {} = DerivingStrategy Newtype mkDerivingStrategy (GHC.ViaStrategy (GHC.XViaStrategyPs [AddEpAnn] _ LHsSigType GhcPs x)) = LHsSigType GhcPs -> DerivingStrategy Via LHsSigType GhcPs x isViaStrategy :: DerivingStrategy -> Bool isViaStrategy :: DerivingStrategy -> Bool isViaStrategy Via {} = Bool True isViaStrategy DerivingStrategy _ = Bool False