Skip to content

chore(workspace): migrate to Rust edition 2024#1784

Open
josecelano wants to merge 1 commit into
torrust:developfrom
josecelano:1778-migrate-to-rust-edition-2024
Open

chore(workspace): migrate to Rust edition 2024#1784
josecelano wants to merge 1 commit into
torrust:developfrom
josecelano:1778-migrate-to-rust-edition-2024

Conversation

@josecelano
Copy link
Copy Markdown
Member

Summary

Migrates the entire Cargo workspace from Rust edition 2021 to edition 2024, and bumps the MSRV from 1.72 to 1.85 (minimum required for edition 2024).

Closes #1778


Changes

Workspace manifest

  • edition = "2024" in root Cargo.toml
  • rust-version = "1.85" in root Cargo.toml
  • Updated AGENTS.md to reflect new edition and MSRV

Automated fixes (cargo fix --edition)

  • Applied if_let_rescope, edition_2024_expr_fragment_specifier, and deprecated_safe_2024 fixes workspace-wide

lazy_staticstd::sync::LazyLock

  • Replaced lazy_static! statics in packages/udp-tracker-core/src/crypto/ephemeral_instance_keys.rs with std::sync::LazyLock
  • Replaced lazy_static::initialize(...) with std::sync::LazyLock::force(...) in packages/udp-tracker-core/src/lib.rs
  • Removed lazy_static = "1" dependency from packages/udp-tracker-core/Cargo.toml

New clippy denials (pedantic/style, enabled by edition 2024 toolchain)

Lint Fix Files
io_other_error io::Error::other(msg) src/console/ci/compose.rs, src/console/ci/e2e/docker.rs
unnecessary_semicolon Removed trailing ; after match blocks Event handlers in udp-tracker-core, http-tracker-core, udp-tracker-server
single_match_else Converted match Ok/Err to if let Err Persistence benchmark DB probe helpers
unnecessary_map_or is_none_or(Vec::is_empty) src/app.rs
non_std_lazy_statics See LazyLock migration above udp-tracker-core
borrow_as_ptr &raw const in pointer equality assertions packages/udp-tracker-server/src/statistics/repository.rs

unsafe annotation

  • Wrapped std::env::set_var(...) in unsafe {} with safety comment in tests/servers/api/contract/stats/mod.rs

Doctest fix

  • packages/located-error/src/lib.rs: made Location::caller() assertion resilient to Rust 2024's merged doctest bundle path (|| b.to_string().contains("doctest_bundle"))
  • Added doctest to project-words.txt

Verification

All quality gates pass on the migration commit:

Check Result
cargo machete PASS
linter all (markdownlint, yamllint, taplo, cspell, clippy, rustfmt, shellcheck) PASS
cargo +nightly fmt --check PASS
cargo +nightly check --workspace --all-targets --all-features PASS
cargo +nightly doc PASS
cargo test --doc --workspace PASS (1 pass, 0 fail)
cargo test --tests --benches --workspace --all-targets --all-features PASS (954 pass, 0 fail)
E2E tests (tracker.e2e.container.sqlite3.toml) PASS
RUSTFLAGS="-W rust-2024-compatibility" cargo check 0 project-source warnings
GPG-signed commit ✓ RSA key 1250353E

- Set `edition = "2024"` in workspace root `Cargo.toml`
- Set `rust-version = "1.85"` in workspace root `Cargo.toml`
- Run `cargo fix --edition` across all workspace packages
- Replace `lazy_static!` with `std::sync::LazyLock` in `udp-tracker-core`
  and remove the `lazy_static` crate dependency
- Wrap `std::env::set_var` in `unsafe {}` with safety comment in integration tests
- Fix all new clippy denials triggered by edition 2024 and toolchain update:
  - `io_other_error`: use `io::Error::other(...)` throughout console CI helpers
  - `unnecessary_semicolon`: remove trailing `;` after match expressions in
    event handlers across `udp-tracker-core`, `http-tracker-core`,
    `udp-tracker-server`
  - `single_match_else`: convert nested match to `if let` in persistence
    benchmark DB probe helpers
  - `unnecessary_map_or`: use `is_none_or` in `src/app.rs`
  - `non_std_lazy_statics`: replace with `LazyLock`
  - `borrow_as_ptr`: use `&raw const` in repository tests
