FWIW: after 20 years of Emacs I personally switched to VSCode a couple of years ago because I felt that in Emacs I was missing out on the LSP experience that VSCode provided in Rust, Typescript, Scala, etc. (I was using Eglot). In any case, there's a very nice Emacs emulation mode in VSCode
https://github.com/whitphx/vscode-emacs-mcx
which includes some paredit functionality courtesy of
https://robert.kra.hn/past-projects/paredit-js.html
and I'm working on porting my favorite paredit function, paredit-kill. Unfortunately that's the one where the paredit author left this comment in the code:
;;; Please do not try to understand this code unless you have a VERY
;;; good reason to do so. I gave up trying to figure it out well
;;; enough to explain it, long ago.I can see Paredit working somehow with the curly brace blocks of C, but how does it handle the significant whitespace of Python? Are indent and dedent handled as tokens?
Redefine the meaning of moving up, down, left or right by syntactic token. In Python up/down is either by block (try, if, etc.) or by s-exp ([], {}, etc.) which Emacs is already capable of doing.
By doing that you can effectively teach paredit a little bit about how the language works, as you're moving point around for it.
Note that my crude hack was never more than a prototype. Though it did work in more places than it ought to.
https://tree-sitter.github.io/tree-sitter/#available-parsers