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