jasongilman / proto-repl

A Clojure Development Environment package for the Atom editor
https://atom.io/packages/proto-repl
MIT License
563 stars 50 forks source link

Different Error Output Between Boot and Lein #209

Open azizzaeny opened 7 years ago

azizzaeny commented 7 years ago

Starting REPLtoggle with lein Auto eval File

(ns my.user) ;=> nill

(+ 1 2) ;=> 3

(println "hellow wolrd") ;=> nill

(require 'cljs.build.ai) ; => nice error output (cause dependency not set)

But with Boot Auto Eval File

(ns my.user) ;=> nill

(+ 1 2) ;=> 3

(println "hellow wolrd") ;=> nill

(require 'cljs.build.ai) ; => no output Error Displayed (only in repl not in ink)

same thing happen when

Instead outputing animated folding-cube, they are every where.. more error you have more folding-cube you get.

<atom-overlay>
    <div class="sk-folding-cube">
        <div class="sk-cube$"></div> 
    </div>
</atom-overlay>

in setting i have check unchek (Ink, Display Code in repl, Show in line result, pretty print), but still if used boot no nice error displayed in ink ..

did you guys same here... or just me ?

Proto-repl version: 1.4.10

azizzaeny commented 7 years ago

Suspect:

[n] Boot repl differ nrepl implementation and output message [y] It seem proto-repl unable to parse error output from handle msg proccess, maybe nrepl-client issue [y] load-widget spinner not stoping or destroyed, loading decorator stacked instead one per editor

Output from lein repl:

{
  "ex": "class clojure.lang.Compiler$CompilerException",
  "id": "6002D773-439E-4192-9226-B737FFB568AC",
  "root-ex": "class clojure.lang.Compiler$CompilerException",
  "session": "0f6e8d8e-90a1-4dea-afa1-05248c0f5749",
  "status": [
    "eval-error"
  ]
}
{
  "err": "CompilerException java.lang.RuntimeException: No such namespace: cljs, compiling:(/home/io/.atom/packages/proto-repl/proto-no-proj-boot/build.boot:9:1) \n",
  "id": "6002D773-439E-4192-9226-B737FFB568AC",
  "session": "0f6e8d8e-90a1-4dea-afa1-05248c0f5749"
}

Output from boot repl:

{
  "id": "2D95846C-C348-45A1-AD23-D74BFD07019C",
  "out": "             \u001b[1;31mjava.lang.RuntimeException\u001b[m: \u001b[3mNo such namespace: cljs\u001b[m\n\u001b[1;31mclojure.lang.Compiler$CompilerException\u001b[m: \u001b[3mjava.lang.RuntimeException: No such namespace: cljs, compiling:(/home/io/.atom/packages/proto-repl/proto-no-proj-boot/build.boot:8:1)\u001b[m\n",
  "session": "fd695ced-95a3-4ff5-8779-ec48c00fc010"
}

dont know why there is strange string such \u001b[3m

carocad commented 7 years ago

@azizzaeny thanks for the detailed input. Definitely helps a lot :) I checked the code and the output that you mentioned and I am pretty confident about the source of the bug.

Proto-repl (currently) only displays inline messages from the nrepl returned as results (msg.value) or as exceptions (msg.err this one is actually stderr but lets ignore that for this case ;) ), as you can see here.

The problem is that the Boot nrepl is not sending the exception message to stderr but to stdout (as "out" in the output that you showed). Due to that, proto-repl simply ignores the messages as 'no result nor exception was produced for the command'.

On the other hand, the loading indicator is only removed once the resultHandler (see here) is called back. But since the received messages dont match the conditions, the resultHandler is never called, thus the loading indicator is never removed.

@jasongilman I am pretty sure that is the source of the problem for both this and #215 bugs but if it is really a Boot bug then I dont know if there is much we can do :( . Any ideas?

Notes for @azizzaeny :