From a27f811f046cd1ace9e4b9461181e5a5fb23b682 Mon Sep 17 00:00:00 2001 From: David Nolen Date: Sun, 18 Nov 2012 19:20:44 -0500 Subject: [PATCH] add parse-ns which just parses the ns portion of a file so that we can we return proper information for dependency analysis even for files that have not changed. --- src/clj/cljs/compiler.clj | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/clj/cljs/compiler.clj b/src/clj/cljs/compiler.clj index 4f5e1e4590..978f3fe1cc 100644 --- a/src/clj/cljs/compiler.clj +++ b/src/clj/cljs/compiler.clj @@ -808,6 +808,24 @@ (or (not (.exists dest)) (> (.lastModified src) (.lastModified dest)))) +(defn parse-ns [src dest] + (with-core-cljs + (binding [ana/*cljs-ns* 'cljs.user] + (loop [forms (forms-seq src)] + (if (seq forms) + (let [env (ana/empty-env) + ast (ana/analyze env (first forms))] + (if (= (:op ast) :ns) + (let [ns-name (:name ast) + deps (merge (:uses ast) (:requires ast))] + {:ns (or ns-name 'cljs.user) + :provides [ns-name] + :requires (if (= ns-name 'cljs.core) + (set (vals deps)) + (conj (set (vals deps)) 'cljs.core)) + :file dest}) + (recur (rest forms))))))))) + (defn compile-file "Compiles src to a file of the same name, but with a .js extension, in the src file's directory. @@ -831,7 +849,7 @@ (if (requires-compilation? src-file dest-file) (do (mkdirs dest-file) (compile-file* src-file dest-file)) - {:file dest-file}) + (parse-ns src-file dest-file)) (throw (java.io.FileNotFoundException. (str "The file " src " does not exist."))))))) (comment