Skip to content

Commit d4fbb92

Browse files
committed
Fix #967: ns-name should work on symbol
1 parent 13e39d0 commit d4fbb92

File tree

2 files changed

+20
-24
lines changed

2 files changed

+20
-24
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ SCI is used in [babashka](https://github.com/babashka/babashka),
1616
- Fix [#959](https://github.com/babashka/sci/issues/959): Java interop improvement: instance method invocation now leverages type hints
1717
- Bump edamame to `1.4.30`
1818
- Give metadata `:type` key priority in `type` implementation
19+
- Fix [#967](https://github.com/babashka/sci/issues/967): `ns-name` should work on symbols
1920

2021
## 0.9.45 (2025-03-11)
2122

src/sci/impl/namespaces.cljc

Lines changed: 19 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -412,9 +412,6 @@
412412

413413
;;;; Namespaces / vars
414414

415-
(defn sci-ns-name [^sci.lang.Namespace ns]
416-
(types/getName ns))
417-
418415
(defn sci-alias [ctx alias-sym ns-sym]
419416
(swap! (:env ctx)
420417
(fn [env]
@@ -442,9 +439,12 @@
442439
(throw (new #?(:clj Exception :cljs js/Error)
443440
(str "No namespace: " x " found"))))))
444441

442+
(defn sci-ns-name [ctx ns]
443+
(let [^sci.lang.Namespace ns (sci-the-ns ctx ns)]
444+
(types/getName ns)))
445+
445446
(defn sci-ns-aliases [ctx sci-ns]
446-
(let [sci-ns (sci-the-ns ctx sci-ns)
447-
name (sci-ns-name sci-ns)
447+
(let [name (sci-ns-name ctx sci-ns)
448448
aliases (get-in @(:env ctx) [:namespaces name :aliases])]
449449
(zipmap (keys aliases)
450450
(map (fn [sym]
@@ -455,15 +455,13 @@
455455
(dissoc m :aliases :imports :obj :refer :refers))
456456

457457
(defn sci-ns-interns [ctx sci-ns]
458-
(let [sci-ns (sci-the-ns ctx sci-ns)
459-
name (sci-ns-name sci-ns)
458+
(let [name (sci-ns-name ctx sci-ns)
460459
m (get-in @(:env ctx) [:namespaces name])
461460
m (clean-ns m)]
462461
m))
463462

464463
(defn sci-ns-publics [ctx sci-ns]
465-
(let [sci-ns (sci-the-ns ctx sci-ns)
466-
name (sci-ns-name sci-ns)
464+
(let [name (sci-ns-name ctx sci-ns)
467465
m (get-in @(:env ctx) [:namespaces name])
468466
m (clean-ns m)]
469467
(into {} (keep (fn [[k v]]
@@ -472,8 +470,7 @@
472470
m))))
473471

474472
(defn sci-ns-imports [ctx sci-ns]
475-
(let [sci-ns (sci-the-ns ctx sci-ns)
476-
name (sci-ns-name sci-ns)
473+
(let [name (sci-ns-name ctx sci-ns)
477474
env @(:env ctx)
478475
global-imports (:imports env)
479476
namespace-imports (get-in env [:namespaces name :imports])
@@ -483,8 +480,7 @@
483480
(zipmap all-aliased (map (comp :class #(get class-opts %)) all-imports))))
484481

485482
(defn sci-ns-refers [ctx sci-ns]
486-
(let [sci-ns (sci-the-ns ctx sci-ns)
487-
name (sci-ns-name sci-ns)
483+
(let [name (sci-ns-name ctx sci-ns)
488484
env @(:env ctx)
489485
refers (get-in env [:namespaces name :refers])
490486
clojure-core (get-in env [:namespaces 'clojure.core])
@@ -500,8 +496,7 @@
500496
(assert (symbol? sym)) ; protects :aliases, :imports, :obj, etc.
501497
(swap! (:env ctx)
502498
(fn [env]
503-
(let [sci-ns (sci-the-ns ctx sci-ns)
504-
name (sci-ns-name sci-ns)]
499+
(let [name (sci-ns-name ctx sci-ns)]
505500
(update-in env [:namespaces name]
506501
(fn [the-ns-map]
507502
(cond (contains? (:refers the-ns-map) sym)
@@ -522,7 +517,7 @@
522517
(defn sci-ns-unalias [ctx sci-ns sym]
523518
(swap! (:env ctx)
524519
(fn [env]
525-
(update-in env [:namespaces (sci-ns-name (sci-the-ns ctx sci-ns)) :aliases] dissoc sym)))
520+
(update-in env [:namespaces (sci-ns-name ctx sci-ns) :aliases] dissoc sym)))
526521
nil)
527522

528523
(defn sci-all-ns [ctx]
@@ -541,7 +536,7 @@
541536
;; in this case the var will become unbound
542537
([ctx ns var-sym]
543538
(let [ns (sci-the-ns ctx ns)
544-
ns-name (sci-ns-name ns)
539+
ns-name (types/getName ns)
545540
env (:env ctx)]
546541
(or (get-in @env [:namespaces ns-name var-sym])
547542
(let [var-name (symbol (str ns-name) (str var-sym))
@@ -551,7 +546,7 @@
551546
new-var))))
552547
([ctx ns var-sym val]
553548
(let [ns (sci-the-ns ctx ns)
554-
ns-name (sci-ns-name ns)
549+
ns-name (types/getName ns)
555550
env (:env ctx)]
556551
(or (when-let [v (get-in @env [:namespaces ns-name var-sym])]
557552
(sci.impl.vars/bindRoot v val)
@@ -717,7 +712,7 @@
717712
ns (:ns m)
718713
nm (:name m)]
719714
(when (and ns nm)
720-
(symbol (str (sci-ns-name ns))
715+
(symbol (str (types/getName ns))
721716
(str (clojure.core/name nm)))))
722717
(symbol name)))
723718
([ns name] (symbol ns name)))
@@ -1490,7 +1485,7 @@
14901485
'ns-map (copy-var sci-ns-map clojure-core-ns {:name 'ns-map :ctx true})
14911486
'ns-unmap (copy-var sci-ns-unmap clojure-core-ns {:ctx true :name 'ns-unmap})
14921487
'ns-unalias (copy-var sci-ns-unalias clojure-core-ns {:ctx true :name 'ns-unalias})
1493-
'ns-name (copy-var sci-ns-name clojure-core-ns {:name 'ns-name})
1488+
'ns-name (copy-var sci-ns-name clojure-core-ns {:name 'ns-name :ctx true})
14941489
'odd? (copy-core-var odd?)
14951490
#?@(:cljs ['object? (copy-core-var object?)])
14961491
'object-array (copy-core-var object-array)
@@ -1727,7 +1722,7 @@
17271722
macro? (:macro m)]
17281723
(sci.impl.io/println "-------------------------")
17291724
(sci.impl.io/println (str (when-let [ns* (:ns m)]
1730-
(str (sci-ns-name ns*) "/"))
1725+
(str (types/getName ns*) "/"))
17311726
(:name m)))
17321727
(when arglists (sci.impl.io/println arglists))
17331728
(when macro? (sci.impl.io/println "Macro"))
@@ -1750,7 +1745,7 @@
17501745
ms (concat (mapcat #(sort-by :name (map meta (vals (sci-ns-interns ctx %))))
17511746
(sci-all-ns ctx))
17521747
(map #(assoc (meta %)
1753-
:name (sci-ns-name %)) (sci-all-ns ctx))
1748+
:name (types/getName %)) (sci-all-ns ctx))
17541749
#_(map special-doc (keys special-doc-map)))]
17551750
(doseq [m ms
17561751
:when (and (:doc m)
@@ -1813,7 +1808,7 @@
18131808
(let [f (jio/file file)]
18141809
(when (.exists f) (slurp f)))))
18151810
(when-let [load-fn (:load-fn @(:env ctx))]
1816-
(:source (load-fn {:namespace (sci-ns-name ns)}))))]
1811+
(:source (load-fn {:namespace (types/getName ns)}))))]
18171812
(let [lines (clojure.string/split source #"\n")
18181813
line (dec line)
18191814
start (clojure.string/join "\n" (drop line lines))
@@ -1860,7 +1855,7 @@
18601855
(let [file (.getFileName el)
18611856
clojure-fn? (and file (or (.endsWith file ".clj")
18621857
(.endsWith file ".cljc")
1863-
(= file "NO_SOURCE_FILE")))]
1858+
(= "NO_SOURCE_FILE" file)))]
18641859
(str (if clojure-fn?
18651860
(demunge (.getClassName el))
18661861
(str (.getClassName el) "." (.getMethodName el)))

0 commit comments

Comments
 (0)