# Changelog

## master (unreleased)

## 5.21.0 (2026-02-18)

### New features

* [#650](https://github.com/clojure-emacs/clojure-mode/issues/650): Add `edn-mode`, a lightweight mode derived from `clojure-mode` with data-appropriate indentation for `.edn` files.
* [#439](https://github.com/clojure-emacs/clojure-mode/issues/439): Add `interpreter-mode-alist` entries for `clojure`, `clj`, `planck`, `joker`, and `jank`, so that scripts with shebang lines are recognized automatically.

### Bugs fixed

* [#658](https://github.com/clojure-emacs/clojure-mode/issues/658): Fix `clojure-mode-version` returning `nil`.
* [#686](https://github.com/clojure-emacs/clojure-mode/issues/686): Fix `clojure-find-def` failing when comments appear between the `def` form and the symbol name.
* [#637](https://github.com/clojure-emacs/clojure-mode/issues/637): Fix `clojure-find-def` failing on symbols containing special characters (e.g. `defn+`).

### Changes

* [#482](https://github.com/clojure-emacs/clojure-mode/issues/482): Bind `clojure-align` to `C-c C-a` (following Emacs keybinding conventions). The old `C-c SPC` binding is deprecated and will be removed in a future release.
* Bump the minimum required Emacs version to 27.1.

## 5.20.0 (2025-05-27)

### New features

* Add `clojuredart-mode`, `joker-mode` and `jank-mode`, derived from `clojure-mode`.

### Bugs fixed

* [cider#3758](https://github.com/clojure-emacs/cider/issues/3758): Improve regexp for `clojure-find-def` to recognize more complex metadata on vars.
* [#684](https://github.com/clojure-emacs/clojure-mode/issues/684): Restore `outline-regexp` pattern to permit outline handling of top-level forms.
* Improve regexp for `clojure-find-def` to recognize `defn-` and other declarations on the form `def...-`.

## 5.19.0 (2024-05-26)

### Bugs fixed

* Fix `clojure-align` when called from `clojure-ts-mode` major mode buffers.
* [#671](https://github.com/clojure-emacs/clojure-mode/issues/671): Syntax highlighting for digits after the first in `%` args. (e.g. `%10`)
* [#680](https://github.com/clojure-emacs/clojure-mode/issues/680): Change syntax class of ASCII control characters to punctuation, fixing situations where carriage returns were being interpreted as symbols.

### Changes

* [#675](https://github.com/clojure-emacs/clojure-mode/issues/675): Add `.lpy` to the list of known Clojure file extensions.

## 5.18.1 (2023-11-24)

### Bugs fixed

* [#653](https://github.com/clojure-emacs/clojure-mode/issues/653): Don't highlight vars with colons as keywords.

## 5.18.0 (2023-10-18)

### Changes

* [cider#2903](https://github.com/clojure-emacs/cider/issues/2903): Avoid `No comment syntax is defined` prompts.

## 5.17.1 (2023-09-12)

### Changes

* Declare indentation for the `async` ClojureScript macro.

## 5.17.0 (2023-09-11)

### Changes

* Improve support for multiple forms in the same line by replacing `beginning-of-defun` fn.

### Bugs fixed

* [#656](https://github.com/clojure-emacs/clojure-mode/issues/656): Fix `clojure-find-ns` when ns form is preceded by other forms.
* [#593](https://github.com/clojure-emacs/clojure-mode/issues/593): Fix `clojure-find-ns` when ns form is preceded by whitespace or inside comment form.

## 5.16.2 (2023-08-23)

### Changes

* `clojure-find-ns`: add an option to never raise errors, returning `nil` instead on unparseable ns forms.

## 5.16.1 (2023-06-26)

### Changes

* Font-lock Lein's `defproject` as a keyword.

### Bugs fixed

* [#645](https://github.com/clojure-emacs/clojure-mode/issues/645): Fix infinite loop when sorting a ns with comments in the end.
* [#586](https://github.com/clojure-emacs/clojure-mode/issues/586): Fix infinite loop when opening file containing `comment` with `clojure-toplevel-inside-comment-form` set to `t`.

## 5.16.0 (2022-12-14)

### Changes

* [#641](https://github.com/clojure-emacs/clojure-mode/issues/641): Recognize nbb projects (identified by the presence of `nbb.edn`).
* [#629](https://github.com/clojure-emacs/clojure-mode/pull/629): Set `add-log-current-defun-function` to new function `clojure-current-defun-name` (this is used by `which-function-mode` and `easy-kill`).
...
...
