diff --git a/feature-csv/babashka/impl/csv.clj b/feature-csv/babashka/impl/csv.clj index 850444e6..040a407c 100644 --- a/feature-csv/babashka/impl/csv.clj +++ b/feature-csv/babashka/impl/csv.clj @@ -1,7 +1,10 @@ (ns babashka.impl.csv {:no-doc true} - (:require [clojure.data.csv :as csv])) + (:require [clojure.data.csv :as csv] + [sci.core :as sci])) + +(def cns (sci/create-ns 'clojure.data.csv nil)) (def csv-namespace - {'read-csv csv/read-csv - 'write-csv csv/write-csv}) + {'read-csv (sci/copy-var csv/read-csv cns) + 'write-csv (sci/copy-var csv/write-csv cns)}) diff --git a/sci b/sci index 5ed2190f..3c7ebc9a 160000 --- a/sci +++ b/sci @@ -1 +1 @@ -Subproject commit 5ed2190f3c97de6d30f3aba96362bf6c68e95e90 +Subproject commit 3c7ebc9adc31261e342145696438022e8a9b9fce diff --git a/src/babashka/impl/clojure/java/browse.clj b/src/babashka/impl/clojure/java/browse.clj index c2ee05a1..37db104b 100644 --- a/src/babashka/impl/clojure/java/browse.clj +++ b/src/babashka/impl/clojure/java/browse.clj @@ -4,7 +4,9 @@ [clojure.string :as str] [sci.core :as sci])) -(def open-url-script (sci/new-dynamic-var '*open-url-script* (atom nil))) +(def bns (sci/create-ns 'clojure.java.browse nil)) + +(def open-url-script (sci/new-dynamic-var '*open-url-script* (atom nil) {:ns bns})) (def os (let [os-name (System/getProperty "os.name") @@ -27,4 +29,4 @@ (def browse-namespace {'*open-url-script* open-url-script - 'browse-url browse-url}) + 'browse-url (sci/copy-var browse-url bns)}) diff --git a/src/babashka/impl/clojure/java/shell.clj b/src/babashka/impl/clojure/java/shell.clj index 0251ff8b..4c11d2d9 100644 --- a/src/babashka/impl/clojure/java/shell.clj +++ b/src/babashka/impl/clojure/java/shell.clj @@ -1,20 +1,13 @@ (ns babashka.impl.clojure.java.shell {:no-doc true} (:require [clojure.java.shell :as shell] - [sci.core :as sci] - [sci.impl.namespaces :refer [copy-var]] - [sci.impl.vars :as vars])) + [sci.core :as sci])) -(def shell-ns (vars/->SciNamespace 'clojure.java.shell nil)) +(def shell-ns (sci/create-ns 'clojure.java.shell nil)) (def sh-dir (sci/new-dynamic-var '*sh-dir* nil {:ns shell-ns})) (def sh-env (sci/new-dynamic-var '*sh-env* nil {:ns shell-ns})) -(defn with-sh-dir* - [_ _ dir & forms] - `(binding [clojure.java.shell/*sh-dir* ~dir] - ~@forms)) - (defn with-sh-env* [_ _ env & forms] `(binding [clojure.java.shell/*sh-env* ~env] @@ -38,11 +31,11 @@ (alter-meta! #'sh (constantly (meta #'shell/sh))) +(def sns (sci/create-ns 'clojure.java.shell nil)) + (def shell-namespace {'*sh-dir* sh-dir '*sh-env* sh-env - 'with-sh-dir (with-meta with-sh-dir* - {:sci/macro true}) - 'with-sh-env (with-meta with-sh-env* - {:sci/macro true}) - 'sh (copy-var sh shell-ns)}) + 'with-sh-dir (sci/copy-var shell/with-sh-dir shell-ns) + 'with-sh-env (sci/copy-var shell/with-sh-env shell-ns) + 'sh (sci/copy-var sh shell-ns)}) diff --git a/src/babashka/impl/clojure/stacktrace.clj b/src/babashka/impl/clojure/stacktrace.clj index 07f19ef1..f6d5c06a 100644 --- a/src/babashka/impl/clojure/stacktrace.clj +++ b/src/babashka/impl/clojure/stacktrace.clj @@ -3,14 +3,19 @@ (:require [clojure.stacktrace :as stacktrace] [sci.core :as sci])) +(def sns (sci/create-ns 'clojure.stacktrace nil)) + (defmacro wrap-out [f] `(fn [& ~'args] (binding [*out* @sci/out] (apply ~f ~'args)))) +(defn new-var [var-sym f] + (sci/new-var var-sym f {:ns sns})) + (def stacktrace-namespace - {'root-cause stacktrace/root-cause - 'print-trace-element (wrap-out stacktrace/print-trace-element) - 'print-throwable (wrap-out stacktrace/print-throwable) - 'print-stack-trace (wrap-out stacktrace/print-stack-trace) - 'print-cause-trace (wrap-out stacktrace/print-cause-trace)}) + {'root-cause (sci/copy-var stacktrace/root-cause sns) + 'print-trace-element (new-var 'print-trace-element (wrap-out stacktrace/print-trace-element)) + 'print-throwable (new-var 'print-throwable (wrap-out stacktrace/print-throwable)) + 'print-stack-trace (new-var 'print-stack-trace (wrap-out stacktrace/print-stack-trace)) + 'print-cause-trace (new-var 'print-cause-trace (wrap-out stacktrace/print-cause-trace))}) diff --git a/src/babashka/impl/protocols.clj b/src/babashka/impl/protocols.clj index 67d7cd51..f5ef9325 100644 --- a/src/babashka/impl/protocols.clj +++ b/src/babashka/impl/protocols.clj @@ -31,8 +31,8 @@ (def protocols-namespace {'Datafiable (sci/new-var 'clojure.core.protocols/Datafiable {:methods #{'datafy} - :ns protocols-ns}) + :ns protocols-ns} {:ns protocols-ns}) 'datafy (copy-var datafy protocols-ns) 'Navigable (sci/new-var 'clojure.core.protocols/Navigable {:methods #{'nav} - :ns protocols-ns}) + :ns protocols-ns} {:ns protocols-ns}) 'nav (copy-var nav protocols-ns)}) diff --git a/src/babashka/impl/server.clj b/src/babashka/impl/server.clj index 4b44ca73..687056a4 100644 --- a/src/babashka/impl/server.clj +++ b/src/babashka/impl/server.clj @@ -1,2 +1,24 @@ -(ns babashka.impl.server) +(ns babashka.impl.server + (:require [babashka.impl.clojure.core.server :as server] + [babashka.impl.common :as common] + [babashka.impl.socket-repl :as socket-repl] + [sci.core :as sci])) +(def sns (sci/create-ns 'clojure.core.server nil)) + +(def prepl (fn [& args] + (apply server/prepl @common/ctx args))) + +(def io-prepl + (fn [& args] + (apply server/io-prepl @common/ctx args))) + +(def start-server + (fn [& args] + (apply server/start-server @common/ctx args))) + +(def clojure-core-server-namespace + {'repl (sci/copy-var socket-repl/repl sns) + 'prepl (sci/copy-var prepl sns) + 'io-prepl (sci/copy-var io-prepl sns) + 'start-server (sci/copy-var start-server sns)}) diff --git a/src/babashka/impl/test.clj b/src/babashka/impl/test.clj index 0d6dfbc3..6e618efe 100644 --- a/src/babashka/impl/test.clj +++ b/src/babashka/impl/test.clj @@ -9,6 +9,9 @@ (def tns t/tns) +(defn new-var [var-sym f] + (sci/new-var var-sym f {:ns tns})) + (def clojure-test-namespace {:obj tns '*load-tests* t/load-tests @@ -20,17 +23,17 @@ '*test-out* t/test-out ;; 'with-test-out (macrofy @#'t/with-test-out) ;; 'file-position t/file-position - 'testing-vars-str t/testing-vars-str - 'testing-contexts-str t/testing-contexts-str - 'inc-report-counter t/inc-report-counter + 'testing-vars-str (sci/copy-var t/testing-vars-str tns) + 'testing-contexts-str (sci/copy-var t/testing-contexts-str tns) + 'inc-report-counter (sci/copy-var t/inc-report-counter tns) 'report t/report - 'do-report t/do-report + 'do-report (sci/copy-var t/do-report tns) ;; assertion utilities - 'function? t/function? - 'assert-predicate t/assert-predicate - 'assert-any t/assert-any + 'function? (sci/copy-var t/function? tns) + 'assert-predicate (sci/copy-var t/assert-predicate tns) + 'assert-any (sci/copy-var t/assert-any tns) ;; assertion methods - 'assert-expr t/assert-expr + 'assert-expr (sci/copy-var t/assert-expr tns) 'try-expr (sci/copy-var t/try-expr tns) ;; assertion macros 'is (sci/copy-var t/is tns) @@ -42,15 +45,15 @@ 'deftest- (sci/copy-var t/deftest- tns) 'set-test (sci/copy-var t/set-test tns) ;; fixtures - 'use-fixtures t/use-fixtures - 'compose-fixtures t/compose-fixtures - 'join-fixtures t/join-fixtures + 'use-fixtures (sci/copy-var t/use-fixtures tns) + 'compose-fixtures (sci/copy-var t/compose-fixtures tns) + 'join-fixtures (sci/copy-var t/join-fixtures tns) ;; running tests: low level 'test-var t/test-var - 'test-vars t/test-vars - 'test-all-vars (contextualize t/test-all-vars) - 'test-ns (contextualize t/test-ns) + 'test-vars (sci/copy-var t/test-vars tns) + 'test-all-vars (new-var 'test-all-vars (contextualize t/test-all-vars)) + 'test-ns (new-var 'test-ns (contextualize t/test-ns)) ;; running tests: high level - 'run-tests (contextualize t/run-tests) - 'run-all-tests (contextualize t/run-all-tests) - 'successful? t/successful?}) + 'run-tests (new-var 'run-tests (contextualize t/run-tests)) + 'run-all-tests (new-var 'run-all-tests (contextualize t/run-all-tests)) + 'successful? (sci/copy-var t/successful? tns)}) diff --git a/src/babashka/main.clj b/src/babashka/main.clj index 8eccc94a..d626e949 100644 --- a/src/babashka/main.clj +++ b/src/babashka/main.clj @@ -9,7 +9,6 @@ [babashka.impl.classes :as classes] [babashka.impl.classpath :as cp :refer [classpath-namespace]] [babashka.impl.clojure.core :as core :refer [core-extras]] - [babashka.impl.clojure.core.server :as server] [babashka.impl.clojure.java.browse :refer [browse-namespace]] [babashka.impl.clojure.java.io :refer [io-namespace]] [babashka.impl.clojure.java.shell :refer [shell-namespace]] @@ -34,12 +33,13 @@ [babashka.impl.proxy :refer [proxy-fn]] [babashka.impl.reify :refer [reify-fn]] [babashka.impl.repl :as repl] + [babashka.impl.server :refer [clojure-core-server-namespace]] [babashka.impl.socket-repl :as socket-repl] [babashka.impl.tasks :as tasks :refer [tasks-namespace]] [babashka.impl.test :as t] [babashka.impl.tools.cli :refer [tools-cli-namespace]] [babashka.nrepl.server :as nrepl-server] - [babashka.wait :as wait] + [babashka.wait :refer [wait-namespace]] [clojure.edn :as edn] [clojure.java.io :as io] [clojure.string :as str] @@ -72,6 +72,8 @@ (def pipe-signal-received? (constantly false)) (def handle-sigint! (constantly nil)))) +(def signal-ns {'pipe-signal-received? (sci/copy-var pipe-signal-received? (sci/create-ns 'babashka.signal nil))}) + (sci/alter-var-root sci/in (constantly *in*)) (sci/alter-var-root sci/out (constantly *out*)) (sci/alter-var-root sci/err (constantly *err*)) @@ -311,15 +313,6 @@ Use bb run --help to show this help output. ;;(def ^:private server-ns-obj (sci/create-ns 'clojure.core.server nil)) -(def clojure-core-server - {'repl socket-repl/repl - 'prepl (fn [& args] - (apply server/prepl @common/ctx args)) - 'io-prepl (fn [& args] - (apply server/io-prepl @common/ctx args)) - 'start-server (fn [& args] - (apply server/start-server @common/ctx args))}) - (def input-var (sci/new-dynamic-var '*input*)) (def namespaces @@ -330,9 +323,8 @@ Use bb run --help to show this help output. nil)} 'clojure.tools.cli tools-cli-namespace 'clojure.java.shell shell-namespace - 'babashka.wait {'wait-for-port wait/wait-for-port - 'wait-for-path wait/wait-for-path} - 'babashka.signal {'pipe-signal-received? pipe-signal-received?} + 'babashka.wait wait-namespace + 'babashka.signal signal-ns 'clojure.java.io io-namespace 'cheshire.core cheshire-core-namespace 'clojure.data data/data-namespace @@ -354,7 +346,7 @@ Use bb run --help to show this help output. 'clojure.datafy datafy-namespace 'clojure.core.protocols protocols-namespace 'babashka.process process-namespace - 'clojure.core.server clojure-core-server + 'clojure.core.server clojure-core-server-namespace 'babashka.deps deps-namespace 'babashka.tasks tasks-namespace 'taoensso.timbre timbre-namespace diff --git a/src/babashka/wait.clj b/src/babashka/wait.clj index b4ea69b6..5cbea999 100644 --- a/src/babashka/wait.clj +++ b/src/babashka/wait.clj @@ -1,5 +1,6 @@ (ns babashka.wait - (:require [clojure.java.io :as io]) + (:require [clojure.java.io :as io] + [sci.core :as sci]) (:import [java.net Socket SocketException])) (set! *warn-on-reflection* true) @@ -56,7 +57,13 @@ default :else (assoc opts :took - (- (System/currentTimeMillis) t0)))))))) + (- (System/currentTimeMillis) t0)))))))) + +(def wns (sci/create-ns 'babashka.wait nil)) + +(def wait-namespace + {'wait-for-port (sci/copy-var wait-for-port wns) + 'wait-for-path (sci/copy-var wait-for-path wns)}) (comment (wait-for-port "localhost" 80) diff --git a/test/babashka/deps_test.clj b/test/babashka/deps_test.clj index 397a01f9..4b72f4a2 100644 --- a/test/babashka/deps_test.clj +++ b/test/babashka/deps_test.clj @@ -113,3 +113,8 @@ true (str/replace ":env-key" ":extra-env"))) (is (fs/exists? libs-dir)) (is (fs/exists? libs-dir2))))) + +(deftest print-deps-test + + + ) diff --git a/test/babashka/impl/socket_repl_test.clj b/test/babashka/impl/socket_repl_test.clj index 8c99f64a..5e6e587c 100644 --- a/test/babashka/impl/socket_repl_test.clj +++ b/test/babashka/impl/socket_repl_test.clj @@ -1,8 +1,8 @@ (ns babashka.impl.socket-repl-test (:require [babashka.impl.common :as common] + [babashka.impl.server :refer [clojure-core-server-namespace]] [babashka.impl.socket-repl :refer [start-repl! stop-repl!]] - [babashka.main :refer [clojure-core-server]] [babashka.process :as p] [babashka.test-utils :as tu] [babashka.wait :as w] @@ -46,7 +46,7 @@ (when exec? (try (if tu/jvm? - (let [ctx (init {:namespaces {'clojure.core.server clojure-core-server} + (let [ctx (init {:namespaces {'clojure.core.server clojure-core-server-namespace} :features #{:bb}})] (vreset! common/ctx ctx) (start-repl! "0.0.0.0:1666" ctx)) @@ -79,7 +79,7 @@ (let [ctx (init {:bindings {'*command-line-args* ["a" "b" "c"]} :env (atom {}) - :namespaces {'clojure.core.server clojure-core-server} + :namespaces {'clojure.core.server clojure-core-server-namespace} :features #{:bb}})] (vreset! common/ctx ctx) (start-repl! "{:address \"localhost\" :accept clojure.core.server/repl :port 1666}" @@ -103,7 +103,7 @@ (let [ctx (init {:bindings {'*command-line-args* ["a" "b" "c"]} :env (atom {}) - :namespaces {'clojure.core.server clojure-core-server} + :namespaces {'clojure.core.server clojure-core-server-namespace} :features #{:bb}})] (vreset! common/ctx ctx) (start-repl! "{:address \"localhost\" :accept clojure.core.server/io-prepl :port 1666}"