From 670720d43c24495284dcce1db98cdd4269109b6e Mon Sep 17 00:00:00 2001 From: Dominic Monroe Date: Sat, 7 Nov 2020 15:15:06 +0000 Subject: [PATCH] Add nREPL support --- README.adoc | 8 +++++ src/io/dominic/wedge/mise/impl/nrepl.clj | 39 ++++++++++++++++++++++++ src/io/dominic/wedge/mise/rebel.clj | 6 +++- 3 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 src/io/dominic/wedge/mise/impl/nrepl.clj diff --git a/README.adoc b/README.adoc index db27074..a392db3 100644 --- a/README.adoc +++ b/README.adoc @@ -41,6 +41,14 @@ OR # clojure -M:dev -m io.dominic.wedge.mise.rebel ---- +You may pass the `--nrepl` flag to the main to start an nREPL server on port 5600 with common middleware loaded. +Use this is your editor asks you to connect to an nREPL server. + +[source,shell] +---- +# clojure -M -m io.dominic.wedge.mise.rebel --nrepl +---- + == SLF4J Warnings This should only happen if you don't have SLF4J loaded. diff --git a/src/io/dominic/wedge/mise/impl/nrepl.clj b/src/io/dominic/wedge/mise/impl/nrepl.clj new file mode 100644 index 0000000..154af12 --- /dev/null +++ b/src/io/dominic/wedge/mise/impl/nrepl.clj @@ -0,0 +1,39 @@ +(ns io.dominic.wedge.mise.impl.nrepl + (:require + [clojure.tools.deps.alpha.repl :as tda.repl])) + +(defn add-libs + [] + (binding [;; Suppress missing S3Transport warning + *err* (java.io.StringWriter.)] + (tda.repl/add-libs + (cond-> + '{cider/cider-nrepl {:mvn/version "0.25.4"} + refactor-nrepl/refactor-nrepl {:mvn/version "2.5.0"} + nrepl/nrepl {:mvn/version "0.8.3"}} + (try (require 'cljs.analyzer) + true + (catch java.io.FileNotFoundException _ + false)) + (assoc 'cider/piggieback {:mvn/version "0.5.2"})))) + :loaded) + +(defn start-nrepl + ([] (start-nrepl {})) + ([opts] + (let [opts (merge {:port 5600 + :transport (requiring-resolve 'nrepl.transport/bencode) + :transport-fn (requiring-resolve 'nrepl.transport/bencode) + :handler (apply (requiring-resolve 'nrepl.server/default-handler) + (:middleware opts + (concat + @(requiring-resolve 'cider.nrepl.middleware/cider-middleware) + ['refactor-nrepl.middleware/wrap-refactor] + (when-let [piggieback (try (requiring-resolve 'cider.piggieback/wrap-cljs-repl) + (catch java.io.FileNotFoundException _ + false))] + [piggieback]))))} + opts) + server (apply (requiring-resolve 'nrepl.server/start-server) (apply concat opts))] + (println ((requiring-resolve 'nrepl.cmdline/server-started-message) server opts)) + ((requiring-resolve 'nrepl.cmdline/save-port-file) server opts)))) diff --git a/src/io/dominic/wedge/mise/rebel.clj b/src/io/dominic/wedge/mise/rebel.clj index 3dc7be7..7b0bc95 100644 --- a/src/io/dominic/wedge/mise/rebel.clj +++ b/src/io/dominic/wedge/mise/rebel.clj @@ -1,7 +1,8 @@ (ns io.dominic.wedge.mise.rebel (:require [clojure.tools.deps.alpha.repl :as tda.repl] - [io.dominic.wedge.mise :as mise])) + [io.dominic.wedge.mise :as mise] + [io.dominic.wedge.mise.impl.nrepl :as nrepl])) (defn- add-libs [] @@ -24,6 +25,9 @@ (.setContextClassLoader (Thread/currentThread) (clojure.lang.DynamicClassLoader. cl))) (mise/load-libs) (mise/setup) + (when (some #{"--nrepl"} args) + (nrepl/add-libs) + (nrepl/start-nrepl)) (add-libs) (load "io/dominic/wedge/mise/rebel/impl") ((resolve 'main*))) -- 2.38.5