search: Escape seeded buffer search query in regex mode (#57748)
## What
When `seed_search_query_from_cursor` is enabled and regex mode is
active, the selected text is used verbatim as the regex pattern. This
means selecting text like `z.d` seeds the regex `z.d`, where `.` acts as
a wildcard — matching `zed`, `zXd`, etc. — rather than only the literal
string the user selected.
Fixes #57253.
## Why it was broken
`search_suggested()` in `BufferSearchBar` retrieves the raw selection
text from `query_suggestion()` and passes it directly to `search()`.
There was no escaping step, even when `default_options` had
`SearchOptions::REGEX` set.
## Fix
Run the seeded suggestion through `regex::escape()` before passing it to
`search()` when regex mode is enabled. This mirrors the identical
pattern already used in `crates/vim/src/normal/search.rs:485`.
```rust
// Before
let search = self
.query_suggestion(seed_query_override, window, cx)
.map(|suggestion| {
self.search(&suggestion, Some(self.default_options), true, window, cx)
});
// After
let search = self
.query_suggestion(seed_query_override, window, cx)
.map(|suggestion| {
let suggestion = if self.default_options.contains(SearchOptions::REGEX) {
regex::escape(&suggestion)
} else {
suggestion
};
self.search(&suggestion, Some(self.default_options), true, window, cx)
});
```
## Test
Added `test_seeded_query_is_escaped_in_regex_mode` in
`buffer_search.rs`. It creates a buffer with `"z.d\nzed\n"`, enables
regex mode, selects `z.d`, seeds the search, and asserts:
- The query text becomes `z\.d` (escaped), not `z.d`
- Exactly 1 match is highlighted (the literal `z.d`), not 2
The `regex` crate was already a workspace dependency and is already used
in the `search` crate transitively; this adds it explicitly to
`crates/search/Cargo.toml`.
Release Notes:
- Fixed regex search seeded from cursor/selection matching more than the
selected text when the selection contained regex special characters
(e.g. `.`, `*`, `(`)
---------
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Smit Barmase <heysmitbarmase@gmail.com>
2d692b4f2aJavier Gómez committed on 7/24/2026, 3:45:41 PM· committed by GitHubparentc16d19c