Using `do` in lein `:repl-options` leads to error
kovasap opened this issue · 0 comments
kovasap commented
Based on the README (https://github.com/nrepl/piggieback#usage), it seems like I need to execute lein repl
, then:
(require 'cljs.repl.node)
(cider.piggieback/cljs-repl (cljs.repl.node/repl-env))
in order to get a cljs repl I can interact with.
I attempted to do this by adding this to my project.clj
:
:repl-options {:init (do (require 'cljs.repl.node)
(cider.piggieback/cljs-repl (cljs.repl.node/repl-env)))
:nrepl-middleware [cider.piggieback/wrap-cljs-repl]}
However, when I do this, I get:
> lein repl
Exception in thread "main" java.lang.IllegalStateException: Can't change/establish root binding of: *cljs-repl-env* with set, compiling:(/tmp/form-init6720131333940924525.clj:1:73)
at clojure.lang.Compiler.load(Compiler.java:7526)
at clojure.lang.Compiler.loadFile(Compiler.java:7452)
at clojure.main$load_script.invokeStatic(main.clj:278)
at clojure.main$init_opt.invokeStatic(main.clj:280)
at clojure.main$init_opt.invoke(main.clj:280)
at clojure.main$initialize.invokeStatic(main.clj:311)
at clojure.main$null_opt.invokeStatic(main.clj:345)
at clojure.main$null_opt.invoke(main.clj:342)
at clojure.main$main.invokeStatic(main.clj:424)
at clojure.main$main.doInvoke(main.clj:387)
at clojure.lang.RestFn.applyTo(RestFn.java:137)
at clojure.lang.Var.applyTo(Var.java:702)
at clojure.main.main(main.java:37)
Caused by: java.lang.IllegalStateException: Can't change/establish root binding of: *cljs-repl-env* with set
at clojure.lang.Var.set(Var.java:223)
at cider.piggieback$cljs_repl.invokeStatic(piggieback_impl.clj:184)
at cider.piggieback$cljs_repl.doInvoke(piggieback_impl.clj:146)
at clojure.lang.RestFn.invoke(RestFn.java:410)
at user$eval1711.invokeStatic(form-init6720131333940924525.clj:1)
at user$eval1711.invoke(form-init6720131333940924525.clj:1)
at clojure.lang.Compiler.eval(Compiler.java:7062)
at clojure.lang.Compiler.eval(Compiler.java:7052)
at clojure.lang.Compiler.eval(Compiler.java:7052)
at clojure.lang.Compiler.eval(Compiler.java:7051)
at clojure.lang.Compiler.load(Compiler.java:7514)
... 12 more
So I've been using a shell script instead to start my repl:
#!/bin/zsh
(echo "(require 'cljs.repl.node) (cider.piggieback/cljs-repl (cljs.repl.node/repl-env))"; cat <&0) | lein repl
This seems weird to me - is this intended behavior or am I missing the proper way to set this up?