mirror of
https://github.com/anoma/juvix.git
synced 2024-12-15 10:03:22 +03:00
830b3be304
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`
40 lines
1.0 KiB
Haskell
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
|