chore(workspace): migrate to Rust edition 2024#1784
Conversation
- 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
There was a problem hiding this comment.
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_TOMLbut 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_2021fragment, which prevents callers from using Rust 2024 expression forms. There is no competing matcher here, so usingexprwould 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 toexprwould 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, preferexprso 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.
Codecov Report❌ Patch coverage is 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. 🚀 New features to boost your workflow:
|
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 rootCargo.tomlrust-version = "1.85"in rootCargo.tomlAGENTS.mdto reflect new edition and MSRVAutomated fixes (
cargo fix --edition)if_let_rescope,edition_2024_expr_fragment_specifier, anddeprecated_safe_2024fixes workspace-widelazy_static→std::sync::LazyLocklazy_static!statics inpackages/udp-tracker-core/src/crypto/ephemeral_instance_keys.rswithstd::sync::LazyLocklazy_static::initialize(...)withstd::sync::LazyLock::force(...)inpackages/udp-tracker-core/src/lib.rslazy_static = "1"dependency frompackages/udp-tracker-core/Cargo.tomlNew clippy denials (pedantic/style, enabled by edition 2024 toolchain)
io_other_errorio::Error::other(msg)src/console/ci/compose.rs,src/console/ci/e2e/docker.rsunnecessary_semicolon;aftermatchblocksudp-tracker-core,http-tracker-core,udp-tracker-serversingle_match_elsematch Ok/Errtoif let Errunnecessary_map_oris_none_or(Vec::is_empty)src/app.rsnon_std_lazy_staticsLazyLockmigration aboveudp-tracker-coreborrow_as_ptr&raw constin pointer equality assertionspackages/udp-tracker-server/src/statistics/repository.rsunsafeannotationstd::env::set_var(...)inunsafe {}with safety comment intests/servers/api/contract/stats/mod.rsDoctest fix
packages/located-error/src/lib.rs: madeLocation::caller()assertion resilient to Rust 2024's merged doctest bundle path (|| b.to_string().contains("doctest_bundle"))doctesttoproject-words.txtVerification
All quality gates pass on the migration commit:
cargo machetelinter all(markdownlint, yamllint, taplo, cspell, clippy, rustfmt, shellcheck)cargo +nightly fmt --checkcargo +nightly check --workspace --all-targets --all-featurescargo +nightly doccargo test --doc --workspacecargo test --tests --benches --workspace --all-targets --all-featurestracker.e2e.container.sqlite3.toml)RUSTFLAGS="-W rust-2024-compatibility" cargo check1250353E