[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)