mirror of
https://github.com/zed-industries/zed.git
synced 2026-07-31 02:27:58 +00:00
## Context Closes #61394 The Text Finder persists the last query per workspace (in the `text_finder_queries` table) so it can seed itself on reopen. Persistence happens in `TextFinder::on_before_dismiss`, but it was guarded by `if !query.is_empty()`, so clearing the query and dismissing never wrote anything. The stale non-empty query stayed in the database and got restored on the next open, making it impossible to "clear and keep it cleared." This removes the guard so dismissal always persists the current query, including an empty one. The read side already treats an empty stored query as "nothing to restore" (`load_last_search` returns `None` for an empty string), so an empty write cleanly clears the seed instead of leaving the previous query behind. Manual test below : [Screencast from 2026-07-24 15-24-33.webm](https://github.com/user-attachments/assets/ba305f54-8ec2-4d3d-be0b-e2eb001bb204) ## How to Review **`crates/search/src/text_finder.rs`** `on_before_dismiss` no longer gates the write on a non-empty query. It always calls `store_last_search` with the picker's current query and options. `store_last_search` still early-returns for workspaces without a `database_id`, so unpersisted workspaces are unaffected, and `load_last_search` still maps an empty persisted query to `None`, so `seed_query` won't resurrect it. The active-item selection still takes priority over the persisted value on reopen, so seeding from a live editor selection is unchanged. The tests' shared `init_test` now installs a test `db::AppDatabase` global. This is required because the new test is the first one to actually reach `TextFinderDb::global(cx)`. The existing `test_dismiss_from_within_workspace_update` leaves the workspace's `database_id` as `None`, so it short-circuits before touching the DB. `test_clearing_query_does_not_restore_previous_query` exercises the real persistence path: it assigns a workspace `database_id` (`set_random_database_id` + `flush_serialization`), opens the finder with a query, dismisses, and asserts the query round-trips through `seed_query`; then it reopens, clears the query via `set_query("")`, dismisses, and asserts `seed_query` is now `None`. The positive round-trip assertion keeps the negative case from passing vacuously. ## Self-Review Checklist - [x] I've reviewed my own diff for quality, security, and reliability - [ ] Unsafe blocks (if any) have justifying comments - [x] The content is consistent with the UI/UX checklist - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable Release Notes: - Fixed the project search / Text Finder restoring a previous query after it had been cleared and dismissed |
||
|---|---|---|
| .. | ||
| src | ||
| Cargo.toml | ||
| LICENSE-GPL | ||