- Fix `located-error` doctest assertion for edition 2024 doctest bundle path
- Add `doctest` to `project-words.txt`
- Update issue spec: mark all acceptance criteria DONE, record manual
  verification evidence, update progress log and workflow checkpoints

All checks pass:
- `linter all` exits 0
- 954 tests pass (0 failures)
- `pre-commit.sh` exits 0
- No `rust-2024-compatibility` warnings in project source

Closes torrust#1778
Copilot AI review requested due to automatic review settings May 14, 2026 18:22
@josecelano josecelano self-assigned this May 14, 2026
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Migrates the workspace to Rust edition 2024 with MSRV 1.85, applying edition/lint fixes, replacing remaining lazy_static usage, and updating related documentation/spec artifacts.

Changes:

  • Bumps workspace edition/MSRV and updates lockfile/dependencies.
  • Applies Rust 2024 compatibility fixes, import formatting, io::Error::other, LazyLock, and macro fragment updates.
  • Updates issue specs, spelling dictionary, and AGENTS.md documentation.

Reviewed changes

Copilot reviewed 218 out of 219 changed files in this pull request and generated 6 comments.

Show a summary per file
File Description
Cargo.toml Bumps workspace edition to 2024 and MSRV to 1.85.
Cargo.lock Updates lockfile format/dependency resolutions.
AGENTS.md Updates documented Rust edition/MSRV.
project-words.txt Adds accepted spelling words.
tests/servers/api/contract/stats/mod.rs Wraps environment mutation in Rust 2024 unsafe block.
src/app.rs Applies import ordering and is_none_or cleanup.
src/bootstrap/app.rs Applies import ordering.
src/bootstrap/jobs/activity_metrics_updater.rs Applies import ordering.
src/bootstrap/jobs/health_check_api.rs Applies import ordering.
src/bootstrap/jobs/http_tracker.rs Applies import ordering.
src/bootstrap/jobs/manager.rs Preserves edition lifetime behavior with match.
src/bootstrap/jobs/torrent_cleanup.rs Preserves edition lifetime behavior with match.
src/bootstrap/jobs/tracker_apis.rs Applies import ordering.
src/bootstrap/jobs/udp_tracker.rs Applies import ordering.
src/console/ci/compose.rs Replaces io::ErrorKind::Other construction.
src/console/ci/e2e/docker.rs Replaces io::ErrorKind::Other construction.
src/console/ci/e2e/tracker_checker.rs Replaces io::ErrorKind::Other construction.
src/console/ci/e2e/tracker_container.rs Applies import ordering.
src/console/ci/qbittorrent_e2e/qbittorrent/client.rs Applies import ordering.
src/console/ci/qbittorrent_e2e/qbittorrent/config_builder.rs Applies import ordering.
src/console/ci/qbittorrent_e2e/services_setup.rs Applies import ordering.
src/console/ci/qbittorrent_e2e/types/compose_project_name.rs Applies import ordering.
console/tracker-client/src/console/clients/checker/app.rs Applies import ordering.
console/tracker-client/src/console/clients/checker/checks/http.rs Applies import ordering.
console/tracker-client/src/console/clients/checker/checks/udp.rs Applies import ordering.
console/tracker-client/src/console/clients/checker/console.rs Applies import ordering.
console/tracker-client/src/console/clients/checker/logger.rs Applies import ordering.
console/tracker-client/src/console/clients/checker/monitor/udp.rs Applies import ordering.
console/tracker-client/src/console/clients/http/app.rs Applies import ordering.
console/tracker-client/src/console/clients/udp/mod.rs Replaces io::ErrorKind::Other construction in tests.
console/tracker-client/src/console/clients/unified/check.rs Applies import ordering.
console/tracker-client/src/console/clients/unified/http.rs Applies import ordering.
console/tracker-client/src/console/clients/unified/udp.rs Applies import ordering.
contrib/bencode/benches/bencode_benchmark.rs Applies import ordering.
contrib/bencode/src/access/convert.rs Applies import ordering.
contrib/bencode/src/lib.rs Updates macro fragment specifiers for edition migration.
contrib/bencode/src/reference/decode.rs Applies edition formatting around returns/imports.
docs/issues/open/1778-migrate-to-rust-edition-2024.md Updates migration progress and verification evidence.
docs/issues/open/1780-refactor-pre-push-checks-performance-and-verbosity.md Updates progress/checklist for issue 1780.
packages/axum-health-check-api-server/src/environment.rs Applies import ordering.
packages/axum-health-check-api-server/src/handlers.rs Applies import ordering.
packages/axum-health-check-api-server/src/server.rs Applies import ordering.
packages/axum-http-tracker-server/src/environment.rs Applies import ordering.
packages/axum-http-tracker-server/src/server.rs Applies import ordering.
packages/axum-http-tracker-server/src/v1/handlers/announce.rs Applies import ordering.
packages/axum-http-tracker-server/src/v1/handlers/scrape.rs Applies import ordering.
packages/axum-http-tracker-server/src/v1/routes.rs Applies import ordering.
packages/axum-http-tracker-server/tests/server/requests/announce.rs Applies import ordering.
packages/axum-http-tracker-server/tests/server/requests/scrape.rs Applies import ordering.
packages/axum-http-tracker-server/tests/server/v1/contract.rs Applies edition formatting/import ordering.
packages/axum-rest-tracker-api-server/src/environment.rs Applies import ordering.
packages/axum-rest-tracker-api-server/src/routes.rs Applies import ordering.
packages/axum-rest-tracker-api-server/src/server.rs Applies import ordering.
packages/axum-rest-tracker-api-server/src/v1/context/auth_key/forms.rs Applies import ordering.
packages/axum-rest-tracker-api-server/src/v1/context/auth_key/handlers.rs Applies import ordering.
packages/axum-rest-tracker-api-server/src/v1/context/auth_key/responses.rs Applies import ordering.
packages/axum-rest-tracker-api-server/src/v1/context/auth_key/routes.rs Applies import ordering.
packages/axum-rest-tracker-api-server/src/v1/context/stats/routes.rs Applies import ordering.
packages/axum-rest-tracker-api-server/src/v1/context/torrent/handlers.rs Applies edition formatting/import ordering.
packages/axum-rest-tracker-api-server/src/v1/context/torrent/resources/peer.rs Applies import ordering.
packages/axum-rest-tracker-api-server/src/v1/context/torrent/resources/torrent.rs Applies import ordering.
packages/axum-rest-tracker-api-server/src/v1/context/torrent/routes.rs Applies import ordering.
packages/axum-rest-tracker-api-server/src/v1/context/whitelist/handlers.rs Applies import ordering.
packages/axum-rest-tracker-api-server/src/v1/context/whitelist/routes.rs Applies import ordering.
packages/axum-rest-tracker-api-server/src/v1/responses.rs Applies import ordering.
packages/axum-rest-tracker-api-server/tests/server/v1/contract/authentication.rs Applies import ordering.
packages/axum-rest-tracker-api-server/tests/server/v1/contract/context/auth_key.rs Applies formatting/import ordering.
packages/axum-rest-tracker-api-server/tests/server/v1/contract/context/stats.rs Applies import ordering.
packages/axum-rest-tracker-api-server/tests/server/v1/contract/context/torrent.rs Applies import ordering.
packages/axum-rest-tracker-api-server/tests/server/v1/contract/context/whitelist.rs Applies import ordering.
packages/axum-server/src/custom_axum_server.rs Applies import ordering.
packages/axum-server/src/signals.rs Applies import ordering.
packages/axum-server/src/tsl.rs Applies import ordering.
packages/clock/Cargo.toml Removes lazy_static dependency.
packages/clock/src/clock/mod.rs Applies import ordering.
packages/clock/src/lib.rs Replaces lazy static initialization with LazyLock::force.
packages/clock/src/static_time/mod.rs Replaces lazy_static! with LazyLock.
packages/configuration/src/v2_0_0/mod.rs Applies formatting/import cleanup.
packages/events/src/broadcaster.rs Applies formatting/import ordering.
packages/events/src/bus.rs Applies formatting/import ordering.
packages/http-protocol/src/percent_encoding.rs Applies import ordering.
packages/http-protocol/src/v1/requests/announce.rs Applies import ordering.
packages/http-protocol/src/v1/requests/scrape.rs Applies import ordering.
packages/http-protocol/src/v1/responses/announce.rs Applies import ordering.
packages/http-protocol/src/v1/responses/scrape.rs Applies import ordering.
packages/http-protocol/src/v1/services/peer_ip_resolver.rs Applies import ordering.
packages/http-tracker-core/benches/helpers/util.rs Applies import ordering.
packages/http-tracker-core/benches/http_tracker_core_benchmark.rs Applies import ordering.
packages/http-tracker-core/src/lib.rs Applies import ordering.
packages/http-tracker-core/src/services/announce.rs Applies import ordering.
packages/http-tracker-core/src/services/scrape.rs Applies formatting/import ordering.
packages/http-tracker-core/src/statistics/event/handler.rs Removes unnecessary semicolon and orders imports.
packages/located-error/src/lib.rs Adjusts doctest path assertion for bundled doctests.
packages/metrics/src/label/name.rs Applies edition formatting.
packages/metrics/src/label/set.rs Applies import ordering.
packages/metrics/src/metric/aggregate/avg.rs Applies import ordering.
packages/metrics/src/metric_collection/aggregate/avg.rs Applies import ordering.
packages/metrics/src/metric_collection/aggregate/sum.rs Applies import ordering.
packages/metrics/src/metric_collection/mod.rs Applies import ordering.
packages/metrics/src/metric_collection/prometheus.rs Applies formatting/import ordering.
packages/metrics/src/metric_collection/serde.rs Applies import ordering.
packages/metrics/src/sample.rs Applies import ordering.
packages/metrics/src/sample_collection.rs Applies import ordering.
packages/peer-id/src/peer_client.rs Applies import ordering.
packages/primitives/src/peer.rs Applies import ordering.
packages/rest-tracker-api-client/src/v1/client.rs Applies import ordering.
packages/rest-tracker-api-core/src/statistics/services.rs Applies import ordering.
packages/swarm-coordination-registry/src/container.rs Applies import ordering.
packages/swarm-coordination-registry/src/statistics/event/handler.rs Applies import ordering.
packages/swarm-coordination-registry/src/swarm/coordinator.rs Applies formatting/import ordering.
packages/swarm-coordination-registry/src/swarm/registry.rs Applies formatting/import ordering.
packages/test-helpers/src/random.rs Applies import ordering.
packages/torrent-repository-benchmarking/benches/helpers/asyn.rs Applies import ordering.
packages/torrent-repository-benchmarking/benches/helpers/sync.rs Applies import ordering.
packages/torrent-repository-benchmarking/benches/repository_benchmark.rs Applies import ordering.
packages/torrent-repository-benchmarking/src/entry/mod.rs Applies import ordering.
packages/torrent-repository-benchmarking/src/entry/mutex_parking_lot.rs Applies import ordering.
packages/torrent-repository-benchmarking/src/entry/mutex_std.rs Applies import ordering.
packages/torrent-repository-benchmarking/src/entry/mutex_tokio.rs Applies import ordering.
packages/torrent-repository-benchmarking/src/entry/peer_list.rs Applies import ordering.
packages/torrent-repository-benchmarking/src/entry/rw_lock_parking_lot.rs Applies import ordering.
packages/torrent-repository-benchmarking/src/repository/dash_map_mutex_std.rs Applies import ordering and match rewrite.
packages/torrent-repository-benchmarking/src/repository/mod.rs Applies import ordering.
packages/torrent-repository-benchmarking/src/repository/rw_lock_std.rs Applies import ordering.
packages/torrent-repository-benchmarking/src/repository/rw_lock_std_mutex_std.rs Applies import ordering.
packages/torrent-repository-benchmarking/src/repository/rw_lock_std_mutex_tokio.rs Applies import ordering.
packages/torrent-repository-benchmarking/src/repository/rw_lock_tokio.rs Applies import ordering.
packages/torrent-repository-benchmarking/src/repository/rw_lock_tokio_mutex_std.rs Applies import ordering.
packages/torrent-repository-benchmarking/src/repository/rw_lock_tokio_mutex_tokio.rs Applies import ordering.
packages/torrent-repository-benchmarking/src/repository/skip_map_mutex_std.rs Applies import ordering.
packages/torrent-repository-benchmarking/tests/common/repo.rs Applies import ordering.
packages/torrent-repository-benchmarking/tests/common/torrent.rs Applies import ordering.
packages/torrent-repository-benchmarking/tests/entry/mod.rs Applies import ordering.
packages/torrent-repository-benchmarking/tests/repository/mod.rs Applies import ordering.
packages/tracker-client/src/http/client/requests/announce.rs Applies import ordering.
packages/tracker-client/src/http/client/requests/scrape.rs Applies import ordering.
packages/tracker-client/src/peer_id.rs Applies import ordering.
packages/tracker-client/src/udp/mod.rs Replaces io::ErrorKind::Other construction in tests.
packages/tracker-core/src/announce_handler.rs Applies formatting/import ordering.
packages/tracker-core/src/authentication/handler.rs Applies import ordering.
packages/tracker-core/src/authentication/key/peer_key.rs Applies import ordering.
packages/tracker-core/src/authentication/key/repository/in_memory.rs Applies import ordering.
packages/tracker-core/src/authentication/mod.rs Applies formatting/import ordering.
packages/tracker-core/src/authentication/service.rs Applies formatting/import ordering.
packages/tracker-core/src/bin/persistence_benchmark/driver_bench/database/mod.rs Applies import ordering.
packages/tracker-core/src/bin/persistence_benchmark/driver_bench/operations/keys.rs Applies import ordering.
packages/tracker-core/src/bin/persistence_benchmark/driver_bench/operations/torrent.rs Applies import ordering.
packages/tracker-core/src/bin/persistence_benchmark/driver_bench/operations/whitelist.rs Applies import ordering.
packages/tracker-core/src/bin/persistence_benchmark/driver_bench/sampling.rs Applies import ordering.
packages/tracker-core/src/bin/persistence_benchmark/metrics.rs Applies import ordering.
packages/tracker-core/src/bin/persistence_benchmark/report.rs Applies import ordering.
packages/tracker-core/src/container.rs Applies import ordering.
packages/tracker-core/src/databases/driver/mysql/auth_key_store.rs Applies import ordering.
packages/tracker-core/src/databases/driver/mysql/schema_migrator.rs Applies import ordering.
packages/tracker-core/src/databases/driver/mysql/torrent_metrics_store.rs Applies import ordering.
packages/tracker-core/src/databases/driver/mysql/whitelist_store.rs Applies import ordering.
packages/tracker-core/src/databases/driver/postgres/auth_key_store.rs Applies import ordering.
packages/tracker-core/src/databases/driver/postgres/schema_migrator.rs Applies import ordering.
packages/tracker-core/src/databases/driver/postgres/torrent_metrics_store.rs Applies import ordering.
packages/tracker-core/src/databases/driver/postgres/whitelist_store.rs Applies import ordering.
packages/tracker-core/src/databases/driver/sqlite/auth_key_store.rs Applies import ordering.
packages/tracker-core/src/databases/driver/sqlite/schema_migrator.rs Applies import ordering.
packages/tracker-core/src/databases/driver/sqlite/torrent_metrics_store.rs Applies import ordering.
packages/tracker-core/src/databases/driver/sqlite/whitelist_store.rs Applies import ordering.
packages/tracker-core/src/databases/error.rs Applies import ordering.
packages/tracker-core/src/databases/setup.rs Applies import ordering.
packages/tracker-core/src/lib.rs Applies import ordering.
packages/tracker-core/src/peer_tests.rs Applies import ordering.
packages/tracker-core/src/scrape_handler.rs Applies import ordering.
packages/tracker-core/src/statistics/event/handler.rs Applies import ordering.
packages/tracker-core/src/statistics/persisted/downloads.rs Applies import ordering.
packages/tracker-core/src/statistics/persisted/mod.rs Applies import ordering.
packages/tracker-core/src/statistics/repository.rs Applies import ordering.
packages/tracker-core/src/torrent/manager.rs Applies import ordering.
packages/tracker-core/src/torrent/repository/in_memory.rs Applies import ordering.
packages/tracker-core/src/torrent/services.rs Applies import ordering.
packages/tracker-core/src/whitelist/manager.rs Applies formatting.
packages/tracker-core/tests/integration.rs Applies import ordering.
packages/udp-protocol/src/request.rs Applies import ordering and repeat_n.
packages/udp-tracker-core/Cargo.toml Removes lazy_static dependency.
packages/udp-tracker-core/benches/udp_tracker_core_benchmark.rs Applies import ordering.
packages/udp-tracker-core/src/connection_cookie.rs Applies import ordering.
packages/udp-tracker-core/src/container.rs Applies import ordering.
packages/udp-tracker-core/src/crypto/ephemeral_instance_keys.rs Replaces lazy_static! with LazyLock.
packages/udp-tracker-core/src/crypto/keys.rs Updates imports for LazyLock statics.
packages/udp-tracker-core/src/lib.rs Removes lazy_static macro import and uses LazyLock::force.
packages/udp-tracker-core/src/services/announce.rs Applies import ordering.
packages/udp-tracker-core/src/services/banning.rs Applies import ordering.
packages/udp-tracker-core/src/services/connect.rs Applies import ordering.
packages/udp-tracker-core/src/services/scrape.rs Applies import ordering.
packages/udp-tracker-core/src/statistics/event/handler.rs Removes unnecessary semicolons and orders imports.
packages/udp-tracker-core/src/statistics/services.rs Applies import ordering.
packages/udp-tracker-server/src/banning/event/handler.rs Applies import ordering.
packages/udp-tracker-server/src/banning/event/listener.rs Applies import ordering.
packages/udp-tracker-server/src/environment.rs Applies import ordering.
packages/udp-tracker-server/src/handlers/announce.rs Applies formatting/import ordering.
packages/udp-tracker-server/src/handlers/connect.rs Applies import ordering.
packages/udp-tracker-server/src/handlers/error.rs Applies import ordering.
packages/udp-tracker-server/src/handlers/mod.rs Applies match rewrite and formatting.
packages/udp-tracker-server/src/handlers/scrape.rs Applies import ordering.
packages/udp-tracker-server/src/lib.rs Applies import ordering.
packages/udp-tracker-server/src/server/launcher.rs Applies import ordering.
packages/udp-tracker-server/src/server/mod.rs Applies import ordering.
packages/udp-tracker-server/src/server/processor.rs Applies import ordering.
packages/udp-tracker-server/src/server/receiver.rs Applies import ordering.
packages/udp-tracker-server/src/server/request_buffer.rs Applies import ordering.
packages/udp-tracker-server/src/server/spawner.rs Applies import ordering.
packages/udp-tracker-server/src/server/states.rs Applies import ordering.
packages/udp-tracker-server/src/statistics/event/handler/error.rs Removes unnecessary semicolon and orders imports.
packages/udp-tracker-server/src/statistics/event/handler/request_aborted.rs Removes unnecessary semicolon and orders imports.
packages/udp-tracker-server/src/statistics/event/handler/request_accepted.rs Removes unnecessary semicolon and orders imports.
packages/udp-tracker-server/src/statistics/event/handler/request_banned.rs Removes unnecessary semicolon and orders imports.
packages/udp-tracker-server/src/statistics/event/handler/request_received.rs Removes unnecessary semicolon and orders imports.
packages/udp-tracker-server/src/statistics/event/handler/response_sent.rs Removes unnecessary semicolon and orders imports.
packages/udp-tracker-server/src/statistics/event/listener.rs Applies import ordering.
packages/udp-tracker-server/src/statistics/metrics.rs Applies import ordering.
packages/udp-tracker-server/src/statistics/repository.rs Updates pointer assertions and formatting.
packages/udp-tracker-server/src/statistics/services.rs Applies import ordering.
packages/udp-tracker-server/tests/server/contract.rs Applies formatting.
Comments suppressed due to low confidence (5)

