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