Skip to content
This repository has been archived by the owner on Apr 3, 2022. It is now read-only.

Commit

Permalink
read-with-source-logger, def?, source-reader-for-ns
Browse files Browse the repository at this point in the history
  • Loading branch information
rksm committed Mar 10, 2015
1 parent 06edac3 commit ab51718
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 2 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
/pom.xml
/target/
/.nrepl-port
/rel-path
/.lein-failures
5 changes: 4 additions & 1 deletion project.clj
Original file line number Diff line number Diff line change
Expand Up @@ -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"]])
19 changes: 18 additions & 1 deletion src/rksm/cloxp_source_reader/core.clj
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,28 @@
(: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)
str (.toString buf)]
(.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."
Expand All @@ -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})))
Expand Down

0 comments on commit ab51718

Please sign in to comment.