From ab51718412fff67d190158b3aa15c2a6e53f21f2 Mon Sep 17 00:00:00 2001 From: Robert Krahn Date: Tue, 10 Mar 2015 15:23:17 -0700 Subject: [PATCH] read-with-source-logger, def?, source-reader-for-ns --- .gitignore | 2 ++ project.clj | 5 ++++- src/rksm/cloxp_source_reader/core.clj | 19 ++++++++++++++++++- 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 48674e6..f8d4175 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ /pom.xml /target/ /.nrepl-port +/rel-path +/.lein-failures diff --git a/project.clj b/project.clj index b8f57b6..7fc905d 100644 --- a/project.clj +++ b/project.clj @@ -2,4 +2,7 @@ :description "Source reading, parsing, and querying for cloxp." :license "MIT" :url "http://github.com/cloxp/cloxp-source-reader" - :dependencies [[org.clojure/clojure "1.6.0"]]) + :dependencies [[org.clojure/clojure "1.6.0"] + [org.clojure/tools.reader "0.8.13"] + [org.clojure/tools.analyzer.jvm "0.6.5"] + [org.rksm/system-files "0.1.3-SNAPSHOT"]]) diff --git a/src/rksm/cloxp_source_reader/core.clj b/src/rksm/cloxp_source_reader/core.clj index a2a04cc..864fac3 100644 --- a/src/rksm/cloxp_source_reader/core.clj +++ b/src/rksm/cloxp_source_reader/core.clj @@ -6,6 +6,15 @@ (:import (java.io LineNumberReader InputStreamReader PushbackReader) (clojure.lang RT))) +(defn name-of-def + [form] + (first (drop 1 (filter symbol? form)))) + +(defn def? + [form] + (and (seq? form) + (->> form first str (re-find #"(^|\/)def") boolean))) + (defn purge-string! [rdr] (let [buf (-> rdr .rdr .source_log_frames var-get :buffer) @@ -13,6 +22,12 @@ (.delete buf 0 (count str)) str)) +(defn read-with-source-logger + "reads a single next obj from *current-code* :source" + [src] + (let [rdr (trt/source-logging-push-back-reader src)] + (tr/read rdr))) + (defn read-objs "Reads sexps from rdr-or-src and returns them as a {:form :source :line :column} map. Note: this is more that the typical reader gives us." @@ -35,7 +50,9 @@ (when (= \newline (trt/peek-char rdr)) (trt/read-char rdr) (purge-string! rdr)) - (recur (conj result {:form o ;(with-meta o (assoc (meta o) :source src)) + (recur (conj result {:form (if (def? o) + (with-meta o (assoc (meta o) :source src)) + o) :source src :line line :column column})))