cemerick / austin

The ClojureScript browser-REPL rebuilt stronger, faster, easier.
510 stars 31 forks source link

After loading (cemerick.austin.repls/exec), forms hang at repl prompt #74

Closed rterbush closed 9 years ago

rterbush commented 9 years ago

Emacs 24, ; CIDER 0.9.0alpha (package: 20150320.1353) (Java 1.8.0_40, Clojure 1.5.1, nREPL 0.2.7)

After cider-jack-in to create REPL, forms entered at the REPL prompt work fine. After loading austin, any attempt to enter a form hangs. I've also discovered that a C-c C-c at the prompt will break and return java.lang.ThreadDeath. After this action, autocompletion is not working.

rterbush commented 9 years ago

To add a bit more info on this:

I've replicated this behavior on two different operating systems (Linux and MacOSX), and two different elisp stacks. On the MacOSX platform, used Prelude [https://github.com/bbatsov/prelude].

rterbush commented 9 years ago

Backtrace:

java.lang.ThreadDeath
    at java.lang.Thread.stop(Thread.java:850)
    at clojure.tools.nrepl.middleware.interruptible_eval$interruptible_eval$fn__659.invoke(interruptible_eval.clj:209)
    at clojure.tools.nrepl.middleware$wrap_conj_descriptor$fn__414.invoke(middleware.clj:24)
    at clojure.tools.nrepl.middleware.session$add_stdin$fn__733.invoke(session.clj:235)
    at clojure.tools.nrepl.middleware$wrap_conj_descriptor$fn__414.invoke(middleware.clj:24)
    at cider.nrepl.middleware.pprint$wrap_pprint$fn__8907.invoke(pprint.clj:27)
    at clojure.tools.nrepl.middleware$wrap_conj_descriptor$fn__414.invoke(middleware.clj:24)
    at clojure.tools.nrepl.middleware.load_file$wrap_load_file$fn__774.invoke(load_file.clj:77)
    at clojure.tools.nrepl.middleware$wrap_conj_descriptor$fn__414.invoke(middleware.clj:24)
    at cider.nrepl.middleware.trace$wrap_trace$fn__9360.invoke(trace.clj:65)
    at clojure.tools.nrepl.middleware$wrap_conj_descriptor$fn__414.invoke(middleware.clj:24)
    at cemerick.piggieback$wrap_cljs_repl$fn__4504$fn__4506.invoke(piggieback.clj:242)
    at clojure.lang.AFn.applyToHelper(AFn.java:152)
    at clojure.lang.AFn.applyTo(AFn.java:144)
    at clojure.core$apply.invoke(core.clj:624)
    at clojure.core$with_bindings_STAR_.doInvoke(core.clj:1862)
    at clojure.lang.RestFn.invoke(RestFn.java:425)
    at cemerick.piggieback$wrap_cljs_repl$fn__4504.invoke(piggieback.clj:239)
    at clojure.tools.nrepl.middleware$wrap_conj_descriptor$fn__414.invoke(middleware.clj:24)
    at cider.nrepl.middleware.format$wrap_format$fn__8116.invoke(format.clj:58)
    at clojure.tools.nrepl.middleware$wrap_conj_descriptor$fn__414.invoke(middleware.clj:24)
    at cider.nrepl.middleware.inspect$wrap_inspect$fn__8808.invoke(inspect.clj:79)
    at clojure.tools.nrepl.middleware$wrap_conj_descriptor$fn__414.invoke(middleware.clj:24)
    at clojure.tools.nrepl.middleware.pr_values$pr_values$fn__594.invoke(pr_values.clj:17)
    at clojure.tools.nrepl.middleware$wrap_conj_descriptor$fn__414.invoke(middleware.clj:24)
    at cider.nrepl.middleware.test$wrap_test$fn__9093.invoke(test.clj:203)
    at clojure.tools.nrepl.middleware$wrap_conj_descriptor$fn__414.invoke(middleware.clj:24)
    at cider.nrepl.middleware.stacktrace$wrap_stacktrace$fn__8999.invoke(stacktrace.clj:158)
    at clojure.tools.nrepl.middleware$wrap_conj_descriptor$fn__414.invoke(middleware.clj:24)
    at clojure.tools.nrepl.middleware.session$session$fn__723.invoke(session.clj:192)
    at clojure.tools.nrepl.middleware$wrap_conj_descriptor$fn__414.invoke(middleware.clj:24)
    at clojure.tools.nrepl.server$handle_STAR_.invoke(server.clj:19)
    at clojure.tools.nrepl.server$handle$fn__785.invoke(server.clj:28)
    at clojure.core$binding_conveyor_fn$fn__4145.invoke(core.clj:1910)
    at clojure.lang.AFn.call(AFn.java:18)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
cemerick commented 9 years ago

OK, it looks like you're using cider's pretty-printing. That's fine when in Clojure, but the code that cider uses to implement it cannot be used in ClojureScript. Try disabling REPL pretty printing before interacting with the ClojureScript REPL (M-x cider-repl-toggle-pretty-printing).

cichli commented 9 years ago

@rterbush If you're using a recent ClojureScript version, you'll need to manually add a dependency to piggieback 0.1.6-SNAPSHOT - Austin depends on 0.1.5. See this gist for an example.

@cemerick CIDER now uses the :eval slot of the :eval op for pretty printing to wrap the result in a call to pprint rather than inlining calls to pprint in the :code slot, so this actually works with ClojureScript now :-). See here.

rterbush commented 9 years ago

@cemerick @cichli Thanks for the feedback. Seems I now have this resolved based on your assistance.

FWIW, I did try toggling off the pprint with the same results. I did find that I needed to go to the clojurescript plugin version shown in the dependency example provided by @cichli . That also required me to specify the version of lein-clojurescript plugin.

For anyone else finding this code path, here is my current profiles.clj file.

{:user {:plugins [[cider/cider-nrepl "0.9.0-SNAPSHOT"]
                  [com.cemerick/austin "0.1.6"]
                  [lein-clojurescript "1.1.0"]]
        :dependencies [[org.clojure/tools.nrepl "0.2.7"]
                      [lein-light-nrepl "0.1.0"]
                      [org.clojure/clojurescript "0.0-3126"]
                      [com.cemerick/piggieback "0.1.6-SNAPSHOT"]]}}

Thanks for your help