{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE OverloadedStrings #-}

module Ormolu.Printer.Meat.Declaration.Annotation
  ( p_annDecl,
  )
where

import GHC.Hs
import Ormolu.Printer.Combinators
import Ormolu.Printer.Meat.Common
import Ormolu.Printer.Meat.Declaration.Value

p_annDecl :: AnnDecl GhcPs -> R ()
p_annDecl :: AnnDecl GhcPs -> R ()
p_annDecl (HsAnnotation XHsAnnotation GhcPs
_ SourceText
_ AnnProvenance GhcPs
annProv XRec GhcPs (HsExpr GhcPs)
expr) =
  Text -> R () -> R ()
pragma Text
"ANN" forall b c a. (b -> c) -> (a -> b) -> a -> c
. R () -> R ()
inci forall a b. (a -> b) -> a -> b
$ do
    AnnProvenance GhcPs -> R ()
p_annProv AnnProvenance GhcPs
annProv
    R ()
breakpoint
    forall l a. HasSrcSpan l => GenLocated l a -> (a -> R ()) -> R ()
located XRec GhcPs (HsExpr GhcPs)
expr HsExpr GhcPs -> R ()
p_hsExpr

p_annProv :: AnnProvenance GhcPs -> R ()
p_annProv :: AnnProvenance GhcPs -> R ()
p_annProv = \case
  ValueAnnProvenance LIdP GhcPs
name -> LocatedN RdrName -> R ()
p_rdrName LIdP GhcPs
name
  TypeAnnProvenance LIdP GhcPs
name -> Text -> R ()
txt Text
"type" forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> R ()
space forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> LocatedN RdrName -> R ()
p_rdrName LIdP GhcPs
name
  AnnProvenance GhcPs
ModuleAnnProvenance -> Text -> R ()
txt Text
"module"