Read nREPL handlers and middleware from project. Fixes #716.
This commit is contained in:
parent
7489266e9f
commit
77c811bbe8
2 changed files with 24 additions and 5 deletions
|
@ -130,6 +130,14 @@
|
|||
;; increase this to wait longer before timing out.
|
||||
;; Defaults to 30000 (30 seconds)
|
||||
:timeout 40000}
|
||||
;; Use a different server-side nREPL handler.
|
||||
:nrepl-handler (clojure.tools.nrepl.server/default-handler)
|
||||
;; Add server-side middleware to nREPL stack.
|
||||
:nrepl-middleware [my.nrepl.thing/wrap-amazingness
|
||||
(fn [handler]
|
||||
(fn [& args]
|
||||
(prn :middle args)
|
||||
(apply handler args)))]
|
||||
;; Forms to prepend to every form that is evaluated inside your project.
|
||||
;; Allows working around the Gilardi Scenario: http://technomancy.us/143
|
||||
:injections [(require 'clojure.pprint)]
|
||||
|
|
|
@ -24,10 +24,22 @@
|
|||
(def trampoline-profile {:dependencies '[[reply "0.1.0-beta9"
|
||||
:exclusions [org.clojure/clojure]]]})
|
||||
|
||||
(defn- handler-for [project]
|
||||
`(-> ~(:nrepl-handler project '(clojure.tools.nrepl.server/default-handler))
|
||||
~@(map list (:nrepl-middleware project))))
|
||||
|
||||
(defn- init-requires [project & nses]
|
||||
(let [defaults '[clojure.tools.nrepl.server complete.core]
|
||||
nrepl-syms (filter symbol? (cons (:nrepl-handler project)
|
||||
(:nrepl-middleware project)))]
|
||||
(for [n (concat defaults nrepl-syms nses)]
|
||||
(list 'quote n))))
|
||||
|
||||
(defn- start-server [project host port ack-port & [headless?]]
|
||||
(let [server-starting-form
|
||||
`(let [server# (clojure.tools.nrepl.server/start-server
|
||||
:bind ~host :port ~port :ack-port ~ack-port)
|
||||
:bind ~host :port ~port :ack-port ~ack-port
|
||||
:handler ~(handler-for project))
|
||||
port# (-> server# deref :ss .getLocalPort)]
|
||||
(println "nREPL server started on port" port#)
|
||||
(spit ~(str (io/file (:target-path project) "repl-port")) port#)
|
||||
|
@ -36,9 +48,8 @@
|
|||
(eval/eval-in-project
|
||||
(project/merge-profiles project [(:repl (user/profiles) profile)
|
||||
(if-not headless? reply-profile)])
|
||||
server-starting-form
|
||||
'(do (require 'clojure.tools.nrepl.server)
|
||||
(require 'complete.core)))
|
||||
server-starting-form
|
||||
`(require ~@(init-requires project)))
|
||||
(eval server-starting-form))))
|
||||
|
||||
(defn- repl-port [project]
|
||||
|
@ -88,7 +99,7 @@
|
|||
(eval/eval-in-project
|
||||
(project/merge-profiles project profiles)
|
||||
`(reply.main/launch-nrepl ~options)
|
||||
'(require 'reply.main 'clojure.tools.nrepl.server 'complete.core))))
|
||||
`(require ~@(init-requires project 'reply.main)))))
|
||||
|
||||
(defn ^:no-project-needed repl
|
||||
"Start a repl session either with the current project or standalone.
|
||||
|
|
Loading…
Reference in a new issue