Meikel  Brandmeyer avatar Meikel Brandmeyer committed 10d9e84

Extract namespace handling for tasks

Comments (0)

Files changed (2)

runtime/src/main/resources/clojuresque/tasks/compile.clj

 (ns clojuresque.tasks.compile
   (:use
-    clojuresque.cli))
-
-(defn find-namespace
-  [file]
-  (let [of-interest '#{ns clojure.core/ns}
-        eof         (Object.)
-        input       (clojure.lang.LineNumberingPushbackReader.
-                      (java.io.FileReader. file))
-        in-seq      (take-while #(not (identical? % eof))
-                                (repeatedly #(read input false eof)))
-        candidate   (first
-                      (drop-while
-                        #(or (not (instance? clojure.lang.ISeq %))
-                             (not (contains? of-interest (first %))))
-                        in-seq))]
-    (when candidate
-      (second candidate))))
+    [clojuresque.cli :only (deftask)]
+    [clojuresque.util :only (namespaces)]))
 
 (deftask main
   "Compile (or at least require) the namespaces contained in the named
                :else   (throw
                          (Exception.
                            "You must choose a mode: compile or require.")))
-        seen (atom #{})
-        namespaces (map find-namespace files)]
+        namespaces (namespaces files)]
     (binding [*warn-on-reflection* warn-on-reflection
               *compile-path*       (System/getProperty "clojure.compile.path")]
-      (doseq [nspace namespaces
-              :when  (and nspace (not (contains? @seen nspace)))]
-        (swap! seen conj nspace)
+      (doseq [nspace namespaces]
         (mode nspace)))))

runtime/src/main/resources/clojuresque/util.clj

+(ns clojuresque.util)
+
+(defn namespace-of-file
+  [file]
+  (let [of-interest '#{ns clojure.core/ns}
+        eof         (Object.)
+        input       (clojure.lang.LineNumberingPushbackReader.
+                      (java.io.FileReader. file))
+        in-seq      (take-while #(not (identical? % eof))
+                                (repeatedly #(read input false eof)))
+        candidate   (first
+                      (drop-while
+                        #(or (not (instance? clojure.lang.ISeq %))
+                             (not (contains? of-interest (first %))))
+                        in-seq))]
+    (when candidate
+      (second candidate))))
+
+(defn namespaces
+  [files]
+  (distinct (keep namespace-of-file files)))
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.