Skip to content

Using do in lein :repl-options leads to error #124

@kovasap

Description

@kovasap

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?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions