nREPL support breaks with replaced function
jeluard opened this issue · comments
When defining a function overriding another one part of clojure.core
(e.g. get
) an exception is thrown at call time. REPL is then unusable.
You can reproduce with the following snippet
(ns test
(:refer-clojure :exclude [get]))
(defn ^:clj get [] ())
and then at REPL
(use 'test)
(get)
triggers the following exception:
ERROR: Unhandled REPL handler exception processing message {:code (get), :id ebbd0492-33c1-4842-909c-7d312b3bd754, :op eval, :session 4b9d1082-14b1-4e2b-9529-a1a52bbd13c0}
java.lang.IllegalStateException: get already refers to: #'test/get in namespace: user
at clojure.lang.Namespace.warnOrFailOnReplace(Namespace.java:88)
at clojure.lang.Namespace.reference(Namespace.java:110)
at clojure.lang.Namespace.refer(Namespace.java:168)
at clojure.core$refer.doInvoke(core.clj:3850)
at clojure.lang.RestFn.invoke(RestFn.java:439)
at kibit.check$careful_refer$fn__6011.invoke(check.clj:52)
at kibit.check$careful_refer.invoke(check.clj:51)
at kibit.check$read_file.invoke(check.clj:72)
at kibit.check$fn__6029.invoke(check.clj:161)
at kibit.check$check_reader.doInvoke(check.clj:219)
at clojure.lang.RestFn.invoke(RestFn.java:559)
at cljx.core$munge_forms.invoke(core.clj:64)
at cljx.repl_middleware$munge_code.invoke(repl_middleware.clj:30)
at cljx.repl_middleware$wrap_cljx$fn__6165.invoke(repl_middleware.clj:48)
at clojure.tools.nrepl.middleware$wrap_conj_descriptor$fn__402.invoke(middleware.clj:17)
at clojure.tools.nrepl.middleware$wrap_conj_descriptor$fn__402.invoke(middleware.clj:17)
at clojure.tools.nrepl.middleware.session$session$fn__695.invoke(session.clj:192)
at clojure.tools.nrepl.middleware$wrap_conj_descriptor$fn__402.invoke(middleware.clj:17)
at clojure.tools.nrepl.server$handle_STAR_.invoke(server.clj:18)
at clojure.tools.nrepl.server$handle$fn__757.invoke(server.clj:27)
at clojure.core$binding_conveyor_fn$fn__4107.invoke(core.clj:1836)
at clojure.lang.AFn.call(AFn.java:18)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
Note that this is fixed in branch sjacket
.
Closing, as the sjacket merge to master is imminent (#17).