Skip to content

Commit fcc1a5b

Browse files
committed
Update to Java commit 180c162 (2021.12.10): TNS-51: Support namespaces as strings in require statements
1 parent 81a6d7d commit fcc1a5b

File tree

2 files changed

+24
-6
lines changed

2 files changed

+24
-6
lines changed

src/clojure/tools/namespace/parse.cljc

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,8 @@
8383
[namespace :refer (x y)] or just [namespace]"
8484
[form]
8585
(and (sequential? form) ; should be a vector, but often is not
86-
(symbol? (first form))
86+
(or (symbol? (first form))
87+
(string? (first form)))
8788
(or (keyword? (second form)) ; vector like [foo :as f]
8889
(= 1 (count form))))) ; bare vector like [foo]
8990

@@ -100,7 +101,9 @@
100101
(list (symbol (str (when prefix (str prefix ".")) form)))
101102
(keyword? form) ; Some people write (:require ... :reload-all)
102103
nil
103-
:else
104+
(string? form) ; NPM dep, ignore
105+
nil
106+
:else
104107
(throw (ex-info "Unparsable namespace form"
105108
{:reason ::unparsable-ns-form
106109
:form form}))))

test/clojure/tools/namespace/parse_test.clj

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -171,11 +171,26 @@
171171
(:require #?(:cljr clojure.string ;;; :clj
172172
:cljs goog.string)))")
173173

174+
(defn str->ns-decl [^String s]
175+
(-> s
176+
System.IO.StringReader. ;;; java.io.StringReader.
177+
clojure.lang.PushbackTextReader. ;;; java.io.PushbackReader.
178+
read-ns-decl))
179+
174180
(deftest t-reader-conditionals
175181
(when (resolve 'clojure.core/reader-conditional?)
176182
(let [actual (-> reader-conditionals-string
177-
System.IO.StringReader. ;;; java.io.StringReader.
178-
clojure.lang.PushbackTextReader. ;;; java.io.PushbackReader.
179-
read-ns-decl
183+
str->ns-decl
180184
deps-from-ns-decl)]
181-
(is (= #{'clojure.string} actual)))))
185+
(is (= #{'clojure.string} actual)))))
186+
187+
188+
(def ns-with-npm-dependency
189+
"(ns com.examples.one
190+
(:require [\"foobar\"] [baz]))")
191+
192+
(deftest cljs-string-dependency
193+
(let [actual (-> ns-with-npm-dependency
194+
str->ns-decl
195+
deps-from-ns-decl)]
196+
(is (= #{'baz} actual))))

0 commit comments

Comments
 (0)