clojure-ts-mode icon indicating copy to clipboard operation
clojure-ts-mode copied to clipboard

Add suport for clojure-align-forms-automatically

Open jasonjckn opened this issue 2 years ago • 7 comments
trafficstars

(setq clojure-align-forms-automatically t) in clojure-mode.el

'indents'

{:a 1
 :bbbb  2} 

to

{:a    1
 :bbbb 2}

jasonjckn avatar Aug 13 '23 02:08 jasonjckn

This will depend on semantic indentation being done (at least the first pass). Once that is in place I plan to look into this.

dannyfreeman avatar Aug 17 '23 02:08 dannyfreeman

Dev Note: check out builtin align.el and see if that can be used to implement this.

dannyfreeman avatar Oct 28 '23 17:10 dannyfreeman

Related: Since https://github.com/clojure-emacs/clojure-mode/pull/673 clojure-align works from clojure-ts-mode buffers, which is implemented based on the builtin align.el

kommen avatar Feb 11 '24 21:02 kommen

@kommen I've been using clojure-ts-mode with clojure-align-forms-automatically like this

      (setq-local indent-line-function #'clojure-indent-line)
      (setq-local indent-region-function #'clojure-indent-region)
      (setq-local aggressive-indent-region-function #'clojure-indent-region)
      (setq-local lisp-indent-function #'clojure-indent-function)

never hit that bug you fixed, are you just keybinding clojure-align, or how do you use this with clojure-ts-mode

jasonjckn avatar Feb 16 '24 07:02 jasonjckn

@jasonjckn I'm not using clojure-align-forms-automatically and I don't have any of the setq-local you use. I was calling it wit hM-x clojure-align, as I only use it occasionally.

Also, because I ran into performance problems with aggressive-indent-mode and clojure-mode's indent functions, I do want to use the treesit-indent-* functions come as default for clojure-ts-mode , as they don't have these performance problems.

kommen avatar Feb 16 '24 08:02 kommen

@jasonjckn I'm not using clojure-align-forms-automatically and I don't have any of the setq-local you use. I was calling it wit hM-x clojure-align, as I only use it occasionally.

Also, because I ran into performance problems with aggressive-indent-mode and clojure-mode's indent functions, I do want to use the treesit-indent-* functions come as default for clojure-ts-mode , as they don't have these performance problems.

i'm also a big aggressive indent user, one cool way to get aligned forms without ever relying on clojure-mode in-process, is have https://github.com/radian-software/apheleia invoke a separate process every time you save the buffer, and run clojure-mode across your whole buffer, it works great. https://gist.github.com/jasonjckn/750e01086b24bcaacef3946c698943c2

jasonjckn avatar Feb 18 '24 08:02 jasonjckn

I liked the concept of aggressive-indent-mode, but for me the simple electric-indent-mode (enabled by default in recent Emacsen) and indent-buffer yield almost the same result with much less overhead on the recalculating indentation.

bbatsov avatar Feb 18 '24 09:02 bbatsov

@rrudakov Perhaps you can look into this?

bbatsov avatar Apr 15 '25 17:04 bbatsov

@rrudakov Perhaps you can look into this?

I think the first step would be to port clojure-align function to clojure-ts-mode, which probably can be just copied. It uses built-in align commands, which will work the same way for TreeSitter based mode.

I'll take a look how clojure-align-forms-automatically works in clojure-mode.

rrudakov avatar Apr 15 '25 20:04 rrudakov

I think the first step would be to port clojure-align function to clojure-ts-mode, which probably can be just copied. It uses built-in align commands, which will work the same way for TreeSitter based mode.

Yeah, probably that will be simpler than expected at this point.

bbatsov avatar Apr 16 '25 05:04 bbatsov