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.3.0.tar.gz
md5=617a80e8673c3f811403f09701c08a25
sha512=2f8f82c119210ae0efd7f3eefdd992d6b52655575233dfab74662d9a9854ce4aafcd4fe01dad17ba310e38f28ee1437be2f3c4af4f6952a97bb19e1400fc709a

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.