1
1
mirror of https://github.com/anoma/juvix.git synced 2024-12-15 10:03:22 +03:00
juvix/app/Commands/Dev/Highlight/Options.hs
Jonathan Cubides 830b3be304
Add FileExt type (#2467)
This PR introduces FileExt type, and consequently, one can generalise
methods and matches based on the file extension; for example,
`parseInputJuvixAsmFile` is now an app. `parseInputFile FileExtJuvixAsm`
2023-10-25 12:02:12 +02:00

40 lines
1.0 KiB
Haskell

module Commands.Dev.Highlight.Options
( module Commands.Dev.Highlight.Options,
HighlightBackend (..),
)
where
import CommonOptions
import Juvix.Compiler.Concrete.Data.Highlight
data HighlightOptions = HighlightOptions
{ _highlightBackend :: HighlightBackend,
_highlightInputFile :: AppPath File
}
deriving stock (Data)
parseHighlight :: Parser HighlightOptions
parseHighlight = do
_highlightBackend <-
option
(eitherReader parseBackend)
( long "format"
<> metavar "FORMAT"
<> value Emacs
<> showDefault
<> help "selects a backend. FORMAT = emacs | json"
<> completeWith (map show allBackends)
)
_highlightInputFile <- parseInputFile FileExtJuvix
pure HighlightOptions {..}
where
allBackends :: [HighlightBackend]
allBackends = allElements
parseBackend :: String -> Either String HighlightBackend
parseBackend s = case map toLower s of
"emacs" -> Right Emacs
"json" -> Right Json
_ -> Left $ "unrecognised theme: " <> s