Closes #60424 ## Problem With the repro from #60424, staging the first deletion hunk marked the second deletion as staged in the UI even though git still had it unstaged, and clicking the (incorrectly shown) Unstage button inserted a duplicate copy of the hunk's contents into the git index on every click. The root cause is ambiguous hunk placement. The committed text contains repeated `end\n\n` line runs, so the deletion hunks can "slide": more than one placement produces a minimal diff. The uncommitted diff (HEAD vs worktree) anchored the remaining deletion at one row while the unstaged diff (index vs worktree), recomputed after the partial stage, anchored the same logical deletion at a different row. Everything that correlates hunks across those two diffs assumes they agree on positions: - the secondary-status matching in `hunks_intersecting_range_impl` found no unstaged hunk at the uncommitted hunk's rows and reported it as staged (`NoSecondaryHunk`); - the worktree→index projection in `compute_uncommitted_index_edits` treated the hunk's position as unchanged text and, on unstage, inserted the hunk's HEAD content at an index position that already contained it, duplicating it on every request. ## Fix Upgrade `imara-diff` from 0.1.8 to 0.2.0 and run `Diff::postprocess_lines` (imara-diff's port of git's xdiff slider/indent heuristic) after computing hunks in `buffer_diff`. This canonicalizes the placement of ambiguous hunks based only on their local content, so diffs of the same buffer against different base texts anchor the same logical change at the same rows. A bonus is that Zed's hunk placement now matches `git diff`'s output for such cases (git has used the indent heuristic by default since 2.11). As defense in depth, `compute_uncommitted_index_edits` now drops a pure-insertion index edit whose content is already present at the target position, so a stale secondary status can no longer duplicate index content. The imara-diff 0.2 API removed the `Sink` trait and the top-level `diff()` function, so the other call sites (`language/text_diff.rs`, `zeta_prompt/udiff.rs`, `edit_prediction_metrics/reversal.rs`) are migrated mechanically to `Diff::compute` + `hunks()` with unchanged behavior (0.2 also renamed `lines_with_terminator` to `lines` and changed the default `&str` tokenization to include terminators; the unified-diff builders keep terminator-less tokens via `str::lines()`). ## Testing - New regression test `test_staging_hunks_with_ambiguous_placement` replays the exact repro from #60424 (same file contents): stages the first deletion, asserts the remaining hunks keep their unstaged status and the index matches exactly, then issues repeated unstage requests for the unstaged hunk and asserts the index is unchanged. Before the fix this test showed the second hunk flipping to staged and the index growing by one copy of the deleted block per unstage request. - `buffer_diff`, `language`, `zeta_prompt`, `edit_prediction_metrics`, `multi_buffer`, `git_ui`, `editor`, and the `project` integration suite pass. - One test expectation updated: `editor::test_fold_function_bodies` asserted the old placement of an ambiguous deletion (blank line before comment); the canonicalized placement (comment before blank line) matches what `git diff` produces for the same texts. Release Notes: - Fixed staging a hunk sometimes marking a different hunk as staged (and subsequent unstaging corrupting the git index) when the diff contained repeated lines ([#60424](https://github.com/zed-industries/zed/issues/60424)). --------- Co-authored-by: Cole Miller <cole@zed.dev>
1114 lines
37 KiB
TOML
1114 lines
37 KiB
TOML
[workspace]
|
|
resolver = "2"
|
|
members = [
|
|
"crates/acp_thread",
|
|
"crates/acp_tools",
|
|
"crates/action_log",
|
|
"crates/activity_indicator",
|
|
"crates/agent",
|
|
"crates/agent_servers",
|
|
"crates/agent_settings",
|
|
"crates/agent_skills",
|
|
"crates/agent_ui",
|
|
"crates/ai_onboarding",
|
|
"crates/anthropic",
|
|
"crates/askpass",
|
|
"crates/assets",
|
|
"crates/audio",
|
|
"crates/auto_update",
|
|
"crates/auto_update_helper",
|
|
"crates/auto_update_ui",
|
|
"crates/aws_http_client",
|
|
"crates/bedrock",
|
|
"crates/benchmarks",
|
|
"crates/breadcrumbs",
|
|
"crates/buffer_diff",
|
|
"crates/call",
|
|
"crates/channel",
|
|
"crates/cli",
|
|
"crates/client",
|
|
"crates/clock",
|
|
"crates/cloud_api_client",
|
|
"crates/cloud_api_types",
|
|
"crates/cloud_llm_client",
|
|
"crates/codestral",
|
|
"crates/collab",
|
|
"crates/collab_ui",
|
|
"crates/collections",
|
|
"crates/command_palette",
|
|
"crates/command_palette_hooks",
|
|
"crates/component",
|
|
"crates/component_preview",
|
|
"crates/context_server",
|
|
"crates/copilot",
|
|
"crates/copilot_chat",
|
|
"crates/crashes",
|
|
"crates/credentials_provider",
|
|
"crates/csv_preview",
|
|
"crates/dap",
|
|
"crates/dap_adapters",
|
|
"crates/db",
|
|
"crates/debug_adapter_extension",
|
|
"crates/debugger_tools",
|
|
"crates/debugger_ui",
|
|
"crates/deepseek",
|
|
"crates/dev_container",
|
|
"crates/diagnostics",
|
|
"crates/docs_preprocessor",
|
|
"crates/edit_prediction",
|
|
"crates/edit_prediction_cli",
|
|
"crates/edit_prediction_context",
|
|
"crates/edit_prediction_metrics",
|
|
"crates/edit_prediction_types",
|
|
"crates/edit_prediction_ui",
|
|
"crates/editor",
|
|
"crates/editor_benchmarks",
|
|
"crates/encoding_selector",
|
|
"crates/env_var",
|
|
"crates/etw_tracing",
|
|
"crates/eval_cli",
|
|
"crates/eval_utils",
|
|
"crates/explorer_command_injector",
|
|
"crates/extension",
|
|
"crates/extension_api",
|
|
"crates/extension_cli",
|
|
"crates/extension_host",
|
|
"crates/extensions_ui",
|
|
"crates/feature_flags",
|
|
"crates/feature_flags_macros",
|
|
"crates/feedback",
|
|
"crates/file_finder",
|
|
"crates/file_icons",
|
|
"crates/fs",
|
|
"crates/fs_benchmarks",
|
|
"crates/fuzzy",
|
|
"crates/fuzzy_nucleo",
|
|
"crates/git",
|
|
"crates/git_hosting_providers",
|
|
"crates/git_ui",
|
|
"crates/go_to_line",
|
|
"crates/google_ai",
|
|
"crates/grammars",
|
|
"crates/gpui",
|
|
"crates/gpui_shared_string",
|
|
"crates/gpui_linux",
|
|
"crates/gpui_macos",
|
|
"crates/gpui_macros",
|
|
"crates/gpui_platform",
|
|
"crates/gpui_tokio",
|
|
"crates/gpui_util",
|
|
"crates/gpui_web",
|
|
"crates/gpui_wgpu",
|
|
"crates/gpui_windows",
|
|
"crates/html_to_markdown",
|
|
"crates/http_client",
|
|
"crates/http_client_tls",
|
|
"crates/http_proxy",
|
|
"crates/icons",
|
|
"crates/image_viewer",
|
|
"crates/input_latency_ui",
|
|
"crates/inspector_ui",
|
|
"crates/install_cli",
|
|
"crates/journal",
|
|
"crates/json_schema_store",
|
|
"crates/keymap_editor",
|
|
"crates/language",
|
|
"crates/language_core",
|
|
"crates/language_extension",
|
|
"crates/language_model",
|
|
"crates/language_model_core",
|
|
"crates/language_models",
|
|
"crates/language_models_cloud",
|
|
"crates/language_onboarding",
|
|
"crates/language_selector",
|
|
"crates/language_tools",
|
|
"crates/languages",
|
|
"crates/line_ending_selector",
|
|
"crates/livekit_api",
|
|
"crates/livekit_client",
|
|
"crates/llama_cpp",
|
|
"crates/lmstudio",
|
|
"crates/lsp",
|
|
"crates/lsp_locations",
|
|
"crates/markdown",
|
|
"crates/markdown_preview",
|
|
"crates/mermaid_render",
|
|
"crates/media",
|
|
"crates/menu",
|
|
"crates/migrator",
|
|
"crates/miniprofiler_ui",
|
|
"crates/mistral",
|
|
"crates/multi_buffer",
|
|
"crates/net",
|
|
"crates/node_runtime",
|
|
"crates/notifications",
|
|
"crates/oauth_callback_server",
|
|
"crates/ollama",
|
|
"crates/onboarding",
|
|
"crates/opencode",
|
|
"crates/open_ai",
|
|
"crates/open_path_prompt",
|
|
"crates/open_router",
|
|
"crates/outline",
|
|
"crates/outline_panel",
|
|
"crates/panel",
|
|
"crates/path",
|
|
"crates/paths",
|
|
"crates/picker",
|
|
"crates/picker_preview",
|
|
"crates/platform_title_bar",
|
|
"crates/prettier",
|
|
"crates/project",
|
|
"crates/project_benchmarks",
|
|
"crates/project_panel",
|
|
"crates/project_symbols",
|
|
"crates/prompt_store",
|
|
"crates/proto",
|
|
"crates/recent_projects",
|
|
"crates/refineable",
|
|
"crates/refineable/derive_refineable",
|
|
"crates/release_channel",
|
|
"crates/remote",
|
|
"crates/remote_connection",
|
|
"crates/remote_server",
|
|
"crates/repl",
|
|
"crates/reqwest_client",
|
|
"crates/rope",
|
|
"crates/rpc",
|
|
"crates/sandbox",
|
|
"crates/scheduler",
|
|
"crates/schema_generator",
|
|
"crates/search",
|
|
"crates/session",
|
|
"crates/settings",
|
|
"crates/settings_content",
|
|
"crates/settings_json",
|
|
"crates/settings_macros",
|
|
"crates/settings_profile_selector",
|
|
"crates/settings_ui",
|
|
"crates/shell_command_parser",
|
|
"crates/sidebar",
|
|
"crates/snippet",
|
|
"crates/snippet_provider",
|
|
"crates/snippets_ui",
|
|
"crates/sqlez",
|
|
"crates/sqlez_macros",
|
|
"crates/streaming_diff",
|
|
"crates/sum_tree",
|
|
"crates/svg_preview",
|
|
"crates/system_specs",
|
|
"crates/syntax_theme",
|
|
"crates/tab_switcher",
|
|
"crates/task",
|
|
"crates/tasks_ui",
|
|
"crates/telemetry",
|
|
"crates/telemetry_events",
|
|
"crates/terminal",
|
|
"crates/terminal_view",
|
|
"crates/text",
|
|
"crates/theme",
|
|
"crates/theme_extension",
|
|
"crates/theme_settings",
|
|
"crates/theme_importer",
|
|
"crates/theme_selector",
|
|
"crates/time_format",
|
|
"crates/title_bar",
|
|
"crates/toolchain_selector",
|
|
"crates/ui",
|
|
"crates/ui_input",
|
|
"crates/ui_macros",
|
|
"crates/ui_prompt",
|
|
"crates/util",
|
|
"crates/util_macros",
|
|
"crates/vim",
|
|
"crates/vim_mode_setting",
|
|
"crates/watch",
|
|
"crates/web_search",
|
|
"crates/web_search_providers",
|
|
"crates/which_key",
|
|
"crates/workspace",
|
|
"crates/worktree",
|
|
"crates/worktree_benchmarks",
|
|
"crates/x_ai",
|
|
"crates/zed",
|
|
"crates/zed_actions",
|
|
"crates/windows_resources",
|
|
"crates/zed_credentials_provider",
|
|
"crates/zed_env_vars",
|
|
"crates/zeta_prompt",
|
|
"crates/zlog",
|
|
"crates/zlog_settings",
|
|
"crates/ztracing",
|
|
"crates/ztracing_macro",
|
|
|
|
#
|
|
# Extensions
|
|
#
|
|
|
|
"extensions/glsl",
|
|
"extensions/html",
|
|
"extensions/proto",
|
|
"extensions/test-extension",
|
|
|
|
#
|
|
# Tooling
|
|
#
|
|
|
|
"tooling/compliance",
|
|
"tooling/perf",
|
|
"tooling/xtask",
|
|
]
|
|
default-members = ["crates/zed"]
|
|
|
|
[workspace.package]
|
|
publish = false
|
|
edition = "2024"
|
|
|
|
[workspace.dependencies]
|
|
|
|
#
|
|
# Workspace member crates
|
|
#
|
|
|
|
acp_tools = { path = "crates/acp_tools" }
|
|
acp_thread = { path = "crates/acp_thread" }
|
|
action_log = { path = "crates/action_log" }
|
|
activity_indicator = { path = "crates/activity_indicator" }
|
|
agent = { path = "crates/agent" }
|
|
agent_servers = { path = "crates/agent_servers" }
|
|
agent_settings = { path = "crates/agent_settings" }
|
|
agent_skills = { path = "crates/agent_skills" }
|
|
agent_ui = { path = "crates/agent_ui" }
|
|
ai_onboarding = { path = "crates/ai_onboarding" }
|
|
anthropic = { path = "crates/anthropic" }
|
|
askpass = { path = "crates/askpass" }
|
|
assets = { path = "crates/assets" }
|
|
audio = { path = "crates/audio" }
|
|
auto_update = { path = "crates/auto_update" }
|
|
auto_update_ui = { path = "crates/auto_update_ui" }
|
|
aws_http_client = { path = "crates/aws_http_client" }
|
|
bedrock = { path = "crates/bedrock" }
|
|
breadcrumbs = { path = "crates/breadcrumbs" }
|
|
buffer_diff = { path = "crates/buffer_diff" }
|
|
call = { path = "crates/call" }
|
|
channel = { path = "crates/channel" }
|
|
cli = { path = "crates/cli" }
|
|
client = { path = "crates/client" }
|
|
clock = { path = "crates/clock" }
|
|
cloud_api_client = { path = "crates/cloud_api_client" }
|
|
cloud_api_types = { path = "crates/cloud_api_types" }
|
|
cloud_llm_client = { path = "crates/cloud_llm_client" }
|
|
collab = { path = "crates/collab" }
|
|
collab_ui = { path = "crates/collab_ui" }
|
|
collections = { path = "crates/collections", version = "0.1.0" }
|
|
command_palette = { path = "crates/command_palette" }
|
|
command_palette_hooks = { path = "crates/command_palette_hooks" }
|
|
compliance = { path = "tooling/compliance" }
|
|
component = { path = "crates/component" }
|
|
component_preview = { path = "crates/component_preview" }
|
|
console = "0.16"
|
|
context_server = { path = "crates/context_server" }
|
|
copilot = { path = "crates/copilot" }
|
|
copilot_chat = { path = "crates/copilot_chat" }
|
|
copilot_ui = { path = "crates/copilot_ui" }
|
|
crashes = { path = "crates/crashes" }
|
|
credentials_provider = { path = "crates/credentials_provider" }
|
|
crossbeam = "0.8.4"
|
|
csv_preview = { path = "crates/csv_preview"}
|
|
dap = { path = "crates/dap" }
|
|
dap_adapters = { path = "crates/dap_adapters" }
|
|
db = { path = "crates/db" }
|
|
debug_adapter_extension = { path = "crates/debug_adapter_extension" }
|
|
debugger_tools = { path = "crates/debugger_tools" }
|
|
debugger_ui = { path = "crates/debugger_ui" }
|
|
deepseek = { path = "crates/deepseek" }
|
|
derive_refineable = { path = "crates/refineable/derive_refineable" }
|
|
dev_container = { path = "crates/dev_container" }
|
|
diagnostics = { path = "crates/diagnostics" }
|
|
dialoguer = { version = "0.12", default-features = false }
|
|
editor = { path = "crates/editor" }
|
|
encoding_selector = { path = "crates/encoding_selector" }
|
|
env_var = { path = "crates/env_var" }
|
|
etw_tracing = { path = "crates/etw_tracing" }
|
|
eval_utils = { path = "crates/eval_utils" }
|
|
extension = { path = "crates/extension" }
|
|
extension_host = { path = "crates/extension_host" }
|
|
extensions_ui = { path = "crates/extensions_ui" }
|
|
feature_flags = { path = "crates/feature_flags" }
|
|
feature_flags_macros = { path = "crates/feature_flags_macros" }
|
|
feedback = { path = "crates/feedback" }
|
|
file_finder = { path = "crates/file_finder" }
|
|
file_icons = { path = "crates/file_icons" }
|
|
fs = { path = "crates/fs" }
|
|
fuzzy = { path = "crates/fuzzy" }
|
|
fuzzy_nucleo = { path = "crates/fuzzy_nucleo" }
|
|
git = { path = "crates/git" }
|
|
git_hosting_providers = { path = "crates/git_hosting_providers" }
|
|
git_ui = { path = "crates/git_ui" }
|
|
go_to_line = { path = "crates/go_to_line" }
|
|
google_ai = { path = "crates/google_ai" }
|
|
grammars = { path = "crates/grammars" }
|
|
gpui = { path = "crates/gpui", default-features = false }
|
|
gpui_shared_string = { path = "crates/gpui_shared_string" }
|
|
gpui_linux = { path = "crates/gpui_linux", default-features = false }
|
|
gpui_macos = { path = "crates/gpui_macos", default-features = false }
|
|
gpui_macros = { path = "crates/gpui_macros" }
|
|
gpui_platform = { path = "crates/gpui_platform", default-features = false }
|
|
gpui_web = { path = "crates/gpui_web" }
|
|
gpui_wgpu = { path = "crates/gpui_wgpu" }
|
|
gpui_windows = { path = "crates/gpui_windows", default-features = false }
|
|
gpui_tokio = { path = "crates/gpui_tokio" }
|
|
gpui_util = { path = "crates/gpui_util" }
|
|
html_to_markdown = { path = "crates/html_to_markdown" }
|
|
http_client = { path = "crates/http_client" }
|
|
http_client_tls = { path = "crates/http_client_tls" }
|
|
http_proxy = { path = "crates/http_proxy" }
|
|
icons = { path = "crates/icons" }
|
|
image_viewer = { path = "crates/image_viewer" }
|
|
edit_prediction_types = { path = "crates/edit_prediction_types" }
|
|
edit_prediction_ui = { path = "crates/edit_prediction_ui" }
|
|
edit_prediction_context = { path = "crates/edit_prediction_context" }
|
|
input_latency_ui = { path = "crates/input_latency_ui" }
|
|
inspector_ui = { path = "crates/inspector_ui" }
|
|
install_cli = { path = "crates/install_cli" }
|
|
journal = { path = "crates/journal" }
|
|
json_schema_store = { path = "crates/json_schema_store" }
|
|
keymap_editor = { path = "crates/keymap_editor" }
|
|
language = { path = "crates/language" }
|
|
language_core = { path = "crates/language_core" }
|
|
language_extension = { path = "crates/language_extension" }
|
|
language_model = { path = "crates/language_model" }
|
|
language_model_core = { path = "crates/language_model_core" }
|
|
language_models = { path = "crates/language_models" }
|
|
language_models_cloud = { path = "crates/language_models_cloud" }
|
|
language_onboarding = { path = "crates/language_onboarding" }
|
|
language_selector = { path = "crates/language_selector" }
|
|
language_tools = { path = "crates/language_tools" }
|
|
languages = { path = "crates/languages" }
|
|
line_ending_selector = { path = "crates/line_ending_selector" }
|
|
livekit_api = { path = "crates/livekit_api" }
|
|
livekit_client = { path = "crates/livekit_client" }
|
|
llama_cpp = { path = "crates/llama_cpp" }
|
|
lmstudio = { path = "crates/lmstudio" }
|
|
lsp = { path = "crates/lsp" }
|
|
lsp_locations = { path = "crates/lsp_locations" }
|
|
markdown = { path = "crates/markdown" }
|
|
markdown_preview = { path = "crates/markdown_preview" }
|
|
mermaid_render = { path = "crates/mermaid_render" }
|
|
svg_preview = { path = "crates/svg_preview" }
|
|
media = { path = "crates/media" }
|
|
menu = { path = "crates/menu" }
|
|
mime = "0.3.17"
|
|
migrator = { path = "crates/migrator" }
|
|
mistral = { path = "crates/mistral" }
|
|
multi_buffer = { path = "crates/multi_buffer" }
|
|
miniprofiler_ui = { path = "crates/miniprofiler_ui" }
|
|
net = { path = "crates/net" }
|
|
node_runtime = { path = "crates/node_runtime" }
|
|
notifications = { path = "crates/notifications" }
|
|
oauth_callback_server = { path = "crates/oauth_callback_server" }
|
|
ollama = { path = "crates/ollama" }
|
|
onboarding = { path = "crates/onboarding" }
|
|
opencode = { path = "crates/opencode" }
|
|
open_ai = { path = "crates/open_ai" }
|
|
open_path_prompt = { path = "crates/open_path_prompt" }
|
|
open_router = { path = "crates/open_router", features = ["schemars"] }
|
|
outline = { path = "crates/outline" }
|
|
outline_panel = { path = "crates/outline_panel" }
|
|
panel = { path = "crates/panel" }
|
|
paths = { path = "crates/paths" }
|
|
path = { path = "crates/path" }
|
|
perf = { path = "tooling/perf" }
|
|
picker = { path = "crates/picker" }
|
|
picker_preview = { path = "crates/picker_preview" }
|
|
prettier = { path = "crates/prettier" }
|
|
settings_profile_selector = { path = "crates/settings_profile_selector" }
|
|
project = { path = "crates/project" }
|
|
project_panel = { path = "crates/project_panel" }
|
|
project_symbols = { path = "crates/project_symbols" }
|
|
prompt_store = { path = "crates/prompt_store" }
|
|
proto = { path = "crates/proto" }
|
|
recent_projects = { path = "crates/recent_projects" }
|
|
refineable = { path = "crates/refineable" }
|
|
release_channel = { path = "crates/release_channel" }
|
|
remote = { path = "crates/remote" }
|
|
remote_connection = { path = "crates/remote_connection" }
|
|
remote_server = { path = "crates/remote_server" }
|
|
repl = { path = "crates/repl" }
|
|
reqwest_client = { path = "crates/reqwest_client" }
|
|
rodio = { git = "https://github.com/RustAudio/rodio", rev = "e50e726ddd0292f6ef9de0dda6b90af4ed1fb66a", features = ["wav", "playback", "wav_output", "recording"] }
|
|
rope = { path = "crates/rope" }
|
|
rpc = { path = "crates/rpc" }
|
|
scheduler = { path = "crates/scheduler" }
|
|
sandbox = { path = "crates/sandbox" }
|
|
search = { path = "crates/search" }
|
|
session = { path = "crates/session" }
|
|
sidebar = { path = "crates/sidebar" }
|
|
settings = { path = "crates/settings" }
|
|
settings_content = { path = "crates/settings_content" }
|
|
settings_json = { path = "crates/settings_json" }
|
|
settings_macros = { path = "crates/settings_macros" }
|
|
settings_ui = { path = "crates/settings_ui" }
|
|
shell_command_parser = { path = "crates/shell_command_parser" }
|
|
snippet = { path = "crates/snippet" }
|
|
snippet_provider = { path = "crates/snippet_provider" }
|
|
snippets_ui = { path = "crates/snippets_ui" }
|
|
sqlez = { path = "crates/sqlez" }
|
|
sqlez_macros = { path = "crates/sqlez_macros" }
|
|
streaming_diff = { path = "crates/streaming_diff" }
|
|
sum_tree = { path = "crates/sum_tree" }
|
|
codestral = { path = "crates/codestral" }
|
|
system_specs = { path = "crates/system_specs" }
|
|
syntax_theme = { path = "crates/syntax_theme" }
|
|
tab_switcher = { path = "crates/tab_switcher" }
|
|
task = { path = "crates/task" }
|
|
tasks_ui = { path = "crates/tasks_ui" }
|
|
telemetry = { path = "crates/telemetry" }
|
|
telemetry_events = { path = "crates/telemetry_events" }
|
|
terminal = { path = "crates/terminal" }
|
|
terminal_view = { path = "crates/terminal_view" }
|
|
text = { path = "crates/text" }
|
|
theme = { path = "crates/theme" }
|
|
theme_extension = { path = "crates/theme_extension" }
|
|
theme_settings = { path = "crates/theme_settings" }
|
|
theme_selector = { path = "crates/theme_selector" }
|
|
time_format = { path = "crates/time_format" }
|
|
platform_title_bar = { path = "crates/platform_title_bar" }
|
|
title_bar = { path = "crates/title_bar" }
|
|
toolchain_selector = { path = "crates/toolchain_selector" }
|
|
ui = { path = "crates/ui" }
|
|
ui_input = { path = "crates/ui_input" }
|
|
ui_macros = { path = "crates/ui_macros" }
|
|
ui_prompt = { path = "crates/ui_prompt" }
|
|
util = { path = "crates/util" }
|
|
util_macros = { path = "crates/util_macros" }
|
|
vim = { path = "crates/vim" }
|
|
vim_mode_setting = { path = "crates/vim_mode_setting" }
|
|
which_key = { path = "crates/which_key" }
|
|
|
|
watch = { path = "crates/watch" }
|
|
web_search = { path = "crates/web_search" }
|
|
web_search_providers = { path = "crates/web_search_providers" }
|
|
workspace = { path = "crates/workspace" }
|
|
worktree = { path = "crates/worktree" }
|
|
x_ai = { path = "crates/x_ai" }
|
|
zed = { path = "crates/zed" }
|
|
zed_actions = { path = "crates/zed_actions" }
|
|
zed_credentials_provider = { path = "crates/zed_credentials_provider" }
|
|
zed_env_vars = { path = "crates/zed_env_vars" }
|
|
edit_prediction = { path = "crates/edit_prediction" }
|
|
edit_prediction_metrics = { path = "crates/edit_prediction_metrics" }
|
|
zeta_prompt = { path = "crates/zeta_prompt" }
|
|
zlog = { path = "crates/zlog" }
|
|
zlog_settings = { path = "crates/zlog_settings" }
|
|
ztracing = { path = "crates/ztracing" }
|
|
ztracing_macro = { path = "crates/ztracing_macro" }
|
|
|
|
#
|
|
# External crates
|
|
#
|
|
|
|
accesskit = { version = "0.24.0", features = ["enumn"] }
|
|
accesskit_macos = "0.26.0"
|
|
accesskit_unix = "0.21.0"
|
|
accesskit_windows = "0.33.1"
|
|
agent-client-protocol = { version = "=1.1.0", features = ["unstable"] }
|
|
aho-corasick = "1.1"
|
|
alacritty_terminal = { git = "https://github.com/zed-industries/alacritty", rev = "4c129667ce56611becdc82de6e28218c80e2e88f" }
|
|
any_vec = "0.14"
|
|
anyhow = "1.0.86"
|
|
ashpd = { version = "0.13", default-features = false, features = [
|
|
"async-io",
|
|
"notification",
|
|
"open_uri",
|
|
"file_chooser",
|
|
"settings",
|
|
"trash"
|
|
] }
|
|
async-channel = "2.5.0"
|
|
async-compat = "0.2.1"
|
|
async-compression = { version = "0.4", features = ["bzip2", "gzip", "futures-io"] }
|
|
async-dispatcher = "0.1"
|
|
async-fs = "2.1"
|
|
async-io = "2.6.0"
|
|
async-lock = "3.4.2"
|
|
async-pipe = { git = "https://github.com/zed-industries/async-pipe-rs", rev = "82d00a04211cf4e1236029aa03e6b6ce2a74c553" }
|
|
async-recursion = "1.0.0"
|
|
# `unstable` is required to compile async-tar's Windows symlink support.
|
|
async-std = { version = "1.12", features = ["unstable"] }
|
|
async-tar = "0.6"
|
|
async-task = "4.7"
|
|
async-trait = "0.1"
|
|
async-tungstenite = "0.31.0"
|
|
async-process = "2.5.0"
|
|
async_zip = { version = "0.0.18", features = ["deflate", "deflate64"] }
|
|
aws-config = { version = "1.8.10", features = ["behavior-version-latest"] }
|
|
aws-credential-types = { version = "1.2.8", features = [
|
|
"hardcoded-credentials",
|
|
] }
|
|
aws-sdk-bedrockruntime = { version = "1.112.0", features = [
|
|
"behavior-version-latest",
|
|
] }
|
|
aws-sigv4 = { version = "1.4.0", features = ["http1"] }
|
|
aws-smithy-runtime-api = { version = "1.9.2", features = ["http-1x", "client"] }
|
|
aws-smithy-types = { version = "1.3.4", features = ["http-body-1-x"] }
|
|
backtrace = "0.3"
|
|
base64 = "0.22"
|
|
bitflags = "2.6.0"
|
|
block2 = "0.6"
|
|
brotli = "8.0.2"
|
|
bytes = "1.0"
|
|
cargo_metadata = "0.19"
|
|
cargo_toml = "0.21"
|
|
brush-parser = "0.3"
|
|
cfg-if = "1.0.3"
|
|
chardetng = "0.1"
|
|
chrono = { version = "0.4", features = ["serde"] }
|
|
ciborium = "0.2"
|
|
circular-buffer = "1.0"
|
|
clap = { version = "4.4", features = ["derive", "wrap_help"] }
|
|
clap_complete = { version = "4.4" }
|
|
clap_complete_nushell = { version = "4.4" }
|
|
cocoa = "=0.26.0"
|
|
cocoa-foundation = "=0.2.0"
|
|
const_format = "0.2"
|
|
convert_case = "0.11.0"
|
|
core-foundation = "0.10"
|
|
core-foundation-sys = "0.8.6"
|
|
core-video = { version = "0.5.2", features = ["metal"] }
|
|
cpal = "0.17"
|
|
crash-handler = "0.7"
|
|
criterion = { version = "0.5", features = ["html_reports"] }
|
|
ctor = "1.0.6"
|
|
dap-types = { git = "https://github.com/zed-industries/dap-types", rev = "1b461b310481d01e02b2603c16d7144b926339f8" }
|
|
dashmap = "6.0"
|
|
derive_more = { version = "2.1.1", features = [
|
|
"add",
|
|
"add_assign",
|
|
"deref",
|
|
"deref_mut",
|
|
"display",
|
|
"from_str",
|
|
"mul",
|
|
"mul_assign",
|
|
"not",
|
|
] }
|
|
dirs = "6.0"
|
|
documented = "0.9.1"
|
|
dotenvy = "0.15.0"
|
|
dunce = "1.0"
|
|
ec4rs = { version = "1.2", features = ["allow-empty-values"] }
|
|
emojis = "0.6.1"
|
|
env_logger = "0.11"
|
|
encoding_rs = "0.8"
|
|
exec = "0.3.1"
|
|
fancy-regex = "0.18.0"
|
|
fork = "0.4.0"
|
|
flume = "0.12"
|
|
futures = "0.3.32"
|
|
futures-concurrency = "7.7.1"
|
|
futures-lite = "1.13"
|
|
futures-util = "0.3.32"
|
|
gh-workflow = { git = "https://github.com/zed-industries/gh-workflow", rev = "37f3c0575d379c218a9c455ee67585184e40d43f" }
|
|
|
|
globset = "0.4"
|
|
heapless = "0.9.2"
|
|
handlebars = "4.3"
|
|
heck = "0.5"
|
|
hdrhistogram = "7"
|
|
heed = { version = "0.21.0", features = ["read-txn-no-tls"] }
|
|
hex = "0.4.3"
|
|
human_bytes = "0.4.1"
|
|
html5ever = "0.27.0"
|
|
http = "1.1"
|
|
http-body = "1.0"
|
|
httparse = "1.10"
|
|
idna = "1.0"
|
|
ignore = "0.4.22"
|
|
# image's default features minus "avif", which only adds an encoder (rav1e);
|
|
# decoding AVIF would additionally need the non-default "avif-native" feature.
|
|
image = { version = "0.25.1", default-features = false, features = [
|
|
"bmp",
|
|
"dds",
|
|
"exr",
|
|
"ff",
|
|
"gif",
|
|
"hdr",
|
|
"ico",
|
|
"jpeg",
|
|
"png",
|
|
"pnm",
|
|
"qoi",
|
|
"rayon",
|
|
"tga",
|
|
"tiff",
|
|
"webp",
|
|
] }
|
|
imara-diff = "0.2.0"
|
|
indexmap = { version = "2.7.0", features = ["serde"] }
|
|
indoc = "2"
|
|
inventory = "0.3.19"
|
|
itertools = "0.14.0"
|
|
json_dotpath = "1.1"
|
|
jsonschema = "0.37.0"
|
|
jsonwebtoken = "10.0"
|
|
jupyter-protocol = "1.4.0"
|
|
jupyter-websocket-client = "1.1.0"
|
|
libc = "0.2"
|
|
libsqlite3-sys = { version = "0.30.1", features = ["bundled"] }
|
|
linkify = "0.10.0"
|
|
libwebrtc = "0.3.26"
|
|
livekit = { version = "0.7.32", features = ["tokio", "rustls-tls-native-roots"] }
|
|
log = { version = "0.4.16", features = ["kv_unstable_serde", "serde"] }
|
|
lru = "0.16"
|
|
lsp-types = { git = "https://github.com/zed-industries/lsp-types", rev = "f4dfa89a21ca35cd929b70354b1583fabae325f8" }
|
|
mach2 = "0.5"
|
|
markup5ever_rcdom = "0.3.0"
|
|
metal = "0.33"
|
|
minidumper = "0.9"
|
|
moka = { version = "0.12.10", features = ["sync"] }
|
|
nanoid = "0.4"
|
|
nbformat = "1.2.0"
|
|
nix = "0.29"
|
|
notify-rust = "4"
|
|
nucleo = "0.5"
|
|
num-format = "0.4.4"
|
|
objc = "0.2"
|
|
objc2 = "0.6"
|
|
objc2-app-kit = { version = "0.3.2", default-features = false, features = [
|
|
"NSButton",
|
|
"NSControl",
|
|
"NSGraphics",
|
|
"NSResponder",
|
|
"NSView",
|
|
"NSWindow",
|
|
"objc2-core-foundation",
|
|
] }
|
|
objc2-foundation = { version = "=0.3.2", default-features = false, features = [
|
|
"NSArray",
|
|
"NSAttributedString",
|
|
"NSBundle",
|
|
"NSCoder",
|
|
"NSData",
|
|
"NSDate",
|
|
"NSDictionary",
|
|
"NSEnumerator",
|
|
"NSError",
|
|
"NSGeometry",
|
|
"NSNotification",
|
|
"NSNull",
|
|
"NSObjCRuntime",
|
|
"NSObject",
|
|
"NSProcessInfo",
|
|
"NSRange",
|
|
"NSRunLoop",
|
|
"NSSet",
|
|
"NSString",
|
|
"NSURL",
|
|
"NSUndoManager",
|
|
"NSValue",
|
|
"objc2-core-foundation",
|
|
"std",
|
|
] }
|
|
objc2-user-notifications = "0.3"
|
|
open = "5.0.0"
|
|
ordered-float = "2.1.1"
|
|
palette = { version = "0.7.5", default-features = false, features = ["std"] }
|
|
parking_lot = "0.12.1"
|
|
partial-json-fixer = "0.5.3"
|
|
parse_int = "0.9"
|
|
pciid-parser = "0.8.0"
|
|
pathdiff = "0.2"
|
|
percent-encoding = "2.3.2"
|
|
pet = { git = "https://github.com/microsoft/python-environment-tools.git", rev = "9e61a22af989fe54937bf07c9f9cff1bc53d9056" }
|
|
pet-conda = { git = "https://github.com/microsoft/python-environment-tools.git", rev = "9e61a22af989fe54937bf07c9f9cff1bc53d9056" }
|
|
pet-core = { git = "https://github.com/microsoft/python-environment-tools.git", rev = "9e61a22af989fe54937bf07c9f9cff1bc53d9056" }
|
|
pet-fs = { git = "https://github.com/microsoft/python-environment-tools.git", rev = "9e61a22af989fe54937bf07c9f9cff1bc53d9056" }
|
|
pet-poetry = { git = "https://github.com/microsoft/python-environment-tools.git", rev = "9e61a22af989fe54937bf07c9f9cff1bc53d9056" }
|
|
pet-reporter = { git = "https://github.com/microsoft/python-environment-tools.git", rev = "9e61a22af989fe54937bf07c9f9cff1bc53d9056" }
|
|
pet-virtualenv = { git = "https://github.com/microsoft/python-environment-tools.git", rev = "9e61a22af989fe54937bf07c9f9cff1bc53d9056" }
|
|
portable-pty = "0.9.0"
|
|
postage = { version = "0.5", features = ["futures-traits"] }
|
|
pretty_assertions = { version = "1.3.0", features = ["unstable"] }
|
|
proc-macro2 = "1.0.93"
|
|
profiling = "1"
|
|
# replace this with main when #635 is merged
|
|
proptest = { git = "https://github.com/proptest-rs/proptest", rev = "3dca198a8fef1b32e3a66f1e1897c955b4dc5b5b", features = ["attr-macro"] }
|
|
proptest-derive = "0.8.0"
|
|
proxyvars = "0.2"
|
|
prost = "0.9"
|
|
prost-build = "0.9"
|
|
prost-types = "0.9"
|
|
pollster = "0.4.0"
|
|
pulldown-cmark = { version = "0.13.0", default-features = false }
|
|
quick-xml = "0.38"
|
|
quote = "1.0.9"
|
|
rand = "0.9"
|
|
rayon = "1.8"
|
|
raw-window-handle = "0.6"
|
|
regex = "1.5"
|
|
# WARNING: If you change this, you must also publish a new version of zed-reqwest to crates.io
|
|
reqwest = { git = "https://github.com/zed-industries/reqwest.git", rev = "c15662463bda39148ba154100dd44d3fba5873a4", default-features = false, features = [
|
|
"charset",
|
|
"http2",
|
|
"macos-system-configuration",
|
|
"multipart",
|
|
"rustls-tls-native-roots",
|
|
"socks",
|
|
"stream",
|
|
], package = "zed-reqwest", version = "0.12.15-zed" }
|
|
resvg = { version = "0.46.0", default-features = false, features = [
|
|
"text",
|
|
"system-fonts",
|
|
"memmap-fonts",
|
|
"raster-images",
|
|
] }
|
|
rsa = "0.9.6"
|
|
runtimelib = { version = "1.4.0", default-features = false, features = [
|
|
"async-dispatcher-runtime", "aws-lc-rs"
|
|
] }
|
|
rust-embed = { version = "8.11", features = ["include-exclude"] }
|
|
rustc-hash = "2.1.0"
|
|
rustls = { version = "0.23.26" }
|
|
rustls-platform-verifier = "0.5.0"
|
|
# WARNING: If you change this, you must also publish a new version of zed-scap to crates.io
|
|
scap = { git = "https://github.com/zed-industries/scap", rev = "4afea48c3b002197176fb19cd0f9b180dd36eaac", default-features = false, package = "zed-scap", version = "0.0.8-zed" }
|
|
schemars = { version = "1.0", features = ["indexmap2"] }
|
|
seccompiler = "0.5"
|
|
semver = { version = "1.0", features = ["serde"] }
|
|
serde = { version = "1.0.221", features = ["derive", "rc"] }
|
|
serde_json = { version = "1.0.144", features = ["preserve_order", "raw_value"] }
|
|
serde_yaml_ng = "0.10"
|
|
serde_json_lenient = { version = "0.2", features = [
|
|
"preserve_order",
|
|
"raw_value",
|
|
] }
|
|
serde_yaml = "0.9.34"
|
|
serde_path_to_error = "0.1.17"
|
|
serde_urlencoded = "0.7"
|
|
sha2 = "0.10"
|
|
shellexpand = "3.1"
|
|
shlex = "1.3.0"
|
|
simplelog = "0.12.2"
|
|
slotmap = "1.0.6"
|
|
smallvec = { version = "1.6", features = ["union", "const_new"] }
|
|
smol = "2.0"
|
|
sqlformat = "0.2"
|
|
stacksafe = "0.1"
|
|
streaming-iterator = "0.1"
|
|
strsim = "0.11"
|
|
strum = { version = "0.27.2", features = ["derive"] }
|
|
syn = { version = "2.0.101", features = ["full", "extra-traits", "visit-mut"] }
|
|
sys-locale = "0.3.1"
|
|
sysinfo = "0.37.0"
|
|
take-until = "0.2.0"
|
|
tempfile = "3.20.0"
|
|
thiserror = "2.0.12"
|
|
time = { version = "0.3", features = [
|
|
"macros",
|
|
"parsing",
|
|
"serde",
|
|
"serde-well-known",
|
|
"formatting",
|
|
"local-offset",
|
|
] }
|
|
tiny_http = "0.12"
|
|
tokio = { version = "1" }
|
|
tokio-socks = { version = "0.5.2", default-features = false, features = [
|
|
"futures-io",
|
|
"tokio",
|
|
] }
|
|
toml = "0.8"
|
|
toml_edit = { version = "0.22", default-features = false, features = [
|
|
"display",
|
|
"parse",
|
|
"serde",
|
|
] }
|
|
tower-http = "0.4.4"
|
|
tree-sitter = "0.26.9"
|
|
tree-sitter-bash = "0.25.1"
|
|
tree-sitter-c = "0.24.1"
|
|
tree-sitter-cpp = { git = "https://github.com/tree-sitter/tree-sitter-cpp", rev = "5cb9b693cfd7bfacab1d9ff4acac1a4150700609" }
|
|
tree-sitter-css = "0.23"
|
|
tree-sitter-diff = "0.1.0"
|
|
tree-sitter-elixir = "0.3"
|
|
tree-sitter-embedded-template = "0.23.0"
|
|
tree-sitter-gitcommit = { git = "https://github.com/zed-industries/tree-sitter-git-commit", rev = "88309716a69dd13ab83443721ba6e0b491d37ee9" }
|
|
tree-sitter-go = "0.25"
|
|
tree-sitter-go-mod = { git = "https://github.com/camdencheek/tree-sitter-go-mod", rev = "2e886870578eeba1927a2dc4bd2e2b3f598c5f9a", package = "tree-sitter-gomod" }
|
|
tree-sitter-gowork = { git = "https://github.com/zed-industries/tree-sitter-go-work", rev = "acb0617bf7f4fda02c6217676cc64acb89536dc7" }
|
|
tree-sitter-heex = { git = "https://github.com/zed-industries/tree-sitter-heex", rev = "1dd45142fbb05562e35b2040c6129c9bca346592" }
|
|
tree-sitter-html = "0.23"
|
|
tree-sitter-jsdoc = "0.23"
|
|
tree-sitter-json = "0.24"
|
|
tree-sitter-md = { git = "https://github.com/zed-industries/tree-sitter-markdown", rev = "b596e737286780d7bfa9fcddceaeeb754574b352" } # fork of 9a23c1a with serialize() buffer-overflow fix; https://github.com/tree-sitter-grammars/tree-sitter-markdown/issues/243
|
|
tree-sitter-python = "0.25"
|
|
tree-sitter-regex = "0.24"
|
|
tree-sitter-ruby = "0.23"
|
|
tree-sitter-rust = "0.24.2"
|
|
tree-sitter-typescript = { git = "https://github.com/zed-industries/tree-sitter-typescript", rev = "e2c53597d6a5d9cf7bbe8dccde576fe1e46c5899" } # https://github.com/tree-sitter/tree-sitter-typescript/pull/347
|
|
tree-sitter-yaml = { git = "https://github.com/zed-industries/tree-sitter-yaml", rev = "baff0b51c64ef6a1fb1f8390f3ad6015b83ec13a" }
|
|
tracing = "0.1.40"
|
|
unicase = "2.6"
|
|
unicode-script = "0.5.7"
|
|
unicode-segmentation = "1.10"
|
|
unicode-width = "0.2"
|
|
unindent = "0.2.0"
|
|
url = "2.2"
|
|
urlencoding = "2.1.2"
|
|
usvg = { version = "0.46.0", default-features = false }
|
|
uuid = { version = "1.1.2", features = ["v4", "v5", "v7", "serde"] }
|
|
vte = { version = "0.15.0", features = ["ansi"] }
|
|
walkdir = "2.5"
|
|
wasm-encoder = "0.252"
|
|
wasmparser = "0.252"
|
|
wasmtime = { version = "36", default-features = false, features = [
|
|
"async",
|
|
"demangle",
|
|
"runtime",
|
|
"cranelift",
|
|
"component-model",
|
|
"incremental-cache",
|
|
"parallel-compilation",
|
|
] }
|
|
wasmtime-wasi = "36"
|
|
wax = "0.7"
|
|
which = "6.0.0"
|
|
wasm-bindgen = "0.2.120"
|
|
web-time = "1.1.0"
|
|
webrtc-sys = "0.3.23"
|
|
wgpu = "29.0.4"
|
|
windows-core = "0.61"
|
|
yaml-rust2 = "0.8"
|
|
yawc = "0.2.5"
|
|
zeroize = "1.8"
|
|
zstd = "0.11"
|
|
|
|
[workspace.dependencies.windows]
|
|
version = "0.61"
|
|
features = [
|
|
"Data_Xml_Dom",
|
|
"Foundation_Numerics",
|
|
"Globalization_DateTimeFormatting",
|
|
"Storage_Search",
|
|
"Storage_Streams",
|
|
"System_Threading",
|
|
"UI_Notifications",
|
|
"UI_ViewManagement",
|
|
"Wdk_System_SystemServices",
|
|
"Win32_Foundation",
|
|
"Win32_Globalization",
|
|
"Win32_Graphics_Direct3D",
|
|
"Win32_Graphics_Direct3D11",
|
|
"Win32_Graphics_Direct3D_Fxc",
|
|
"Win32_Graphics_DirectComposition",
|
|
"Win32_Graphics_DirectWrite",
|
|
"Win32_Graphics_DirectManipulation",
|
|
"Win32_Graphics_Dwm",
|
|
"Win32_Graphics_Dxgi",
|
|
"Win32_Graphics_Dxgi_Common",
|
|
"Win32_Graphics_Gdi",
|
|
"Win32_Graphics_Imaging",
|
|
"Win32_Graphics_Hlsl",
|
|
"Win32_Networking_WinSock",
|
|
"Win32_Security",
|
|
"Win32_Security_Credentials",
|
|
"Win32_Security_Cryptography",
|
|
"Win32_Storage_FileSystem",
|
|
"Win32_Storage_Packaging_Appx",
|
|
"Win32_System_Com",
|
|
"Win32_System_Com_StructuredStorage",
|
|
"Win32_System_Console",
|
|
"Win32_System_Diagnostics_Debug",
|
|
"Win32_System_DataExchange",
|
|
"Win32_System_IO",
|
|
"Win32_System_JobObjects",
|
|
"Win32_System_LibraryLoader",
|
|
"Win32_System_Memory",
|
|
"Win32_System_Ole",
|
|
"Win32_System_Performance",
|
|
"Win32_System_Pipes",
|
|
"Win32_System_RestartManager",
|
|
"Win32_System_SystemInformation",
|
|
"Win32_System_SystemServices",
|
|
"Win32_System_Threading",
|
|
"Win32_System_Variant",
|
|
"Win32_System_WinRT",
|
|
"Win32_UI_Controls",
|
|
"Win32_UI_HiDpi",
|
|
"Win32_UI_Input_Ime",
|
|
"Win32_UI_Input_KeyboardAndMouse",
|
|
"Win32_UI_Input_Pointer",
|
|
"Win32_UI_Shell",
|
|
"Win32_UI_Shell_Common",
|
|
"Win32_UI_Shell_PropertiesSystem",
|
|
"Win32_UI_WindowsAndMessaging",
|
|
"Win32_Media",
|
|
]
|
|
|
|
[patch.crates-io]
|
|
async-process = { git = "https://github.com/zed-industries/async-process.git", rev = "0b6d6713570af61806e1e5cb40e0f757cb93fd9d" }
|
|
async-task = { git = "https://github.com/smol-rs/async-task.git", rev = "b4486cd71e4e94fbda54ce6302444de14f4d190e" }
|
|
windows-capture = { git = "https://github.com/zed-industries/windows-capture.git", rev = "f0d6c1b6691db75461b732f6d5ff56eed002eeb9" }
|
|
calloop = { git = "https://github.com/zed-industries/calloop" }
|
|
livekit = { git = "https://github.com/zed-industries/livekit-rust-sdks", rev = "d0e27be0cdad89eadab3e36207cda0a2b6e359ee" }
|
|
libwebrtc = { git = "https://github.com/zed-industries/livekit-rust-sdks", rev = "d0e27be0cdad89eadab3e36207cda0a2b6e359ee" }
|
|
notify = { git = "https://github.com/zed-industries/notify", rev = "faecbc33db4f59313e5225ef766bfd9e54a54cfd" }
|
|
notify-types = { git = "https://github.com/zed-industries/notify", rev = "faecbc33db4f59313e5225ef766bfd9e54a54cfd" }
|
|
webrtc-sys = { git = "https://github.com/zed-industries/livekit-rust-sdks", rev = "d0e27be0cdad89eadab3e36207cda0a2b6e359ee" }
|
|
|
|
[profile.dev]
|
|
split-debuginfo = "unpacked"
|
|
incremental = true
|
|
codegen-units = 16
|
|
debug = "limited"
|
|
|
|
# mirror configuration for crates compiled for the build platform
|
|
# (without this cargo will compile ~400 crates twice)
|
|
[profile.dev.build-override]
|
|
codegen-units = 16
|
|
split-debuginfo = "unpacked"
|
|
debug = "limited"
|
|
|
|
# "debug" is a reserved profile name.
|
|
[profile.dbg]
|
|
inherits = "dev"
|
|
debug = "full"
|
|
|
|
[profile.dbg.build-override]
|
|
debug = "full"
|
|
|
|
[profile.dev.package]
|
|
# proc-macros start
|
|
gpui_macros = { opt-level = 3 }
|
|
derive_refineable = { opt-level = 3 }
|
|
feature_flags_macros = { opt-level = 3 }
|
|
settings_macros = { opt-level = 3 }
|
|
sqlez_macros = { opt-level = 3, codegen-units = 1 }
|
|
ui_macros = { opt-level = 3 }
|
|
util_macros = { opt-level = 3 }
|
|
quote = { opt-level = 3 }
|
|
syn = { opt-level = 3 }
|
|
proc-macro2 = { opt-level = 3 }
|
|
# proc-macros end
|
|
|
|
tree-sitter = { opt-level = 3 }
|
|
taffy = { opt-level = 3 }
|
|
resvg = { opt-level = 3 }
|
|
wasmtime = { opt-level = 3 }
|
|
cranelift-codegen = { opt-level = 3 }
|
|
wasmtime-environ = { opt-level = 3 }
|
|
wasmtime-internal-cranelift = { opt-level = 3 }
|
|
minidumper = { opt-level = 3 }
|
|
serde_json = { opt-level = 3 }
|
|
# Build single-source-file crates with cg=1 as it helps make `cargo build` of a whole workspace a bit faster
|
|
activity_indicator = { codegen-units = 1 }
|
|
assets = { codegen-units = 1 }
|
|
breadcrumbs = { codegen-units = 1 }
|
|
collections = { codegen-units = 1 }
|
|
command_palette = { codegen-units = 1 }
|
|
command_palette_hooks = { codegen-units = 1 }
|
|
feature_flags = { codegen-units = 1 }
|
|
file_icons = { codegen-units = 1 }
|
|
image_viewer = { codegen-units = 1 }
|
|
edit_prediction_ui = { codegen-units = 1 }
|
|
install_cli = { codegen-units = 1 }
|
|
journal = { codegen-units = 1 }
|
|
json_schema_store = { codegen-units = 1 }
|
|
llama_cpp = { codegen-units = 1 }
|
|
lmstudio = { codegen-units = 1 }
|
|
menu = { codegen-units = 1 }
|
|
notifications = { codegen-units = 1 }
|
|
ollama = { codegen-units = 1 }
|
|
outline = { codegen-units = 1 }
|
|
paths = { codegen-units = 1 }
|
|
prettier = { codegen-units = 1 }
|
|
project_symbols = { codegen-units = 1 }
|
|
refineable = { codegen-units = 1 }
|
|
release_channel = { codegen-units = 1 }
|
|
reqwest_client = { codegen-units = 1 }
|
|
session = { codegen-units = 1 }
|
|
sidebar = { codegen-units = 1 }
|
|
snippet = { codegen-units = 1 }
|
|
snippets_ui = { codegen-units = 1 }
|
|
telemetry_events = { codegen-units = 1 }
|
|
theme_selector = { codegen-units = 1 }
|
|
time_format = { codegen-units = 1 }
|
|
ui_input = { codegen-units = 1 }
|
|
zed_actions = { codegen-units = 1 }
|
|
|
|
[profile.release]
|
|
debug = "limited"
|
|
lto = "thin"
|
|
codegen-units = 1
|
|
|
|
[profile.release.package]
|
|
zed = { codegen-units = 16 }
|
|
|
|
[profile.release-fast]
|
|
inherits = "release"
|
|
debug = "full"
|
|
lto = false
|
|
codegen-units = 16
|
|
|
|
[workspace.lints.rust]
|
|
unexpected_cfgs = { level = "allow" }
|
|
|
|
[workspace.lints.clippy]
|
|
dbg_macro = "deny"
|
|
todo = "deny"
|
|
|
|
declare_interior_mutable_const = "deny"
|
|
|
|
redundant_clone = "deny"
|
|
disallowed_methods = "deny"
|
|
|
|
# We currently do not restrict any style rules
|
|
# as it slows down shipping code to Zed.
|
|
#
|
|
# Running ./script/clippy can take several minutes, and so it's
|
|
# common to skip that step and let CI do it. Any unexpected failures
|
|
# (which also take minutes to discover) thus require switching back
|
|
# to an old branch, manual fixing, and re-pushing.
|
|
#
|
|
# In the future we could improve this by either making sure
|
|
# Zed can surface clippy errors in diagnostics (in addition to the
|
|
# rust-analyzer errors), or by having CI fix style nits automatically.
|
|
style = { level = "allow", priority = -1 }
|
|
|
|
# Individual rules that have violations in the codebase:
|
|
type_complexity = "allow"
|
|
let_underscore_future = "allow"
|
|
|
|
# Motivation: We use `vec![a..b]` a lot when dealing with ranges in text, so
|
|
# warning on this rule produces a lot of noise.
|
|
single_range_in_vec_init = "allow"
|
|
|
|
# in Rust it can be very tedious to reduce argument count without
|
|
# running afoul of the borrow checker.
|
|
too_many_arguments = "allow"
|
|
|
|
# We often have large enum variants yet we rarely actually bother with splitting them up.
|
|
large_enum_variant = "allow"
|
|
|
|
# Boolean expressions can be hard to read, requiring only the minimal form gets in the way
|
|
nonminimal_bool = "allow"
|
|
|
|
[workspace.metadata.cargo-machete]
|
|
ignored = [
|
|
"bindgen",
|
|
"cbindgen",
|
|
"prost_build",
|
|
"serde",
|
|
"component",
|
|
"documented",
|
|
"sea-orm-macros",
|
|
]
|
|
|
|
# Dylint discovers our custom lints through this entry, so `cargo dylint --all`
|
|
# runs them without a `--path` argument. The `lints` package pins its own
|
|
# nightly toolchain (see `tooling/lints/rust-toolchain.toml`) and is kept out of
|
|
# this workspace on purpose.
|
|
[workspace.metadata.dylint]
|
|
libraries = [{ path = "tooling/lints" }]
|