branch: elpa/cider
commit 035a0ad392bab4e3189dd38ed414f948707783a1
Author: Bozhidar Batsov <[email protected]>
Commit: Bozhidar Batsov <[email protected]>
Tighten and group the unreleased changelog entries
Trim most entries down to a sentence, gather the big themes (transient
menus, rich content, code exploration, tracing/enlighten, macrostep,
renames) under parent bullets, fold same-cycle follow-up entries into
the feature they refined, and consolidate the incremental cider-nrepl
bump entries into a single 0.59.0 -> 0.62.1 one.
---
CHANGELOG.md | 190 +++++++++++++++++++++++++----------------------------------
1 file changed, 80 insertions(+), 110 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 9196e4afc1..a4dcc08927 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -8,136 +8,106 @@
### New features
+- Transient menus everywhere:
+ - [#4048](https://github.com/clojure-emacs/cider/pull/4048): Each command
group now opens a transient menu instead of a bare prefix keymap
(`cider-eval-menu` at `C-c C-v`, `cider-doc-menu` at `C-c C-d`, and likewise
for test, ns, insert, macroexpand, profile, trace and references), plus a
top-level `cider-menu` dispatch; existing keybindings are preserved.
+ - [#4061](https://github.com/clojure-emacs/cider/pull/4061): The
jack-in/connect keybindings are a transient menu too (`cider-start-menu`, `C-c
C-x`), with flags for aliases (`-a`), the ClojureScript REPL type (`-l`) and
editing the command before running (`-e`)
([#3317](https://github.com/clojure-emacs/cider/issues/3317)).
+ - Add a transient menu to the debugger (`cider-debug-menu`, `?` during a
debug session) - its single-key commands are proper named commands now (e.g.
`cider-debug-next`), so `M-x` works too - and to the inspector
(`cider-inspector-menu`, `m`).
+ - Add per-invocation flags to several menus: the printer (`--print-fn=`) in
the pretty-print menu
([#4065](https://github.com/clojure-emacs/cider/pull/4065)), test selectors
(`--include=`/`--exclude=`) in the test menu
([#4063](https://github.com/clojure-emacs/cider/pull/4063)), refresh modes
(`--all`/`--clear`/`--inhibit-fns`) in the ns menu and expansion display
(`--ns=`/`--meta`) in the macroexpand menu
([#4062](https://github.com/clojure-emacs/cider/pull/4062)).
+- Rich content in evaluation results:
+ - [#2476](https://github.com/clojure-emacs/cider/issues/2476): Interactive
evaluations now honor content types too: a result carrying rich content (e.g.
an image) renders per the new `cider-eval-rich-content-destination` - `inline`
(the default, in the result overlay at point), `repl`, `popup` or `nil` (plain
values, the previous behavior).
+ - Render fetched `text/html` content as formatted text (via `shr`), and make
an external-content result's URL a clickable link; remote images inside that
HTML are never fetched, so rendering a result never makes a network request on
its own.
+- New code-exploration commands under `C-c C-w`, presented as expandable trees:
+ - [#3995](https://github.com/clojure-emacs/cider/pull/3995):
`cider-who-calls` (`c`) and `cider-who-is-called` (`d`), SLIME-style browsers
for a function's callers and callees.
+ - [#3997](https://github.com/clojure-emacs/cider/pull/3997),
[#3998](https://github.com/clojure-emacs/cider/pull/3998),
[#4000](https://github.com/clojure-emacs/cider/pull/4000),
[#4001](https://github.com/clojure-emacs/cider/pull/4001):
`cider-who-implements` (`i`), browsing a protocol's implementing types (inline
`defrecord`/`deftype` included) or a multimethod's dispatch values, with jumps
to each implementation's source.
+ - [#3999](https://github.com/clojure-emacs/cider/pull/3999):
`cider-type-protocols` (`t`), listing the protocols a type implements, and
`cider-protocols-with-method` (`p`), listing the protocols that declare a given
method.
+ - [#3996](https://github.com/clojure-emacs/cider/pull/3996):
`cider-who-macroexpands` (`m`), finding a macro's use sites by searching the
project's source.
+- [#3994](https://github.com/clojure-emacs/cider/pull/3994):
`xref-find-references` (`M-?`) now finds references by searching the project's
source files, covering code that hasn't been loaded into the REPL yet
(configurable via `cider-xref-references-mode`).
+- Tracing and enlighten:
+ - [#3990](https://github.com/clojure-emacs/cider/pull/3990),
[#3992](https://github.com/clojure-emacs/cider/pull/3992),
[#3993](https://github.com/clojure-emacs/cider/pull/3993): Add `cider-trace`, a
dedicated buffer that streams the calls and return values of traced functions
live (instead of interleaving them into the REPL), with foldable calls, `n`/`p`
navigation and jump-to-definition.
+ - [#3989](https://github.com/clojure-emacs/cider/pull/3989): Add
`cider-list-traced` to show what's currently traced and `cider-untrace-all` to
clear all tracing at once.
+ - [#3988](https://github.com/clojure-emacs/cider/pull/3988),
[#3991](https://github.com/clojure-emacs/cider/pull/3991): Add
`cider-enlighten-defun-at-point` (enlighten a single form without the global
mode), `cider-enlighten-clear` and `cider-enlighten-stop` (turn enlightenment
off at once).
+- Inline macro stepping
([#3970](https://github.com/clojure-emacs/cider/pull/3970),
[#3976](https://github.com/clojure-emacs/cider/pull/3976),
[#3977](https://github.com/clojure-emacs/cider/pull/3977),
[#3978](https://github.com/clojure-emacs/cider/pull/3978),
[#3985](https://github.com/clojure-emacs/cider/pull/3985)): add
`cider-macrostep-expand` (`cider-macrostep-mode`), expanding macros in place
step by step, with the further-expandable sub-forms highlighted, gensyms
colorized, full e [...]
+- Eval-to-comment improvements:
+ - [#3965](https://github.com/clojure-emacs/cider/pull/3965): Add
`cider-send-to-comment` (`C-c C-j c`), copying the form at point into the
namespace's rich `comment` block, and `cider-jump-to-comment` (`C-c C-j v`) to
visit it.
+ - [#3964](https://github.com/clojure-emacs/cider/pull/3964): Add
`cider-comment-style` (`line`, `discard` or `comment`) to control how the
inserted results are formatted.
+ - [#4018](https://github.com/clojure-emacs/cider/pull/4018): Successive
eval-to-comment calls now update the inserted result in place instead of
stacking stale ones.
+- [#4044](https://github.com/clojure-emacs/cider/pull/4044),
[#4045](https://github.com/clojure-emacs/cider/pull/4045): Add `cider-tap`, a
buffer that streams the values sent to `tap>` and lets you inspect them with
`RET` (ClojureScript taps stream too, but aren't inspectable).
+- [#4094](https://github.com/clojure-emacs/cider/pull/4094): Add
`cider-doctor`, which checks your Emacs setup (and the active nREPL session, if
any) for common problems and shows a copy-pasteable report.
- Add an `orchard` value for `cider-print-fn`, selecting cider-nrepl's
`orchard.pp`-backed pretty-printer - significantly faster than the default
`clojure.pprint` and it doesn't realize lazy seqs while printing.
-- [#4108](https://github.com/clojure-emacs/cider/pull/4108): Add `C-c C-d` at
the stdin prompt (shown when evaluated code reads input) to send end-of-input,
so `read-line` returns `nil` and `(slurp *in*)` completes - code reading to EOF
can now be satisfied interactively instead of only by interrupting the
evaluation.
-- [#4094](https://github.com/clojure-emacs/cider/pull/4094): Add
`cider-doctor`, which checks your Emacs setup (and the active nREPL session, if
any) for common problems and shows a copy-pasteable report -
Emacs/CIDER/dependency versions, build tools on the path, stale byte-code,
leftover obsolete config, and cider-nrepl/nREPL/Clojure compatibility.
-- Render fetched `text/html` content as formatted text (via `shr`) in the REPL
and the rich-content popup, and make the URL of an external-content result a
clickable link that opens in the browser (next to its `[show content]` button).
Remote images in that HTML are not fetched, so rendering a result never makes a
network request on its own (only inline `data:` images render).
-- Honor content types for interactive evaluations too
([#2476](https://github.com/clojure-emacs/cider/issues/2476)): a
`cider-eval-last-sexp` returning an image can now render it, per the new
`cider-eval-rich-content-destination` - `inline` (the default, in the result
overlay at point), `repl` (like results of forms typed at the prompt, with the
`[show content]` button for external references), `popup` (the `*cider-result*`
buffer) or `nil` (plain values, the previous behavior).
-- Add a transient menu to the debugger (`cider-debug-menu`, bound to `?`
during a debug session), grouping all the debugger's single-key commands; they
are also proper named commands now (e.g. `cider-debug-next`,
`cider-debug-quit`), so they can be invoked via `M-x` as well.
-- Add a transient menu to the inspector (`cider-inspector-menu`, bound to `m`
in the inspector buffer), grouping all the inspector commands.
-- [#4065](https://github.com/clojure-emacs/cider/pull/4065): Add a
`--print-fn=` flag to the pretty-print transient menu
(`cider-eval-pprint-menu`) to pick the printer (pr/pprint/fipp/puget/zprint or
a custom var) per invocation.
-- [#4063](https://github.com/clojure-emacs/cider/pull/4063): Add test-selector
flags to the test transient menu (`cider-test-menu`): `--include=` and
`--exclude=`, so a selector filter can be set once and reused across the
namespace/loaded/project run commands.
-- [#4062](https://github.com/clojure-emacs/cider/pull/4062): Add refresh-mode
flags to the namespace transient menu (`cider-ns-menu`): `--all`, `--clear` and
`--inhibit-fns`, making `cider-ns-refresh`'s otherwise prefix-argument-only
modes explicit and combinable.
-- [#4062](https://github.com/clojure-emacs/cider/pull/4062): Add display flags
to the macroexpand transient menu (`cider-macroexpand-menu`): `--ns=`
(tidy/qualified/none) and `--meta`, to control the popup expansion's rendering
per invocation.
-- [#4061](https://github.com/clojure-emacs/cider/pull/4061): The
jack-in/connect keybindings are now a transient menu (`cider-start-menu`, `C-c
C-x`), with argument flags for the settings that vary per session: aliases
(`-a`), the ClojureScript REPL type (`-l`) and editing the command before
running (`-e`) ([#3317](https://github.com/clojure-emacs/cider/issues/3317)).
+- [#4108](https://github.com/clojure-emacs/cider/pull/4108): `C-c C-d` at the
stdin prompt sends end-of-input, so code reading to EOF can be satisfied
interactively instead of only by interrupting the evaluation.
+- [#4026](https://github.com/clojure-emacs/cider/pull/4026): Run ClojureScript
tests (asynchronous ones included) with the regular test commands when a
ClojureScript REPL is active, instead of refusing them.
+- [#4025](https://github.com/clojure-emacs/cider/pull/4025): Mark each
`deftest` with a green (passed) or red (failed) fringe indicator after a test
run; `cider-fringe-indicators` now also accepts a list of kinds (`eval`,
`test`) ([#3721](https://github.com/clojure-emacs/cider/issues/3721)).
+- [#3973](https://github.com/clojure-emacs/cider/pull/3973),
[#3980](https://github.com/clojure-emacs/cider/pull/3980): Indicate namespace
load-state: a mode-line (and optional fringe) marker when the buffer's
namespace isn't loaded into the REPL or is stale
(`cider-ns-load-state-display`), and per-form fringe markers that turn amber
when an evaluated form is edited (`cider-mark-stale-after-edit`); the load,
reload and refresh commands all keep them in sync.
+- [#4023](https://github.com/clojure-emacs/cider/pull/4023):
`cider-auto-inspect-after-eval` now accepts `interactive`, `repl` or `all`, so
a visible inspector can also be refreshed after REPL evaluations
([#3636](https://github.com/clojure-emacs/cider/issues/3636)).
+- [#4057](https://github.com/clojure-emacs/cider/pull/4057): Show an animated
spinner overlay at the form being evaluated instead of the mode-line spinner,
when result overlays are enabled
([#3516](https://github.com/clojure-emacs/cider/issues/3516)).
- [#4060](https://github.com/clojure-emacs/cider/pull/4060): Hint at jack-in
time when no Clojure CLI aliases are set, so newcomers discover aliases like
`:dev`/`:test`; set `cider-clojure-cli-aliases` to `:nil-no-warn` to silence it
([#3317](https://github.com/clojure-emacs/cider/issues/3317)).
-- [#4057](https://github.com/clojure-emacs/cider/pull/4057): Show an animated
spinner overlay at the form being evaluated (where its result will appear)
while an interactive evaluation is pending, instead of the mode-line spinner,
when result overlays are enabled
([#3516](https://github.com/clojure-emacs/cider/issues/3516)).
-- [#4055](https://github.com/clojure-emacs/cider/pull/4055): Add
`cider-clojure-cli-powershell-options` to pass extra options (e.g. `-noprofile
-executionpolicy bypass`) to the PowerShell executable used for jack-in on
Windows ([#2879](https://github.com/clojure-emacs/cider/issues/2879)).
-- [#4048](https://github.com/clojure-emacs/cider/pull/4048): Open a transient
menu for each command group instead of a bare prefix keymap (`cider-eval-menu`
at `C-c C-v`, `cider-doc-menu` at `C-c C-d`, and likewise for test, ns, insert,
macroexpand, profile, trace and references), plus a top-level `cider-menu`
dispatch. Existing keybindings are preserved; the menus just make the commands
discoverable.
-- [#4044](https://github.com/clojure-emacs/cider/pull/4044): Add `cider-tap`,
a buffer that streams the values sent to `tap>` and lets you inspect Clojure
values with `RET` (reusing the inspector). ClojureScript taps stream too
([#4045](https://github.com/clojure-emacs/cider/pull/4045)) but aren't
inspectable (their value lives in the JS runtime). Requires a recent enough
`cider-nrepl` (with the `tap` middleware).
-- [#4026](https://github.com/clojure-emacs/cider/pull/4026): Run ClojureScript
tests with the regular test commands (e.g. `cider-test-run-ns-tests`) when a
ClojureScript REPL is active, instead of refusing them; requires a recent
enough `cider-nrepl` (asynchronous `cljs.test/async` tests included).
-- [#4023](https://github.com/clojure-emacs/cider/pull/4023):
`cider-auto-inspect-after-eval` now accepts `interactive`, `repl` or `all` (in
addition to `t`/`nil`), so a visible inspector can also be refreshed after REPL
evaluations ([#3636](https://github.com/clojure-emacs/cider/issues/3636)).
-- [#4025](https://github.com/clojure-emacs/cider/pull/4025): Mark each
`deftest` with a green (passed) or red (failed) left-fringe indicator after a
test run. `cider-fringe-indicators` now accepts a list of kinds (`eval`,
`test`) for finer control, in addition to `t`/`nil`
([#3721](https://github.com/clojure-emacs/cider/issues/3721)).
-- [#4004](https://github.com/clojure-emacs/cider/pull/4004): Add
`cider-browse-spec-tree`, which browses a spec and the specs it references as
an expandable tree - expand a node to reveal its sub-specs (a level at a time),
`RET` to open a spec's full definition.
-- [#3999](https://github.com/clojure-emacs/cider/pull/3999): Add
`cider-type-protocols` (`C-c C-w t`), listing the protocols a type implements
(the reverse of `cider-who-implements`), and `cider-protocols-with-method`
(`C-c C-w p`), listing the protocols that declare a given method.
-- [#3997](https://github.com/clojure-emacs/cider/pull/3997): Add
`cider-who-implements` (`C-c C-w i`), which browses a protocol's implementing
types or a multimethod's dispatch values on an expandable tree. (Currently a
client-side approximation; inline `defrecord`/`deftype` impls and
per-`defmethod` jumps await a follow-up middleware op.)
-- [#3996](https://github.com/clojure-emacs/cider/pull/3996): Add
`cider-who-macroexpands` (`C-c C-w m`), which finds a macro's use sites by
searching the project's source - the runtime ops can't see them, since macros
are expanded away at compile time.
-- [#3995](https://github.com/clojure-emacs/cider/pull/3995): Add
`cider-who-calls` (`C-c C-w c`) and `cider-who-is-called` (`C-c C-w d`),
SLIME-style call-graph browsers that present a function's callers/callees as an
interactive tree you can expand a level at a time.
-- [#3994](https://github.com/clojure-emacs/cider/pull/3994): Find references
by searching the project's source files, covering code that hasn't been loaded
into the REPL yet: `xref-find-references` (`M-?`) now uses this source search
by default (configurable via `cider-xref-references-mode`, which can also fold
in the runtime references), and `cider-xref-fn-refs-in-source` (`C-c C-? s`)
runs it explicitly.
-- [#3991](https://github.com/clojure-emacs/cider/pull/3991): Add
`cider-enlighten-stop` to turn off enlightenment at once - it disables
`cider-enlighten-mode`, clears the overlays, and ignores any further values
still streaming from previously-instrumented code, so you no longer have to
re-evaluate everything just to make it stop.
-- [#3990](https://github.com/clojure-emacs/cider/pull/3990): Add
`cider-trace`, opening a dedicated `*cider-trace*` buffer that streams the
calls and return values of traced functions live, instead of interleaving them
into the REPL (requires a recent enough `cider-nrepl`).
-- [#3989](https://github.com/clojure-emacs/cider/pull/3989): Add
`cider-list-traced` to show the vars and namespaces that are currently traced,
and `cider-untrace-all` to clear all tracing at once (both require a recent
enough `cider-nrepl`).
-- [#3988](https://github.com/clojure-emacs/cider/pull/3988): Add
`cider-enlighten-defun-at-point` to enlighten a single top-level form without
toggling the global `cider-enlighten-mode`, and `cider-enlighten-clear` to
remove the enlighten overlays from a buffer.
-- [#3964](https://github.com/clojure-emacs/cider/pull/3964): Add
`cider-comment-style` to control how the eval-to-comment commands format the
inserted result (`line`, `discard` or `comment`).
-- [#3965](https://github.com/clojure-emacs/cider/pull/3965): Add
`cider-send-to-comment` to copy the top-level form at point into the
namespace's rich `comment` block (`C-c C-j c`), optionally evaluating it, and
`cider-jump-to-comment` to visit the block (`C-c C-j v`).
-- [#3963](https://github.com/clojure-emacs/cider/pull/3963): Attach
`cider-scratch` buffers to a specific session (one scratchpad per session),
with a configurable eval destination (cljc-style by default).
-- [#3966](https://github.com/clojure-emacs/cider/pull/3966): Add
`cider-set-eval-destination` and `cider-cycle-eval-destination` (`C-c C-M-d`)
to override, per buffer, which REPL type (clj, cljs or multi) evaluations
dispatch to.
-- [#3969](https://github.com/clojure-emacs/cider/pull/3969): Show ClojureDocs
examples inline in the `*cider-doc*` buffer, toggled with `e`
(`cider-docview-clojuredocs-examples`) or shown automatically when
`cider-doc-show-clojuredocs-examples` is enabled.
-- [#3970](https://github.com/clojure-emacs/cider/pull/3970): Add
`cider-macrostep-expand` for inline, in-place macro expansion with
step-in/collapse (`cider-macrostep-mode`).
-- [#3976](https://github.com/clojure-emacs/cider/pull/3976): Underline the
further-expandable sub-forms while inline macro stepping and move between them
with `n`/`p` in `cider-macrostep-mode` (`cider-macrostep-highlight-expandable`).
-- [#3977](https://github.com/clojure-emacs/cider/pull/3977): Colorize the
gensyms introduced by an inline macro expansion, each distinct gensym in its
own color, so an introduced binding can be tracked
(`cider-macrostep-color-gensyms`).
-- [#3978](https://github.com/clojure-emacs/cider/pull/3978): Add
`cider-macrostep-expand-all` (`a` in `cider-macrostep-mode`) to fully expand
the form at point inline in one step, instead of stepping level by level.
-- [#3985](https://github.com/clojure-emacs/cider/pull/3985): Add
`cider-macrostep-expand-in-buffer` to run a macro-stepping session in a
dedicated `*cider-macrostep*` popup, leaving the source buffer untouched.
-- [#3973](https://github.com/clojure-emacs/cider/pull/3973): Indicate
namespace load-state: a `cider-mode` lighter (and optional fringe) marker
showing when the current buffer's namespace isn't loaded into the REPL or is
stale (`cider-ns-load-state-display`), and a per-form fringe marker that turns
from green to amber when you edit an evaluated form
(`cider-mark-stale-after-edit`).
-- [#4018](https://github.com/clojure-emacs/cider/pull/4018): Detect and
replace eval comments in `cider-pprint-form-to-comment`. Successive calls to
eval-to-comment commands now update in-place instead of stacking stale results.
+- [#4055](https://github.com/clojure-emacs/cider/pull/4055): Add
`cider-clojure-cli-powershell-options` to pass extra options to the PowerShell
executable used for jack-in on Windows
([#2879](https://github.com/clojure-emacs/cider/issues/2879)).
+- [#4004](https://github.com/clojure-emacs/cider/pull/4004): Add
`cider-browse-spec-tree`, which browses a spec and the specs it references as
an expandable tree.
+- [#3969](https://github.com/clojure-emacs/cider/pull/3969): Show ClojureDocs
examples inline in the `*cider-doc*` buffer (`e` to toggle,
`cider-doc-show-clojuredocs-examples` to always show them).
+- [#3963](https://github.com/clojure-emacs/cider/pull/3963): Attach
`cider-scratch` buffers to a specific session (one scratchpad per session),
with a configurable eval destination.
+- [#3966](https://github.com/clojure-emacs/cider/pull/3966): Add
`cider-set-eval-destination` and `cider-cycle-eval-destination` (`C-c C-M-d`)
to override, per buffer, which REPL type evaluations dispatch to.
### Bugs fixed
-- [#4107](https://github.com/clojure-emacs/cider/pull/4107): Route stdin input
(and a cancel's interrupt) to the exact connection that requested it, so reads
no longer misroute to the wrong session when several connections are active.
-- [#4106](https://github.com/clojure-emacs/cider/pull/4106): Cancelling a
stdin prompt (when evaluated code reads input) now interrupts the evaluation.
Previously it sent a type-incorrect `stdin` value that nREPL treated as EOF, so
the read ended and evaluation continued instead of being cancelled. The prompt
also names the REPL when the session has more than one connection.
+- [#4107](https://github.com/clojure-emacs/cider/pull/4107): Route stdin input
(and a cancel's interrupt) to the exact connection that requested it, so reads
no longer misroute when several connections are active.
+- [#4106](https://github.com/clojure-emacs/cider/pull/4106): Cancelling a
stdin prompt now interrupts the evaluation, instead of sending a value nREPL
treated as EOF and letting the evaluation continue.
- [#4093](https://github.com/clojure-emacs/cider/pull/4093): Fix a crash
(`wrong-type-argument stringp nil`) when a REPL result is truncated by the
print middleware.
- [#4089](https://github.com/clojure-emacs/cider/issues/4089): Fix
`cider-macroexpand-undo` failing with a read-only error in the macroexpansion
buffer.
-- [#4085](https://github.com/clojure-emacs/cider/pull/4085): Resolve
unqualified ClojureScript core vars (e.g. their indentation metadata) against
`cljs.core` in a cljs REPL, instead of always falling back to `clojure.core`.
-- [#4085](https://github.com/clojure-emacs/cider/pull/4085): Make a prefix
argument to `cider-find-keyword` invert `cider-prompt-for-symbol` (matching the
sibling find commands), instead of forcing the prompt on.
-- [#4084](https://github.com/clojure-emacs/cider/pull/4084): Fix
`nrepl-dict-merge` mutating a shared literal when its first argument is nil,
which leaked state (e.g. the REPL ns cache) between unrelated merges.
-- [#4084](https://github.com/clojure-emacs/cider/pull/4084): Don't treat a
server notification's text as a format string in `nrepl-notify` (a stray `%`
could error).
-- [#4084](https://github.com/clojure-emacs/cider/pull/4084): Reap the
sync-request callback on `abort-on-input`/timeout exits, fixing a slow
per-lookup memory leak on the eldoc/completion path.
-- [#4084](https://github.com/clojure-emacs/cider/pull/4084): Signal a clean
error from `cider-find-keyword` when there is no keyword at point, instead of a
raw type error.
-- [#4084](https://github.com/clojure-emacs/cider/pull/4084): Recreate the log
appender when it is missing server-side (after an appender kill or a REPL
restart), which a stuck once-per-session flag used to prevent.
-- [#4083](https://github.com/clojure-emacs/cider/pull/4083): Split the
classpath on the platform path separator, fixing
`cider-classpath`/`cider-open-classpath-entry` on Windows.
-- [#4083](https://github.com/clojure-emacs/cider/pull/4083): Stop
`cider-format-region`/`cider-format-defun` from corrupting multi-line string
and regex literals when the region starts at a non-zero column, and give
`cider-format-edn-last-sexp` a clean error when there is no sexp at point.
-- [#4083](https://github.com/clojure-emacs/cider/pull/4083): Make
`cider-profile-toggle` honor its prefix argument (use the symbol at point
unless prefixed), instead of always prompting.
-- [#4083](https://github.com/clojure-emacs/cider/pull/4083): Signal a clear
error when `cider-apropos` is used in a ClojureScript context (it is only
supported for Clojure), instead of returning misleading results.
-- [#4082](https://github.com/clojure-emacs/cider/pull/4082): Render a stack
frame's `ns/fn` when it carries them (e.g. ClojureScript frames) instead of
degrading to `nil/nil` for frames not tagged as Clojure
([#4043](https://github.com/clojure-emacs/cider/issues/4043)).
-- [#4081](https://github.com/clojure-emacs/cider/pull/4081): Make
`cider-stacktrace-suppressed-errors` customizable again (its `:type` described
a fixed one-element list) and stop the stacktrace renderer from leaving a stray
`fill-prefix` in the `*cider-error*` buffer.
+- [#4085](https://github.com/clojure-emacs/cider/pull/4085): Resolve
unqualified ClojureScript core vars (e.g. their indentation metadata) against
`cljs.core` in a cljs REPL, and make a prefix argument to `cider-find-keyword`
invert `cider-prompt-for-symbol` like the sibling find commands.
+- [#4084](https://github.com/clojure-emacs/cider/pull/4084): A batch of
nREPL-layer fixes: `nrepl-dict-merge` no longer mutates a shared literal when
its first argument is nil, `nrepl-notify` no longer treats a notification's
text as a format string, sync-request callbacks are reaped on
`abort-on-input`/timeout exits (fixing a slow memory leak on the
eldoc/completion path), `cider-find-keyword` errors cleanly when there is no
keyword at point, and a missing server-side log appender is re [...]
+- [#4083](https://github.com/clojure-emacs/cider/pull/4083): Split the
classpath on the platform path separator (fixing `cider-classpath` on Windows),
stop `cider-format-region`/`cider-format-defun` from corrupting multi-line
string and regex literals when the region starts at a non-zero column, make
`cider-profile-toggle` honor its prefix argument, and signal a clear error when
`cider-apropos` is used in a ClojureScript context.
+- [#4082](https://github.com/clojure-emacs/cider/pull/4082): Render a stack
frame's `ns/fn` when it carries them (e.g. ClojureScript frames) instead of
degrading to `nil/nil`
([#4043](https://github.com/clojure-emacs/cider/issues/4043)).
+- [#4081](https://github.com/clojure-emacs/cider/pull/4081): Make
`cider-stacktrace-suppressed-errors` customizable again and stop the stacktrace
renderer from leaving a stray `fill-prefix` in the `*cider-error*` buffer.
- [#4078](https://github.com/clojure-emacs/cider/issues/4078): Fix the
menu-bar showing a duplicated "CIDER" menu when `cider-mode` is active.
-- Fix the debugger's `O` (force step-out) key, which aborted the session with
an error because it sent an invalid `:force-out` command instead of a forced
`:out`.
-- Fix the debugger's menu-bar menu: it advertised the wrong key for "Inject
value" (`i` instead of `j`) and was missing entries for stepping in, showing
the stacktrace, and tracing.
+- Debugger fixes: the `O` (force step-out) key no longer aborts the session
with an error, and the menu-bar menu advertises the right key for "Inject
value" plus the missing stepping/stacktrace/trace entries.
- Fix `cider-log-kill-appender`'s confirmation message, which had the appender
and framework names swapped.
- [#4066](https://github.com/clojure-emacs/cider/pull/4066): Jump to the
actual source when clicking a stack frame for a top-level anonymous function
(the `deftest` shape), instead of landing in `clojure.core/fn`
([#3157](https://github.com/clojure-emacs/cider/issues/3157)).
-- [#4058](https://github.com/clojure-emacs/cider/pull/4058): Signal a helpful
error when `cider-javadoc` gets an unresolvable (non-absolute) Javadoc URL from
the middleware, instead of silently doing nothing
([#2969](https://github.com/clojure-emacs/cider/issues/2969)).
-- [#4054](https://github.com/clojure-emacs/cider/pull/4054): Interrupt every
REPL an evaluation is dispatched to. In a `.cljc` buffer `cider-interrupt`
previously interrupted only one of the two REPLs
([#4036](https://github.com/clojure-emacs/cider/issues/4036)).
-- [#4053](https://github.com/clojure-emacs/cider/pull/4053): Restore point to
the place a debug session was started from when you quit it with `q`, instead
of leaving it stranded at the last breakpoint
([#1595](https://github.com/clojure-emacs/cider/issues/1595)).
-- [#4049](https://github.com/clojure-emacs/cider/pull/4049): Font-lock
streamed REPL results as a whole instead of per chunk, so values that nREPL
splits across several chunks (much more common since nREPL 1.5.0's
newline-triggered flushing) are highlighted correctly rather than left plain
([nREPL #445](https://github.com/nrepl/nrepl/issues/445)).
-- [#4038](https://github.com/clojure-emacs/cider/pull/4038): SSH tunneling now
forwards a free local port to the remote nREPL port instead of reusing the
remote port number, so connecting to several remote REPLs that share a port no
longer collide on localhost and a stale tunnel is no longer reused when you
later connect to a local REPL on the same port
([#3730](https://github.com/clojure-emacs/cider/issues/3730),
[#3561](https://github.com/clojure-emacs/cider/issues/3561), [#3085](https [...]
-- [#4026](https://github.com/clojure-emacs/cider/pull/4026):
`cider-macroexpand-1` and friends now work in ClojureScript for user-defined
macros (fixed in `cider-nrepl`, delivered via the 0.61.0-alpha1 bump)
([#2099](https://github.com/clojure-emacs/cider/issues/2099)).
-- [#4016](https://github.com/clojure-emacs/cider/pull/4016): Show the REPL
prompt right away when a server (e.g. jank) sends `value` and `("done")` in the
same response, instead of only after the next keypress
([#3869](https://github.com/clojure-emacs/cider/issues/3869)).
-- [#4019](https://github.com/clojure-emacs/cider/pull/4019): Stop the dynamic
local-variable font-locking from mistaking a `def`'s value for an arglist,
which tagged literals, function names and other non-locals as locals
(`cider-locals` false positives)
([#3657](https://github.com/clojure-emacs/cider/issues/3657)).
-- [#4021](https://github.com/clojure-emacs/cider/pull/4021): Stop unbalanced
parentheses in REPL output (e.g. printed strings or shadow-cljs warnings) from
breaking sexp navigation and paredit in the REPL buffer
([#3102](https://github.com/clojure-emacs/cider/issues/3102)).
+- [#4058](https://github.com/clojure-emacs/cider/pull/4058): Signal a helpful
error when `cider-javadoc` gets an unresolvable Javadoc URL from the
middleware, instead of silently doing nothing
([#2969](https://github.com/clojure-emacs/cider/issues/2969)).
+- [#4054](https://github.com/clojure-emacs/cider/pull/4054): Interrupt every
REPL an evaluation was dispatched to - in a `.cljc` buffer `cider-interrupt`
previously interrupted only one of the two
([#4036](https://github.com/clojure-emacs/cider/issues/4036)).
+- [#4053](https://github.com/clojure-emacs/cider/pull/4053): Restore point to
the place a debug session was started from when quitting with `q`
([#1595](https://github.com/clojure-emacs/cider/issues/1595)).
+- [#4049](https://github.com/clojure-emacs/cider/pull/4049): Font-lock
streamed REPL results as a whole instead of per chunk, so values split across
chunks are highlighted correctly ([nREPL
#445](https://github.com/nrepl/nrepl/issues/445)).
+- [#4038](https://github.com/clojure-emacs/cider/pull/4038): SSH tunneling now
forwards a free local port (with readiness detected by probing it, bounded by
the new `nrepl-ssh-tunnel-timeout`), so remote REPLs sharing a port no longer
collide on localhost
([#3730](https://github.com/clojure-emacs/cider/issues/3730),
[#3561](https://github.com/clojure-emacs/cider/issues/3561),
[#3085](https://github.com/clojure-emacs/cider/issues/3085)).
+- [#4026](https://github.com/clojure-emacs/cider/pull/4026):
`cider-macroexpand-1` and friends now work in ClojureScript for user-defined
macros ([#2099](https://github.com/clojure-emacs/cider/issues/2099)).
+- [#4016](https://github.com/clojure-emacs/cider/pull/4016): Show the REPL
prompt right away when a server (e.g. jank) sends `value` and `("done")` in the
same response ([#3869](https://github.com/clojure-emacs/cider/issues/3869)).
+- [#4019](https://github.com/clojure-emacs/cider/pull/4019): Stop the
local-variable font-locking from mistaking a `def`'s value for an arglist
(`cider-locals` false positives)
([#3657](https://github.com/clojure-emacs/cider/issues/3657)).
+- [#4021](https://github.com/clojure-emacs/cider/pull/4021): Stop unbalanced
parentheses in REPL output from breaking sexp navigation and paredit in the
REPL buffer ([#3102](https://github.com/clojure-emacs/cider/issues/3102)).
- [#4020](https://github.com/clojure-emacs/cider/pull/4020): Show an error
instead of failing silently when an interactive evaluation command is used with
no REPL connected ([#3028](https://github.com/clojure-emacs/cider/issues/3028)).
-- [#4006](https://github.com/clojure-emacs/cider/pull/4006): Fix a doubled
colon when both `cider-clojure-cli-global-aliases` and
`cider-clojure-cli-aliases` are set in the documented `:foo:bar` form, which
produced a malformed `-M:global::local:cider/nrepl` jack-in invocation.
+- [#4006](https://github.com/clojure-emacs/cider/pull/4006): Fix a doubled
colon in the jack-in command when both `cider-clojure-cli-global-aliases` and
`cider-clojure-cli-aliases` are set in the documented `:foo:bar` form.
- [#3971](https://github.com/clojure-emacs/cider/pull/3971): Fix
`cider-macroexpand-again` (`g` in the macroexpansion buffer) to actually
re-expand the form instead of redisplaying the original input.
-- [#3986](https://github.com/clojure-emacs/cider/pull/3986): Signal a
`user-error` (instead of a generic `error`) when a var to trace isn't found or
isn't traceable, so the failure no longer triggers a backtrace under
`debug-on-error`.
+- [#3986](https://github.com/clojure-emacs/cider/pull/3986): Signal a
`user-error` when a var to trace isn't found or isn't traceable, so the failure
no longer triggers a backtrace under `debug-on-error`.
- [#4018](https://github.com/clojure-emacs/cider/pull/4018): Fix interleaving
of value and stderr output in
`cider-eval-pprint-with-multiline-comment-handler`.
### Changes
-- Bump the injected `cider-nrepl` to
[0.62.1](https://github.com/clojure-emacs/cider-nrepl/blob/v0.62.1/CHANGELOG.md#0621-2026-07-15),
which carries a batch of debugger and enlighten fixes (record literals survive
instrumentation, clear errors for forms too large to instrument, and several
`STATE__` crashes are gone).
-- [#4093](https://github.com/clojure-emacs/cider/pull/4093): In the REPL, `C-c
M-m` now opens the macroexpand menu (matching `cider-mode`) instead of running
`cider-macroexpand-all` directly, and `C-c C-r` no longer injects
clojure-mode's source-editing refactor map.
-- [#4092](https://github.com/clojure-emacs/cider/pull/4092): Stop the `C-x
C-e` and `C-c C-v` eval keybindings from running the source-buffer eval path in
the REPL (which left fringe indicators and the like there) for a niche use
case; evaluate at the prompt instead. `C-x C-e` is now a no-op in the REPL
rather than falling through to Emacs's Emacs Lisp `eval-last-sexp`.
Macroexpansion (`C-c C-m`/`C-c M-m`) and inspection (`C-c M-i`) stay bound.
+- [#4002](https://github.com/clojure-emacs/cider/pull/4002),
[#4050](https://github.com/clojure-emacs/cider/pull/4050): Bump the injected
`cider-nrepl` from 0.59.0 to
[0.62.1](https://github.com/clojure-emacs/cider-nrepl/blob/v0.62.1/CHANGELOG.md#0621-2026-07-15)
(and `piggieback` to 0.7.0); besides backing many of the features above, the
new middleware honors the project's cljfmt configuration when formatting and
carries a batch of debugger fixes.
+- Enable rich content in the REPL by default (`cider-repl-use-content-types`
is now `t`): image results render inline, and external content (files, URLs)
renders a `[show content]` button that fetches only on demand - the automatic
fetching that got the feature disabled back in 0.25
([#2825](https://github.com/clojure-emacs/cider/issues/2825)) is gone, and the
server side is hardened in `cider-nrepl` 0.62.
+- [#4092](https://github.com/clojure-emacs/cider/pull/4092),
[#4093](https://github.com/clojure-emacs/cider/pull/4093): Clean up the REPL's
keybindings: the source-buffer eval keys no longer run the source-buffer eval
path there (`C-x C-e` is a no-op at the REPL; evaluate at the prompt instead),
`C-c M-m` now opens the macroexpand menu (matching `cider-mode`), and `C-c C-r`
no longer injects clojure-mode's source-editing refactor map.
+- Renames and consolidations (in all cases the old names keep working as
obsolete aliases):
+ - [#4052](https://github.com/clojure-emacs/cider/pull/4052): The inline
evaluation-result options become a consistent `cider-eval-result-*` family:
`cider-use-overlays` -> `cider-eval-result-display`,
`cider-result-overlay-position` -> `cider-eval-result-position`,
`cider-result-use-clojure-font-lock`/`cider-overlays-use-font-lock` ->
`cider-eval-result-font-lock`, `cider-interactive-eval-output-destination` ->
`cider-eval-output-destination`, and `cider-use-fringe-indicators` -> `cide
[...]
+ - Consolidate the per-buffer auto-select options
(`cider-auto-select-error-buffer` and friends) into a single
`cider-auto-select-buffer`, which can be `t`, `nil` or a list of the popup
buffers to select (e.g. `'(error inspector)`).
+ - Rename the REPL history browser from `cider-repl-history` to
`cider-history` (command, mode and options), so its names no longer clash with
the REPL's unrelated input-history settings.
+ - Rename `cider-log-buffer-clear-p` to `cider-log-buffer-has-content-p` -
the old name read as the opposite of its behavior.
+ - [#4035](https://github.com/clojure-emacs/cider/pull/4035): Rename
`cider-ensure-connected` to `cider-ensure-session`.
+ - [#4033](https://github.com/clojure-emacs/cider/pull/4033): Deprecate the
legacy connection-named aliases (`cider-current-connection`,
`cider-connections`, `cider-map-connections`,
`cider-connection-type-for-buffer`) in favor of their `cider-repl` counterparts.
+ - [#4029](https://github.com/clojure-emacs/cider/pull/4029): Deprecate the
positional request APIs in favor of their keyword-argument counterparts
(`cider-nrepl-send-sync-request` -> `cider-nrepl-sync-request`,
`cider-nrepl-request:eval` -> `cider-nrepl-send-eval-request`, and the `nrepl-`
equivalents).
+ - [#4028](https://github.com/clojure-emacs/cider/pull/4028): Deprecate
`cider-ensure-op-supported`; op support is now enforced automatically by the
nREPL senders.
- [#4081](https://github.com/clojure-emacs/cider/pull/4081): Remove the
long-obsolete (no-op since 1.18) `cider-stacktrace-analyze-at-point` and
`cider-stacktrace-analyze-in-region` commands.
-- Bump the injected `cider-nrepl` to 0.62.0 (and `piggieback` to 0.7.0), which
carries the hardened content-type/slurp middleware backing the rich-content
revival below (and no longer double-sends `value` alongside content-typed
responses).
-- Enable rich content in the REPL by default (`cider-repl-use-content-types`
is now t): image results render inline, and results naming external content
(files, URLs) render a `[show content]` button that fetches and renders it on
demand. The automatic fetching that got the feature disabled back in 0.25
([#2825](https://github.com/clojure-emacs/cider/issues/2825)) is gone - nothing
is transferred until the button is pressed - and the server side is hardened in
`cider-nrepl` 0.62 (URL-sch [...]
-- Rename `cider-log-buffer-clear-p` to `cider-log-buffer-has-content-p` - the
old name read as the opposite of its behavior; it remains as an obsolete alias.
+- Quieter REPL startup
([#3983](https://github.com/clojure-emacs/cider/pull/3983),
[#3984](https://github.com/clojure-emacs/cider/pull/3984)): the long welcome
banner and the echoed jack-in command/ClojureScript init form are gone,
replaced by a one-line hint; the details are available on demand via
`cider-repl-help` (`C-c C-h`, or the `,refcard` REPL shortcut) and
`cider-repl-describe-startup` (`,startup`).
+- [#3982](https://github.com/clojure-emacs/cider/pull/3982): Warn (once per
session) when a deprecated CIDER keybinding is used, starting with the
REPL-only jack-in/connect keys superseded back in 0.18; see
`cider-warn-on-deprecated-keybindings` and `M-x
cider-list-deprecated-keybindings`.
- Bump the default `cider-repl-history-size` from 500 to 5000.
-- Rename the REPL history browser from `cider-repl-history` to `cider-history`
(command, mode and options), so its names no longer clash with the REPL's
unrelated input-history settings (`cider-repl-history-file`,
`cider-repl-history-size`); the old names keep working as obsolete aliases.
-- Color the nREPL messages buffer with customizable faces
(`nrepl-message-faces`, a palette of eight distinct hues with light- and
dark-background variants) instead of a hardcoded color list;
`nrepl-message-colors` is now obsolete, but still takes precedence when
customized.
-- Consolidate the per-buffer auto-select options into a single
`cider-auto-select-buffer`, which can be `t`, `nil` or a list of the popup
buffers to select (e.g. `'(error inspector)`); the old options
(`cider-auto-select-error-buffer`, `cider-auto-select-test-report-buffer`,
`cider-doc-auto-select-buffer`, `cider-inspector-auto-select-buffer`,
`cider-cheatsheet-auto-select-buffer` and
`cider-log-auto-select-frameworks-buffer`) are now obsolete, but still take
precedence when customized.
+- Color the nREPL messages buffer with customizable faces
(`nrepl-message-faces`, with light- and dark-background variants) instead of a
hardcoded color list; `nrepl-message-colors` is now obsolete, but still takes
precedence when customized.
- [#4059](https://github.com/clojure-emacs/cider/pull/4059): Use the public
`sesman-sessions` (via `cider-sessions`) instead of a private sesman function
in `cider-debug-sesman-friendly-session-p`
([#4037](https://github.com/clojure-emacs/cider/issues/4037)).
-- [#4056](https://github.com/clojure-emacs/cider/pull/4056): Show the
interactive-evaluation spinner in the buffer you evaluated from (the source
buffer, or the REPL when evaluating at its prompt) instead of always in the
REPL buffer, which is often not even visible
([#3516](https://github.com/clojure-emacs/cider/issues/3516)).
-- [#4052](https://github.com/clojure-emacs/cider/pull/4052): Rename the inline
evaluation-result options into a consistent `cider-eval-result-*` family:
`cider-use-overlays` -> `cider-eval-result-display`,
`cider-result-overlay-position` -> `cider-eval-result-position`,
`cider-result-use-clojure-font-lock` and `cider-overlays-use-font-lock` ->
`cider-eval-result-font-lock`, `cider-interactive-eval-output-destination` ->
`cider-eval-output-destination`, and `cider-use-fringe-indicators` - [...]
-- [#4050](https://github.com/clojure-emacs/cider/pull/4050): Bump the injected
`cider-nrepl` to 0.61.0 (and `piggieback` to 0.6.2). Code formatting now honors
the project's cljfmt configuration.
-- [#4047](https://github.com/clojure-emacs/cider/pull/4047): Render the doc
buffer's "See also" section as a bulleted list (one entry per line) instead of
an inline space-separated run, matching the ClojureDocs buffer.
-- [#4046](https://github.com/clojure-emacs/cider/pull/4046): Make eldoc
asynchronous - the arglist/var lookup no longer blocks Emacs on an nREPL
round-trip as you move the cursor (it uses eldoc's callback protocol and
delivers the result when it arrives). Declines the eldoc slot when CIDER has
nothing, so other sources (e.g. clojure-lsp) compose cleanly.
-- [#4035](https://github.com/clojure-emacs/cider/pull/4035): Rename
`cider-ensure-connected` to `cider-ensure-session` (it ensures a linked CIDER
session); the old name remains as an obsolete alias.
-- [#4033](https://github.com/clojure-emacs/cider/pull/4033): Deprecate the
legacy connection-named aliases `cider-current-connection`,
`cider-connections`, `cider-map-connections` and
`cider-connection-type-for-buffer` in favor of their `cider-repl` counterparts.
-- [#4029](https://github.com/clojure-emacs/cider/pull/4029): Finish migrating
to the keyword-argument request APIs and deprecate the positional shims:
`cider-nrepl-send-sync-request` -> `cider-nrepl-sync-request`,
`cider-nrepl-request:eval` -> `cider-nrepl-send-eval-request`,
`nrepl-send-sync-request` -> `nrepl-sync-request`, `nrepl-request:eval` ->
`nrepl-send-eval-request`.
-- [#4028](https://github.com/clojure-emacs/cider/pull/4028): Deprecate
`cider-ensure-op-supported`; op support is now enforced automatically by the
nREPL senders, so commands no longer need an explicit check.
-- [#4026](https://github.com/clojure-emacs/cider/pull/4026): Bump the injected
`cider-nrepl` to 0.61.0-alpha1, which provides ClojureScript test support, the
`clojure-only` op signal and the ClojureScript macroexpansion fix.
-- [#4026](https://github.com/clojure-emacs/cider/pull/4026): Show a clear
message when a Clojure-only operation (apropos, xref, trace, profile, refresh,
reload, undef, spec) is invoked under a ClojureScript REPL, instead of failing
confusingly or returning JVM-only results (requires a recent enough
`cider-nrepl`) ([#2198](https://github.com/clojure-emacs/cider/issues/2198)).
-- [#4022](https://github.com/clojure-emacs/cider/pull/4022):
`cider-inspect-last-sexp` now inspects the tagged class when point is on a type
tag (e.g. `^String`), instead of the form the tag applies to
([#3679](https://github.com/clojure-emacs/cider/issues/3679)).
+- [#4056](https://github.com/clojure-emacs/cider/pull/4056): Show the
interactive-evaluation spinner in the buffer you evaluated from, instead of
always in the REPL buffer
([#3516](https://github.com/clojure-emacs/cider/issues/3516)).
+- [#4047](https://github.com/clojure-emacs/cider/pull/4047): Render the doc
buffer's "See also" section as a bulleted list, matching the ClojureDocs buffer.
+- [#4046](https://github.com/clojure-emacs/cider/pull/4046): Make eldoc
asynchronous - the arglist/var lookup no longer blocks Emacs as you move the
cursor - and decline the eldoc slot when CIDER has nothing, so other sources
(e.g. clojure-lsp) compose cleanly.
+- [#4026](https://github.com/clojure-emacs/cider/pull/4026): Show a clear
message when a Clojure-only operation (apropos, xref, trace, profile, refresh,
reload, undef, spec) is invoked under a ClojureScript REPL, instead of failing
confusingly ([#2198](https://github.com/clojure-emacs/cider/issues/2198)).
+- [#4022](https://github.com/clojure-emacs/cider/pull/4022):
`cider-inspect-last-sexp` now inspects the tagged class when point is on a type
tag (e.g. `^String`)
([#3679](https://github.com/clojure-emacs/cider/issues/3679)).
- [#4024](https://github.com/clojure-emacs/cider/pull/4024): The
`*cider-ns-refresh-log*` buffer now supports `r`/`g`/`C-c M-n r` to re-run the
refresh from within it
([#2798](https://github.com/clojure-emacs/cider/issues/2798)).
-- [#4005](https://github.com/clojure-emacs/cider/pull/4005): Render the
namespace browser (`cider-browse-ns`) on the `cider-tree-view` widget: groups
(by type or visibility) are now foldable with `TAB`, and `n`/`p` move between
entries.
-- [#4003](https://github.com/clojure-emacs/cider/pull/4003): Turn `C-c M-m`
into a prefix map (`cider-macroexpand-map`) grouping all the macro-expanding
commands - `macroexpand-1`/`macroexpand-all` into a buffer (`1`/`a`) and the
inline `cider-macrostep` commands (`e`/`E`/`b`). `cider-macroexpand-all` thus
moves from `C-c M-m` to `C-c M-m a`; `C-c C-m` still runs `macroexpand-1`
directly.
-- [#4002](https://github.com/clojure-emacs/cider/pull/4002): Bump the injected
`cider-nrepl` to 0.60.0, which provides the `cider/who-implements`,
`cider/type-protocols` and `cider/protocols-with-method` ops backing the
protocol-exploration commands.
-- [#4001](https://github.com/clojure-emacs/cider/pull/4001):
`cider-type-protocols` and `cider-protocols-with-method` now use cider-nrepl's
`cider/type-protocols` and `cider/protocols-with-method` ops when available,
falling back to the previous client-side query otherwise.
-- [#4000](https://github.com/clojure-emacs/cider/pull/4000):
`cider-who-implements` now makes a multimethod's methods jump to their
`defmethod` definitions, located by searching the project's source (the method
functions carry no source metadata at runtime, so there's nothing for the
runtime to point at).
-- [#3998](https://github.com/clojure-emacs/cider/pull/3998):
`cider-who-implements` now uses cider-nrepl's `cider/who-implements` op when
available, so it also lists inline `defrecord`/`deftype` implementers and jumps
to each implementation's source; it falls back to the previous client-side
approximation otherwise.
-- [#3993](https://github.com/clojure-emacs/cider/pull/3993): Round out the
`*cider-trace*` buffer: navigate between calls with `n`/`p`, jump to a
function's definition (`.` or click its name), fold or unfold every call at
once (`F`/`U`), click a call line to fold it, and a `CIDER Trace` menu.
-- [#3992](https://github.com/clojure-emacs/cider/pull/3992): Make
`*cider-trace*` calls foldable - `TAB` on a call line collapses or expands the
nested calls between it and its return.
-- [#3984](https://github.com/clojure-emacs/cider/pull/3984): Stop dumping the
full jack-in command and the ClojureScript REPL init form into the REPL
transcript on startup (a ClojureScript REPL now just notes its type). The
launch details are available on demand via `cider-repl-describe-startup` (the
`,startup` REPL shortcut).
-- [#3983](https://github.com/clojure-emacs/cider/pull/3983): Slim down the
REPL welcome banner - the long help banner is gone, replaced by a one-line
hint, and the getting-started content now lives in a summonable
`cider-repl-help` reference card (`C-c C-h`, or the `,refcard` REPL shortcut).
`cider-repl-display-help-banner` now toggles the hint.
-- [#3982](https://github.com/clojure-emacs/cider/pull/3982): Warn (once per
session) when a deprecated CIDER keybinding is used, starting with the
REPL-only jack-in/connect keys `C-c M-j`/`M-J`/`M-c`/`M-C` (superseded by the
`C-c C-x` start map back in 0.18.0). They still work; toggle with
`cider-warn-on-deprecated-keybindings`, list pending removals with `M-x
cider-list-deprecated-keybindings`.
-- [#3980](https://github.com/clojure-emacs/cider/pull/3980): Keep the
load-state indicators in sync across `cider-ns-reload`/`cider-ns-reload-all`
and `cider-ns-refresh`: the reloaded namespaces' (unsaved-edit-free) buffers
get their fringe and mode-line markers refreshed, instead of staying stale
until the next `cider-load-buffer`. These commands now run
`cider-file-loaded-hook` for the reloaded buffers, so `cider-auto-test-mode`
re-runs their tests too (matching what `cider-load-buffer [...]
-- [#3967](https://github.com/clojure-emacs/cider/pull/3967): Refresh the
embedded Clojure cheatsheet with functions added since Clojure 1.11
(`partitionv`, `partitionv-all`, `splitv-at`, `clojure.repl.deps`,
`clojure.java.process`, the `clojure.core` Java-stream helpers, and more
`clojure.math` members).
-- [#3967](https://github.com/clojure-emacs/cider/pull/3967): Give the
cheatsheet buffer a dedicated `cider-cheatsheet-mode` with fontified section
headers and `TAB`/`S-TAB` navigation between entries.
-- [#3971](https://github.com/clojure-emacs/cider/pull/3971): Add `n` and `t`
keys in the macroexpansion buffer to cycle namespace display
(`cider-macroexpansion-display-namespaces`) and toggle metadata
(`cider-macroexpansion-print-metadata`), re-expanding in place.
-- [#3971](https://github.com/clojure-emacs/cider/pull/3971): Show a header
line in the macroexpansion buffer with the active expander, display options and
key hints.
-- [#3972](https://github.com/clojure-emacs/cider/pull/3972): Briefly highlight
(pulse) the result after macroexpanding, both in the macroexpansion buffer and
with inline `cider-macrostep` (toggle via
`cider-macroexpansion-highlight-expansion`).
-- [#3972](https://github.com/clojure-emacs/cider/pull/3972): When
macroexpanding an unresolved symbol (e.g. a macro whose namespace hasn't been
evaluated yet), a special form, or a non-macro, the macroexpansion commands now
report a helpful message instead of silently doing nothing.
-- [#3979](https://github.com/clojure-emacs/cider/pull/3979): Extend those
actionable resolution hints to `cider-find-var`, `cider-doc` and the
ClojureDocs commands, and tell an unloaded namespace (evaluate the buffer
first) apart from a genuinely unresolved symbol (a typo or a missing require).
-- [#3979](https://github.com/clojure-emacs/cider/pull/3979): Tell "no
references/dependencies found" apart from an unresolved symbol in
`cider-xref-fn-refs` and `cider-xref-fn-deps`, and warn instead of showing an
empty buffer when `cider-browse-ns` is pointed at a namespace that isn't loaded.
-- [#3968](https://github.com/clojure-emacs/cider/pull/3968): Add a menu and
per-var key bindings to the cheatsheet buffer (`d` for docs, `c` for
ClojureDocs, `w` for ClojureDocs in the browser).
+- [#4005](https://github.com/clojure-emacs/cider/pull/4005): Render the
namespace browser (`cider-browse-ns`) on the `cider-tree-view` widget: groups
are foldable with `TAB`, and `n`/`p` move between entries.
+- [#4003](https://github.com/clojure-emacs/cider/pull/4003): Turn `C-c M-m`
into a prefix map (`cider-macroexpand-map`) grouping all the macro-expanding
commands; `cider-macroexpand-all` thus moves from `C-c M-m` to `C-c M-m a`,
while `C-c C-m` still runs `macroexpand-1` directly.
+- Macroexpansion buffer polish
([#3971](https://github.com/clojure-emacs/cider/pull/3971),
[#3972](https://github.com/clojure-emacs/cider/pull/3972)): `n`/`t` cycle
namespace display and toggle metadata in place, a header line shows the active
expander and options, expansions briefly pulse, and expanding a special form,
non-macro or unresolved symbol reports a helpful message instead of silently
doing nothing.
+- [#3979](https://github.com/clojure-emacs/cider/pull/3979): Give
`cider-find-var`, `cider-doc`, the ClojureDocs commands and the xref/browse-ns
commands actionable resolution hints, telling an unloaded namespace (evaluate
the buffer first) apart from a genuinely unresolved symbol.
+- Cheatsheet refresh
([#3967](https://github.com/clojure-emacs/cider/pull/3967),
[#3968](https://github.com/clojure-emacs/cider/pull/3968)): add the functions
introduced since Clojure 1.11, a dedicated `cider-cheatsheet-mode` with
fontified section headers and `TAB`/`S-TAB` navigation, and a menu plus per-var
keys for docs and ClojureDocs.
## 1.22.2 (2026-06-17)