docs/issues/open/1778-migrate-to-rust-edition-2024.md:323

  • The manual verification scenarios are now recorded as DONE, but the workflow checkpoint above for “Manual verification scenarios executed and recorded” remains unchecked. Please keep the checkpoint and the verification table in sync.
| M1  | No 2024-compatibility warnings in project source          | `RUSTFLAGS="-W rust-2024-compatibility" cargo check --workspace --all-targets --all-features 2>&1 \| grep -v ".cargo/registry" \| grep "^warning"` | Zero warnings from project source files                                       | DONE   | Only `proc-macro-error2` third-party warning, zero project-source warnings  |
| M2  | All tests pass after migration                            | `cargo test --workspace --all-targets --all-features`                                                                                              | All tests pass                                                                | DONE   | 954 tests passed, 0 failed                                                  |
| M3  | Rustfmt passes with edition 2024                          | `cargo fmt --all -- --check`                                                                                                                       | Exit code 0                                                                   | DONE   | `linter all` rustfmt step passes                                            |
| M4  | Tail expression drop order: `activity_metrics_updater.rs` | Read and review `packages/swarm-coordination-registry/src/statistics/activity_metrics_updater.rs` around line 40                                   | Drop order change is safe (weak-ref upgrade in tokio::select!)                | DONE   | Reviewed; weak-ref upgrade is evaluated before any drop; no semantic change |
| M5  | Tail expression drop order: `rest-tracker-api-client`     | Read and review `packages/rest-tracker-api-client/src/v1/client.rs` around line 222                                                                | `reqwest::Client` dropped later is safe                                       | DONE   | Reviewed; reqwest::Client extra lifetime is benign                          |
| M6  | Tail expression drop order: `scrape_handler.rs`           | Read and review `packages/tracker-core/src/scrape_handler.rs` around line 118                                                                      | Authorize future dropped later is safe                                        | DONE   | Reviewed; authorization future holds no locks; extra lifetime is safe       |
| M7  | `set_var` safety comment present                          | Inspect `tests/servers/api/contract/stats/mod.rs:52`                                                                                               | `unsafe {}` block with safety comment explaining single-threaded test context | DONE   | `unsafe` block with safety comment present and confirmed                    |

