parent
d038306c97
commit
fdae11f7d1
1 changed files with 36 additions and 15 deletions
|
@ -6,6 +6,7 @@
|
|||
[clojure.java.io :as io]
|
||||
[leiningen.core.eval :as eval]
|
||||
[leiningen.core.project :as project]
|
||||
[leiningen.trampoline :as trampoline]
|
||||
[clojure.tools.nrepl.ack :as nrepl.ack]
|
||||
[clojure.tools.nrepl.server :as nrepl.server]
|
||||
[leiningen.core.user :as user]
|
||||
|
@ -19,12 +20,16 @@
|
|||
[org.thnetos/cd-client "0.3.4"
|
||||
:exclusions [org.clojure/clojure]]]})
|
||||
|
||||
(def trampoline-profile {:dependencies '[[reply "0.1.0-beta4"
|
||||
:exclusions [org.clojure/clojure]]]})
|
||||
|
||||
(defn- start-server [project port ack-port]
|
||||
(let [server-starting-form
|
||||
`(let [server# (clojure.tools.nrepl.server/start-server
|
||||
:port ~port :ack-port ~ack-port)]
|
||||
(println "nREPL server started on port"
|
||||
(-> server# deref :ss .getLocalPort)))]
|
||||
(-> server# deref :ss .getLocalPort))
|
||||
(while true (Thread/sleep Long/MAX_VALUE)))]
|
||||
(if project
|
||||
(eval/eval-in-project
|
||||
(project/merge-profile project profile)
|
||||
|
@ -51,17 +56,24 @@
|
|||
(-> project :repl-options :ack-port))]
|
||||
(Integer. p)))
|
||||
|
||||
(defn options-for-reply [repl-port project]
|
||||
(defn options-for-reply [project & {:keys [attach port]}]
|
||||
(let [repl-options (:repl-options project)]
|
||||
(clojure.set/rename-keys
|
||||
(assoc repl-options
|
||||
:attach (if-let [host (repl-host project)]
|
||||
(str host ":" repl-port)
|
||||
(str repl-port))
|
||||
:init (if-let [init-ns (or (:init-ns repl-options) (:main project))]
|
||||
`(do (require '~init-ns) (in-ns '~init-ns)
|
||||
~(:init repl-options))
|
||||
(:init repl-options)))
|
||||
(merge
|
||||
repl-options
|
||||
{:init (if-let [init-ns (or (:init-ns repl-options) (:main project))]
|
||||
`(do (require '~init-ns) (in-ns '~init-ns)
|
||||
~(:init repl-options))
|
||||
(:init repl-options))}
|
||||
(cond
|
||||
attach
|
||||
{:attach (if-let [host (repl-host project)]
|
||||
(str host ":" attach)
|
||||
(str attach))}
|
||||
port
|
||||
{:port (str port)}
|
||||
:else
|
||||
{}))
|
||||
{:prompt :custom-prompt
|
||||
:init :custom-init})))
|
||||
|
||||
|
@ -84,6 +96,17 @@ Connects to the nREPL server running at the given host (defaults to localhost)
|
|||
and port."
|
||||
([] (repl nil))
|
||||
([project]
|
||||
(if trampoline/*trampoline?*
|
||||
(let [options (options-for-reply project :port (repl-port project))]
|
||||
(eval/eval-in-project
|
||||
(-> project
|
||||
(project/merge-profile profile)
|
||||
(project/merge-profile trampoline-profile))
|
||||
`(reply.main/launch-nrepl ~options)
|
||||
'(do (require 'reply.main)
|
||||
(require 'clojure.tools.nrepl.server)
|
||||
(require 'complete.core))))
|
||||
(do
|
||||
(nrepl.ack/reset-ack-port!)
|
||||
(let [prepped (promise)]
|
||||
(.start
|
||||
|
@ -98,14 +121,12 @@ and port."
|
|||
:repl-options
|
||||
:timeout)
|
||||
30000))]
|
||||
(reply/launch-nrepl (options-for-reply repl-port project))
|
||||
(println "REPL server launch timed out."))))
|
||||
(reply/launch-nrepl (options-for-reply project :attach repl-port))
|
||||
(println "REPL server launch timed out."))))))
|
||||
([project flag & opts]
|
||||
(case flag
|
||||
":headless" (do (start-server project
|
||||
(repl-port project)
|
||||
(ack-port project))
|
||||
(while true
|
||||
(Thread/sleep Long/MAX_VALUE)))
|
||||
(ack-port project)))
|
||||
":connect" (reply/launch-nrepl {:attach (first opts)})
|
||||
(main/abort "Unrecognized flag:" flag))))
|
||||
|
|
Loading…
Reference in a new issue