zed/crates
Thorsten Ball a69eddc081
Limit project search to avoid unresponsive app (#9404)
This fixes #[#9135](https://github.com/zed-industries/zed/issues/9135)
by introducing file/results limit to project search.

It does this by changing how project search works in multiple ways.

User-facing changes:

- Number files that are being searched is now limited to 5000
- Number of search results in all files is now limited to 10000
- If a limit is reached, search is stopped and a message is displayed
  to the user

Under the hood, we also reworked `Project::search_local`:

- Code has been refactored so that the concurrency-logic is easier to
  distinguish from the search logic.
- We now limit the number of concurrent `open_buffer` operations, since
  that is being done on the main thread and can lead to beachballs when
  finding a lot of results.

Note for reviewer:

@SomeoneToIgnore since you know this code, can you take a look at this?
The changes might look bigger than they are in certain places because I
only extracted code into functions, but the middle part — the sorting of
file paths — has changed in order to avoid too many tasks opening
buffers at the same time and making app unresponsive.

What's also curious is that I think there was a bug in that we searched
ignored entries _twice_: once in `search_snapshots` and then later in
the dedicated `search_ignored_entry` function. I changed the `entries()`
call in `search_snapshots` so that it's always `false`, but that caused
tests to fail (see `test_search_in_gitignored_dirs`). @bennetbo and I
think that there's some state in the Project that made the tests pass
before, because the last of the 3 assertions in that test only passes
when the other two queries run. So we changed the test to be more
stateless and included the possible fix in `search_snapshots`.

Release Notes:

- Fixed project-wide search leading to unresponsive application when
searching in ignored files, by limiting the number of files that are
searched (to 5000) and the number of overall search results to 10000.
Additional performance improvements have also been made in order to
offload more work onto a background thread.
([#9135](https://github.com/zed-industries/zed/issues/9135)).

---------

Co-authored-by: Antonio Scandurra <antonio@zed.dev>
Co-authored-by: Bennet <bennetbo@gmx.de>
2024-03-18 10:49:27 +01:00
..
activity_indicator Show formatting failure (#9229) 2024-03-12 16:30:08 +01:00
ai Enable clippy::derive_ord_xor_partial_ord (#9371) 2024-03-14 17:55:57 -04:00
assets Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
assistant Enable clippy::never_loop (#9006) 2024-03-14 14:07:50 -04:00
audio Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
auto_update markdown preview: highlight code blocks (#9087) 2024-03-12 12:54:12 +02:00
breadcrumbs Encode rem values derived from pixels using rems_from_px (#9367) 2024-03-14 16:39:55 -04:00
call Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
channel Fix joining hosted projects (#9038) 2024-03-07 19:56:41 -07:00
cli Allow opening non-extant files (#9256) 2024-03-12 22:30:04 -06:00
client Remove wezterm fork from dependencie (#8998) 2024-03-12 21:27:40 +02:00
clock Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
collab Limit project search to avoid unresponsive app (#9404) 2024-03-18 10:49:27 +01:00
collab_ui ui: Refine TitleBar component (#9415) 2024-03-15 15:48:07 -04:00
collections Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
color Fix hex_to_hsla inside the color crate (#9412) 2024-03-15 16:58:46 -04:00
command_palette Encapsulate CommandPaletteFilter and CommandPaletteInterceptor (#9402) 2024-03-15 12:37:25 -04:00
command_palette_hooks Encapsulate CommandPaletteFilter and CommandPaletteInterceptor (#9402) 2024-03-15 12:37:25 -04:00
copilot Encapsulate CommandPaletteFilter and CommandPaletteInterceptor (#9402) 2024-03-15 12:37:25 -04:00
copilot_ui Add a setting for custom associations between languages and files (#9290) 2024-03-13 10:23:30 -07:00
db Always remember the last window size and position (#9416) 2024-03-15 14:24:44 -07:00
diagnostics Fix flickering (#9012) 2024-03-11 10:45:57 +01:00
editor Add multi_cursor_modifier setting (#9014) 2024-03-14 20:33:54 -06:00
extension Add ability to specify binary path/args for rust-analyzer (#9293) 2024-03-13 18:42:03 +01:00
extension_api Provide wasm extensions with APIs needed for using pre-installed LSP binaries (#9085) 2024-03-08 17:18:06 -05:00
extensions_ui Encode rem values derived from pixels using rems_from_px (#9367) 2024-03-14 16:39:55 -04:00
feature_flags Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
feedback Remove wezterm fork from dependencie (#8998) 2024-03-12 21:27:40 +02:00
file_finder Rename 'project_core' crate to 'worktree', make it just about worktrees (#9189) 2024-03-11 11:35:27 -07:00
fs Windows: make fs to use workspace windows crate (#9350) 2024-03-14 10:43:06 -07:00
fsevent Add rs-notify implementation of fs::watch (#9040) 2024-03-08 22:18:44 -08:00
fuzzy Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
git Properly display deleted diff hunks (#9182) 2024-03-11 17:53:45 +02:00
go_to_line Restore --all-targets for clippy (#9346) 2024-03-14 12:39:45 -04:00
gpui Automatically create a hitbox for focusable elements (#9485) 2024-03-18 09:58:31 +01:00
gpui_macros Fix flickering (#9012) 2024-03-11 10:45:57 +01:00
install_cli Fix flickering (#9012) 2024-03-11 10:45:57 +01:00
journal Add --add/--new to control CLI behaviour (#9202) 2024-03-12 14:27:58 -06:00
language Correctly handle network issues during LSP server installation (#9460) 2024-03-17 15:41:00 +02:00
language_selector Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
language_tools Enable clippy::eq_op (#9369) 2024-03-14 17:05:07 -04:00
languages Correctly handle network issues during LSP server installation (#9460) 2024-03-17 15:41:00 +02:00
live_kit_client Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
live_kit_server Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
lsp Always resolve code action if needed (#8904) 2024-03-05 23:42:12 +02:00
markdown_preview Add a setting for custom associations between languages and files (#9290) 2024-03-13 10:23:30 -07:00
media Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
menu Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
multi_buffer Enable clippy::never_loop (#9006) 2024-03-14 14:07:50 -04:00
node_runtime Implement updating for node-based language servers (#9361) 2024-03-15 11:40:28 -04:00
notifications Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
outline Restore --all-targets for clippy (#9346) 2024-03-14 12:39:45 -04:00
picker Small fixes to task modal & long commands (#8974) 2024-03-07 03:21:11 +02:00
prettier Fix prettier plugins does not seem to be picked up (#9193) 2024-03-12 11:38:30 +01:00
project Limit project search to avoid unresponsive app (#9404) 2024-03-18 10:49:27 +01:00
project_panel Add option to collapse all folders in root (#9372) 2024-03-15 09:48:56 +02:00
project_symbols Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
quick_action_bar Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
recent_projects Fill context menu of Zed macOS dock icon with recent projects (#8952) 2024-03-15 16:22:43 +02:00
refineable Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
release_channel Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
rich_text Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
rope rope: Preallocate chunks buffer 2024-03-11 13:28:10 +01:00
rpc Limit project search to avoid unresponsive app (#9404) 2024-03-18 10:49:27 +01:00
search Limit project search to avoid unresponsive app (#9404) 2024-03-18 10:49:27 +01:00
semantic_index Add a setting for custom associations between languages and files (#9290) 2024-03-13 10:23:30 -07:00
settings Add a setting for custom associations between languages and files (#9290) 2024-03-13 10:23:30 -07:00
snippet Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
sqlez Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
sqlez_macros Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
story Enable clippy::eq_op (#9369) 2024-03-14 17:05:07 -04:00
storybook ui: Refine TitleBar component (#9415) 2024-03-15 15:48:07 -04:00
sum_tree Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
task Small improvements of the task terminal spawn behavior (#9399) 2024-03-15 18:32:59 +02:00
tasks_ui Task::spawn now takes an optional task name as an argument. 2024-03-08 15:28:42 +01:00
telemetry_events Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
terminal Small improvements of the task terminal spawn behavior (#9399) 2024-03-15 18:32:59 +02:00
terminal_view Small improvements of the task terminal spawn behavior (#9399) 2024-03-15 18:32:59 +02:00
text Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
theme Allow overriding font style and weight via experimental.theme_overrides in settings (#9122) 2024-03-11 12:21:37 -04:00
theme_importer Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
theme_selector Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
time_format notification panel: rework time formatting (#8997) 2024-03-12 21:02:04 -06:00
ui Allow loading "Segoe Fluent Icons" font on macOS (#9421) 2024-03-15 17:35:10 -04:00
util chore: Move new util deps to workspace level (#9250) 2024-03-13 00:37:10 +01:00
vcs_menu Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
vim Encapsulate CommandPaletteFilter and CommandPaletteInterceptor (#9402) 2024-03-15 12:37:25 -04:00
welcome Fix panic in open urls (#9032) 2024-03-07 13:52:50 -07:00
workspace Always remember the last window size and position (#9416) 2024-03-15 14:24:44 -07:00
worktree Add a setting for custom associations between languages and files (#9290) 2024-03-13 10:23:30 -07:00
zed Fix#9253 Duplicate menu item for "Emojis & Symbols" (#9377) 2024-03-14 20:57:32 -06:00
zed_actions Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00