[#83] support reader conditionals using :bb feature

This commit is contained in:
Michiel Borkent 2019-10-26 23:53:10 +02:00 committed by GitHub
parent 57581d2406
commit 7ecf2bb6ec
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 27 additions and 5 deletions

View file

@ -299,6 +299,18 @@ $ bb script.clj -h
{:port 80, :help true}
```
## Reader conditionals
Babashka supports reader conditionals using the `:bb` feature:
``` clojure
cat example.clj
#?(:clj (in-ns 'foo) :bb (println "babashka doesn't support in-ns yet!"))
$ ./bb example.clj
babashka doesn't support in-ns yet!
```
## Preloads
The environment variable `BABASHKA_PRELOADS` allows to define code that will be

View file

@ -12,7 +12,7 @@
:resource-paths ["resources" "sci/resources"]
:dependencies [[org.clojure/clojure "1.10.1"]
[org.clojure/tools.reader "1.3.2"]
[borkdude/edamame "0.0.7"]
[borkdude/edamame "0.0.8-alpha.2"]
[org.clojure/core.async "0.4.500"]
[org.clojure/tools.cli "0.4.2"]]
:profiles {:test {:dependencies [[clj-commons/conch "0.9.2"]]}

View file

@ -1 +1 @@
0.0.22-SNAPSHOT
0.0.22

2
sci

@ -1 +1 @@
Subproject commit dcfea77c3172c78a6cb053ff51a6faae154b34dc
Subproject commit f7487133fb6ba44be8f9cb38416550a2923b6217

View file

@ -24,7 +24,7 @@
(println))
:read (fn [_request-prompt request-exit]
(if (r/peek-char in) ;; if this is nil, we reached EOF
(let [v (parser/parse-next in)]
(let [v (parser/parse-next in #{:bb})]
(if (or (identical? :repl/quit v)
(identical? :repl/exit v)
(identical? :edamame.impl.parser/eof v))

View file

@ -208,7 +208,8 @@ Everything after that is bound to *command-line-args*."))
'me.raynes.conch.low-level conch-namespace
'clojure.core.async async-namespace}
:bindings (assoc bindings '*command-line-args* command-line-args)
:env env}
:env env
:features #{:bb}}
ctx (update ctx :bindings assoc 'load-file #(load-file* ctx %))
_preloads (some-> (System/getenv "BABASHKA_PRELOADS") (str/trim) (sci/eval-string ctx))
exit-code

View file

@ -53,6 +53,12 @@
(socket-command '(defn bar [x y z] (bindings)))
(is (str/includes? (socket-command '(bar 1 2 3))
"[x y z]")))
(testing "reader conditionals"
(is (str/includes? (let [ret (sh "bash" "-c"
(format "echo \"%s\n:repl/exit\" | nc 127.0.0.1 1666"
"#?(:bb 1337 :clj 8888)"))]
(:out ret))
"1337")))
(finally
(if tu/jvm?
(stop-repl!)

View file

@ -222,3 +222,6 @@
(deftest try-catch-test
(is (zero? (bb nil "(try (/ 1 0) (catch ArithmeticException _ 0))"))))
(deftest reader-conditionals-test
(is (= :hello (bb nil "#?(:clj (in-ns 'foo)) (println :hello)"))))