-- | Parse puppet source code from text.
module Puppet.Parser
( -- * Runner
runPuppetParser,
-- * Parsers
puppetParser,
prettyParseError,
-- * Pretty Print
module Puppet.Parser.PrettyPrinter,
module Puppet.Parser.Types,
module Puppet.Parser.Lens,
)
where
import Puppet.Parser.Internal
import Puppet.Parser.Lens
import Puppet.Parser.PrettyPrinter
import Puppet.Parser.Types
import Text.Megaparsec
import XPrelude
-- | Build a 'PrettyError' from a 'ParseError' given the text source.
-- The source is used to display the line on which the error occurs.
prettyParseError :: ParseErrorBundle Text Void -> PrettyError
prettyParseError err = PrettyError $ "cannot parse" <+> pretty (errorBundlePretty err)
-- | Run a puppet parser against some 'Text' input.
runPuppetParser :: String -> Text -> Either (ParseErrorBundle Text Void) (Vector Statement)
runPuppetParser = parse puppetParser
-- | Parse a collection of puppet 'Statement'.
puppetParser :: Parser (Vector Statement)
puppetParser = optional sc >> statementList