Fix some typos, make jpm repl work without a project.janet.

This commit is contained in:
Calvin Rose 2020-04-16 12:11:17 -05:00
parent f5433dcaa4
commit 3eb84fcb13
3 changed files with 40 additions and 26 deletions

View File

@ -2,6 +2,7 @@
All notable changes to this project will be documented in this file.
## Unreleased - ???
- Fix bug in `getline`.
- Add `sh-rule` and `sh-phony` to jpm's dialect of Janet.
- Change C api's `janet_formatb` -> `janet_formatbv`.
- Add C `janet_formatb` to C api.

View File

@ -187,20 +187,25 @@
[into x]
(when x
(proto-flatten into (table/getproto x))
(loop [k :keys x]
(put into k (x k))))
(merge-into into x))
into)
(defn make-jpm-env
"Build an environment table with jpm functions preloaded."
[&opt no-deps]
(def env (make-env))
(put env :jpm-no-deps no-deps)
(loop [k :keys _env :when (symbol? k)]
(unless ((_env k) :private) (put env k (_env k))))
env)
(defn require-jpm
"Require a jpm file project file. This is different from a normal require
in that code is loaded in the jpm environment."
[path &opt no-deps]
(def env (make-env))
(put env :jpm-no-deps no-deps)
(unless (os/stat path :mode)
(error (string "cannot open " path)))
(loop [k :keys _env :when (symbol? k)]
(unless ((_env k) :private) (put env k (_env k))))
(def env (make-jpm-env no-deps))
(def currenv (proto-flatten @{} (fiber/getenv (fiber/current))))
(loop [k :keys currenv :when (keyword? k)]
(put env k (currenv k)))
@ -1053,17 +1058,23 @@ Flags are:
(defn jpm-repl
[]
(def env (require-jpm "./project.janet"))
(def p (env :project))
(def name (p :name))
(def env
(try
(require-jpm "./project.janet")
([err f]
(if (= "cannot open ./project.janet" err)
(put (make-jpm-env) :project {})
(propagate err f)))))
(setdyn :pretty-format (if-not (dyn :nocolor) "%.20Q" "%.20q"))
(setdyn :err-color (if-not (dyn :nocolor) true))
(print "Project: " name)
(print "Repository: " (p :repo))
(print "Author: " (p :author))
(def p (env :project))
(def name (p :name))
(if name (print "Project: " name))
(if-let [r (p :repo)] (print "Repository: " r))
(if-let [a (p :author)] (print "Author: " a))
(defn getchunk [buf p]
(def [line] (parser/where p))
(getline (string "jpm[" name "]:" line ":" (parser/state p :delimiters) "> ") buf env))
(getline (string "jpm[" (or name "repl") "]:" line ":" (parser/state p :delimiters) "> ") buf env))
(repl getchunk nil env))
(def- subcommands

View File

@ -501,7 +501,7 @@
that define something to loop over. They are formatted like:\n\n
\tbinding :verb object/expression\n\n
Where binding is a binding as passed to def, :verb is one of a set of keywords,
and object is any janet expression. The available verbs are:\n\n
and object is any expression. The available verbs are:\n\n
\t:iterate - repeatedly evaluate and bind to the expression while it is truthy.\n
\t:range - loop over a range. The object should be two element tuple with a start
and end value, and an optional positive step. The range is half open, [start, end).\n
@ -1482,10 +1482,10 @@
###
(defn- env-walk
[pred &opt env]
[pred &opt env local]
(default env (fiber/getenv (fiber/current)))
(def envs @[])
(do (var e env) (while e (array/push envs e) (set e (table/getproto e))))
(do (var e env) (while e (array/push envs e) (set e (table/getproto e)) (if local (break))))
(def ret-set @{})
(loop [envi :in envs
k :keys envi
@ -1494,16 +1494,18 @@
(sort (keys ret-set)))
(defn all-bindings
"Get all symbols available in an enviroment. Defaults to the current
fiber's environment."
[&opt env]
(env-walk symbol? env))
"Get all symbols available in an environment. Defaults to the current
fiber's environment. If local is truthy, will not show inherited bindings
(from prototype tables)."
[&opt env local]
(env-walk symbol? env local))
(defn all-dynamics
"Get all dynamic bindings in an environment. Defaults to the current
fiber's environment."
[&opt env]
(env-walk keyword? env))
fiber's environment. If local is truthy, will not show inherited bindings
(from prototype tables)."
[&opt env local]
(env-walk keyword? env local))
(defn doc-format
"Reformat text to wrap at a given line."
@ -1701,7 +1703,7 @@
ret)
(defn all
"Returns true if all xs are truthy, otherwise the resulty of first
"Returns true if all xs are truthy, otherwise the result of first
falsey predicate value, (pred x)."
[pred xs]
(var ret true)
@ -1915,7 +1917,7 @@
(eflush))
(defn run-context
"Run a context. This evaluates expressions of janet in an environment,
"Run a context. This evaluates expressions in an environment,
and is encapsulates the parsing, compilation, and evaluation.
Returns (in environment :exit-value environment) when complete.
opts is a table or struct of options. The options are as follows:\n\n\t
@ -2672,7 +2674,7 @@
###
###
(def root-env "The root environment used to create envionments with (make-env)" _env)
(def root-env "The root environment used to create environments with (make-env)" _env)
(do
(put _env 'boot/opts nil)