ZIm/crates
smit 219d36f589
migrator: Add versioned migrations (#26215)
There is a drawback to how we currently write our migrations:

For example:

1. Suppose we change one of our actions from a string to an array and
rename it, then roll out the preview build:

      Before: `"ctrl-x": "editor::GoToPrevHunk"`
Latest: `"ctrl-x": ["editor::GoToPreviousHunk", { "center_cursor": true
}]`
      
To handle this, we wrote migration `A` to convert the string to an
array.

2. Now, suppose we decide to change it back to a string:
- User who hasn't migrated yet on Preview: `"ctrl-x":
"editor::GoToPrevHunk"`
- User who has migrated on Preview: `"ctrl-x":
["editor::GoToPreviousHunk", { "center_cursor": true }]`
    - Latest: `"ctrl-x": "editor::GoToPreviousHunk"`

To handle this, we would need to remove migration `A` and add two more
migrations:
- **Migration B**: `"ctrl-x": "editor::GoToPrevHunk"` -> `"ctrl-x":
"editor::GoToPreviousHunk"`
- **Migration C**: `"ctrl-x": ["editor::GoToPreviousHunk", {
"center_cursor": true }]` -> `"ctrl-x": "editor::GoToPreviousHunk"`

Nice. But over time, this keeps increasing, making it impossible to
track outdated versions and handle all cases. Missing a case means users
stuck on `"ctrl-x": "editor::GoToPrevHunk"` will remain there and won't
be automatically migrated to the latest state.

---

To fix this, we introduce versioned migrations. Instead of removing
migration `A`, we simply write a new migration that takes the user to
the latest version—i.e., in this case, migration `C`.

- A user who hasn't migrated before will go through both migrations `A`
and `C` in order.
- A user who has already migrated will only go through `C`, since `A`
wouldn't change anything for them.

With incremental migrations, we only need to write migrations on top of
the latest state (big win!), as know internally they all would be on
latest state. You *must not* modify previous migrations. Always create
new ones instead.

This also serves as base for only prompting user to migrate, when
feature reaches stable. That way, preview and stable keymap and settings
are in sync.

cc: @mgsloan @ConradIrwin @probably-neb 

Release Notes:

- N/A
2025-03-06 23:04:48 +05:30
..
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
askpass Git askpass (#25953) 2025-03-06 05:20:06 +00:00
assets Eliminate GPUI View, ViewContext, and WindowContext types (#22632) 2025-01-26 03:02:45 +00:00
assistant Fix language model selector (#26138) 2025-03-05 12:48:10 -05:00
assistant2 assistant2: Improve clarity of loading state (#26178) 2025-03-05 21:39:29 -03:00
assistant_context_editor Fix language model selector (#26138) 2025-03-05 12:48:10 -05: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 chore: Extract PromptStore out of prompt_library (#25837) 2025-03-01 00:34:28 +01:00
assistant_tool Eliminate GPUI View, ViewContext, and WindowContext types (#22632) 2025-01-26 03:02:45 +00:00
assistant_tools assistant_tools: Add list-worktrees and read-file tools (#26147) 2025-03-05 19:41:42 +00: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 Add user-visible output for remote operations (#25849) 2025-03-03 09:20:15 +00: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 Add user-visible output for remote operations (#25849) 2025-03-03 09:20:15 +00:00
buffer_diff Clear pending staged/unstaged diff hunks hunks when writing to the git index fails (#26173) 2025-03-05 18:45:09 -08: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 cli: Add extra paths in detect() on Windows (#25765) 2025-03-02 00:17:55 +08: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 Git askpass (#25953) 2025-03-06 05:20:06 +00:00
collab_ui keymap: Update Prev to Previous for consistency (#25909) 2025-03-03 17:44:49 +05:30
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: Prevent button overflow due to long names (#25940) 2025-03-03 18:38:15 +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 Add user-visible output for remote operations (#25849) 2025-03-03 09:20:15 +00:00
docs_preprocessor Eliminate GPUI View, ViewContext, and WindowContext types (#22632) 2025-01-26 03:02:45 +00:00
editor gpui: Rename rounded_sm to rounded_xs (#26221) 2025-03-06 16:08:19 +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 extension: Add capabilities for the process API (#26224) 2025-03-06 11:55:00 -05:00
extension_api Rust 1.85 (#25272) 2025-02-28 18:33:35 +01:00
extension_cli extension_cli: Make use of scrollbar_thumb.background a hard error (#25932) 2025-03-03 15:55:15 +00:00
extension_host extension: Add capabilities for the process API (#26224) 2025-03-06 11:55:00 -05:00
extensions_ui git_ui: Prevent button overflow due to long names (#25940) 2025-03-03 18:38:15 +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 workspace: Add trailing / to directories on completion when using OpenPathPrompt (#25430) 2025-03-04 14:01:08 +08:00
file_icons Allow icon themes to provide their own file associations (#24926) 2025-02-15 00:35:13 +00:00
fs Clear pending staged/unstaged diff hunks hunks when writing to the git index fails (#26173) 2025-03-05 18:45:09 -08:00
fsevent Deflake fs::test_event_stream_simple (#24013) 2025-01-30 23:53:36 -07:00
fuzzy workspace: Add trailing / to directories on completion when using OpenPathPrompt (#25430) 2025-03-04 14:01:08 +08:00
git Git askpass (#25953) 2025-03-06 05:20:06 +00:00
git_hosting_providers git_hosting_providers: Add support for Chromium repositories (#24881) 2025-02-20 19:11:32 -05:00
git_ui Git askpass (#25953) 2025-03-06 05:20:06 +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 gpui: Rename rounded_sm to rounded_xs (#26221) 2025-03-06 16:08:19 +00:00
gpui_macros gpui: Rename rounded_sm to rounded_xs (#26221) 2025-03-06 16:08:19 +00: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 Add support for auto-closing of JSX tags (#25681) 2025-03-06 08:36:10 -06: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 Fix language model selector (#26138) 2025-03-05 12:48:10 -05:00
language_models anthropic: Use an empty object if no tool input is provided (#26144) 2025-03-05 19:17:44 +00:00
language_selector Refactor to use SharedString in more places (#23813) 2025-01-28 19:04:21 -05:00
language_tools Make buffer search aware of search direction (#24974) 2025-03-04 19:27:37 -07:00
languages Add support for auto-closing of JSX tags (#25681) 2025-03-06 08:36:10 -06: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 markdown: Only change the copy code icon to a check temporarily (#26079) 2025-03-04 23:02:43 +00:00
markdown_preview gpui: Rename rounded_sm to rounded_xs (#26221) 2025-03-06 16:08:19 +00:00
media chore: Use workspace fields for edition and publish (#23291) 2025-01-17 17:39:22 +01:00
menu keymap: Update Prev to Previous for consistency (#25909) 2025-03-03 17:44:49 +05:30
migrator migrator: Add versioned migrations (#26215) 2025-03-06 23:04:48 +05:30
mistral assistant: Add Mistral support (#24879) 2025-02-14 13:07:41 -05:00
multi_buffer Add support for auto-closing of JSX tags (#25681) 2025-03-06 08:36:10 -06:00
node_runtime node_runtime: Use user/global configuration when using system node installation (#26209) 2025-03-06 12:50:42 +01: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 keymap: Update Prev to Previous for consistency (#25909) 2025-03-03 17:44:49 +05:30
outline_panel keymap: Update Prev to Previous for consistency (#25909) 2025-03-03 17:44:49 +05:30
panel git: Fix git commit font fallbacks (#26184) 2025-03-06 04:06:00 +00:00
paths Settings/keymap backup path next to files + update notification messages (#24517) 2025-02-09 16:51:37 -07:00
picker git: Make repo selector wider (#26149) 2025-03-05 13:02:29 -07:00
prettier lsp: Use available workspace folders in initialize params (#25753) 2025-02-27 16:45:59 +01:00
project Git askpass (#25953) 2025-03-06 05:20:06 +00:00
project_panel keymap: Update Prev to Previous for consistency (#25909) 2025-03-03 17:44:49 +05:30
project_symbols Add user-visible output for remote operations (#25849) 2025-03-03 09:20:15 +00:00
prompt_library chore: Extract PromptStore out of prompt_library (#25837) 2025-03-01 00:34:28 +01:00
prompt_store chore: Extract PromptStore out of prompt_library (#25837) 2025-03-01 00:34:28 +01:00
proto Git askpass (#25953) 2025-03-06 05:20:06 +00:00
recent_projects Git askpass (#25953) 2025-03-06 05:20:06 +00: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 Git askpass (#25953) 2025-03-06 05:20:06 +00:00
remote_server Git askpass (#25953) 2025-03-06 05:20:06 +00:00
repl gpui: Rename rounded_sm to rounded_xs (#26221) 2025-03-06 16:08:19 +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 Add user-visible output for remote operations (#25849) 2025-03-03 09:20:15 +00:00
rope Add support for auto-closing of JSX tags (#25681) 2025-03-06 08:36:10 -06: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 Improve schema_generator CLI (#25898) 2025-03-06 04:59:57 +00:00
scripting_tool Add initial scripting_tool (#26066) 2025-03-04 17:59:19 -05:00
search Make buffer search aware of search direction (#24974) 2025-03-04 19:27:37 -07: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 keymap: Update Prev to Previous for consistency (#25909) 2025-03-03 17:44:49 +05:30
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 keymap: Update Prev to Previous for consistency (#25909) 2025-03-03 17:44:49 +05:30
streaming_diff chore: Use workspace fields for edition and publish (#23291) 2025-01-17 17:39:22 +01:00
sum_tree Clear pending staged/unstaged diff hunks hunks when writing to the git index fails (#26173) 2025-03-05 18:45:09 -08: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 Fix left clicking the close button in the switcher (#25979) 2025-03-05 11:50:39 -08:00
task vim: Fix tab title when using !! and disable rerun button for terminal tasks (#26122) 2025-03-05 08:47:49 -07: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 vim: Fix tab title when using !! and disable rerun button for terminal tasks (#26122) 2025-03-05 08:47:49 -07:00
terminal_view Improve cmd-click in terminal to find more paths (#26174) 2025-03-06 00:41:13 +00:00
text Rust 1.85 (#25272) 2025-02-28 18:33:35 +01:00
theme Fix font sizes not reacting on settings change (#26060) 2025-03-04 20:57:37 +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 git_ui: Prevent button overflow due to long names (#25940) 2025-03-03 18:38:15 +00: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 gpui: Rename rounded_sm to rounded_xs (#26221) 2025-03-06 16:08:19 +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 Optimize JSON merging by removing redundant key clones in serde_json operations (#25866) 2025-03-01 14:13:38 -05:00
util_macros windows: Fix tests on Windows (#22616) 2025-02-05 14:30:09 +00:00
vim vim: Implement <count>% motion (#25839) 2025-03-05 19:59:18 -07: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 Make buffer search aware of search direction (#24974) 2025-03-04 19:27:37 -07:00
worktree Disable uncommit button for parentless commits (#25983) 2025-03-05 23:23:05 +00:00
zed gpui: Rename rounded_sm to rounded_xs (#26221) 2025-03-06 16:08:19 +00:00
zed_actions Adds a way to toggle font size without settings adjustments (#24857) 2025-02-14 13:27:48 +02:00
zeta keymap: Update Prev to Previous for consistency (#25909) 2025-03-03 17:44:49 +05:30