ZIm/crates
Max Brunsfeld 0c2bbb3aa9
Optimistically update hunk states when staging and unstaging hunks (#25687)
This PR adds an optimistic update when staging or unstaging diff hunks.
In the process, I've also refactored the logic for staging and unstaging
hunks, to consolidate more of it in the `buffer_diff` crate.

I've also changed the way that we treat untracked files. Previously, we
maintained an empty diff for them, so as not to show unwanted
entire-file diff hunks in a regular editor. But then in the project diff
view, we had to account for this, and replace these empty diffs with
entire-file diffs. This form of state management made it more difficult
to store the pending hunks, so now we always use the same
`BufferDiff`/`BufferDiffSnapshot` for untracked files (with a single
hunk spanning the entire buffer), but we just have a special case in
regular buffers, that avoids showing that entire-file hunk.

* [x] Avoid creating a long queue of `set_index` operations when
staging/unstaging rapidly
* [x] Keep pending hunks when diff is recalculated without base text
changes
* [x] Be optimistic even when staging the single hunk in added/deleted
files
* Testing

Release Notes:

- N/A

---------

Co-authored-by: Cole Miller <m@cole-miller.net>
2025-02-28 20:55:29 +00:00
..
activity_indicator Remove more references to 'model' in GPUI APIs (#23693) 2025-01-27 04:00:27 +00:00
anthropic Add Anthropic Claude 3.7 support (#25497) 2025-02-24 16:10:26 -05:00
assets Eliminate GPUI View, ViewContext, and WindowContext types (#22632) 2025-01-26 03:02:45 +00:00
assistant windows: Fix terminal inline assistant (#25715) 2025-02-27 10:03:46 +08:00
assistant2 assistant2: Factor out tool use into its own module (#25819) 2025-02-28 17:04:20 +00:00
assistant_context_editor edit predictions: Add enabled_in_assistant setting (#25767) 2025-02-27 18:52:45 +00:00
assistant_settings assistant: Add Bedrock support (#21092) 2025-02-24 18:10:12 -05:00
assistant_slash_command Revert "file_finder: Remove common segments of long paths in search results (#25049)" (#25163) 2025-02-19 15:32:29 +00:00
assistant_slash_commands Capitalize default slash command description (#25794) 2025-02-28 00:20:50 -03:00
assistant_tool Eliminate GPUI View, ViewContext, and WindowContext types (#22632) 2025-01-26 03:02:45 +00:00
assistant_tools assistant_tools: Rename FileToolInput to NowToolInput (#25456) 2025-02-24 09:37:07 -05:00
audio Eliminate GPUI View, ViewContext, and WindowContext types (#22632) 2025-01-26 03:02:45 +00:00
auto_update cx.background_executor().spawn(...) -> cx.background_spawn(...) (#25103) 2025-02-18 20:30:33 +00:00
auto_update_ui Use the MessageNotification component for the release notes toast (#25013) 2025-02-17 11:32:04 -03:00
aws_http_client Add aws_http_client and bedrock crates (#25490) 2025-02-24 20:28:20 +00:00
bedrock bedrock: Add Claude 3.7 Sonnet (#25583) 2025-02-25 13:52:42 -05:00
breadcrumbs Use carriage return instead of newline symbol for single line text (#25616) 2025-02-25 18:26:50 -07:00
buffer_diff Optimistically update hunk states when staging and unstaging hunks (#25687) 2025-02-28 20:55:29 +00:00
call cx.background_executor().spawn(...) -> cx.background_spawn(...) (#25103) 2025-02-18 20:30:33 +00:00
channel Rust 1.85 (#25272) 2025-02-28 18:33:35 +01:00
cli windows: Missing commit of #25412 (#25732) 2025-02-27 08:00:42 +00:00
client Add CredentialsProvider to silence keychain prompts in development (#25266) 2025-02-20 17:58:50 +00:00
clock chore: Use workspace fields for edition and publish (#23291) 2025-01-17 17:39:22 +01:00
collab editor: Add Organize Imports Action (#25793) 2025-03-01 00:59:09 +05:30
collab_ui Rust 1.85 (#25272) 2025-02-28 18:33:35 +01:00
collections chore: Use workspace fields for edition and publish (#23291) 2025-01-17 17:39:22 +01:00
command_palette cx.background_executor().spawn(...) -> cx.background_spawn(...) (#25103) 2025-02-18 20:30:33 +00:00
command_palette_hooks vim: :set support (#24209) 2025-02-11 04:55:40 +00:00
component git_ui: New panel design (#25821) 2025-02-28 20:00:39 +00:00
component_preview git_ui: New panel design (#25821) 2025-02-28 20:00:39 +00:00
context_server context_server: Abstract server transport (#24528) 2025-02-26 17:19:19 +00:00
context_server_settings Eliminate GPUI View, ViewContext, and WindowContext types (#22632) 2025-01-26 03:02:45 +00:00
copilot Rust 1.85 (#25272) 2025-02-28 18:33:35 +01:00
credentials_provider Use the development credentials provider in development by default (#25273) 2025-02-20 19:07:16 +00:00
db cx.background_executor().spawn(...) -> cx.background_spawn(...) (#25103) 2025-02-18 20:30:33 +00:00
deepseek Add DeepSeek support (#23551) 2025-01-27 13:40:59 -05:00
diagnostics Dismiss active diagnostics on invalidation (#25646) 2025-02-26 22:30:23 +02:00
docs_preprocessor Eliminate GPUI View, ViewContext, and WindowContext types (#22632) 2025-01-26 03:02:45 +00:00
editor Optimistically update hunk states when staging and unstaging hunks (#25687) 2025-02-28 20:55:29 +00:00
evals Revert "file_finder: Remove common segments of long paths in search results (#25049)" (#25163) 2025-02-19 15:32:29 +00:00
extension theme: Don't log errors for missing themes until extensions have loaded (#25098) 2025-02-18 17:47:25 +00:00
extension_api Rust 1.85 (#25272) 2025-02-28 18:33:35 +01:00
extension_cli extension_cli: Include the list of what an extension provides in the generated manifest (#24295) 2025-02-05 18:17:19 +00:00
extension_host Rust 1.85 (#25272) 2025-02-28 18:33:35 +01:00
extensions_ui git_ui: Commit modal refinement (#25484) 2025-02-24 19:19:06 +00:00
feature_flags zeta: Remove predict-edits-launch feature flag (#24829) 2025-02-13 21:48:09 +00:00
feedback cx.background_executor().spawn(...) -> cx.background_spawn(...) (#25103) 2025-02-18 20:30:33 +00:00
file_finder Rust 1.85 (#25272) 2025-02-28 18:33:35 +01:00
file_icons Allow icon themes to provide their own file associations (#24926) 2025-02-15 00:35:13 +00:00
fs Rust 1.85 (#25272) 2025-02-28 18:33:35 +01:00
fsevent Deflake fs::test_event_stream_simple (#24013) 2025-01-30 23:53:36 -07:00
fuzzy Rust 1.85 (#25272) 2025-02-28 18:33:35 +01:00
git git_ui: New panel design (#25821) 2025-02-28 20:00:39 +00:00
git_hosting_providers git_hosting_providers: Add support for Chromium repositories (#24881) 2025-02-20 19:11:32 -05:00
git_ui Optimistically update hunk states when staging and unstaging hunks (#25687) 2025-02-28 20:55:29 +00:00
go_to_line project: Fine-grained language server management (#24038) 2025-02-14 15:41:49 +01:00
google_ai Partially fix assistant onboarding (#25313) 2025-02-24 07:29:55 +00:00
gpui Rust 1.85 (#25272) 2025-02-28 18:33:35 +01:00
gpui_macros Revert "Hide the mouse when the user is typing in the editor (#25040)" (#25393) 2025-02-22 10:19:23 -05:00
gpui_tokio Make the gpui_tokio crate generic over the context it spawns (#23995) 2025-01-31 02:00:55 +00:00
html_to_markdown Eliminate GPUI View, ViewContext, and WindowContext types (#22632) 2025-01-26 03:02:45 +00:00
http_client Rust 1.85 (#25272) 2025-02-28 18:33:35 +01:00
image_viewer image_viewer: Hide breadcrumb (#25654) 2025-02-26 17:24:35 +01:00
indexed_docs Eliminate GPUI View, ViewContext, and WindowContext types (#22632) 2025-01-26 03:02:45 +00:00
inline_completion edit predictions: Show user if current project is open source (#24587) 2025-02-10 22:28:56 -03:00
inline_completion_button Support absolute disabled_globs (#25755) 2025-02-27 15:29:32 -03:00
install_cli Fix missed renames in #22632 (#23688) 2025-01-26 23:37:34 +00:00
journal cx.background_executor().spawn(...) -> cx.background_spawn(...) (#25103) 2025-02-18 20:30:33 +00:00
language Rust 1.85 (#25272) 2025-02-28 18:33:35 +01:00
language_extension Rust 1.85 (#25272) 2025-02-28 18:33:35 +01:00
language_model Rust 1.85 (#25272) 2025-02-28 18:33:35 +01:00
language_model_selector Move PopoverButton into ui (#25724) 2025-02-27 02:51:19 +00:00
language_models assistant: Refine settings view's instruction visuals (#25812) 2025-02-28 12:06:47 -03:00
language_selector Refactor to use SharedString in more places (#23813) 2025-01-28 19:04:21 -05:00
language_tools Persist selections for editors (#25083) 2025-02-18 14:27:00 +00:00
languages Rust 1.85 (#25272) 2025-02-28 18:33:35 +01:00
livekit_api Change license of crates/livekit_api from AGPL to GPL (#25206) 2025-02-19 23:32:51 +00:00
livekit_client cx.background_executor().spawn(...) -> cx.background_spawn(...) (#25103) 2025-02-18 20:30:33 +00:00
livekit_client_macos Rename livekit_server to livekit_api (#24984) 2025-02-16 20:24:12 +00:00
lmstudio lmstudio: Support missing quantization in model metadata (#24054) 2025-01-31 22:28:11 +00:00
lsp lsp: Use available workspace folders in initialize params (#25753) 2025-02-27 16:45:59 +01:00
markdown Remove language::markdown (#25136) 2025-02-19 08:55:36 -07:00
markdown_preview markdown_preview: Fix markdown preview not updating on AcceptEditPrediction (#25772) 2025-02-28 01:22:46 +05:30
media chore: Use workspace fields for edition and publish (#23291) 2025-01-17 17:39:22 +01:00
menu chore: Use workspace fields for edition and publish (#23291) 2025-01-17 17:39:22 +01:00
migrator migrator: Fix keymap task_name regression (#24898) 2025-02-15 01:33:30 +05:30
mistral assistant: Add Mistral support (#24879) 2025-02-14 13:07:41 -05:00
multi_buffer Optimistically update hunk states when staging and unstaging hunks (#25687) 2025-02-28 20:55:29 +00:00
node_runtime Pass extra CA certs to node process if env var exists (#23662) 2025-01-30 08:56:02 -08:00
notifications Rust 1.85 (#25272) 2025-02-28 18:33:35 +01:00
ollama Eliminate GPUI View, ViewContext, and WindowContext types (#22632) 2025-01-26 03:02:45 +00:00
open_ai Update Assistant context limits (#25087) 2025-02-19 11:06:20 -05:00
outline git_ui: Commit modal refinement (#25484) 2025-02-24 19:19:06 +00:00
outline_panel outline panel: Improve the search query header design (#25283) 2025-02-20 18:09:33 -03:00
panel git_ui: New panel design (#25821) 2025-02-28 20:00:39 +00:00
paths Settings/keymap backup path next to files + update notification messages (#24517) 2025-02-09 16:51:37 -07:00
picker ui: Remove track_focus method from Picker render (#25043) 2025-02-17 19:18:12 -03:00
prettier lsp: Use available workspace folders in initialize params (#25753) 2025-02-27 16:45:59 +01:00
project Optimistically update hunk states when staging and unstaging hunks (#25687) 2025-02-28 20:55:29 +00:00
project_panel Save buffers after restoring hunks in the project diff (#25620) 2025-02-26 15:16:17 -05:00
project_symbols windows: Fix tests on Windows (#22616) 2025-02-05 14:30:09 +00:00
prompt_library cx.background_executor().spawn(...) -> cx.background_spawn(...) (#25103) 2025-02-18 20:30:33 +00:00
proto editor: Add Organize Imports Action (#25793) 2025-03-01 00:59:09 +05:30
recent_projects Fix UI font size changes not applying (#25307) 2025-02-21 06:24:02 -03:00
refineable windows: Fix tests on Windows (#22616) 2025-02-05 14:30:09 +00:00
release_channel windows: Missing commit of #25412 (#25732) 2025-02-27 08:00:42 +00:00
remote ssh: Allow ssh -F ssh_config (#25619) 2025-02-26 16:23:25 -05:00
remote_server cx.background_executor().spawn(...) -> cx.background_spawn(...) (#25103) 2025-02-18 20:30:33 +00:00
repl Fix theme selector resetting the buffer size (#25425) 2025-02-23 15:24:43 +00:00
reqwest_client Redact Google Gemini API keys from error messaging and log (#24884) 2025-02-17 11:42:22 -05:00
rich_text Revert "file_finder: Remove common segments of long paths in search results (#25049)" (#25163) 2025-02-19 15:32:29 +00:00
rope Rust 1.85 (#25272) 2025-02-28 18:33:35 +01:00
rpc extensions_ui: Add general structure for filtering extensions by what they provide (#24325) 2025-02-06 00:09:37 +00:00
schema_generator Add schema_generator for generating JSON schemas (#23991) 2025-01-31 01:22:10 +00:00
search Rust 1.85 (#25272) 2025-02-28 18:33:35 +01:00
semantic_index Revert "file_finder: Remove common segments of long paths in search results (#25049)" (#25163) 2025-02-19 15:32:29 +00:00
semantic_version chore: Use workspace fields for edition and publish (#23291) 2025-01-17 17:39:22 +01:00
session cx.background_executor().spawn(...) -> cx.background_spawn(...) (#25103) 2025-02-18 20:30:33 +00:00
settings Rust 1.85 (#25272) 2025-02-28 18:33:35 +01:00
settings_ui Fix UI font size changes not applying (#25307) 2025-02-21 06:24:02 -03:00
snippet Eliminate GPUI View, ViewContext, and WindowContext types (#22632) 2025-01-26 03:02:45 +00:00
snippet_provider snippets: Fix snippets not updating while containing comments (#23755) 2025-01-28 10:37:48 +01:00
snippets_ui Remove more references to 'model' in GPUI APIs (#23693) 2025-01-27 04:00:27 +00:00
sqlez Rust 1.85 (#25272) 2025-02-28 18:33:35 +01:00
sqlez_macros windows: Fix tests on Windows (#22616) 2025-02-05 14:30:09 +00:00
story Eliminate GPUI View, ViewContext, and WindowContext types (#22632) 2025-01-26 03:02:45 +00:00
storybook ui: More component previews, UI component cleanup (#25302) 2025-02-21 09:20:53 -05:00
streaming_diff chore: Use workspace fields for edition and publish (#23291) 2025-01-17 17:39:22 +01:00
sum_tree Rust 1.85 (#25272) 2025-02-28 18:33:35 +01:00
supermaven Include prediction ID on edit prediction accepted/discarded events (#24480) 2025-02-07 22:06:37 +00:00
supermaven_api Eliminate GPUI View, ViewContext, and WindowContext types (#22632) 2025-01-26 03:02:45 +00:00
tab_switcher project: Fine-grained language server management (#24038) 2025-02-14 15:41:49 +01:00
task cx.background_executor().spawn(...) -> cx.background_spawn(...) (#25103) 2025-02-18 20:30:33 +00:00
tasks_ui Use active worktree's task sources (#25784) 2025-02-27 22:57:59 +00:00
telemetry chore: Use workspace fields for edition and publish (#23291) 2025-01-17 17:39:22 +01:00
telemetry_events Add build SHA to panic reports and zed --version (on nightly/dev) (#24258) 2025-02-06 02:09:24 -07:00
terminal Rust 1.85 (#25272) 2025-02-28 18:33:35 +01:00
terminal_view terminal: Update terminal reopening from global to per-workspace (#25336) 2025-02-22 00:05:52 +05:30
text Rust 1.85 (#25272) 2025-02-28 18:33:35 +01:00
theme git_ui: Commit modal refinement (#25484) 2025-02-24 19:19:06 +00:00
theme_extension theme: Don't log errors for missing themes until extensions have loaded (#25098) 2025-02-18 17:47:25 +00:00
theme_importer Add schema_generator for generating JSON schemas (#23991) 2025-01-31 01:22:10 +00:00
theme_selector icon_theme_selector: Add footer and related docs (#25042) 2025-02-20 00:02:24 +00:00
time_format Add an undo button to the git panel (#24593) 2025-02-12 15:57:08 -07:00
title_bar title_bar: Fix the order of the collab buttons (#25775) 2025-02-27 16:22:05 -05:00
toolchain_selector Revert "file_finder: Remove common segments of long paths in search results (#25049)" (#25163) 2025-02-19 15:32:29 +00:00
ui git_ui: New panel design (#25821) 2025-02-28 20:00:39 +00:00
ui_input Eliminate GPUI View, ViewContext, and WindowContext types (#22632) 2025-01-26 03:02:45 +00:00
ui_macros Fix UI font size changes not applying (#25307) 2025-02-21 06:24:02 -03:00
util Rust 1.85 (#25272) 2025-02-28 18:33:35 +01:00
util_macros windows: Fix tests on Windows (#22616) 2025-02-05 14:30:09 +00:00
vim vim: Combine match arms in Mode::is_visual (#25675) 2025-02-26 19:45:04 +00:00
vim_mode_setting Eliminate GPUI View, ViewContext, and WindowContext types (#22632) 2025-01-26 03:02:45 +00:00
welcome New commit review flow in project diff view (#25229) 2025-02-21 06:52:34 +00:00
workspace Save buffers after restoring hunks in the project diff (#25620) 2025-02-26 15:16:17 -05:00
worktree Rust 1.85 (#25272) 2025-02-28 18:33:35 +01:00
zed windows: Remove unnecessary code in #25412 (#25805) 2025-02-28 11:05:39 +00:00
zed_actions Adds a way to toggle font size without settings adjustments (#24857) 2025-02-14 13:27:48 +02:00
zeta zeta: Fix update required notification not showing (#25588) 2025-02-25 20:02:43 +00:00