This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2021-05-01
Channels
- # announcements (1)
- # babashka (73)
- # bangalore-clj (7)
- # beginners (295)
- # calva (128)
- # chlorine-clover (3)
- # cider (9)
- # cljsrn (10)
- # clojure (63)
- # clojure-europe (11)
- # clojurescript (1)
- # clojureverse-ops (3)
- # conjure (3)
- # emacs (7)
- # fulcro (13)
- # graalvm (8)
- # honeysql (16)
- # jobs-discuss (14)
- # malli (21)
- # meander (8)
- # onyx (1)
- # pathom (7)
- # portkey (2)
- # quil (3)
- # re-frame (4)
- # reagent (31)
- # reitit (2)
- # rewrite-clj (40)
- # shadow-cljs (29)
- # sql (20)
- # xtdb (13)
@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
?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))))
Rule of borkdude: if you don’t answer in three minutes, you can assume he’ll have figured it out.
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 @U04V15CAJ pointed in the other thread
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
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
Found this on cljstyle: https://github.com/greglook/cljstyle/issues/47
And also this 😅 https://github.com/weavejester/cljfmt/pull/77
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.
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
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 😅
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 😔
So… a culprit in sporadic slowness can be garbage collection pauses…. have you looked into that at all?