|
2 | 2 |
|
3 | 3 | All notable changes to this project will be documented in this file. |
4 | 4 |
|
| 5 | +## [0.12.1] - 2026-04-19 |
| 6 | + |
| 7 | +### Bug Fixes |
| 8 | + |
| 9 | +- *(app)* Explain failures no longer abort -p mode after successful compile |
| 10 | + |
| 11 | +### Documentation |
| 12 | + |
| 13 | +- *(readme)* Slim to quickstart + link to docs/ |
| 14 | +README grew to 431 lines over v0.11.0 and v0.12.0 — past the point |
| 15 | + where first-time readers scroll through the content they actually |
| 16 | + need (install + "does it do X?"). Splits into a focused README |
| 17 | + (121 lines) plus four topic pages under docs/: |
| 18 | + |
| 19 | + - docs/usage.md — CLI flags, batch mode, filter mode, --json |
| 20 | + JSONL recipes, workspaces, completions |
| 21 | + - docs/shortcuts.md — main TUI, vim mode, filter mode tables |
| 22 | + - docs/integrations.md — VS Code, Neovim, Zed, tmux |
| 23 | + - docs/advanced.md — test suite mode, config, engine matrix, |
| 24 | + comparison vs terminal tools + regex101 |
| 25 | + |
| 26 | + The new README keeps the header, "who is this for?", one-liner |
| 27 | + install, five-line quickstart, a compressed feature list, and an |
| 28 | + engines-at-a-glance table. Everything deeper is one click away. |
| 29 | + |
| 30 | + Total content preserved; anchors and internal links verified. |
| 31 | +- *(readme)* Add "Pairs well with" section linking agx/sift/stepwise |
| 32 | +Introduces rgx as one of three terminal-native step-through debuggers |
| 33 | + under the stepwise umbrella. Links the sibling tools (agx for agent |
| 34 | + timelines, sift for AI-write review) and the landing-site repo. Each |
| 35 | + tool is called out as independent — the section clarifies that no |
| 36 | + sibling install is ever required for rgx to work on its own. |
| 37 | +- *(roadmap)* Reframe as maintenance + bounded stepwise hooks |
| 38 | +Updates the public roadmap for the post-v0.12.0 / stepwise positioning |
| 39 | + state. The Road A opportunity-cost argument (rgx stays in maintenance; |
| 40 | + main-project capacity reinvests in SaaS) is preserved, but the plan |
| 41 | + now acknowledges a small integration backlog introduced by the |
| 42 | + stepwise umbrella. |
| 43 | + |
| 44 | + - "Current direction" rewritten: maintenance + bounded stepwise hooks, |
| 45 | + not pure maintenance. Stepwise hooks live or die on whether they |
| 46 | + make rgx materially more useful to existing rgx users — not a |
| 47 | + reason to expand audience or rewrite the core. |
| 48 | + - New "Relationship to the stepwise stack" section with a three-tool |
| 49 | + table and a pointer to the landing repo. States the kill criterion: |
| 50 | + each tool earns its place independently; the suite cannot rescue a |
| 51 | + failing tool. |
| 52 | + - "Recently Shipped" updated through v0.12.0 and the post-release |
| 53 | + hardening pass (per-line byte cap, bracketed JSON keys, match_haystack |
| 54 | + pub, UTF-8-safe UI slicing, Result-returning constructor, unicode- |
| 55 | + aware json_path errors). |
| 56 | + - New "Open — bounded stepwise integration hooks" table. Each hook has |
| 57 | + two gates (sibling prerequisite + opportunity-cost fit) before it |
| 58 | + ships. No hook is promised; both get reassessed on the sibling tool's |
| 59 | + next release. If either turns out to need more than an evening, it |
| 60 | + gets parked by the opportunity-cost argument. |
| 61 | + - "Future considerations" preserved as low-priority parking spots |
| 62 | + (theme customization is the most-requested). |
| 63 | + - "Not planned" tightened: no AI/LLM inside rgx, no web version, no |
| 64 | + hosted pattern-sharing, no ripgrep-scope rewrite. |
| 65 | + - "When to rethink" aligned with the sibling roadmaps' discipline. |
| 66 | + |
| 67 | +### Features |
| 68 | + |
| 69 | +- *(filter)* Post-v0.11.0 hardening and cleanup pass |
| 70 | +Three new capabilities: |
| 71 | + |
| 72 | + - 10 MiB per-line byte cap (MAX_LINE_BYTES) in read_input prevents |
| 73 | + an unbounded line from OOMing before --max-lines engages. |
| 74 | + Truncation is reflected in the returned `truncated` flag, and the |
| 75 | + max-lines-exceeded peek is now bounded to a single byte so a giant |
| 76 | + post-cap line can't OOM the peek itself. |
| 77 | + - Bracketed string-key syntax in json_path: ["hyphen-key"], ["日本語"], |
| 78 | + etc. Unlocks --json addressing for keys that aren't bare |
| 79 | + identifiers. Recognises \" and \\ escapes; unknown escapes error. |
| 80 | + - rgx::filter::match_haystack promoted to pub — the helper all three |
| 81 | + match paths already use is now callable from third-party |
| 82 | + integrations. |
| 83 | + |
| 84 | +### Refactoring |
| 85 | + |
| 86 | +- Clippy modernization + small simplifications across codebase |
| 87 | +Post-v0.12.0 sweep through every crate module. No behavior change; |
| 88 | + each hunk is either a modern-idiom rewrite clippy flagged or a |
| 89 | + dead-code / redundant-closure cleanup. |
| 90 | + |
| 91 | + - main.rs: merge duplicate debug-jump-start match arms (Home and 'g' |
| 92 | + both call the same handler — fold into one arm) |
| 93 | + - ui/mod.rs: `border_type` doc comment now names the real parameter; |
| 94 | + `render_codegen_overlay` takes `EngineFlags` by value (it is Copy) |
| 95 | + - app.rs: |
| 96 | + - `truncate()` collapses two `chars()` passes into one `char_indices().nth()` |
| 97 | + - `history_next` uses `let...else` for the `None` early return |
| 98 | + - `map(String::as_str)` and `map(ToString::to_string)` replace one-shot |
| 99 | + closures that clippy::redundant_closure_for_method_calls flagged |
| 100 | + - explain/formatter.rs: `format!("{}", lit.c)` → `lit.c.to_string()` |
| 101 | + - engine/mod.rs: `|b| b.is_ascii_digit()` → `u8::is_ascii_digit` |
| 102 | + - engine/pcre2.rs: `and_then(|n| n.clone())` → `and_then(Clone::clone)` |
| 103 | + - engine/pcre2_debug.rs: `let...else` for the early `Vec::new()` return |
| 104 | + - filter/mod.rs: `extract_strings` flattens its JSON decode with |
| 105 | + `.ok().and_then(..)` instead of `match Ok/Err` |
| 106 | + - filter/ui.rs: `map(Vec::as_slice)` replaces the redundant closure |
| 107 | + - input/editor.rs: `line_end` uses `map_or`; `drain(a..b + 1)` → `drain(a..=b)` |
| 108 | + - config/workspace.rs: `match Ok/Err` collapses to `Result::is_ok_and` |
| 109 | + - ui/syntax_highlight.rs: `let...else` for the AST-parse early return |
| 110 | + |
| 111 | + 349 tests passing, clippy -D warnings clean, rustfmt clean. |
| 112 | +- *(engine)* Align EngineFlags default with runtime, add regex-style prefix |
| 113 | +No user-visible behavior change. Two cleanups that set up the next |
| 114 | + commit's `-p` fix and guard against a latent bug the existing tests |
| 115 | + weren't catching. |
| 116 | + |
| 117 | + - `EngineFlags::default()` now has `unicode: true`. The old derived |
| 118 | + default had `unicode: false` (the bool default), which diverged from |
| 119 | + the runtime `Settings::default().unicode = true`. Every production |
| 120 | + caller already overrode this via the `EngineFlags { ... }` literal in |
| 121 | + main.rs, but tests using `EngineFlags::default()` were silently |
| 122 | + testing a configuration no user ever hits. |
| 123 | + - New `to_regex_inline_prefix` (private) is the `wrap_pattern` helper |
| 124 | + for the `regex` and `fancy-regex` engines. Emits `(?-u)` only when |
| 125 | + unicode is explicitly disabled; never emits `(?u)` because unicode |
| 126 | + is default-on in both engines. This is a correctness fix: emitting |
| 127 | + `(?u)` in front of a lookaround pattern has been observed to push |
| 128 | + fancy-regex into its non-fancy backend in our build, which then |
| 129 | + errors with "look-around not supported". |
| 130 | + - Existing `to_inline_prefix` stays as-is for PHP codegen (where `u` |
| 131 | + flips to mean "enable unicode", opposite of the regex crate). |
| 132 | + - Both `to_*` methods take `&self` for API stability; `#[allow]` on |
| 133 | + `clippy::wrong_self_convention` since `EngineFlags` is `Copy` so the |
| 134 | + borrow is free. |
| 135 | + |
| 136 | + New tests: |
| 137 | + - `wrap_pattern_omits_prefix_when_flags_are_defaults` / `_emits_minus_u_when_unicode_disabled` / |
| 138 | + `_combines_enable_and_disable_unicode` / `_does_not_emit_u_when_unicode_on` — |
| 139 | + pin the new prefix semantics. |
| 140 | + - `to_inline_prefix_still_emits_positive_u_for_php` — locks the split |
| 141 | + between the two prefix methods. |
| 142 | + - `test_lookahead_with_unicode_flag` / `test_lookbehind_with_unicode_flag` — |
| 143 | + regression guards at the fancy-engine layer. |
| 144 | + |
| 145 | + All 360 tests passing, clippy -D warnings clean, rustfmt clean. |
| 146 | + |
| 147 | + |
5 | 148 | ## [0.12.0] - 2026-04-18 |
6 | 149 |
|
7 | 150 | ### Documentation |
|
0 commit comments