lein ring server with nrepl doesn't honour cider-nrepl

cider, clojure, emacs, leiningen, ring

Solution

Use latest `lein-ring` plugin version 0.9.2 and add `:nrepl-middleware` containing vector of nrepl-middlewares to `:repl-options` in your project.clj

For example, I create the project by `lein new compojure-app my-app`. Then, I tested it by creating a empty leiningen profile in `~/.lein/profiles.clj` ex. `{:yolo {}}` and starting ring server by `lein with-profile yolo,dev ring server`.

(defproject my-app "0.1.0-SNAPSHOT"
  :description "FIXME: write description"
  :url "http://example.com/FIXME"
  :dependencies [[org.clojure/clojure "1.6.0"]
                 [compojure "1.1.6"]
                 [hiccup "1.0.5"]
                 [ring-server "0.3.1"]
                 [cider/cider-nrepl "0.8.2"]]
  :plugins [[lein-ring "0.9.2"]]
  :ring {:handler my-app.handler/app
         :init my-app.handler/init
         :destroy my-app.handler/destroy
         :nrepl {:start? true}}
  :repl-options {:nrepl-middleware
                 [cider.nrepl.middleware.apropos/wrap-apropos
                  cider.nrepl.middleware.classpath/wrap-classpath
                  cider.nrepl.middleware.complete/wrap-complete
                  cider.nrepl.middleware.info/wrap-info
                  cider.nrepl.middleware.inspect/wrap-inspect
                  cider.nrepl.middleware.macroexpand/wrap-macroexpand
                  cider.nrepl.middleware.ns/wrap-ns
                  cider.nrepl.middleware.resource/wrap-resource
                  cider.nrepl.middleware.stacktrace/wrap-stacktrace
                  cider.nrepl.middleware.test/wrap-test
                  cider.nrepl.middleware.trace/wrap-trace
                  cider.nrepl.middleware.undef/wrap-undef]}
  :profiles
  {:uberjar {:aot :all}
   :production
   {:ring
    {:open-browser? false, :stacktraces? false, :auto-reload? false}}
   :dev
   {:dependencies [[ring-mock "0.1.5"] [ring/ring-devel "1.3.1"]]}})

Problem

When I start up my current project with `lein ring server` and try to connect to it from Emacs via cider, I get the following warning: ``` ; CIDER 0.8.2 (Java 1.7.0_51, Clojure 1.6.0, nREPL 0.2.6) WARNING: The following required nREPL ops are not supported: apropos classpath complete eldoc info inspect-start inspect-refresh inspect-pop inspect-push inspect-reset macroexpand ns-list ns-vars resource stacktrace toggle-trace-var toggle-trace-ns undef Please, install (or update) cider-nrepl 0.8.2 and restart CIDER user> ``` However, I do have a dependency for `[cider/cider-nrepl "0.8.2"]` in my `project.clj`. This is working just fine when I run `lein repl` and to which I can then connect just fine from cider: ``` ; CIDER 0.8.2 (Java 1.7.0_51, Clojure 1.6.0, nREPL 0.2.6) swedishchef.handler> ``` I can see that I get two different messages from leiningen wrt. nREPL, depending on how I start: ``` [sugarcube->swedishchef]lein ring server See https://github.com/technomancy/leiningen/wiki/Repeatability) Started nREPL server on port 44231 ``` This is the output with the working cider-nrepl connection: ``` [sugarcube->swedishchef]lein repl See https://github.com/technomancy/leiningen/wiki/Repeatability) nREPL server started on port 38024 on host 127.0.0.1 - nrepl://127.0.0.1:38024 REPL-y 0.3.5, nREPL 0.2.6 ``` Looking at the output of `lein deps :tree` I don't see any problems. So, my first question is whether this supposed to work, i.e., if `cider-nrepl` should override `lein ring`s behavior wrt. to nrepl startup? If so, could somebody give some advice for further troubleshooting?

Original source