package comby-kernel
Install
Dune Dependency
Authors
Maintainers
Sources
md5=cd732f90664bc686eaa1134f42c8f7cd
sha512=81c7cd1d70cddee4d1679710a95c50d22f8dc60e48f24554009a5f944eb23e9124ca9aa99357b9879a5a60ca2dbcf976011f53afb442a7f15642e509255a0326
Description
Comby-kernel is the library that exposes the core matching engine for the comby application tool.
Published: 08 Apr 2021
README
comby
See the usage documentation.
A short example below shows how comby simplifies matching and rewriting compared to regex approaches like sed
.
Comby supports interactive review mode (click here to see it in action).
Need help writing patterns or have other problems? Post them in Gitter.
Install (pre-built binaries)
Mac OS X
brew install comby
Ubuntu Linux
bash <(curl -sL get.comby.dev)
Other Linux distributions: The PCRE library is dynamically linked in the Ubuntu binary. For other distributions like Arch Linux, a fixup is needed:
sudo ln -s /usr/lib/libpcre.so /usr/lib/libpcre.so.3
. On Fedora, usesudo ln -s /usr/lib64/libpcre.so /usr/lib64/libpcre.so.3
. Alternatively, consider building from source.
Windows
Install the Windows Subsystem for Linux and install Ubuntu. Then run
bash <(curl -sL get.comby.dev)
Docker
docker pull comby/comby
click to expand an example invocation for the docker image
Running with docker on stdin
:
docker run -a stdin -a stdout -a stderr -i comby/comby '(:[emoji] hi)' 'bye :[emoji]' lisp -stdin <<< '(👋 hi)'
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
Install opam
Create a new switch if you don't have OCaml installed:
opam init
opam switch create 4.11.0 4.11.0
Install OS dependencies:
Linux:
sudo apt-get install pkg-config libpcre3-dev
Mac:
brew install pkg-config pcre
Then install the library dependencies:
git clone https://github.com/comby-tools/comby
cd comby && opam install . --deps-only -y
Run
eval $(opam env)
Build and test
make
make test
If you want to install
comby
on yourPATH
, run
make install
Dependencies (10)
-
yojson
< "2.0.0"
- pcre
-
ppx_deriving_yojson
>= "3.6.0"
- ppx_deriving
- mparser-pcre
- mparser
-
core_kernel
< "v0.15"
-
angstrom
>= "0.15.0"
-
ocaml
>= "4.08.1"
-
dune
>= "2.8.0"
Dev Dependencies (1)
-
bisect_ppx
with-test & dev & >= "2.5.0"
Used by (1)
-
comby
= "1.4.1"
Conflicts
None