ast-grep is worth checking out too: https://ast-grep.github.io/
Programming
Welcome to the main community in programming.dev! Feel free to post anything relating to programming here!
Cross posting is strongly encouraged in the instance. If you feel your post or another person's post makes sense in another community cross post into it.
Hope you enjoy the instance!
Rules
Rules
- Follow the programming.dev instance rules
- Keep content related to programming in some way
- If you're posting long videos try to add in some form of tldr for those who don't want to watch videos
Wormhole
Follow the wormhole through a path of communities !webdev@programming.dev
Some very quick, superficial differences:
-
ast-grep
uses tree-sitter for understanding languages -
ast-grep
is written in Rust -
ast-grep
uses YAML for config -
ast-grep
more normal--flags
-
comby
doesn't use tree-sitter and does it's own thing... not sure what to think of this approach -
comby
is written in OCaml -
comby
uses TOML for config -
comby
uses-single-dash-flags
-
both have online playgrounds for testing
I personally hate YAML, so it's comby
for me! (For now.)
Also, here's what Comby says about its approach to matching: https://comby.dev/docs/faq
Underneath the hood, Comby uses no tree definition, but turns patterns into an executable routine (a language-aware parser) where the tree structure is implicit in this executable routine. In theory, the syntax matched by this routine could dump a serialized parse tree, but this isn’t implemented :-). With this design, Comby sacrifices this ability to recognize many predefined language constructs in order to support a more freeform pattern writing and matching process. This loses precision for deeply recognizing all of a program’s structures, and may fall short of your needs depending on your use case.
Fair enough. I hate YAML too, but I'm stuck with Python for now and Comby doesn't handle indentation too well (it's in their FAQ).
Oh, yeah makes sense. Thankfully, I'm refactoring Go!
I found ast-grep inconvenient to match several consecutive lines of python whereas comby handles this reasonably fine.