mirror of
https://github.com/anoma/juvix.git
synced 2025-01-02 04:24:00 +03:00
3d012cc8fb
- Closes #1993 This pr makes it possible to use `~`, `..` and environment variables in the `juvix.yaml` and all flags / input of the cli. In the CLI, the shell will be responsible for replacing environment variables with their value, so the usual syntax can be used. For the `dependencies` field, I have implemented a parser that has some restrictions: 1. Environment variables are given with the makefile-like syntax `$(VAR)` 2. The three characters `$` `(` `)` are reserved for the environment variables syntax. They cannot be part of the path. 3. `~` is reserved for `$(HOME)`. I.e. the prepath `~~` will expand to `$HOME$HOME`. 4. Nested environment variables are not allowed. Thanks @paulcadman for the feedback. I think we are ready to merge this nightmarish pr 👻 --------- Co-authored-by: Paul Cadman <git@paulcadman.dev>
20 lines
685 B
Haskell
20 lines
685 B
Haskell
module Commands.Dev.Core.Eval where
|
|
|
|
import Commands.Base
|
|
import Commands.Dev.Core.Eval.Options
|
|
import Evaluator
|
|
import Juvix.Compiler.Core.Data.InfoTable qualified as Core
|
|
import Juvix.Compiler.Core.Translation.FromSource qualified as Core
|
|
|
|
runCommand :: forall r. (Members '[Embed IO, App] r) => CoreEvalOptions -> Sem r ()
|
|
runCommand opts = do
|
|
f :: Path Abs File <- fromAppPathFile b
|
|
s <- embed (readFile (toFilePath f))
|
|
case Core.runParser f Core.emptyInfoTable s of
|
|
Left err -> exitJuvixError (JuvixError err)
|
|
Right (tab, Just node) -> do evalAndPrint opts tab node
|
|
Right (_, Nothing) -> return ()
|
|
where
|
|
b :: AppPath File
|
|
b = opts ^. coreEvalInputFile
|