Home

Awesome

comby

Apache-2.0 codecov Downloads Commit

See the usage documentation.

A short example below shows how comby simplifies matching and rewriting compared to regex approaches like sed.

<details> <summary>Comby supports interactive review mode (click here to see it in action).</summary>

</details>

Install (pre-built binaries)

Mac OS X

Ubuntu Linux

Windows

Docker

<details> <summary>click to expand an example invocation for the docker image</summary>

Running with docker on stdin:

docker run -a stdin -a stdout -a stderr -i comby/comby '(:[emoji] hi)' 'bye :[emoji]' lisp -stdin <<< '(👋 hi)'
<img width="500" src="https://user-images.githubusercontent.com/888624/64924862-0edf1a00-d7b7-11e9-9c2e-cfeafde5bb4b.png"> </details>

Or try it live.

Isn't a regex approach like sed good enough?

Sometimes, yes. But often, small changes and refactorings are complicated by nested expressions, comments, or strings. Consider the following C-like snippet. Say the challenge is to rewrite the two if conditions to the value 1. Can you write a regular expression that matches the contents of the two if condition expressions, and only those two? Feel free to share your pattern with @rvtond on Twitter.

if (fgets(line, 128, file_pointer) == Null) // 1) if (...) returns 0
      return 0;
...
if (scanf("%d) %d", &x, &y) == 2) // 2) if (scanf("%d) %d", &x, &y) == 2) returns 0
      return 0;

To match these with comby, all you need to write is if (:[condition]), and specify one flag that this language is C-like. The replacement is if (1). See the live example.

Build from source

opam init
opam switch create 4.11.0 4.11.0
git clone https://github.com/comby-tools/comby
cd comby 
opam install . --deps-only
make
make test
make install