# Changelog

## master (unreleased)

## 1.22.2 (2026-06-17)

### Bugs fixed

- [#3958](https://github.com/clojure-emacs/cider/pull/3958): Fix `cider-stacktrace` crashing on ClojureScript errors whose cause has no exception class.
- [#3959](https://github.com/clojure-emacs/cider/pull/3959): Emit stdout (e.g. the `time` macro's "Elapsed time" line) when pretty-printing an eval result to a comment.
- [#3960](https://github.com/clojure-emacs/cider/pull/3960): Browse single-segment namespaces (e.g. `user`) from `cider-browse-ns-all` instead of opening their docs.
- [#3961](https://github.com/clojure-emacs/cider/pull/3961): Recognize `?` and `!` in symbols for `cider-find-dwim` (e.g. `teardown!`).

### Changes

- [#3919](https://github.com/clojure-emacs/cider/issues/3919): Rename the `cider-jack-in-tools` registry key `:universal-prefix-arg` to `:dispatch-prefix-arg`, to avoid clashing with the Emacs universal-argument (`C-u`) terminology.

## 1.22.1 (2026-06-16)

No user-visible changes. This release was done solely to fix a problem with the docs site.

## 1.22.0 (2026-06-16)

### New features

- [#3645](https://github.com/clojure-emacs/cider/issues/3645): Show a spinner in the mode line while tests are running.
- [#3865](https://github.com/clojure-emacs/cider/pull/3865): Add default session feature to bypass sesman's project-based dispatch (`cider-set-default-session`, `cider-clear-default-session`).
- [#3930](https://github.com/clojure-emacs/cider/pull/3930): Inspector: add help message with keybindings.
- [#3884](https://github.com/clojure-emacs/cider/pull/3884): Introduce `cider-jack-in-tools` and `cider-register-jack-in-tool` so third-party packages can register new project tools for `cider-jack-in` and `cider-jack-in-universal`.
- [#3888](https://github.com/clojure-emacs/cider/pull/3888): Cache the result of `cider--running-nrepl-paths` (used by `cider-locate-running-nrepl-ports`) for `cider-running-nrepl-paths-cache-ttl` seconds (default 5). Repeated `cider-connect` completions no longer re-spawn a fresh round of `ps`/`lsof` subprocesses each time. `cider-clear-running-nrepl-paths-cache` discards the cache on demand.
- [#3890](https://github.com/clojure-emacs/cider/pull/3890): New `nrepl-make-eval-handler` with a keyword-arg API:
  - Keyword slots: `:on-value`, `:on-stdout`, `:on-stderr`, `:on-done`, `:on-eval-error`, `:on-content-type`, `:on-truncated`.
  - Sub-handlers no longer take a buffer argument; they close over whatever they need.
  - `nrepl-make-response-handler`, the legacy 7-positional-arg form, is preserved as an obsolete shim that adapts the old `(buffer x)` lambdas to the new `(x)` lambdas, so existing extensions keep working.
- [#3929](https://github.com/clojure-emacs/cider/pull/3929): Keyword-argument forms for several low-level request APIs, so callers no longer pad arguments with `nil` to reach a later one.  In every case the legacy positional function is kept as a thin shim that delegates to the new one, so existing callers (including third-party packages) keep working unchanged:
  - Eval requests: `nrepl-send-eval-request` (shim: `nrepl-request:eval`) and `cider-nrepl-send-eval-request` (shim: `cider-nrepl-request:eval`), with `:ns`, `:line`, `:column`, `:additional-params`, plus `:tooling` at the nREPL level and `:connection` at the CIDER level.
  - Sync requests: `nrepl-sync-request` (shim: `nrepl-send-sync-request`) and `cider-nrepl-sync-request` (shim: `cider-nrepl-send-sync-request`), with `:abort-on-input`, `:tooling`/`:connection`, and `:callback`.
  - Op helpers: `cider-info-request` (shim: `cider-sync-request:info`), `cider-eldoc-request` (shim: `cider-sync-request:eldoc`), `cider-apropos-request` (shim: `cider-sync-request:apropos`), and `cider-load-file-request` (shim: `cider-request:load-file`).
- [#3921](https://github.com/clojure-emacs/cider/pull/3921): New `cider-repl-history-doctor` command: walks `cider-repl-input-history` looking for entries whose parens don't balance under Clojure syntax, shows each in a side buffer, and asks whether to delete it.  When done, rewrites `cider-repl-history-file` if one is configured.  Useful for cleaning up history after a typo got committed that breaks `cider-repl-history` rendering (see [#3915](https://github.com/clojure-emacs/cider/issues/3915)).
...
...
