[HN Gopher] Parinfer: Simpler Lisp Editing
___________________________________________________________________
Parinfer: Simpler Lisp Editing
Author : harperlee
Score : 126 points
Date : 2025-01-20 08:21 UTC (14 hours ago)
(HTM) web link (shaunlebron.github.io)
(TXT) w3m dump (shaunlebron.github.io)
| mkreis wrote:
| This is really nice, and I am impressed how much effort went into
| the documentation, to make the demo nice and interactive.
|
| At first I thought this is something new, because it's cool and I
| haven't heard of it, even though I'm coding in Clojure for about
| 3 years now. But this project is already 10 years old and hasn't
| received much attention for the last few years, which is a pity.
| I wish it was coming with Calva, my favorite Clojure tooling in
| VS Code.
| simongray wrote:
| AFAIK Calva does have a Parinfer implementation.
| diggan wrote:
| > I wish it was coming with Calva, my favorite Clojure tooling
| in VS Code.
|
| You have this basically already. When you move forms in/out on
| the indentation levels, notice how the brackets/parenthesis
| automatically re-arrange themselves? That means it's working :)
| https://calva.io/parinfer/
| mkreis wrote:
| Thanks for the link. Unfortunately it seems it is currently
| removed due to unclear bugs.
| diggan wrote:
| Damn, you're right, I didn't notice the notice, nor am I a
| daily Calva user.
|
| But so what, is there no automatic balancing of parenthesis
| in Calva? That seems to diminish the value from the
| extension by a lot, I couldn't imagine coding Clojure and
| having to manually balance parenthesis.
| fnordsensei wrote:
| Something about VSCode makes it hard to add in. I think it
| lacks the right APIs.
|
| Also, the main maintainer of Calva doesn't use Parinfer, and so
| isn't very motivated to add it either. But if someone were to
| contribute it, I imagine he'd be very receptive.
| simongray wrote:
| I've been using Parinfer with IntelliJ (Cursive) ever since I
| started developing Clojure professionally back in 2018. The best
| thing about Parinfer, or at least the implementation in Cursive,
| is that it doesn't preclude you from _also_ mixing in some
| Paredit commands too.
|
| When you start out with Clojure/Lisp and you aren't totally used
| to parenthesis you can just use Parinfer to get editor behaviour
| similar to developing Python. It removes a major pain point of
| migrating to a Lisp. It used to be the case that you were forced
| to learn Paredit pretty much from the start.
| kevinmershon wrote:
| Your comment about how it makes editing flow like python is
| spot on, and I've been saying this for years. I'm a long time
| parinfer-rust user in spacemacs, and it makes me very happy.
|
| However it also made me very strict and opinionated about
| formatting. One of the main downsides of parinfer comes when
| you have to interact with someone else's poorly indented or
| opinionated (wrongly) formatting that goes against the clojure
| style guide. Parinfer can then ruin otherwise working code
| because things are out of alignment. To fix this, I set up a
| function to force format files on open, which _mostly_ works
| but then for the longest time made me the source of a lot of
| white space commits. It also struggles with egregiously long
| files.
|
| Thankfully I eventually got my team on board with force
| formatting all files and treating non standard formatting as
| linting errors. We also cut down the largest files one of the
| other devs made, and that helped a lot.
| ARandomerDude wrote:
| > It used to be the case that you were forced to learn Paredit
| pretty much from the start.
|
| I started part-time in Clojure in 2011 and full-time in 2014.
| I've never felt like I needed any extra tooling for parens.
| Instead of typing `foo(x)`, I type `(foo x)`. It seems...almost
| exactly the same to me.
|
| Same with text editors: people will say you need emacs,
| Cursive, etc. but I just use vim for Clojure, as well as
| everything else. It works great.
| slifin wrote:
| If you're a vim key bind user the main vim plugin for IntelliJ
| works well with Cursive's parinfer implementation
|
| When I tried this in vscode it was problematic
| jordanrobinson wrote:
| After using Parinfer for a few years the editing experience felt
| less like typing and more like a cross between magic and the
| scene from Ghost in the Shell with the split hands. It's a real
| shame they weren't able to add it to Calva.
| Folcon wrote:
| I've used it for a number of years, but I do believe that while
| this is really helpful, it's a little incomplete.
|
| It has gaps around pasting content and how to handle that
| elegantly as well as comment behaviour, if those two things could
| be reconciled, it would be even more useful :)...
| knubie wrote:
| Going from parinfer to editing without parinfer is kind of like
| going from vim to an editor without vim bindings. In other
| languages I find myself instinctively moving or editing text
| around expecting the brackets to magically rearrange themselves,
| only to be disappointed when they don't.
| phforms wrote:
| I've been considering Parinfer, but my issue was that it is a bit
| unpredictable where parens end up and I have to be careful to not
| mess up my code structure. Maybe I should give it another try for
| a longer time period.
|
| My favourite structural editing tool for about a year now is
| symex[1], which is an Emacs package (and unfortunately not that
| well known compared to paredit, lispy, etc.). It takes some
| getting used to at first but after a while you only move around
| and think in terms of s-expressions, you don't even see
| parentheses anymore. It really feels like you are a squirrel
| climbing trees (hence the image on the repo, I guess). I just
| hope the dev(s) will be able to get rid of the heavy dependencies
| on other packages soon.
|
| [1]: https://github.com/drym-org/symex.el/
| fnordsensei wrote:
| Parinfer was instrumental to me learning Clojure. Paredit felt
| like operating an airplane cockpit, and Parinfer took that
| experience and made it much closer to just writing prose, for
| which I am forever grateful.
|
| I remember people, including Rich Hickey, scoffing at it when it
| came out, which seemed like kind of a snobbish reaction to
| something that lowers the barriers of entry.
| bowsamic wrote:
| Rich Hickey was referring to editors that hide parentheses
| entirely, not paredit nor parinfer. This was explicitly cleared
| up after the talk
| lemming wrote:
| I develop Cursive, an IDE for Clojure code, and I spent a long
| time integrating parinfer smart mode. It was actually really
| difficult to do well, I wrote a document with feedback about what
| (among other things I discovered later) that made it hard:
| https://github.com/parinfer/parinfer.js/wiki/Problems-integr....
| I subsequently fixed many of those issues, but it was probably
| the second hardest thing I've integrated into Cursive, after
| Leiningen.
|
| It's still a bit quirky, but I use it every day and I love it.
| Even though I'm proficient enough with paredit, parinfer is just
| so much easier to use. Several users have commented to me that
| the parinfer integration is the main thing stopping them
| switching away to a different editor - it really makes that much
| difference.
___________________________________________________________________
(page generated 2025-01-20 23:02 UTC)