When *print-length* and *print-level* are set the forms printed are not
always parseable as EDN. See this example:
(require 'clojure.edn)
(clojure.edn/read-string (pr-str {:a 1 :b 2 :c 3 :d 4}))
=> RuntimeException Map literal must contain an even number of forms
This occurs because the value printed is "{:a 1, :b 2, :c 3, ...}". I
haven't been able to come up with a good solution for this. A description
of the use case may help you understand the requirements.
I'm working on a Clojure IDE/REPL for the Atom editor called Proto REPL
<https://github.com/jasongilman/proto-repl>. When Proto REPL evaluates a
form and gets a response it parses it using ClojureScript so that the value
could be pretty printed, displayed in a tree structure, or visualized. The
response returned from nREPL must be parseable as EDN. If the print-length
isn't set then evaluation will hang while it tries to print out an infinite
or extremely large data structure. When print-length is set then I get
errors like the one above.
I've considered wrapping the code that the user's executing in something
that will walk the structure and remove elements from the results but that
has side effects on the values returned from the REPL. If they use *1 to
access the last value it won't be the value they expect. Another option
might be custom nREPL middleware to change how things are printed. Finally
I'm wondering if it might be easier just to write a custom EDN parser in
ClojureScript that could detect "..." in maps or other cases and handle
appropriately. I wanted to avoid shaving any yaks if there's an easier
solution.
If anyone else knows how other development environments like CIDER handle
this I'd appreciate some suggestions.
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
---
You received this message because you are subscribed to the Google Groups
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.