mirror of
https://github.com/anoma/juvix.git
synced 2024-12-18 20:31:51 +03:00
bd16d3ef2a
This PR adds an initial support for Literate Juvix Markdown files, files with the extension `.juvix.md`. Here is a small example of such a file: `Test.juvix.md`. <pre> # This is a heading Lorem ... ```juvix module Test; type A := a; fun : A -> A | _ := a; ``` Other text </pre> This initial support enables users to execute common commands such as typechecking, compilation, and HTML generation. Additionally, a new command called `markdown` has been introduced. This command replaces code blocks marked with the juvix attribute with their respective HTML output, much like the output we obtain when running `juvix html`. In this version, comments are ignored in the output, including judoc blocks. - We intend to use this new feature in combination with this Python plugin (https://github.com/anoma/juvix-mkdocs) to enhance our documentation site. https://github.com/anoma/juvix/assets/1428088/a0c17f36-3d76-42cc-a571-91f885866874 ## Future work Open as issues once this PR is merged, we can work on the following: - Support imports of Juvix Markdown modules (update the path resolver to support imports of Literate Markdown files) - Support (Judoc) comments in md Juvix blocks - Support Markdown in Judoc blocks - Update Text editor support, vscode extension and emacs mode (the highlighting info is a few characters off in the current state) - Closes #1839 - Closes #1719
43 lines
1.1 KiB
Haskell
43 lines
1.1 KiB
Haskell
module Commands.Eval.Options where
|
|
|
|
import CommonOptions
|
|
import Data.List.NonEmpty qualified as NonEmpty
|
|
import Evaluator qualified as Eval
|
|
import Juvix.Compiler.Core.Pretty.Options qualified as Core
|
|
|
|
data EvalOptions = EvalOptions
|
|
{ _evalInputFile :: AppPath File,
|
|
_evalSymbolName :: Maybe Text
|
|
}
|
|
deriving stock (Data)
|
|
|
|
makeLenses ''EvalOptions
|
|
|
|
instance CanonicalProjection EvalOptions Core.Options where
|
|
project _ =
|
|
Core.defaultOptions
|
|
{ Core._optShowDeBruijnIndices = False
|
|
}
|
|
|
|
instance CanonicalProjection EvalOptions Eval.EvalOptions where
|
|
project c =
|
|
Eval.EvalOptions
|
|
{ _evalInputFile = c ^. evalInputFile,
|
|
_evalNoIO = False,
|
|
_evalNoDisambiguate = False,
|
|
_evalPrintValues = True
|
|
}
|
|
|
|
parseEvalOptions :: Parser EvalOptions
|
|
parseEvalOptions = do
|
|
_evalInputFile <- parseInputFiles (NonEmpty.fromList [FileExtJuvix, FileExtJuvixMarkdown])
|
|
_evalSymbolName <-
|
|
optional $
|
|
strOption
|
|
( long "symbol-name"
|
|
<> short 's'
|
|
<> help "Evaluate a specific function identifier (default: main)"
|
|
<> metavar "NAME"
|
|
)
|
|
pure EvalOptions {..}
|