lynaghk / cljx

Write a portable codebase targeting Clojure/ClojureScript

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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).