packages feed

keiro-dsl-0.8.0.0: test/Keiro/Dsl/FrontendPublicApiProbe.hs

-- | Compile-time evidence for the public parser and renderer surface released
-- by keiro-dsl-0.7.0.0. Later frontend refactors may change implementations,
-- but these assignments must keep compiling.
module Keiro.Dsl.FrontendPublicApiProbe
  ( apiProbe,
  )
where

import Data.Text (Text)
import Keiro.Dsl.Frontend (FrontendFailure, LoweringFailure, lowerSurfaceSource, parseSurfaceSource)
import Keiro.Dsl.Grammar (Name, Node, Placement, Spec, specContext, specLayout, specModuleRoot, specNodes)
import Keiro.Dsl.LanguageVersion (ParseFailure, ParsedSource, SourceLanguage, SourceLanguageDiagnostic, SourceLanguageErrorCode, parsedSourceLanguage, parsedSpec, sourceLanguageErrorCode)
import Keiro.Dsl.Parser (ParseError, parseSource, parseSpec, parseSpecText)
import Keiro.Dsl.PrettyPrint (renderSource, renderSpec)
import Keiro.Dsl.Syntax (SurfaceSource)

parseSurfaceSourceProbe :: FilePath -> Text -> Either FrontendFailure SurfaceSource
parseSurfaceSourceProbe = parseSurfaceSource

lowerSurfaceSourceProbe :: SurfaceSource -> Either LoweringFailure ParsedSource
lowerSurfaceSourceProbe = lowerSurfaceSource

parseSourceProbe :: FilePath -> Text -> Either ParseFailure ParsedSource
parseSourceProbe = parseSource

parseSpecProbe :: FilePath -> Text -> Either ParseError Spec
parseSpecProbe = parseSpec

parseSpecTextProbe :: Text -> Either ParseError Spec
parseSpecTextProbe = parseSpecText

renderSourceProbe :: ParsedSource -> Text
renderSourceProbe = renderSource

renderSpecProbe :: Spec -> Text
renderSpecProbe = renderSpec

parsedSourceLanguageProbe :: ParsedSource -> SourceLanguage
parsedSourceLanguageProbe = parsedSourceLanguage

parsedSpecProbe :: ParsedSource -> Spec
parsedSpecProbe = parsedSpec

sourceLanguageErrorCodeProbe :: SourceLanguageDiagnostic -> SourceLanguageErrorCode
sourceLanguageErrorCodeProbe = sourceLanguageErrorCode

specContextProbe :: Spec -> Name
specContextProbe = specContext

specModuleRootProbe :: Spec -> Maybe Text
specModuleRootProbe = specModuleRoot

specLayoutProbe :: Spec -> Maybe Placement
specLayoutProbe = specLayout

specNodesProbe :: Spec -> [Node]
specNodesProbe = specNodes

-- | Referencing every assignment keeps @-Wall@ useful and makes the module a
-- real compile probe instead of passive documentation.
apiProbe :: ()
apiProbe =
  parseSurfaceSourceProbe `seq`
    lowerSurfaceSourceProbe `seq`
      parseSourceProbe `seq`
        parseSpecProbe `seq`
          parseSpecTextProbe `seq`
            renderSourceProbe `seq`
              renderSpecProbe `seq`
                parsedSourceLanguageProbe `seq`
                  parsedSpecProbe `seq`
                    sourceLanguageErrorCodeProbe `seq`
                      specContextProbe `seq`
                        specModuleRootProbe `seq`
                          specLayoutProbe `seq`
                            specNodesProbe `seq`
                              ()