{-# LANGUAGE CPP #-}
{-# LANGUAGE RecordWildCards #-}

module HIndent.Ast.Declaration.Data.NewOrData
  ( NewOrData
  , mkNewOrData
  ) 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 NewOrData
  = Newtype
  | Data

instance CommentExtraction NewOrData where
  nodeComments :: NewOrData -> NodeComments
nodeComments NewOrData
Newtype = [LEpaComment] -> [LEpaComment] -> [LEpaComment] -> NodeComments
NodeComments [] [] []
  nodeComments NewOrData
Data = [LEpaComment] -> [LEpaComment] -> [LEpaComment] -> NodeComments
NodeComments [] [] []

instance Pretty NewOrData where
  pretty' :: NewOrData -> Printer ()
pretty' NewOrData
Newtype = HasCallStack => String -> Printer ()
String -> Printer ()
string String
"newtype"
  pretty' NewOrData
Data = HasCallStack => String -> Printer ()
String -> Printer ()
string String
"data"

mkNewOrData :: GHC.HsDataDefn GHC.GhcPs -> NewOrData
#if MIN_VERSION_ghc_lib_parser(9, 6, 0)
mkNewOrData :: HsDataDefn GhcPs -> NewOrData
mkNewOrData GHC.HsDataDefn {HsDeriving GhcPs
Maybe (LHsContext GhcPs)
Maybe (XRec GhcPs CType)
Maybe (LHsKind GhcPs)
XCHsDataDefn GhcPs
DataDefnCons (LConDecl GhcPs)
dd_ext :: XCHsDataDefn GhcPs
dd_ctxt :: Maybe (LHsContext GhcPs)
dd_cType :: Maybe (XRec GhcPs CType)
dd_kindSig :: Maybe (LHsKind GhcPs)
dd_cons :: DataDefnCons (LConDecl GhcPs)
dd_derivs :: HsDeriving GhcPs
dd_derivs :: forall pass. HsDataDefn pass -> HsDeriving pass
dd_cons :: forall pass. HsDataDefn pass -> DataDefnCons (LConDecl pass)
dd_kindSig :: forall pass. HsDataDefn pass -> Maybe (LHsKind pass)
dd_cType :: forall pass. HsDataDefn pass -> Maybe (XRec pass CType)
dd_ctxt :: forall pass. HsDataDefn pass -> Maybe (LHsContext pass)
dd_ext :: forall pass. HsDataDefn pass -> XCHsDataDefn pass
..}
  | GHC.NewTypeCon LConDecl GhcPs
_ <- DataDefnCons (LConDecl GhcPs)
dd_cons = NewOrData
Newtype
  | GHC.DataTypeCons Bool
_ [LConDecl GhcPs]
_ <- DataDefnCons (LConDecl GhcPs)
dd_cons = NewOrData
Data
#else
mkNewOrData GHC.HsDataDefn {..}
  | GHC.NewType <- dd_ND = Newtype
  | GHC.DataType <- dd_ND = Data
#endif