packages feed

language-puppet-1.5.1: src/Puppet/Parser.hs

-- | 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