diff --git a/CHANGELOG.md b/CHANGELOG.md index 52f4482b2..2bcd9f628 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,6 +23,8 @@ - [#3112](https://github.com/clojure-emacs/cider/issues/3112): Fix the CIDER `xref-find-references` backend to return correct filenames. - [#3393](https://github.com/clojure-emacs/cider/issues/3393): recompute namespace info on each shadow-cljs recompilation or evaluation. - [#3402](https://github.com/clojure-emacs/cider/issues/3402): fix `cider-format-connection-params` edge case for Emacs 29. +- [#3393](https://github.com/clojure-emacs/cider/issues/3393): Recompute namespace info on each shadow-cljs recompilation or evaluation. +- Recompute namespace info on each fighweel-main recompilation. - Fix the `xref-find-definitions` CIDER backend to return correct filenames. - Fix the `cider-xref-fn-deps` buttons to direct to the right file. diff --git a/cider-repl.el b/cider-repl.el index d70b708c3..b083a08de 100644 --- a/cider-repl.el +++ b/cider-repl.el @@ -986,6 +986,12 @@ t, as the content-type response is (currently) an alternative to the value response. However for handlers which themselves issue subsequent nREPL ops, it may be convenient to prevent inserting a prompt.") +(defun cider--maybe-get-state-cljs () + "Invokes `cider/get-state' when it's possible to do so." + (when-let ((conn (cider-current-repl 'cljs))) + (when (nrepl-op-supported-p "cider/get-state" conn) + (nrepl-send-request '("op" "cider/get-state") nil conn)))) + (defun cider--maybe-get-state-for-shadow-cljs (buffer &optional err) "Refresh the changed namespaces metadata given BUFFER and ERR (stderr string). @@ -1003,9 +1009,16 @@ This is particularly necessary for shadow-cljs because: (if err (string-match-p "Build completed\\." err) t)) - (when-let ((conn (cider-current-repl 'cljs))) - (when (nrepl-op-supported-p "cider/get-state" conn) - (nrepl-send-request '("op" "cider/get-state") nil conn)))))) + (cider--maybe-get-state-cljs)))) + +(defun cider--maybe-get-state-for-figwheel-main (buffer out) + "Refresh the changed namespaces metadata given BUFFER and OUT (stdout string)." + (with-current-buffer buffer + (when (and (eq cider-repl-type 'cljs) + (eq cider-cljs-repl-type 'figwheel-main) + (not cider-repl-cljs-upgrade-pending) + (string-match-p "Successfully compiled build" out)) + (cider--maybe-get-state-cljs)))) (defun cider--shadow-cljs-handle-stderr (buffer err) "Refresh the changed namespaces metadata given BUFFER and ERR." @@ -1015,6 +1028,12 @@ This is particularly necessary for shadow-cljs because: "Refresh the changed namespaces metadata given BUFFER." (cider--maybe-get-state-for-shadow-cljs buffer)) +(defvar cider--repl-stdout-functions (list #'cider--maybe-get-state-for-figwheel-main) + "Functions to be invoked each time new stdout is received on a repl buffer. + +Good for, for instance, monitoring specific strings that may be logged, +and responding to them.") + (defvar cider--repl-stderr-functions (list #'cider--shadow-cljs-handle-stderr) "Functions to be invoked each time new stderr is received on a repl buffer. @@ -1032,6 +1051,8 @@ and responding to them.") (lambda (buffer value) (cider-repl-emit-result buffer value t)) (lambda (buffer out) + (dolist (f cider--repl-stdout-functions) + (funcall f buffer out)) (cider-repl-emit-stdout buffer out)) (lambda (buffer err) (dolist (f cider--repl-stderr-functions)