Improved handling of clojurescrpt files...

* Find all processable files in one pass to preserve order.
* Added .cljx to the set of processable file extensions.
* Use set as predicate instead of regex. Maybe down the road this set
  could be configured by users in their project.clj files?
This commit is contained in:
Kevin Neaton 2014-03-13 14:54:29 -05:00
parent 56a9e6a004
commit 275b470eec

View file

@ -74,12 +74,24 @@
[path]
(.isDirectory (java.io.File. path)))
(defn find-file-extension
"Returns a string containing the files extension."
[^java.io.File file]
(second (re-find #"\.([^.]+)$" (.getName file))))
(defn processable-file?
"Predicate. Returns true for \"normal\" files with a file extension which
passes the provided predicate."
[pred ^java.io.File file]
(when (.isFile file)
(-> file find-file-extension pred)))
(defn find-processable-file-paths
"Returns a seq of clojure file paths (strings) in alphabetical order."
[dir matching-re]
"Returns a seq of processable file paths (strings) in alphabetical order."
[dir pred]
(->> (io/file dir)
(file-seq)
(filter #(re-find matching-re (.getCanonicalPath %)))
(filter (partial processable-file? pred))
(map #(.getCanonicalPath %))
(sort)))
@ -202,20 +214,18 @@
;; These functions support Marginalia's use by client software or command-line
;; users.
(def ^:private file-extensions #{"clj" "cljs" "cljx"})
(defn format-sources
"Given a collection of filepaths, returns a lazy sequence of filepaths to
all .clj files on those paths: directory paths will be searched recursively
for .clj files."
"Given a collection of filepaths, returns a lazy sequence of filepaths to all
.clj, .cljs, and .cljx files on those paths: directory paths will be searched
recursively for files."
[sources]
(if (nil? sources)
(concat
(find-processable-file-paths "./src" #"\.clj$")
(find-processable-file-paths "./src" #"\.cljs$"))
(find-processable-file-paths "./src" file-extensions)
(->> sources
(mapcat #(if (dir? %)
(concat
(find-processable-file-paths % #"\.clj$")
(find-processable-file-paths % #"\.cljs$"))
(find-processable-file-paths % file-extensions)
[(.getCanonicalPath (io/file %))])))))
(defn split-deps [deps]