[HN Gopher] Comby - Structural code search and replace for every... ___________________________________________________________________ Comby - Structural code search and replace for every language Author : WallyFunk Score : 109 points Date : 2022-05-17 17:03 UTC (5 hours ago) (HTM) web link (comby.dev) (TXT) w3m dump (comby.dev) | CrazyPyroLinux wrote: | This looks a lot like https://semgrep.dev/ Interesting that they | are both largely OCaml. | jjice wrote: | ML style languages handle tree structures and traversal so | well, I'm wondering if that's a large reason for using it. | feanaro wrote: | A more interesting comparison than with Coccinelle is with | semgrep (https://semgrep.dev/) since it also supports | semantic/structural pattern matching over a number of languages, | but also adds in a bunch of Boolean logic into the mix, as well | as some more advanced semantic features like constant | propagation. | | Curious whether the teams behind these tools are aware of each | other? I suppose it's unlikely that they're not. | LesZedCB wrote: | yeah i just discovered semgrep a week ago! i'll have to | download this and compare. | | i found the CLI features lacking in semgrep (vs using a yaml | config), so maybe this will have more support there. | carlmr wrote: | Comby works with C++, which to me is a great advantage. | adamesque wrote: | I believe Sourcegraph uses Comby under the hood to an extent for | structural matching as well! | vanesa- wrote: | Yep! (Sourcegraph Community Manager here) We use Comby syntax | for structural search: | https://docs.sourcegraph.com/code_search/reference/structura... | | We also have a few tutorials to make large-scale code changes | across many repositories and code hosts (batch changes) with | Comby: | | - Refactor Go code using Comby: | https://docs.sourcegraph.com/batch_changes/tutorials/refacto... | | - Updating Go import statements using Comby: | https://docs.sourcegraph.com/batch_changes/tutorials/updatin... | | The author of Comby is a researcher at Sourcegraph building our | search platform. | picardo wrote: | Superb tool. I used Comby to create a massive (3000+ changes) PR | in which I ported JS type annotations into TS typings. | marcodiego wrote: | License? | | Also, how does it compare to Coccinelle? | smallnix wrote: | License seems to be apache V2, see https://github.com/comby- | tools/comby/blob/master/LICENSE. | | They have a comparison section in their faq | (https://comby.dev/docs/faq): | | "Coccinelle uses a declarative syntax for matching constructs | like function calls, if-statements, expression blocks, and so | on for the C language. Some notable differences are that | Coccinelle provides a patch-like format to express | transformations (handy when you want to inline smaller changes | in a broader context) and metavariable declarations (handy for | developing and organizing more sophisticated patterns). For an | example, see the file null_ref.cocci. Coccinelle works only for | the C language, and may struggle to parse files that contain | non-standard C constructs, like GCC inline assembly. Recent | Coccinelle work has started expanding support for Java. In | contrast, Comby's syntax targets a wide range of languages and | is more robust to matching patterns in the presence of | unrecognized constructs. Comby is more suited to writing quick | find-replace patterns for languages beyond C, and works well on | C languages too." | slightknack wrote: | I mocked up a prototype for something similar to this using | TreeSitter and its query language the other day for some heavy | refactoring I had to do. This looks like a really cool project, | will have to try it out! | kretaceous wrote: | Okay wow. I didn't tools like this existed! There's been more | than once where I've found myself in a situation like "find all | code like this, change if this, delete if this". Regex can only | get you so far. | | Does someone know if this or something similar is available as a | VSCode extension? It'd be fun to make one if not! | ducktective wrote: | language-server methods like rename ___________________________________________________________________ (page generated 2022-05-17 23:00 UTC)