You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
When editing an EDN buffer (file ending .edn), clojure mode should treat all paren forms as lists rather than functions, since EDN is a data format.
Thus if you choose to format a list with, say, key-value style pairs, default indentation should Just Work, like for vectors:
(:key1 :value1
:key2 :value2
:key3 :value3)
Actual behavior
EDN buffers are treated like Clojure code. Though this is mostly correct, it indents list contents like function calls rather than lists when each line contains more than 1 item:
(:key1 :value1
:key2 :value2
:key3 :value3)
I don't see any configuration vars to change this behavior. There are options for functional indent style, but no buffer-local way to redefine what is classified as a function (that I can see). All the function indent styles will keep the keys from lining up as they would in a vector, map, etc.
Steps to reproduce the problem
Find new file, /tmp/foo.edn. Type one of the above forms.
Workaround
I work around this by redefining a function in my init.el. Only the string-match clause in the or is new:
(require 'clojure-mode)
(defun clojure--not-function-form-p ()
"Non-nil if form at point doesn't represent a function call."
(or (string-match "\\.edn$" (or (buffer-file-name) (buffer-name)))
(member (char-after) '(?\[ ?\{))
(save-excursion ;; Catch #?@ (:cljs ...)
(skip-chars-backward "\r\n[:blank:]")
(when (eq (char-before) ?@)
(forward-char -1))
(and (eq (char-before) ?\?)
(eq (char-before (1- (point))) ?\#)))
;; Car of form is not a symbol.
(not (looking-at ".\\(?:\\sw\\|\\s_\\)"))))
Environment & Version information
clojure-mode version
clojure-mode (version 5.13.0)
Emacs version
GNU Emacs 27.2 (build 1, x86_64-redhat-linux-gnu, GTK+ Version 3.24.30, cairo version 1.17.4)
of 2021-08-07
The text was updated successfully, but these errors were encountered:
Yeah, that's a good point. Right now clojure-mode doesn't make any distinction between EDN and Clojure code. Perhaps we can introduce a derived mode edn-mode which indents differently.
Expected behavior
When editing an EDN buffer (file ending .edn), clojure mode should treat all paren forms as lists rather than functions, since EDN is a data format.
Thus if you choose to format a list with, say, key-value style pairs, default indentation should Just Work, like for vectors:
Actual behavior
EDN buffers are treated like Clojure code. Though this is mostly correct, it indents list contents like function calls rather than lists when each line contains more than 1 item:
I don't see any configuration vars to change this behavior. There are options for functional indent style, but no buffer-local way to redefine what is classified as a function (that I can see). All the function indent styles will keep the keys from lining up as they would in a vector, map, etc.
Steps to reproduce the problem
Find new file, /tmp/foo.edn. Type one of the above forms.
Workaround
I work around this by redefining a function in my init.el. Only the
string-match
clause in theor
is new:Environment & Version information
clojure-mode version
Emacs version
GNU Emacs 27.2 (build 1, x86_64-redhat-linux-gnu, GTK+ Version 3.24.30, cairo version 1.17.4)
of 2021-08-07
The text was updated successfully, but these errors were encountered: