Find a file
Anthony Eid 54f51254df benchmarks: Move edit_file_tool into its own package
crates/benchmarks/Cargo.toml requested test-support directly from seven
application crates (agent, editor, language, language_model, lsp, project,
settings) so its edit_file_tool.rs bench could drive the agent's edit-file
tool through TestAppContext, FakeFs, FakeLspAdapter, FakeLanguageModel, and
Project::test. Because Cargo unifies features per package, those test-only
builds applied to the whole benchmarks package, including display_map.rs,
editor_render.rs, and markdown_renderer.rs, which render production code
paths and have no inherent need for most of that test-only surface.

This moves edit_file_tool.rs into a new sibling package,
edit_file_tool_benchmarks (crates/edit_file_tool_benchmarks), with its own
Cargo.toml requesting exactly the dependencies and test-support features
that one benchmark needs. It reuses benchmarks::bench_utils (for
random_rust_file/rust_identifier/rust_file_line_count) via a plain
workspace dependency on benchmarks rather than duplicating that generator,
since bench_utils itself needs no test-support feature. The bench file's
content, name, and behavior are unchanged; only its package changed, so
`cargo bench -p edit_file_tool_benchmarks --bench edit_file_tool` replaces
`cargo bench -p benchmarks --bench edit_file_tool`.

