From 370e09143ae1999a8586405c036e1ba32e553201 Mon Sep 17 00:00:00 2001 From: Robert Krahn Date: Sun, 12 Apr 2015 17:39:53 -0700 Subject: [PATCH] read-ns-decl + read-ns-sym --- project.clj | 1 + src/rksm/cloxp_source_reader/core.clj | 30 +++++++++++++++----------- test/rksm/cloxp_source_reader/test.clj | 5 ++++- 3 files changed, 23 insertions(+), 13 deletions(-) diff --git a/project.clj b/project.clj index 35f77b8..15f331e 100644 --- a/project.clj +++ b/project.clj @@ -5,6 +5,7 @@ :url "http://github.com/cloxp/cloxp-source-reader" :dependencies [[org.clojure/clojure "1.6.0"] [org.clojure/tools.reader "0.8.16"] + [org.clojure/tools.namespace "0.2.8"] [org.clojure/tools.analyzer.jvm "0.6.5"] [org.rksm/system-files "0.1.4-SNAPSHOT"] [com.keminglabs/cljx "0.6.0"]]) diff --git a/src/rksm/cloxp_source_reader/core.clj b/src/rksm/cloxp_source_reader/core.clj index 0da5ee0..9869475 100644 --- a/src/rksm/cloxp_source_reader/core.clj +++ b/src/rksm/cloxp_source_reader/core.clj @@ -2,6 +2,7 @@ (:require [clojure.tools.reader.reader-types :as trt] [clojure.tools.reader.impl.utils] [clojure.tools.reader :as tr] + [clojure.tools.namespace.parse :as tnp] [clojure.string :as s] [rksm.system-files :refer (source-reader-for-ns)] (cljx core rules)) @@ -173,18 +174,6 @@ ; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -; (defn add-source-to-interns-from-repl -; "This method uses the RT/baseloader to lookup the files belonging to symbols. -; When files get reloaded / defs redefined this can mean that the code being -; retrieved is outdated" -; [ns intern-meta-data] -; (let [ns-string (str (ns-name ns)) -; sym-fn (partial symbol ns-string) -; source-fn #(or (source-for-symbol (sym-fn (-> % :name str))) "")] -; (map #(assoc % :source (source-fn %)) intern-meta-data))) - -; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- - (defn updated-source "Takes the new source for a def and produces a new version of the ns source, with the new def code embedded. meta-info is a meta-data like structure." @@ -197,3 +186,20 @@ s/split-lines count (drop (drop line lines)))] (str (s/join "\n" (concat before-lines [(s/trim-newline new-src-for-def)] after-lines))))) + +(defn read-ns-decl + [source-or-rdr] + (let [rdr (if (instance? java.io.PushbackReader source-or-rdr) + source-or-rdr + (-> source-or-rdr + java.io.StringReader. + java.io.PushbackReader.))] + (tnp/read-ns-decl rdr))) + +(defn read-ns-sym + [source-or-rdr] + (some-> source-or-rdr read-ns-decl second)) + +(comment + (read-ns-sym "foo\n(ns ^{:doc \"baz\"} bar)") + ) \ No newline at end of file diff --git a/test/rksm/cloxp_source_reader/test.clj b/test/rksm/cloxp_source_reader/test.clj index ae95c3a..d089f31 100644 --- a/test/rksm/cloxp_source_reader/test.clj +++ b/test/rksm/cloxp_source_reader/test.clj @@ -89,8 +89,11 @@ source (java.io.StringReader. "(def x 23)\n\n(def y 24)")] (src-rdr/add-source-to-interns-with-reader source entities))))))) +(deftest ns-decl-read-test + (is (= 'bar (src-rdr/read-ns-sym "foo\n(ns ^{:doc \"baz\"} bar)")))) + ; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- (comment (test-ns 'rksm.cloxp-source-reader.test) - ) + ) \ No newline at end of file