From 3d0befb52b81f0b16b3a43530a98a77808081e4d Mon Sep 17 00:00:00 2001 From: Bob Date: Thu, 7 Apr 2022 08:02:06 -0400 Subject: [PATCH] update some SciVar names (metadata-wise) to align with babashka name (#1236) * update SciVar names to align with the symbols in the namespace maps * make test using a bb script more consistent with others * update changelog --- CHANGELOG.md | 1 + feature-hiccup/babashka/impl/hiccup.clj | 4 ++-- .../babashka/impl/httpkit_client.clj | 2 +- src/babashka/impl/clojure/core/async.clj | 6 +++--- src/babashka/impl/clojure/test.clj | 4 ++-- src/babashka/impl/deps.clj | 2 +- src/babashka/impl/tasks.clj | 2 +- test/babashka/main_test.clj | 4 ++++ test/babashka/scripts/check_var_names.bb | 14 ++++++++++++++ 9 files changed, 29 insertions(+), 10 deletions(-) create mode 100644 test/babashka/scripts/check_var_names.bb diff --git a/CHANGELOG.md b/CHANGELOG.md index f41af96c..c3acf501 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ A preview of the next release can be installed from - Add `prepare` subcommand to download deps & pods and cache pod metadata - [#1041](https://github.com/babashka/babashka/issues/1041): Improve error message when regex literal in EDN config +- [#1223](https://github.com/babashka/babashka/issues/1223): Ensure that var metadata (specifically `:name`) aligns with the var's symbol (which in turn ensures that `doc` will print the var's name) ## 0.8.0 (2022-04-04) diff --git a/feature-hiccup/babashka/impl/hiccup.clj b/feature-hiccup/babashka/impl/hiccup.clj index 7263fb88..d2903b06 100644 --- a/feature-hiccup/babashka/impl/hiccup.clj +++ b/feature-hiccup/babashka/impl/hiccup.clj @@ -52,10 +52,10 @@ util/raw-string) (def hiccup-namespace - {'html (copy-var html-1 hns)}) + {'html (copy-var html-1 hns {:name 'html})}) (def hiccup2-namespace - {'html (copy-var html-2 hns2)}) + {'html (copy-var html-2 hns2 {:name 'html})}) (def html-mode (copy-var util/*html-mode* uns)) (def escape-strings? (copy-var util/*escape-strings?* uns)) diff --git a/feature-httpkit-client/babashka/impl/httpkit_client.clj b/feature-httpkit-client/babashka/impl/httpkit_client.clj index bb3e10ea..f51ccaf8 100644 --- a/feature-httpkit-client/babashka/impl/httpkit_client.clj +++ b/feature-httpkit-client/babashka/impl/httpkit_client.clj @@ -76,4 +76,4 @@ (def sni-client-namespace {'ssl-configurer (copy-var sni-client/ssl-configurer sns) - 'default-client (sci/new-var 'sni-client sni-client {:ns sns})}) + 'default-client (sci/new-var 'default-client sni-client {:ns sns})}) diff --git a/src/babashka/impl/clojure/core/async.clj b/src/babashka/impl/clojure/core/async.clj index f7112f67..d530af64 100644 --- a/src/babashka/impl/clojure/core/async.clj +++ b/src/babashka/impl/clojure/core/async.clj @@ -103,10 +103,10 @@ 'untap-all (copy-var async/untap-all core-async-namespace) ;; polyfill 'go (macrofy 'go thread core-async-namespace) - '! (copy-var async/>!! core-async-namespace) + '! (copy-var async/>!! core-async-namespace {:name '>!}) 'alt! (macrofy 'alt! alt!! core-async-namespace) - 'alts! (copy-var async/alts!! core-async-namespace) + 'alts! (copy-var async/alts!! core-async-namespace {:name 'alts!}) 'go-loop (macrofy 'go-loop go-loop core-async-namespace)}) (def async-protocols-ns (vars/->SciNamespace 'clojure.core.async.impl.protocols nil)) diff --git a/src/babashka/impl/clojure/test.clj b/src/babashka/impl/clojure/test.clj index 0053e289..98d736d8 100644 --- a/src/babashka/impl/clojure/test.clj +++ b/src/babashka/impl/clojure/test.clj @@ -332,7 +332,7 @@ :added "1.1"} report-impl :type) -(def report (sci/copy-var report-impl tns)) +(def report (sci/copy-var report-impl tns {:name 'report})) (defn do-report "Add file and line information to a test result and call report. @@ -722,7 +722,7 @@ :expected nil, :actual e}))) (do-report {:type :end-test-var, :var v})))) -(def test-var (sci/copy-var test-var-impl tns)) +(def test-var (sci/copy-var test-var-impl tns {:name 'test-var})) (defn test-vars "Groups vars by their namespace and runs test-vars on them with diff --git a/src/babashka/impl/deps.clj b/src/babashka/impl/deps.clj index 735ec477..3224ebce 100644 --- a/src/babashka/impl/deps.clj +++ b/src/babashka/impl/deps.clj @@ -101,4 +101,4 @@ 'clojure (sci/copy-var bdeps/clojure dns) 'merge-deps (sci/copy-var merge-deps dns) ;; undocumented - 'merge-defaults (sci/copy-var merge-default-deps dns)}) + 'merge-defaults (sci/copy-var merge-default-deps dns {:name 'merge-defaults})}) diff --git a/src/babashka/impl/tasks.clj b/src/babashka/impl/tasks.clj index 2b376f0d..478e3671 100644 --- a/src/babashka/impl/tasks.clj +++ b/src/babashka/impl/tasks.clj @@ -20,7 +20,7 @@ ;; (def task-name (sci/new-dynamic-var '*-task-name* nil {:ns sci-ns})) (def task (sci/new-dynamic-var '*task* nil {:ns sci-ns})) (def current-task (sci/new-var 'current-task (fn [] @task) {:ns sci-ns})) -(def state (sci/new-var 'state (atom {}) {:ns sci-ns})) +(def state (sci/new-var 'current-state (atom {}) {:ns sci-ns})) (defn log-info [& strs] (let [log-level @log-level] diff --git a/test/babashka/main_test.clj b/test/babashka/main_test.clj index 976d2644..661e7db4 100644 --- a/test/babashka/main_test.clj +++ b/test/babashka/main_test.clj @@ -825,6 +825,10 @@ true"))) (is (= :f (bb nil "(first (into-array [:f]))"))) (is (= :f (bb nil "(first (first (into-array [(into-array [:f])])))")))) +(deftest var-names-test + (testing "for all public vars, ns/symbol from ns map matches metadata" + (is (empty? (bb nil (.getPath (io/file "test" "babashka" "scripts" "check_var_names.bb"))))))) + ;;;; Scratch (comment diff --git a/test/babashka/scripts/check_var_names.bb b/test/babashka/scripts/check_var_names.bb new file mode 100644 index 00000000..a689cb05 --- /dev/null +++ b/test/babashka/scripts/check_var_names.bb @@ -0,0 +1,14 @@ +(require '[clojure.string :as str]) +(let [ns-maps (->> (all-ns) + (map (fn [nmspc] [(ns-name nmspc) (ns-publics nmspc)])) + (into {})) ; a map of { ns-name {symbol var, ...}} + ns-maps (update ns-maps 'user #(dissoc % '*input*))] ; *input* is a special case that we'll skip over + (->> + (for [[ns-nm _] ns-maps + [sym vr] (ns-maps ns-nm) + :let [{var-meta-ns :ns, var-meta-name :name} (meta vr) + var-meta-ns-name (some-> var-meta-ns ns-name)]] + ; build a seq of maps containing the ns/symbol from the ns and the ns/symbol from the var's metadata + {:actual-ns ns-nm :actual-ns-symbol sym :var-meta-ns var-meta-ns-name :var-meta-name var-meta-name}) + ; and remove the matches + (remove #(and (= (:actual-ns %) (:var-meta-ns %)) (= (:actual-ns-symbol %) (:var-meta-name %))))))