How to hot reload a namespace on file save in Leiningen REPL
Asked Answered
D

3

13

When using the leiningen REPL, is there a way to make a file or ns automatically reload in the repl on file save. Currently I reload the ns by typing the following in the repl - (use 'sample.ns :reload-all).

However can I have it reload automatically on file save ?

Daub answered 9/9, 2012 at 16:46 Comment(1)
Are you using emacs? Because if so, this is a supported feature of slime/swank: #2596722Tung
O
2

You can easily reuse the code from duct framework.

You will need only hawk files watcher.

Here is how it can be looks like:

(defn- clojure-file? [_ {:keys [file]}]
  (re-matches #"[^.].*(\.clj|\.edn)$" (.getName file)))

(defn- auto-reset-handler [ctx event]
  (binding [*ns* *ns*]
    (clojure.tools.namespace.repl/refresh)
    ctx))

(defn auto-reset
  "Automatically reset the system when a Clojure or edn file is changed in
  `src` or `resources`."
  []
  (hawk.core/watch! [{:paths ["src/" "resources/" "dev/src/" "dev/resources/"]
                 :filter clojure-file?
                 :handler auto-reset-handler}]))
Ophelia answered 7/2, 2020 at 17:57 Comment(0)
S
1

Clojure-Watch library does what you need. It observes a file and performs some action. In your case, an action would be to reload a namespace from that file. Also, it requires to write some initial code to launch the observer.

This way seems a bit complicated to me. Plain REPL launched directly from Lein is not effective way to develop. You better to use some Clojure-friendly editor like Emacs or Lightable.

Sudbury answered 18/3, 2017 at 12:19 Comment(0)
T
1

Most major editors support custom hotkey bindings and have a Clojure plugin that allows you to connect to the active REPL over the network (via "nREPL"). Personally, I use vim and therefore use vim-fireplace for this purpose.

This means you can have a custom hotkey for reloading whatever file you're editing as you edit it. From there, it's typically trivial to add a custom on-save hook that does the reloading.

Tui answered 4/12, 2017 at 13:19 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.