From 62bd498b128b559bbd9d788b43291f9466975efd Mon Sep 17 00:00:00 2001 From: Michiel Borkent Date: Sat, 24 Apr 2021 12:04:02 +0200 Subject: [PATCH] wip --- deps.edn | 3 +- .../babashka/impl/version_clj.clj | 63 +++++++++++++++++++ project.clj | 3 + 3 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 feature-version-clj/babashka/impl/version_clj.clj diff --git a/deps.edn b/deps.edn index dcf461a2..2abcafbf 100644 --- a/deps.edn +++ b/deps.edn @@ -35,7 +35,8 @@ babashka/clojure-lanterna {:mvn/version "0.9.8-SNAPSHOT"} org.clojure/core.match {:mvn/version "1.0.0"} hiccup/hiccup {:mvn/version "2.0.0-alpha2"} - rewrite-clj/rewrite-clj {:mvn/version "1.0.605-alpha"}} + rewrite-clj/rewrite-clj {:mvn/version "1.0.605-alpha"} + version-clj/version-clj {:mvn/version "2.0.1"}} :aliases {:babashka/dev {:main-opts ["-m" "babashka.main"]} :profile diff --git a/feature-version-clj/babashka/impl/version_clj.clj b/feature-version-clj/babashka/impl/version_clj.clj new file mode 100644 index 00000000..9d80f075 --- /dev/null +++ b/feature-version-clj/babashka/impl/version_clj.clj @@ -0,0 +1,63 @@ +(ns babashka.impl.rewrite-clj + {:no-doc true} + (:require [version-clj.core :as v] + [sci.core :as sci])) + +(def nns (sci/create-ns 'rewrite-clj.node nil)) +(def pens (sci/create-ns 'rewrite-clj.paredit nil)) +(def pns (sci/create-ns 'rewrite-clj.parser nil)) +(def zns (sci/create-ns 'rewrite-clj.zip nil)) +(def zsns (sci/create-ns 'rewrite-clj.zip.subedit nil)) + +#_(defmacro copy-var + "Copies contents from var `sym` to a new sci var. The value `ns` is an + object created with `sci.core/create-ns`." + ([sym ns] + `(let [ns# ~ns + var# (var ~sym) + val# (deref var#) + m# (-> var# meta) + ns-name# (vars/getName ns#) + name# (:name m#) + name-sym# (symbol (str ns-name#) (str name#)) + new-m# {:doc (:doc m#) + :name name# + :arglists (:arglists m#) + :ns ns#}] + (cond (:dynamic m#) + (new-dynamic-var name# val# new-m#) + (:macro m#) + (new-macro-var name# val# new-m#) + :else (new-var name# val# new-m#))))) + +(defn make-ns [ns sci-ns] + (reduce (fn [ns-map [var-name var]] + (let [m (meta var) + no-doc (:no-doc m) + doc (:doc m) + arglists (:arglists m)] + (if no-doc ns-map + (assoc ns-map var-name + (sci/new-var (symbol var-name) @var + (cond-> {:ns sci-ns + :name (:name m)} + (:macro m) (assoc :macro true) + doc (assoc :doc doc) + arglists (assoc :arglists arglists))))))) + {} + (ns-publics ns))) + +(def node-namespace + (make-ns 'rewrite-clj.node nns)) + +(def parser-namespace + (make-ns 'rewrite-clj.parser pns)) + +(def paredit-namespace + (make-ns 'rewrite-clj.paredit pens)) + +(def zip-namespace + (make-ns 'rewrite-clj.zip zns)) + +(def subedit-namespace + (make-ns 'rewrite-clj.zip.subedit zsns)) diff --git a/project.clj b/project.clj index 67def2b6..3d94b35c 100644 --- a/project.clj +++ b/project.clj @@ -54,6 +54,8 @@ :feature/spec-alpha {:source-paths ["feature-spec-alpha"]} :feature/rewrite-clj {:source-paths ["feature-rewrite-clj"] :dependencies [[rewrite-clj/rewrite-clj "1.0.605-alpha"]]} + :feature/version-clj {:source-paths ["feature-version-clj"] + :dependencies [[version-clj/version-clj "2.0.1"]]} :test [:feature/xml :feature/lanterna :feature/yaml @@ -70,6 +72,7 @@ :feature/test-check :feature/spec-alpha :feature/rewrite-clj + :feature/version-clj {:dependencies [[com.clojure-goes-fast/clj-async-profiler "0.4.1"] [com.opentable.components/otj-pg-embedded "0.13.3"]]}] :uberjar {:global-vars {*assert* false}