tests/servers/api/contract/stats/mod.rs:54

  • This test sets TORRUST_TRACKER_CONFIG_TOML but never restores or removes it, so any later test in the same process can unexpectedly load this two-tracker configuration instead of its intended default. Capture the previous value and restore it after the test, or run the app with an injected configuration instead of mutating global state.
    contrib/bencode/src/lib.rs:103
  • This public macro is also pinned to the pre-2024 expr_2021 fragment, which prevents callers from using Rust 2024 expression forms. There is no competing matcher here, so using expr would better match the crate's new edition.
    ( $($ben:expr_2021),* ) => {

contrib/bencode/src/lib.rs:123

  • This public macro matcher now rejects Rust 2024-only expression forms because it uses expr_2021. With no ambiguous sibling rule, switching back to expr would expose the expected edition-2024 macro behavior.
    ( $ben:expr_2021 ) => {{

contrib/bencode/src/lib.rs:134

  • This public macro matcher is still limited to the pre-2024 expression grammar via expr_2021. Since the workspace is being migrated to edition 2024 and there is no ambiguous alternative arm, prefer expr so callers can pass the full Rust 2024 expression syntax.
    ( $ben:expr_2021 ) => {{

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread tests/servers/api/contract/stats/mod.rs
Comment thread docs/issues/open/1778-migrate-to-rust-edition-2024.md
Comment thread AGENTS.md
Comment thread docs/issues/open/1778-migrate-to-rust-edition-2024.md
Comment thread contrib/bencode/src/lib.rs
@codecov
Copy link
Copy Markdown

codecov Bot commented May 14, 2026

Codecov Report

❌ Patch coverage is 67.35751% with 63 lines in your changes missing coverage. Please review.
✅ Project coverage is 78.42%. Comparing base (42ea432) to head (cfaeaef).

Files with missing lines Patch % Lines
src/console/ci/compose.rs 0.00% 44 Missing ⚠️
src/console/ci/e2e/docker.rs 0.00% 12 Missing ⚠️
src/app.rs 0.00% 2 Missing ⚠️
packages/events/src/bus.rs 0.00% 0 Missing and 1 partial ⚠️
...-benchmarking/src/repository/dash_map_mutex_std.rs 66.66% 1 Missing ⚠️
src/bootstrap/jobs/manager.rs 83.33% 1 Missing ⚠️
src/bootstrap/jobs/torrent_cleanup.rs 0.00% 1 Missing ⚠️
src/console/ci/e2e/tracker_checker.rs 0.00% 1 Missing ⚠️
Additional details and impacted files
@@             Coverage Diff             @@
##           develop    #1784      +/-   ##
===========================================
+ Coverage    78.31%   78.42%   +0.11%     
===========================================
  Files          376      377       +1     
  Lines        28369    28361       -8     
  Branches     28369    28361       -8     
===========================================
+ Hits         22217    22242      +25     
+ Misses        5847     5807      -40     
- Partials       305      312       +7     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

chore: migrate workspace from Rust edition 2021 to edition 2024

2 participants