ripsed-core 0.3.1

Core edit engine for ripsed — pure logic, no I/O
Documentation

ripsed-core

Core edit engine for ripsed — a fast, modern stream editor.

This crate contains the pure logic (no I/O):

  • Edit engine — find/replace, delete, insert, transform, surround, indent/dedent, applied through whichever execution path fits: the per-line loop, a whole-buffer splice fast path for eligible literal replaces, multiline (cross-line) matching like ripgrep's -U, or the incremental LineProcessor for streaming callers
  • Pattern matching — literal and regex matching with case-insensitive support and a whole-buffer prescreen that rejects non-matching files at substring-search speed
  • Operation IR — the Op enum representing all supported operations, including replacement-count control (first_per_line, first_in_file, {"max": n})
  • Ranges — numeric line ranges and sed-style pattern-addressed regions (/start/,/end/)
  • Script parser — parse .rip script files into operation sequences
  • Error taxonomy — structured errors with machine-readable codes and actionable hints
  • Configuration.ripsed.toml parsing and discovery
  • Undo — undo log data structures for reversible operations

A load-bearing invariant for agent consumers: Change metadata always equals the bytes actually written, including line separators.

Usage

use ripsed_core::engine;
use ripsed_core::matcher::Matcher;
use ripsed_core::operation::Op;

let op = Op::Replace {
    find: "old".to_string(),
    replace: "new".to_string(),
    regex: false,
    case_insensitive: false,
    multiline: false,
    count: Default::default(),
};

let matcher = Matcher::new(&op).unwrap();
let output = engine::apply("old text here\n", &op, &matcher, None, 3).unwrap();
assert_eq!(output.text.unwrap(), "new text here\n");

For embedding with file I/O included (locking, atomic writes, undo), use the ripsed facade crate instead.

License

Licensed under either of Apache License, Version 2.0 or MIT license at your option.