CIDER 2.0 is Brewing… | Meta Redux
true ▸ (my.app/persist {:id 7}) => {:id 7, :saved? true} => {:id 7, :saved? true} And because “wait, what did I even trace?” is a question I ask myself constantly, cider-list-traced and cider-untrace-all are now a keystroke away. Enlighten (you remember it, right?) picked up some manners too. You can light up a single form with cider-enlighten-defun-at-point without flipping the global mode, and cider-enlighten-stop makes the whole thing vanish at once, instead of making you re-evaluate everything in penance. And for the tap> crowd, cider-tap opens a buffer that streams whatever you send to tap> and lets you crack any value open in the inspector with RET. It’s println debugging, minus the println guilt. ClojureScript gets some love too ClojureScript is always the trickier sibling, but it got meaningful improvements this round: You can now run ClojureScript tests with the regular test commands (including async cljs.test tests) instead of CIDER refusing to play along. Macroexpansion of user-defined cljs macros finally works (it used to silently echo the form back unexpanded - a bug that had been open since forever). And when you invoke a Clojure-only command under a cljs REPL, CIDER now tells you so clearly, rather than failing in some confusing way. This was another area where AI tooling was quite helpful to me, as I’ve rarely used ClojureScript in the past, but I still managed to figure out how to finally solve those problems that have been pain points for CIDER’s users for as long as we’ve had ClojureScript support. On a related note, I’ve also been chasing down a few small bugs in Piggieback (the middleware that powers most of the cljs REPLs CIDER talks to) - have a look at the recent releases if you’re curious. And I’ve been idly pondering some form of “native” shadow-cljs support down the road. That last one is very much TBD, so don’t hold me to it - but the ClojureScript story keeps inching forward. A pile of quality-of-life touches It wouldn’t be a CIDER release without a long tail of small comforts. A few that I keep bumping into and grinning at: Eldoc is asynchronous now, so dragging the cursor around no longer blocks Emacs on an nREPL round-trip. Buttery smooth. A new cider-mode lighter (with an optional fringe marker) flags when the current buffer’s namespace isn’t loaded into the REPL, or has gone stale because you edited an already-evaluated form. That retires a whole genre of “why isn’t my change taking effect?” head-scratching. cider-doc can pull ClojureDocs examples right into the doc buffer. Sending a form into your namespace’s (comment ...) block is a one-keystroke affair now (cider-send-to-comment), and cider-jump-to-comment teleports you back there. Stuck in .cljc land? You can pin where a buffer’s evaluations go - clj, cljs, or both - with cider-set-eval-destination and friends. The REPL banner is slimmer and far less shouty; the getting-started spiel now lives in a summonable reference card (C-c C-h). The cheatsheet finally learned about all the functions Clojure has grown since 1.11. I’m probably still forgetting a dozen things - the changelog is genuinely enormous this time around. Please go play with it! Unfortunately no one can be told what CIDER 2.0 is – you have to experience it yourselves… – Clorpheus Here’s where you come in. All of this is already available in the snapshot release of CIDER on MELPA. I’d love for you to install it, kick the tires, and - especially - tell me how the various UX changes feel. Discoverable? Annoying? Joyful? I genuinely want to know before I carve any of it in stone. If no serious problems surface, I plan to cut the real release fairly soon - think a week or two. So now’s the perfect time to influence it. Epilogue I keep hearing that the Clojure community isn’t innovating much these days. I hope CIDER 2.0 goes a small way towards convincing the doubters that we’re not quite done yet. The best is always yet to come - for both Clojure and Emacs. Now let’s go forth and brew some (magic) CIDER together! Keep brewing!" /><br>true ▸ (my.app/persist {:id 7}) => {:id 7, :saved? true} => {:id 7, :saved? true} And because “wait, what did I even trace?” is a question I ask myself constantly, cider-list-traced and cider-untrace-all are now a keystroke away. Enlighten (you remember it, right?) picked up some manners too. You can light up a single form with cider-enlighten-defun-at-point without flipping the global mode, and cider-enlighten-stop makes the whole thing vanish at once, instead of making you re-evaluate everything in penance. And for the tap> crowd, cider-tap opens a buffer that streams whatever you send to tap> and lets you crack any value open in the inspector with RET. It’s println debugging, minus the println guilt. ClojureScript gets some love too ClojureScript is always the trickier sibling, but it got meaningful improvements this round: You can now run ClojureScript tests with the regular test commands...