Skip to content

Commit

Permalink
Support clj-reload in addition to tools.namespace
Browse files Browse the repository at this point in the history
Since version 0.46.0, nREPL has supported the `clj-reload` library in
addition to the standard `tools.namespace` library for facilitating
reloading namespaces.

This commit introduces a new Clojure nREPL variable to allow switching
to the new `clj-reload` library.

The variable is:

`g:conjure#client#clojure#nrepl#refresh#backend`

The default is to continue to use `tools.namespace`, but if it is set to
`clj-reload`, i.e.,

`g:conjure#client#clojure#nrepl#refresh#backend = 'clj-reload'`

It will then use the new backend.

fixes #574

-=david=-
  • Loading branch information
dharrigan committed May 6, 2024
1 parent 882914a commit 6b99860
Show file tree
Hide file tree
Showing 6 changed files with 144 additions and 84 deletions.
8 changes: 8 additions & 0 deletions doc/conjure-client-clojure-nrepl.txt
Original file line number Diff line number Diff line change
Expand Up @@ -278,6 +278,14 @@ All configuration can be set as described in |conjure-configuration|.
after reloading.
Default: `nil`

*g:conjure#client#clojure#nrepl#refresh#backend*
`g:conjure#client#clojure#nrepl#refresh#backend`
The backend to use for "refreshing" the namespaces. It defaults
to `tools.namespace` (which has been there since the beginning) or
if the value is `clj-reload` it uses the new `clj-reload` feature
available since nREPL 0.46.0 (released 2024-03-05).
Default: `tools.namespace`

*g:conjure#client#clojure#nrepl#refresh#before*
`g:conjure#client#clojure#nrepl#refresh#before`
The namespace-qualified name of a zero-arity function to call
Expand Down
48 changes: 27 additions & 21 deletions fnl/conjure/client/clojure/nrepl/action.fnl
Original file line number Diff line number Diff line change
Expand Up @@ -551,31 +551,37 @@

(ui.display-result msg)))))))

(defn- use-clj-reload-backend? []
(= (cfg [:refresh :backend]) "clj-reload"))

(defn refresh-changed []
(try-ensure-conn
(fn []
(log.append ["; Refreshing changed namespaces"] {:break? true})
(refresh-impl :refresh))))
(let [use-clj-reload? (use-clj-reload-backend?)]
(try-ensure-conn
(fn []
(log.append [(str.join ["; Refreshing changed namespaces using '" (if use-clj-reload? "clj-reload" "tools.namespace") "'"])] {:break? true})
(refresh-impl (if use-clj-reload? :cider.clj-reload/reload :refresh))))))

(defn refresh-all []
(try-ensure-conn
(fn []
(log.append ["; Refreshing all namespaces"] {:break? true})
(refresh-impl :refresh-all))))
(let [use-clj-reload? (use-clj-reload-backend?)]
(try-ensure-conn
(fn []
(log.append [(str.join ["; Refreshing all namespaces using '" (if use-clj-reload? "clj-reload" "tools.namespace") "'"])] {:break? true})
(refresh-impl (if use-clj-reload? :cider.clj-reload/reload-all :refresh-all))))))

(defn refresh-clear []
(try-ensure-conn
(fn []
(log.append ["; Clearing refresh cache"] {:break? true})
(server.with-conn-and-ops-or-warn
[:refresh-clear]
(fn [conn]
(server.send
{:op :refresh-clear
:session conn.session}
(nrepl.with-all-msgs-fn
(fn [msgs]
(log.append ["; Clearing complete"])))))))))
(let [use-clj-reload? (use-clj-reload-backend?)]
(try-ensure-conn
(fn []
(log.append [(str.join ["; Clearning reload cache using '" (if use-clj-reload? "clj-reload" "tools.namespace") "'"])] {:break? true})
(server.with-conn-and-ops-or-warn
[:refresh-clear]
(fn [conn]
(server.send
{:op (if use-clj-reload? :cider.clj-reload/reload-clear :refresh-clear)
:session conn.session}
(nrepl.with-all-msgs-fn
(fn [msgs]
(log.append ["; Clearing complete"]))))))))))

(defn shadow-select [build]
(try-ensure-conn
Expand Down Expand Up @@ -610,7 +616,7 @@
" "
[ns
(when arglists
(str.join " " arglists ))])
(str.join " " arglists))])
:info (when (= :string (type info))
info)
:kind (when (not (a.empty? kind))
Expand Down
3 changes: 2 additions & 1 deletion fnl/conjure/client/clojure/nrepl/init.fnl
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,8 @@
:refresh
{:after nil
:before nil
:dirs nil}
:dirs nil
:backend "tools.namespace"}

:test
{:current_form_names ["deftest"]
Expand Down
165 changes: 105 additions & 60 deletions lua/conjure/client/clojure/nrepl/action.lua

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion lua/conjure/client/clojure/nrepl/init.lua

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion lua/conjure/config.lua

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 6b99860

Please sign in to comment.