Skip to content

Commit e05deed

Browse files
committed
TNS-59: Adds a guard to the source file metadata creation for files that do not contain a ns decl nor a ns name.
1 parent 984a089 commit e05deed

File tree

3 files changed

+23
-5
lines changed

3 files changed

+23
-5
lines changed

src/main/clojure/clojure/tools/namespace/find.clj

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -89,10 +89,11 @@
8989
([dir] (find-ns-decls-in-dir dir nil))
9090
([dir platform]
9191
(keep #(ignore-reader-exception
92-
(let [[_ nom & more] (file/read-file-ns-decl % (:read-opts platform))]
93-
(list* 'ns (with-meta nom
94-
{:dir (.getName ^java.io.File dir) :file (.getName ^java.io.File %)})
95-
more)))
92+
(let [[_ nom & more :as decl] (file/read-file-ns-decl % (:read-opts platform))]
93+
(when (and decl nom (symbol? nom))
94+
(list* 'ns (with-meta nom
95+
{:dir (.getName ^java.io.File dir) :file (.getName ^java.io.File %)})
96+
more))))
9697
(find-sources-in-dir dir platform))))
9798

9899
(defn find-namespaces-in-dir

src/test/clojure/clojure/tools/namespace/find_test.clj

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@
3333
main-clj (help/create-source dir 'example.main :clj '[example.one])
3434
one-cljc (help/create-source dir 'example.one :cljc '[example.two])
3535
two-clj (help/create-source dir 'example.two :clj)
36-
two-cljs (help/create-source dir 'example.two :cljs)]
36+
two-cljs (help/create-source dir 'example.two :cljs)
37+
headless-clj (help/create-headless-source dir 'example.headless :clj)]
3738
(is (every? #{(.getName ^java.io.File dir)}
3839
(map #(-> % second meta :dir)
3940
(find/find-ns-decls [dir]))))))

src/test/clojure/clojure/tools/namespace/test_helpers.clj

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,22 @@
7373
(list 'ns sym))]
7474
(create-file full-path (into [ns-decl] contents)))))
7575

76+
(defn create-headless-source
77+
"Creates a file at the correct path under base-dir for a file that
78+
declares in-ns for namespace named sym, with file extension (keyword)
79+
and will also require the dependencies (symbols). Optional contents
80+
written after the ns declaration as by write-contents."
81+
([base-dir sym extension]
82+
(create-headless-source base-dir sym extension nil nil))
83+
([base-dir sym extension dependencies]
84+
(create-headless-source base-dir sym extension dependencies nil))
85+
([base-dir sym extension dependencies contents]
86+
(let [full-path (into [base-dir] (source-path sym extension))
87+
ins-decl (list 'in-ns (list 'quote sym))
88+
deps-decl (when (seq dependencies)
89+
(map #(list 'require `(quote ~%)) dependencies))]
90+
(create-file full-path (filter identity (concat [ins-decl] deps-decl contents))))))
91+
7692
(defn same-files?
7793
"True if files-a and files-b contain the same canonical File's,
7894
regardless of order."

0 commit comments

Comments
 (0)