{-# LANGUAGE CPP             #-}
{-# LANGUAGE PatternSynonyms #-}

-- | Parser compatibility module.
module Development.IDE.GHC.Compat.Parser (
    initParserOpts,
    initParserState,
    PsSpan(..),
    pattern HsParsedModule,
    type GHC.HsParsedModule,
    Development.IDE.GHC.Compat.Parser.hpm_module,
    Development.IDE.GHC.Compat.Parser.hpm_src_files,
    pattern ParsedModule,
    Development.IDE.GHC.Compat.Parser.pm_parsed_source,
    type GHC.ParsedModule,
    Development.IDE.GHC.Compat.Parser.pm_mod_summary,
    Development.IDE.GHC.Compat.Parser.pm_extra_src_files,
    -- * API Annotations
#if !MIN_VERSION_ghc(9,11,0)
    Anno.AnnKeywordId(..),
#endif
    pattern EpaLineComment,
    pattern EpaBlockComment
    ) where

import           Development.IDE.GHC.Compat.Core
import           Development.IDE.GHC.Compat.Util
import qualified GHC.Parser.Annotation           as Anno
import qualified GHC.Parser.Lexer                as Lexer
import           GHC.Types.SrcLoc                (PsSpan (..))



import           GHC                             (EpaCommentTok (..),
                                                  pm_extra_src_files,
                                                  pm_mod_summary,
                                                  pm_parsed_source)
import qualified GHC
import qualified GHC.Driver.Config.Parser        as Config
import           GHC.Hs                          (hpm_module, hpm_src_files)



initParserOpts :: DynFlags -> ParserOpts
initParserOpts :: DynFlags -> ParserOpts
initParserOpts =
  DynFlags -> ParserOpts
Config.initParserOpts

initParserState :: ParserOpts -> StringBuffer -> RealSrcLoc -> PState
initParserState :: ParserOpts -> StringBuffer -> RealSrcLoc -> PState
initParserState =
  ParserOpts -> StringBuffer -> RealSrcLoc -> PState
Lexer.initParserState

#if MIN_VERSION_ghc(9,5,0)
pattern HsParsedModule :: Located (HsModule GhcPs) -> [FilePath] -> GHC.HsParsedModule
#else
pattern HsParsedModule :: Located HsModule -> [FilePath] -> GHC.HsParsedModule
#endif
pattern $mHsParsedModule :: forall {r}.
HsParsedModule
-> (Located (HsModule GhcPs) -> [FilePath] -> r)
-> ((# #) -> r)
-> r
$bHsParsedModule :: Located (HsModule GhcPs) -> [FilePath] -> HsParsedModule
HsParsedModule
    { HsParsedModule -> Located (HsModule GhcPs)
hpm_module
    , HsParsedModule -> [FilePath]
hpm_src_files
    } <- GHC.HsParsedModule{..}
    where
        HsParsedModule Located (HsModule GhcPs)
hpm_module [FilePath]
hpm_src_files =
            Located (HsModule GhcPs) -> [FilePath] -> HsParsedModule
GHC.HsParsedModule Located (HsModule GhcPs)
hpm_module [FilePath]
hpm_src_files


pattern ParsedModule :: ModSummary -> ParsedSource -> [FilePath] -> GHC.ParsedModule
pattern $mParsedModule :: forall {r}.
ParsedModule
-> (ModSummary -> Located (HsModule GhcPs) -> [FilePath] -> r)
-> ((# #) -> r)
-> r
$bParsedModule :: ModSummary
-> Located (HsModule GhcPs) -> [FilePath] -> ParsedModule
ParsedModule
    { ParsedModule -> ModSummary
pm_mod_summary
    , ParsedModule -> Located (HsModule GhcPs)
pm_parsed_source
    , ParsedModule -> [FilePath]
pm_extra_src_files
    } <- GHC.ParsedModule{..}
    where
        ParsedModule ModSummary
ms Located (HsModule GhcPs)
parsed [FilePath]
extra_src_files =
            GHC.ParsedModule
             { pm_mod_summary :: ModSummary
pm_mod_summary = ModSummary
ms
             , pm_parsed_source :: Located (HsModule GhcPs)
pm_parsed_source = Located (HsModule GhcPs)
parsed
             , pm_extra_src_files :: [FilePath]
pm_extra_src_files = [FilePath]
extra_src_files
             }
{-# COMPLETE ParsedModule :: GHC.ParsedModule #-}