dzen-dhall-1.0.0: src/DzenDhall/Commands/Validate.hs
module DzenDhall.Commands.Validate where
import DzenDhall.App
import DzenDhall.App as App
import DzenDhall.Arguments
import DzenDhall.Config
import DzenDhall.Extra
import DzenDhall.Runtime.Data
import qualified DzenDhall.Parser as Parser
import qualified DzenDhall.Validation as Validation
import Control.Monad
import Lens.Micro
import Lens.Micro.Extras
validateCommand :: ValidateCommand -> App Common ()
validateCommand (ValidateCommand skipAssertions) = do
runtime <- App.getRuntime
forM_ (view rtConfigurations runtime) \cfg -> do
let barTokens = cfg ^. cfgBarTokens
when (skipAssertions == DontSkip) do
assertionErrors <- liftIO do
Validation.checkAssertions barTokens
unless (null assertionErrors) do
App.exit 3 $ Validation.report assertionErrors
let errors = Validation.validate barTokens
unless (null errors) do
App.exit 3 $ Validation.report errors
let parseResult =
Parser.runBarParser $
Validation.filterOutAssertions barTokens
whenLeft parseResult
(exitWithError barTokens)
exitWithError :: Show a => [Token] -> a -> App Common b
exitWithError barTokens err =
App.exit 3 $ fromLines
[ "Internal error when parsing configuration, debug info: " <> showPack barTokens
, "Error: " <> showPack err
, "Please report as bug."
]