@lee Is there a way to do this:
(defn- rightmost?
[zloc]
(nil? (ws/skip z/right* ws/whitespace? (z/right* zloc))))
without relying on rewrite-clj.zip.whitespace
?(this is from cljstyle)
Yeah, I think so. Both skip
and whitespace?
from rewrite-clj.zip.whitespace
are exposed to rewrite-clj.zip
. So the above could be rewritten as:
(defn- rightmost?
[zloc]
(nil? (z/skip z/right* z/whitespace? (z/right* zloc))))
About the vertical align form @lee š§µ
I already saw multiple preferences regarding that, people/projects/orgs that prefer to vertical align forms on everything like let/maps etcs and pople that dislike it on the other side.
I think we should support for all those cases for a better UX.
My preference is don't use the vertical align at all, but I agree that it works good in some places like the bb.edn
tasks like @borkdude pointed in the other thread
Yeah, vertical alignment is certainly subjective.
I some cases, I find it helps my old eyeballs.
I see some chatter over in cljfmt issues about performance problems. Would you prefer a look-see into that first?
Note to lurkers: we are chatting about adding vertical alignment support to cljfmt, not rewrite-clj.
For alignment, Iāll go see what control cljstyle offersā¦ maybe we can steal some ideas from them.
Yeah, I opened this issue about performance: https://github.com/weavejester/cljfmt/issues/226 this is something that really makes users disable format on clojure-lsp because of that performance issue š
For alignmentā¦ might have missed it, but donāt see specific rules in cljstyleā¦ not sure how it decides to vertically alignā¦
For cljfmt perfā¦ yeah Iām kind of curious. Your use case is clojure-lsp which is Clojure only, right? (not ClojureScript?).
yes, there is no specification on cljstyle, I think the "common" idea is to align vertically with the longest word
Yes, clojure only, but via native image on GraalVM š
but I noticed those performance issues on both, so I don't think graalvm is the issue
Rightā¦ maybe Iāll start by seeing if I can reproduce some slowness on the JVM. And then maybe Iāll play with com.clojure-goes-fast/clj-async-profiler to see what might be the culprits.
nice, I usually notice the performance issue with medium/big forms like I mentioned on the issue. LMK if need any help/testing
Yeah, I figured. Thanks :)
Rule of borkdude: if you donāt answer in three minutes, you can assume heāll have figured it out. :simple_smile:
Found this on cljstyle: https://github.com/greglook/cljstyle/issues/47
And also this š https://github.com/weavejester/cljfmt/pull/77
thanks for links!
Iāll start a new thread for cljfmt perf so we donāt confuse ourselves too much!
Cljfmt performance @ericdallo š§µ
Iāve made a first crack at reproducing the issue https://github.com/weavejester/cljfmt/issues/226#issuecomment-830688654
Thanks! I replied it and I'm starting to think that the performance issue is not 100% deterministic, I already faced it multiple times but never found the correct repro
Related to alignment might be https://github.com/weavejester/cljfmt/issues/49 which suggests that cljfmt support an identation spec. This spec could also support vertical alignment, I suppose.
Criterium is careful to warm up the JVM before benchmarking, whereas with GraalVM native-imageā¦ wellā¦
I suppose I could repeat the tests under a GraalVM native-image and see what that tells us. Iād rip out criterium for that, as I expect it does not make sense for GraalVM.
I don't think it worths, I definitely saw that performance issue without using a native binary since most of the time I'm using a jar during clojure-lsp development š
Ah good to know.
Do the JVM times seem reasonable though? Forgetting hardware differences for a moment, if reformat took ~150ms for your provided scenario, would that be acceptable?
Yes, totally, the issue when it happens, takes a lot of time, I already saw taking 25s on the clj-jondo project š
Woah, it would be cool if we had a reproducible case of that!
Soā¦ a culprit in sporadic slowness can be garbage collection pausesā¦. have you looked into that at all?
Or have you noticed any patterns at all?
No, I didn't, sorry, I'll make some tests with clj-jondo project to check If I can find some kind of repro :)
Cool, if a repro would be awesome, then we can dig in!
What is clj-jondo?