{-| 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 XPrelude import Text.Megaparsec import Puppet.Parser.PrettyPrinter import Puppet.Parser.Lens import Puppet.Parser.Internal import Puppet.Parser.Types -- | 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