package comby

  1. Overview
  2. Docs
A tool for structural code search and replace that supports ~every language

Install

Dune Dependency

Authors

Maintainers

Sources

1.2.2.tar.gz
md5=86fd3dcdaa792a5d871f695a082ad9b5
sha512=63af340d65f4ca37f00bee2a67c7a87822ef15c86051e6486c6eeb5d7fe310c845d4fff15625a72b48ceea89e14aff52dc678da1d43d2029f58b435885d568d8

doc/src/comby.configuration/ripgrep.ml.html

Source file ripgrep.ml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
open Core
open Lwt

let debug =
  Sys.getenv "DEBUG_COMBY"
  |> Option.is_some

let run ~pattern ~args =
  let options = ["--files-with-matches"; "--multiline"] in
  let pattern = Format.sprintf {|'%s'|} pattern in
  let command = ("rg" :: options @ args @ [pattern]) |> String.concat ~sep:" " in
  if debug then Format.printf "Executing: %s@." command;
  let lwt_command = Lwt_process.shell command in
  let recv proc =
    let ic = proc#stdout in
    Lwt.finalize
      (fun () -> Lwt_io.read ic)
      (fun () -> Lwt_io.close ic)
  in
  let f () =
    Lwt_process.with_process_in lwt_command (fun proc ->
        recv proc >>= fun result ->
        proc#status >>= function
        | WEXITED v when v <> 0 -> return @@ Or_error.errorf "Error executing rg, exit status %d." v
        | _ -> return (Ok (String.split ~on:'\n' result |> List.filter ~f:(String.(<>) ""))))
  in
  try Lwt_main.run (f ()) with Sys.Break -> exit 0
OCaml

Innovation. Community. Security.