Minimal repo for clojure-emacs/cider#2104.
This shows a problem with reloading the clojure.test.check.generators
namespace without reloading the clojure.spec.gen.alpha
namespace.
Since clojure.spec.gen.alpha
doesn't :require
clojure.test.check.generators
, but rather dynamically loads some of its vars, the reload dependency tracking doesn't work properly.
-
cider-jack-in
-
Go to
core.cljc
andcider-eval-buffer
,cider-refresh
, etc.- See that generators for
clojure.spec.gen.alpha
andclojure.test.check.generators
have the same classloaders:
clojure.spec.alpha generator's classloader: #object[clojure.lang.DynamicClassLoader 0x73867ca9 clojure.lang.DynamicClassLoader@73867ca9] clojure.test.check.generators generator's classloader: #object[clojure.lang.DynamicClassLoader 0x73867ca9 clojure.lang.DynamicClassLoader@73867ca9]
- See that generators for
-
In the REPL, compile ClojureScript with
(boot (cljs))
-
C-u cider-refresh
(refresh-all
), thencider-eval-buffer
again- See that the generators now have different classloaders:
clojure.spec.alpha generator's classloader: #object[clojure.lang.DynamicClassLoader 0x73867ca9 clojure.lang.DynamicClassLoader@73867ca9] clojure.test.check.generators generator's classloader: #object[clojure.lang.DynamicClassLoader 0x170397bd clojure.lang.DynamicClassLoader@170397bd]
In particular, that of
clojure.test.check.generators
has changed, while that ofclojure.spec.gen.alpha
ha remained the same. This is becauseclojure.test.check.generators
was reloaded by thecider-refresh
, thereby redefining theGenerator
record, butclojure.spec.gen.alpha
was not.For more on records and classloaders, see Chris Houser's StackOverflow explanation.
-
Go to
clojure/spec/gen/alpha.clj
and eval thelazy-combinators
form(lazy-combinators hash-map list map not-empty set vector vector-distinct fmap elements bind choose fmap one-of such-that tuple sample return large-integer* double* frequency)
-
cider-eval-buffer
and see thatclojure.spec.gen.alpha
's generator now uses theclojure.test.check.generators
's classloader again:clojure.spec.alpha generator's classloader: #object[clojure.lang.DynamicClassLoader 0x170397bd clojure.lang.DynamicClassLoader@170397bd] clojure.test.check.generators generator's classloader: #object[clojure.lang.DynamicClassLoader 0x170397bd clojure.lang.DynamicClassLoader@170397bd]
Copyright © 2017 Tianxiang Xiong
Distributed under the Eclipse Public License either version 1.0 or (at your option) any later version.