With edit_file_tool.rs gone, crates/benchmarks/Cargo.toml drops its direct
test-support edges to agent, editor, language_model, and project entirely:
`cargo tree -p benchmarks --edges features --invert <crate>` now shows none
of those four anywhere in the graph, not merely as a direct edge (agent and
language_model aren't dependencies of benchmarks at all any more).

Two edges do not go away, and this is a real finding, not an oversight:

- settings/test-support remains, because display_map.rs, editor_render.rs,
  and markdown_renderer.rs all call SettingsStore::test directly to build a
  global settings store for their benchmarks, independent of
  edit_file_tool. This also keeps gpui/test-support resolved (settings'
  test-support feature enables it directly), which is what display_map.rs's
  direct use of TestAppContext/TestDispatcher relies on.
- language/test-support remains, because markdown_renderer.rs calls
  LanguageRegistry::test and language::rust_lang directly to build a
  language registry for its Markdown benchmark, also independent of
  edit_file_tool. language's test-support feature enables lsp/test-support,
  so lsp/test-support still resolves transitively too, despite benchmarks
  no longer depending on lsp directly at all.
- multi_buffer/test-support is now a new *direct* edge (it used to resolve
  only transitively through editor's test-support): display_map.rs and
  editor_render.rs call MultiBuffer::build_simple/build_random, which are
  only compiled under multi_buffer's own test-support feature, with no
  production equivalent.

None of this is edit_file_tool-specific, so moving that one benchmark out
cannot remove it without changing what display_map/editor_render/
markdown_renderer actually exercise (e.g. swapping SettingsStore::test for
settings::init would change the settings values feeding those benchmarks).
That is out of scope here.

script/check-gpui-bench-feature-isolation gains a check that walks the whole
resolved graph (not just a direct edge, since nothing else in benchmarks has
a legitimate reason to reach test-support through any of them) for agent,
editor, language_model, and project, confirming they are fully absent from
benchmarks' test-support surface now that edit_file_tool moved out. The
existing theme/util direct-edge check gains updated comments reflecting
that language, multi_buffer, and settings are the crates still populating
the graph, and the script gains a sanity check that
edit_file_tool_benchmarks still exists and resolves, documenting rather than
hiding its continued test-support dependency.

Validation performed:
- `cargo check -p benchmarks -p edit_file_tool_benchmarks --benches`: both
  packages compile cleanly together.
- `cargo bench --offline -- --test` (quick mode) for all four bench
  targets: display_map, editor_render, and markdown_renderer under
  benchmarks, and edit_file_tool under edit_file_tool_benchmarks. All cases
  report Success with the same benchmark names/groups as before the split.
- `cargo tree -p benchmarks --edges features` before/after comparison
  confirms agent, editor, language_model, and project are gone from the
  graph entirely, while language, multi_buffer, and settings remain for the
  reasons above.
- `script/check-gpui-bench-feature-isolation` passes; manually confirmed it
  fails (correctly) when a test-support edge to agent is reintroduced.
- `cargo shear --locked`: no unused dependencies in either package.
- `cargo fmt --check` (whole repo) and `./script/clippy -p benchmarks -p
  edit_file_tool_benchmarks` (deny warnings) both pass.
- `bash script/shellcheck-scripts` and `bash script/check-licenses` both
  pass for the modified/new files.

Remaining test-support debt, tracked honestly rather than hidden:
edit_file_tool_benchmarks still depends on test-support from agent, editor,
language, language_model, lsp, project, and settings, unchanged from before
this split. This PR only isolates that dependency to its own package so it
stops contaminating the three production-rendering benchmarks; giving
edit_file_tool_benchmarks a production-capable harness (or accepting it as
a permanently test-shaped benchmark) is future work.

Release Notes:

- N/A
2026-08-21 16:42:30 -04:00
.agents/skills Add dylint lint library for Zed-specific patterns (#58496) 2026-07-03 22:05:34 +00:00
.cargo livekit: Use our build of libwebrtc.a (#51433) 2026-03-16 10:47:36 +01:00
.cloudflare Improve docs AI readiness (#59577) 2026-07-08 20:54:51 +00:00
.config Increase timeout for test_random_blocks (#50724) 2026-03-04 12:25:12 -05:00
.factory Add humanizer skill for AI writing pattern detection (#50021) 2026-02-24 14:58:52 -06:00
.github Automate cleanup of unsigned and stale draft pull requests (#62936) 2026-08-21 07:53:28 +00:00
.wezel Add wezel scenario for an incremental editor build (#62016) 2026-08-02 18:40:37 +00:00
.zed agent: Remove old edit file tool (#55612) 2026-05-04 09:54:39 +00:00
assets Add configurable inline completion debounce timeout (#61568) 2026-08-20 16:42:42 +00:00
ci Move Nightly release to gh-workflow (#41349) 2025-10-28 13:57:23 -06:00
crates benchmarks: Move edit_file_tool into its own package 2026-08-21 16:42:30 -04:00
docs docs: Document language auto-indentation rules (#63009) 2026-08-21 10:43:42 +00:00
extensions proto: Bump to v0.3.3 (#62396) 2026-08-12 08:35:43 +00:00
legal legal: Use absolute URLs for Terms of Service and Privacy Policy links (#62684) 2026-08-17 09:35:54 +00:00
nix Switch from cargo-machete to cargo-shear (#62643) 2026-08-20 10:08:48 +00:00
script benchmarks: Move edit_file_tool into its own package 2026-08-21 16:42:30 -04:00
tooling Switch from cargo-machete to cargo-shear (#62643) 2026-08-20 10:08:48 +00:00
.git-blame-ignore-revs Add PR 50413 to .git-blame-ignore-revs (#50421) 2026-03-01 00:50:33 +01:00
.gitattributes windows: Make sure zed.sh using the correct line ending (#37650) 2025-09-05 16:25:55 +00:00
.gitignore csv_preview: Add single-line row displaying mode (#61127) 2026-07-16 19:28:22 +00:00
.mailmap Update .mailmap (#47413) 2026-01-22 23:57:26 +05:30
.prettierrc ci: Add check for formatting default.json (#30034) 2025-05-06 18:55:26 +00:00
.rules Update .rules to prompt for self-review before submitting PR (#62945) 2026-08-21 10:32:14 +00:00
AGENTS.md ai: Symlink an AGENTS.md file to .rules (#45939) 2026-01-19 15:29:42 +01:00
Cargo.lock benchmarks: Move edit_file_tool into its own package 2026-08-21 16:42:30 -04:00
Cargo.toml benchmarks: Move edit_file_tool into its own package 2026-08-21 16:42:30 -04:00
CLAUDE.md Initial .rules file for agent with symlinks for other rules file paths (#29014) 2025-04-17 23:41:23 +00:00
clippy.toml Revert "Revert scheduler update (#46659)" (#46671) 2026-01-14 07:19:13 +00:00
CODE_OF_CONDUCT.md
compose.yml Remove Postgres and stripe-mock from Docker Compose (#48313) 2026-02-04 03:42:58 +00:00
CONTRIBUTING.md Update issues link in CONTRIBUTING.md (#62937) 2026-08-20 12:23:30 +00:00
debug.plist
default.nix nix: Use flake-parts, partitions, and treefmt-nix (#45321) 2026-02-02 14:26:42 +00:00
Dockerfile-collab Bump rustc to 1.97 (#62395) 2026-08-09 22:29:52 +00:00
Dockerfile-collab.dockerignore
Dockerfile-cross.dockerignore
Dockerfile-distros Removal of mold/wild scripts and mentions in docs (#53078) 2026-04-08 21:20:02 +03:00
Dockerfile-distros.dockerignore
flake.lock Bump rustc to 1.97 (#62395) 2026-08-09 22:29:52 +00:00
flake.nix ci: Remove garnix substitutor (#58033) 2026-05-29 05:56:42 +00:00
GEMINI.md Add missing GEMINI.md rule file for gemini-cli (#38885) 2025-10-02 09:47:29 -04:00
LICENSE-APACHE
LICENSE-GPL
livekit.yaml
lychee.toml ci: Check for broken links (#30844) 2025-06-06 09:39:35 +00:00
Procfile Update instructions for local collaboration (#35689) 2025-08-06 11:10:28 -07:00
Procfile.web Remove PostgREST (#41299) 2025-10-27 13:27:59 -04:00
README.md Add required pull request review marker 2026-08-21 14:00:43 -04:00
renovate.json Remove workspace-hack (#40216) 2025-10-17 18:58:14 +00:00
REVIEWERS.conl Remove past reviewer (#51767) 2026-03-17 16:34:35 +00:00
rust-toolchain.toml Bump rustc to 1.97 (#62395) 2026-08-09 22:29:52 +00:00
rustfmt.toml nix: Use flake-parts, partitions, and treefmt-nix (#45321) 2026-02-02 14:26:42 +00:00
shell.nix nix: Use flake-parts, partitions, and treefmt-nix (#45321) 2026-02-02 14:26:42 +00:00
typos.toml editor: Align selections by display position instead of byte column (#61997) 2026-08-14 00:20:27 +00:00

Important

Remove this line to confirm you've reviewed this PR before submitting.

Zed

Zed CI

Welcome to Zed, a high-performance, multiplayer code editor from the creators of Atom and Tree-sitter.


Installation

On macOS, Linux, and Windows you can download Zed directly or install Zed via your local package manager (macOS/Linux/Windows).

Other platforms are not yet available:

Developing Zed

Contributing

See CONTRIBUTING.md for ways you can contribute to Zed.

Also... we're hiring! Check out our jobs page for open roles.

Licensing

Zed source code is licensed primarily under GPL-3.0-or-later, with Apache-2.0 components where marked.

License information for third party dependencies must be correctly provided for CI to pass.

We use cargo-about to automatically comply with open source licenses. If CI is failing, check the following:

  • Is it showing a no license specified error for a crate you've created? If so, add publish = false under [package] in your crate's Cargo.toml.
  • Is the error failed to satisfy license requirements for a dependency? If so, first determine what license the project has and whether this system is sufficient to comply with this license's requirements. If you're unsure, ask a lawyer. Once you've verified that this system is acceptable add the license's SPDX identifier to the accepted array in script/licenses/zed-licenses.toml.
  • Is cargo-about unable to find the license for a dependency? If so, add a clarification field at the end of script/licenses/zed-licenses.toml, as specified in the cargo-about book.

Sponsorship

Zed is developed by Zed Industries, Inc., a for-profit company.

If youd like to financially support the project, you can do so via GitHub Sponsors. Sponsorships go directly to Zed Industries and are used as general company revenue. There are no perks or entitlements associated with sponsorship.