From e00351f8aea4d076b629760c1df083fa932d2c1d Mon Sep 17 00:00:00 2001 From: Steve George Date: Sun, 25 Oct 2020 09:16:52 +0000 Subject: [PATCH 1/7] Add documentation to embed an nREPL, specifically for Rebel Readline Rebel Readline (https://github.com/bhauman/rebel-readline) is a user-friendly REPL that goes well with vim-iced. It only has a local service, so you have to create an nREPL after it's been started. This means you have to embed an nREPL. It would be nicer to create an nREPL service in Rebel Readline, but it's too complicated! Added documentation and example 'user.clj'. --- doc/vim-iced.txt | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/doc/vim-iced.txt b/doc/vim-iced.txt index af5a06e12..0dd51a466 100644 --- a/doc/vim-iced.txt +++ b/doc/vim-iced.txt @@ -14,6 +14,7 @@ CONTENTS *vim-iced-contents* Leiningen |vim-iced-manual-leiningen| Boot |vim-iced-manual-boot| shadow-cljs |vim-iced-manual-shadow-cljs| + Rebel Readline |vim-iced-manual-rebel-readline| Boost by Python |vim-iced-install-python| Docker |vim-iced-install-docker| REPL Connection |vim-iced-repl-connection| @@ -217,6 +218,48 @@ SHADOW-CLJS~ < To start CLJS REPL, see |vim-iced-shadow-cljs|. + *vim-iced-manual-rebel-readline* +REBEL READLINE~ + + If you use Rebel Readline or want to embed an nREPL in your application, + then one approach is to create a `user.clj` with the following: +> + (ns user (:require [nrepl.server :as nrepl-server] + [clojure.java.io :as io])) + + (def nrepl-port 7888) + (defonce nrepl-server (atom nil)) + + (defn cider-middleware + "Get cider middleware, see + https://github.com/clojure-emacs/cider-nrepl/issues/447" + [] + (require 'cider.nrepl) + (map resolve (var-get (ns-resolve 'cider.nrepl 'cider-middleware)))) + + (defn dev-middleware [] + (mapcat (fn [[ns syms]] (require ns) (map (partial ns-resolve ns) syms)) + [['refactor-nrepl.middleware ['wrap-refactor]] ['iced.nrepl ['wrap-iced]]])) + + (defn start-nrepl-server! [] + (reset! + nrepl-server + (nrepl-server/start-server :port nrepl-port :handler (nrepl-handler)) + ) + (println "Cider nREPL server started on port" nrepl-port) + (spit ".nrepl-port" nrepl-port)) + + (defn stop-nrepl-server! [] + (when (not (nil? @nrepl-server)) + (nrepl-server/stop-server @nrepl-server) + (println "Cider nREPL server on port" nrepl-port "stopped") + (reset! nrepl-server nil) + (io/delete-file ".nrepl-port" true) + (System/exit 0))) +< + Start the Rebel Readline REPL and from it's prompt start the nREPL server + using `start-nrepl-server!`, then in Vim do `:IcedConnect`. + ============================================================================== BOOST BY PYTHON *vim-iced-install-python* From 4361113de804af81fc0ecfb78b64d990bab9c7a5 Mon Sep 17 00:00:00 2001 From: Steve George Date: Sun, 1 Nov 2020 21:21:17 +0000 Subject: [PATCH 2/7] Update doc/vim-iced.txt Extraneous space. Co-authored-by: Iizuka Masashi --- doc/vim-iced.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/vim-iced.txt b/doc/vim-iced.txt index 0dd51a466..acd9e4984 100644 --- a/doc/vim-iced.txt +++ b/doc/vim-iced.txt @@ -223,7 +223,7 @@ REBEL READLINE~ If you use Rebel Readline or want to embed an nREPL in your application, then one approach is to create a `user.clj` with the following: -> +> (ns user (:require [nrepl.server :as nrepl-server] [clojure.java.io :as io])) From 7d5f95695b13a84a0abac8aeb7014620fb8274f2 Mon Sep 17 00:00:00 2001 From: Steve George Date: Sun, 1 Nov 2020 21:21:41 +0000 Subject: [PATCH 3/7] Update doc/vim-iced.txt Co-authored-by: Iizuka Masashi --- doc/vim-iced.txt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/doc/vim-iced.txt b/doc/vim-iced.txt index acd9e4984..31eca1b8f 100644 --- a/doc/vim-iced.txt +++ b/doc/vim-iced.txt @@ -224,8 +224,9 @@ REBEL READLINE~ If you use Rebel Readline or want to embed an nREPL in your application, then one approach is to create a `user.clj` with the following: > - (ns user (:require [nrepl.server :as nrepl-server] - [clojure.java.io :as io])) + (ns user + (:require [nrepl.server :as nrepl-server] + [clojure.java.io :as io])) (def nrepl-port 7888) (defonce nrepl-server (atom nil)) From f224ac8d8d02793ebc54b894dba8765e081a8959 Mon Sep 17 00:00:00 2001 From: Steve George Date: Sun, 1 Nov 2020 21:21:56 +0000 Subject: [PATCH 4/7] Update doc/vim-iced.txt Co-authored-by: Iizuka Masashi --- doc/vim-iced.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/vim-iced.txt b/doc/vim-iced.txt index 31eca1b8f..521e13baa 100644 --- a/doc/vim-iced.txt +++ b/doc/vim-iced.txt @@ -257,7 +257,7 @@ REBEL READLINE~ (reset! nrepl-server nil) (io/delete-file ".nrepl-port" true) (System/exit 0))) -< +< Start the Rebel Readline REPL and from it's prompt start the nREPL server using `start-nrepl-server!`, then in Vim do `:IcedConnect`. From 40abf779b8c8ef6a346b4f820228ba5d836152c9 Mon Sep 17 00:00:00 2001 From: Steve George Date: Sun, 31 Jan 2021 18:00:49 +0000 Subject: [PATCH 5/7] Update doc/vim-iced.txt Co-authored-by: Iizuka Masashi --- doc/vim-iced.txt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/doc/vim-iced.txt b/doc/vim-iced.txt index 521e13baa..bfc9d4935 100644 --- a/doc/vim-iced.txt +++ b/doc/vim-iced.txt @@ -245,8 +245,7 @@ REBEL READLINE~ (defn start-nrepl-server! [] (reset! nrepl-server - (nrepl-server/start-server :port nrepl-port :handler (nrepl-handler)) - ) + (nrepl-server/start-server :port nrepl-port :handler (nrepl-handler))) (println "Cider nREPL server started on port" nrepl-port) (spit ".nrepl-port" nrepl-port)) From 5dd280e7314cb39c30eb4ef8c7bdef2423d90714 Mon Sep 17 00:00:00 2001 From: Steve George Date: Sun, 31 Jan 2021 18:17:36 +0000 Subject: [PATCH 6/7] Update vim-iced.txt --- doc/vim-iced.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/doc/vim-iced.txt b/doc/vim-iced.txt index bfc9d4935..c62b58955 100644 --- a/doc/vim-iced.txt +++ b/doc/vim-iced.txt @@ -241,6 +241,11 @@ REBEL READLINE~ (defn dev-middleware [] (mapcat (fn [[ns syms]] (require ns) (map (partial ns-resolve ns) syms)) [['refactor-nrepl.middleware ['wrap-refactor]] ['iced.nrepl ['wrap-iced]]])) + + (defn nrepl-handler + "Re-implement cider-nrepl-handler so we can add middleware to the default list" + [] + (apply nrepl-server/default-handler (concat (cider-middleware) (dev-middleware)))) (defn start-nrepl-server! [] (reset! From 6a02d60807be2e358b302c78fc0fd39986d17ea5 Mon Sep 17 00:00:00 2001 From: Steve George Date: Sun, 31 Jan 2021 20:14:16 +0000 Subject: [PATCH 7/7] Update vim-iced.txt --- doc/vim-iced.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/doc/vim-iced.txt b/doc/vim-iced.txt index c62b58955..d28020cc3 100644 --- a/doc/vim-iced.txt +++ b/doc/vim-iced.txt @@ -236,7 +236,9 @@ REBEL READLINE~ https://github.com/clojure-emacs/cider-nrepl/issues/447" [] (require 'cider.nrepl) - (map resolve (var-get (ns-resolve 'cider.nrepl 'cider-middleware)))) + (map ns-resolve + ['cider.nrepl 'cider.nrepl 'cider.nrepl 'cider.nrepl 'cider.nrepl 'cider.nrepl 'cider.nrepl 'cider.nrepl 'cider.nrepl 'cider.nrepl 'cider.nrepl 'cider.nrepl 'cider.nrepl 'cider.nrepl] + ['wrap-classpath 'wrap-clojuredocs 'wrap-complete 'wrap-debug 'wrap-format 'wrap-info 'wrap-macroexpand 'wrap-ns 'wrap-out 'wrap-spec 'wrap-test 'wrap-trace 'wrap-undef 'wrap-xref])) (defn dev-middleware [] (mapcat (fn [[ns syms]] (require ns) (map (partial ns-resolve ns) syms))