packages feed

hindent-6.3.0: src/HIndent/Ast/Expression/Pragmatic.hs

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

module HIndent.Ast.Expression.Pragmatic
  ( ExpressionPragma
  , mkExpressionPragma
  ) where

import qualified GHC.Hs as GHC
import qualified GHC.Types.SourceText as GHC
import HIndent.Ast.NodeComments (NodeComments(..))
#if MIN_VERSION_ghc_lib_parser(9, 10, 1)
import HIndent.Ast.WithComments (WithComments, addComments, mkWithComments)
#else
import HIndent.Ast.WithComments (WithComments, fromEpAnn)
#endif
import {-# SOURCE #-} HIndent.Pretty (Pretty(..), pretty)
import HIndent.Pretty.Combinators (spaced, string)
import HIndent.Pretty.NodeComments (CommentExtraction(..))

newtype ExpressionPragma = SccPragma
  { label :: GHC.StringLiteral
  }

instance CommentExtraction ExpressionPragma where
  nodeComments _ = NodeComments [] [] []

instance Pretty ExpressionPragma where
  pretty' SccPragma {..} = spaced [string "{-# SCC", pretty label, string "#-}"]

mkExpressionPragma :: GHC.HsPragE GHC.GhcPs -> WithComments ExpressionPragma
#if MIN_VERSION_ghc_lib_parser(9, 10, 1)
mkExpressionPragma (GHC.HsPragSCC (ann, _) literal) =
  addComments (nodeComments ann) $ mkWithComments SccPragma {label = literal}
#elif MIN_VERSION_ghc_lib_parser(9, 8, 1)
mkExpressionPragma (GHC.HsPragSCC (ann, _) literal) =
  fromEpAnn ann SccPragma {label = literal}
#else
mkExpressionPragma (GHC.HsPragSCC ann _ literal) =
  fromEpAnn ann SccPragma {label = literal}
#endif