@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
1👍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!
1👍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?
2😂