Skip to content

chore(rust/clippy): enable some lints#12363

Merged
zkochan merged 22 commits into
mainfrom
claude/amazing-pascal-omczyy
Jun 12, 2026
Merged

chore(rust/clippy): enable some lints#12363
zkochan merged 22 commits into
mainfrom
claude/amazing-pascal-omczyy

Conversation

@KSXGitHub

@KSXGitHub KSXGitHub commented Jun 12, 2026

Copy link
Copy Markdown
Contributor

Enables a batch of clippy restriction- and cargo-group lints across the pacquet/pnpr workspace, plus the small code changes needed to comply. These groups aren't covered by the pedantic/nursery activations already in [workspace.lints.clippy], so each lint is opted into individually.

Lints enabled (all warn)

  • unsafe hygiene: undocumented_unsafe_blocks, unnecessary_safety_comment
  • explicit intent: exit, infinite_loop, mem_forget, unused_result_ok
  • leftover-marker guards: todo, unimplemented
  • perf-shaped: pathbuf_init_then_push, string_add, verbose_file_reads
  • cargo group: negative_feature_names, redundant_feature_names, wildcard_dependencies

Most are zero-violation guards. The few with existing hits were fixed: a leaked TempDirTempDir::keep(), two .ok() discards → let _ =, a String + &str fixture → concat!, PathBuf::pushPath::join; two deliberate leaks and one process exit (dlx propagating the child's status) now carry #[expect], and a misplaced // SAFETY: was reworded.

Deliberately left off

Lints that would be noise or churn rather than improvements — e.g. dbg_macro (the style guide prescribes dbg! in tests), str_to_string, print_*, unwrap_used, cargo_common_metadata.

get_unwrap and allow_attributes / allow_attributes_without_reason were trialed and reverted: perfectionist is adding better-targeted replacements (notably exempting allow inside cfg_attr), and get_unwrap only hid the greppable unwrap from panicking call sites.

cargo clippy --workspace --all-targets is clean.


Written by an agent (Claude Code).

Summary by CodeRabbit

  • Chores

    • Enhanced workspace lint configuration with expanded Clippy rules for improved code quality.
    • Added lint suppression attributes to intentional patterns in internal code.
  • Refactor

    • Simplified path resolution logic for clarity.
    • Improved test helpers and fixture construction methods.
    • Updated error handling patterns in internal code.

claude added 17 commits June 12, 2026 13:35
Move the SAFETY rationale out of the EnvGuard doc comment and onto the
two env-var unsafe blocks it actually justifies, so every unsafe block
in the workspace now carries its own // SAFETY: comment.
Reword a comment in local_tracing that used the // SAFETY: prefix to
justify an expect() on safe code; the prefix is reserved for unsafe
blocks.
No occurrences in the workspace; the lint keeps stray todo!() markers
out of committed code from now on.
No occurrences in the workspace; the lint keeps stray unimplemented!()
markers out of committed code from now on.
The one deliberate process exit — dlx propagating the spawned command's
exit status, matching pnpm — now carries an #[expect] stating that;
any new std::process::exit call site has to justify itself the same
way.
No occurrences in the workspace; a loop that can never terminate must
return ! from now on.
The overrides test helper leaked its TempDir via mem::forget to keep
the fixture on disk; TempDir::keep() is the purpose-built API for
that. The two registry-mock forget(mock_instance) calls stay — the
leak is how the shared mock-registry process survives the spawning
test process — but now carry #[expect] so the intent is
machine-checked.
Replace .get(...).unwrap() / .get_mut(...).unwrap() with indexing
across the test suites (machine-applicable clippy fixes): the panic is
the same, but the intent is clearer and the panic message names the
missing key instead of 'unwrap on None'.
Two best-effort calls in tests discarded their Result with .ok();
spell the discard out with let _ = instead, so .ok() is reserved for
actually consuming the Option.
resolve_path built its joined path with to_path_buf + push; Path::join
expresses the same thing in one allocation-aware call.
The phase-event fixture concatenated string literals at runtime with
String + &str; concat! assembles the same fixture at compile time.
No occurrences in the workspace; whole-file reads go through fs::read
/ fs::read_to_string rather than manual open + read_to_end loops from
now on.
Convert every #[allow] in the workspace to #[expect]. The conversion
immediately paid for itself by surfacing four suppressions whose lint
no longer fires:

- resolve_peers: a too_many_arguments expect on a three-argument
  method (stale since a refactor) - removed.
- resolve_peers: two dead_code expects on MissingPeerInfo fields the
  compiler considers used - removed.
- tarball: fetch_and_extract_zip_once stacked two copies of the same
  too_many_arguments suppression - deduplicated.
- ensure_file: a cfg_attr(windows, allow(unused)) on a mode parameter
  that IS used on Windows (via verify_or_rewrite) - removed.

The remaining windows-side cfg_attr suppressions become expect with a
reason, and fire correctly there (the parameters are genuinely unused
on that cfg).
Every #[expect] in the workspace already carries a reason; the lint
locks the convention in.
No occurrences in the workspace; cargo features stay additive
(no no-std / not-x style names) from now on.
No occurrences in the workspace; feature names won't restate that they
are features (use-x / with-x prefixes and suffixes).
No occurrences in the workspace; every dependency keeps a real version
requirement instead of "*".
@coderabbitai

coderabbitai Bot commented Jun 12, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: d5200169-ebda-41a6-a352-97da07f165ee

📥 Commits

Reviewing files that changed from the base of the PR and between 6648b53 and db6ad7e.

📒 Files selected for processing (11)
  • Cargo.toml
  • pacquet/crates/cli/src/cli_args/dlx.rs
  • pacquet/crates/diagnostics/src/local_tracing.rs
  • pacquet/crates/executor/src/lifecycle/tests.rs
  • pacquet/crates/package-manager/src/overrides/tests.rs
  • pacquet/crates/resolving-local-resolver/src/parse_bare_specifier.rs
  • pacquet/crates/resolving-npm-resolver/src/fetch_full_metadata_cached/tests.rs
  • pacquet/crates/store-dir/src/check_pkg_files_integrity/tests.rs
  • pacquet/tasks/integrated-benchmark/src/work_env/tests.rs
  • pacquet/tasks/registry-mock/src/registry_anchor.rs
  • pacquet/tasks/registry-mock/src/registry_info.rs
📜 Recent review details
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (7)
  • GitHub Check: Run benchmark on ubuntu-latest
  • GitHub Check: Run benchmark on ubuntu-latest
  • GitHub Check: Code Coverage
  • GitHub Check: Lint and Test (windows-latest)
  • GitHub Check: Lint and Test (macos-latest)
  • GitHub Check: Lint and Test (ubuntu-latest)
  • GitHub Check: Compile & Lint
🧰 Additional context used
📓 Path-based instructions (1)
pacquet/**/*.rs

📄 CodeRabbit inference engine (pacquet/AGENTS.md)

pacquet/**/*.rs: Log emissions are part of matching pnpm — when porting a function that fires pnpm:<channel> events through globalLogger, logger.debug(...), or streamParser.write(...), mirror the call site, payload, and ordering so @pnpm/cli.default-reporter parses pacquet's NDJSON the same way
Declare a newtype wrapper for branded string types instead of collapsing the brand into a plain String or &str in Rust
If upstream TypeScript always validates before construction of a branded string, validate in the Rust wrapper too via TryFrom<String> and/or FromStr and do not provide an infallible public constructor
If upstream TypeScript never validates a branded string, just brand for type-safety in Rust by exposing an infallible From<String> constructor
If upstream TypeScript occasionally constructs a branded string without validation, expose from_str_unchecked in Rust as an escape hatch alongside the validating constructor
Match upstream serde behavior for branded strings crossing JSON, YAML, or INI boundaries by using #[serde(try_from = "String")] for deserialization and #[serde(into = "String")] for serialization
Derive simple conversions for branded strings using #[derive(derive_more::From)] and #[derive(derive_more::Into)] instead of handwriting impl blocks; use manual impl only when conversion needs custom logic
Model TypeScript string literal unions (like 'auto' | 'always' | 'never') as Rust enums instead of newtype wrappers, since the set of valid values is closed
Treat TypeScript string template literal types (like `${string}@${string}`) the same as branded string types in Rust, using a newtype wrapper with validation
Follow the code style guide in CODE_STYLE_GUIDE.md — imports, modules, naming, ownership and borrowing, parameter type selection, trait bounds, pattern matching, pipe-trait, error handling, test layout, and cloning of Arc and Rc
Choose owned vs. borrowed parameters to minimize copies; widen to t...

Files:

  • pacquet/crates/package-manager/src/overrides/tests.rs
  • pacquet/tasks/registry-mock/src/registry_anchor.rs
  • pacquet/crates/resolving-npm-resolver/src/fetch_full_metadata_cached/tests.rs
  • pacquet/crates/resolving-local-resolver/src/parse_bare_specifier.rs
  • pacquet/crates/cli/src/cli_args/dlx.rs
  • pacquet/crates/store-dir/src/check_pkg_files_integrity/tests.rs
  • pacquet/tasks/integrated-benchmark/src/work_env/tests.rs
  • pacquet/crates/diagnostics/src/local_tracing.rs
  • pacquet/tasks/registry-mock/src/registry_info.rs
  • pacquet/crates/executor/src/lifecycle/tests.rs
🧠 Learnings (6)
📚 Learning: 2026-05-20T19:40:55.051Z
Learnt from: zkochan
Repo: pnpm/pnpm PR: 11774
File: pacquet/crates/resolving-deps-resolver/src/resolve_peers.rs:0-0
Timestamp: 2026-05-20T19:40:55.051Z
Learning: In the pacquet Rust code, ensure the semver implementation uses the `node-semver` crate (not `nodejs-semver`). `node-semver`’s public API does not include a `satisfies_with_prerelease`-style method; prerelease-tolerant matching should be implemented inline by first calling `Range::satisfies`, and when it rejects a prerelease version, retry matching against a stripped `MAJOR.MINOR.PATCH` base of the prerelease version.

Applied to files:

  • pacquet/crates/package-manager/src/overrides/tests.rs
  • pacquet/crates/resolving-npm-resolver/src/fetch_full_metadata_cached/tests.rs
  • pacquet/crates/resolving-local-resolver/src/parse_bare_specifier.rs
  • pacquet/crates/cli/src/cli_args/dlx.rs
  • pacquet/crates/store-dir/src/check_pkg_files_integrity/tests.rs
  • pacquet/crates/diagnostics/src/local_tracing.rs
  • pacquet/crates/executor/src/lifecycle/tests.rs
📚 Learning: 2026-05-22T00:08:44.646Z
Learnt from: zkochan
Repo: pnpm/pnpm PR: 11837
File: pacquet/crates/resolving-npm-resolver/src/pick_package.rs:33-51
Timestamp: 2026-05-22T00:08:44.646Z
Learning: In the pnpm/pnpm repo’s pacquet Rust crates, do not flag Unicode ellipsis characters (U+2026, `…`) in Rust doc comments (`///` / `/** */`) as a lint violation. The pacquet crate’s `dylint.toml` only enables `perfectionist::derive_ordering`, and the Dylint `unicode-ellipsis` rule is not enabled for this project—so `…` in doc comments is an intentional, repo-consistent style.

Applied to files:

  • pacquet/crates/package-manager/src/overrides/tests.rs
  • pacquet/crates/resolving-npm-resolver/src/fetch_full_metadata_cached/tests.rs
  • pacquet/crates/resolving-local-resolver/src/parse_bare_specifier.rs
  • pacquet/crates/cli/src/cli_args/dlx.rs
  • pacquet/crates/store-dir/src/check_pkg_files_integrity/tests.rs
  • pacquet/crates/diagnostics/src/local_tracing.rs
  • pacquet/crates/executor/src/lifecycle/tests.rs
📚 Learning: 2026-05-20T23:07:58.444Z
Learnt from: zkochan
Repo: pnpm/pnpm PR: 11784
File: pacquet/crates/resolving-deps-resolver/src/hoist_peers.rs:120-133
Timestamp: 2026-05-20T23:07:58.444Z
Learning: When reviewing code in this pacquet Rust port, follow the upstream pnpm compatibility rule: only match pnpm’s behavior exactly. Do not propose review changes that intentionally deviate from pnpm’s documented/observed behavior, even if pnpm appears buggy. If you identify a real bug in pnpm behavior, the review should prioritize fixing it upstream in pnpm first, and avoid implementing a pnpm-behavior workaround here unless the same fix has already landed upstream.

Applied to files:

  • pacquet/crates/package-manager/src/overrides/tests.rs
  • pacquet/tasks/registry-mock/src/registry_anchor.rs
  • pacquet/crates/resolving-npm-resolver/src/fetch_full_metadata_cached/tests.rs
  • pacquet/crates/resolving-local-resolver/src/parse_bare_specifier.rs
  • pacquet/crates/cli/src/cli_args/dlx.rs
  • pacquet/crates/store-dir/src/check_pkg_files_integrity/tests.rs
  • pacquet/tasks/integrated-benchmark/src/work_env/tests.rs
  • pacquet/crates/diagnostics/src/local_tracing.rs
  • pacquet/tasks/registry-mock/src/registry_info.rs
  • pacquet/crates/executor/src/lifecycle/tests.rs
📚 Learning: 2026-06-06T18:58:37.156Z
Learnt from: zkochan
Repo: pnpm/pnpm PR: 12243
File: pacquet/crates/package-manager/src/install_package_by_snapshot.rs:319-322
Timestamp: 2026-06-06T18:58:37.156Z
Learning: When reviewing Rust code, do not assume `matches!(expr, Pattern(_))` will move out of `expr` if `Pattern(_)` contains no by-value bindings. `matches!` desugars to a `match` that auto-borrows the scrutinee for discrimination, so even if `expr` is a non-`Copy` value behind a shared reference (e.g., `&T`), the macro should not move-out of the borrowed data purely due to `matches!`. Treat `matches!(&expr, Pattern(_))` as a readability/clarity improvement, not a correctness requirement. Only flag potential move-out-of-borrow risks when the pattern includes by-value bindings that would require moving the matched value.

Applied to files:

  • pacquet/crates/package-manager/src/overrides/tests.rs
  • pacquet/tasks/registry-mock/src/registry_anchor.rs
  • pacquet/crates/resolving-npm-resolver/src/fetch_full_metadata_cached/tests.rs
  • pacquet/crates/resolving-local-resolver/src/parse_bare_specifier.rs
  • pacquet/crates/cli/src/cli_args/dlx.rs
  • pacquet/crates/store-dir/src/check_pkg_files_integrity/tests.rs
  • pacquet/tasks/integrated-benchmark/src/work_env/tests.rs
  • pacquet/crates/diagnostics/src/local_tracing.rs
  • pacquet/tasks/registry-mock/src/registry_info.rs
  • pacquet/crates/executor/src/lifecycle/tests.rs
📚 Learning: 2026-06-12T20:41:57.558Z
Learnt from: zkochan
Repo: pnpm/pnpm PR: 12364
File: pacquet/crates/package-manager/src/install/tests.rs:5717-5717
Timestamp: 2026-06-12T20:41:57.558Z
Learning: In the pnpm/pnpm Rust workspace (toolchain Rust 1.95.0), keep using `std::time::Duration::from_mins(...)` and `std::time::Duration::from_hours(...)` as-is. Do not flag these as invalid or suggest replacing them with `Duration::from_secs(...)`, because Clippy’s `clippy::duration_suboptimal_units` lint is denied by `-D warnings` in CI, and changing to seconds may trigger CI failures.

Applied to files:

  • pacquet/crates/package-manager/src/overrides/tests.rs
  • pacquet/tasks/registry-mock/src/registry_anchor.rs
  • pacquet/crates/resolving-npm-resolver/src/fetch_full_metadata_cached/tests.rs
  • pacquet/crates/resolving-local-resolver/src/parse_bare_specifier.rs
  • pacquet/crates/cli/src/cli_args/dlx.rs
  • pacquet/crates/store-dir/src/check_pkg_files_integrity/tests.rs
  • pacquet/tasks/integrated-benchmark/src/work_env/tests.rs
  • pacquet/crates/diagnostics/src/local_tracing.rs
  • pacquet/tasks/registry-mock/src/registry_info.rs
  • pacquet/crates/executor/src/lifecycle/tests.rs
📚 Learning: 2026-06-12T07:04:03.703Z
Learnt from: zkochan
Repo: pnpm/pnpm PR: 12227
File: pacquet/crates/package-manager/src/install.rs:708-719
Timestamp: 2026-06-12T07:04:03.703Z
Learning: In this pnpm-based repo’s package-manager Rust code, `ThrottledClient` uses a two-class semaphore scheduling policy (“reserved half” for tarball/download work and a higher-priority “latency class” for lockfile-verification metadata fetches). Therefore, when reviewing, do NOT flag reuse of the same `Arc<ThrottledClient>` for both downloads and verification as a budget/contention issue—this reuse is intentional and handled by the internal two-class “reserved permits” design. Creating a separate client instance would break the EMFILE guard behavior that relies on shared throttling.

Applied to files:

  • pacquet/crates/package-manager/src/overrides/tests.rs
🔇 Additional comments (11)
Cargo.toml (1)

232-250: LGTM!

pacquet/crates/cli/src/cli_args/dlx.rs (1)

359-365: LGTM!

pacquet/tasks/registry-mock/src/registry_anchor.rs (1)

102-106: LGTM!

pacquet/tasks/registry-mock/src/registry_info.rs (1)

73-74: LGTM!

pacquet/crates/package-manager/src/overrides/tests.rs (1)

27-30: LGTM!

pacquet/crates/resolving-npm-resolver/src/fetch_full_metadata_cached/tests.rs (1)

233-234: LGTM!

pacquet/crates/store-dir/src/check_pkg_files_integrity/tests.rs (1)

21-21: LGTM!

pacquet/tasks/integrated-benchmark/src/work_env/tests.rs (1)

14-21: LGTM!

pacquet/crates/diagnostics/src/local_tracing.rs (1)

32-33: LGTM!

pacquet/crates/executor/src/lifecycle/tests.rs (1)

352-362: LGTM!

pacquet/crates/resolving-local-resolver/src/parse_bare_specifier.rs (1)

257-257: LGTM!


📝 Walkthrough

Walkthrough

This PR expands the workspace clippy lint configuration and applies corresponding code fixes throughout the codebase. The changes enable stricter linting rules and document or suppress expected lint warnings via #[expect(...)] attributes, along with test and utility code improvements.

Changes

Clippy Lint Expansion and Code Compliance

Layer / File(s) Summary
Workspace Clippy Lint Configuration
Cargo.toml
Lint set is expanded from 3 individually enabled lints to many additional safety, correctness, and control-flow restrictions; cargo-group lint list is extended with feature and dependency lints.
Expected Behavior Lint Suppressions
pacquet/crates/cli/src/cli_args/dlx.rs, pacquet/tasks/registry-mock/src/registry_anchor.rs, pacquet/tasks/registry-mock/src/registry_info.rs
Process exit and intentional memory-leak patterns are documented and suppressed via #[expect(clippy::...)] attributes without changing runtime behavior.
Test Resource Handling and Result Patterns
pacquet/crates/package-manager/src/overrides/tests.rs, pacquet/crates/resolving-npm-resolver/src/fetch_full_metadata_cached/tests.rs, pacquet/crates/store-dir/src/check_pkg_files_integrity/tests.rs, pacquet/tasks/integrated-benchmark/src/work_env/tests.rs
Tempdir resource lifetime is improved via dir.keep() instead of mem::forget(); error-discarding patterns are standardized to explicit let _ = ... binding form; fixture construction is refactored to use concat! macro.
Comments Clarification and Code Simplification
pacquet/crates/diagnostics/src/local_tracing.rs, pacquet/crates/executor/src/lifecycle/tests.rs, pacquet/crates/resolving-local-resolver/src/parse_bare_specifier.rs
Diagnostic and test safety comments are refined to explain panicking and concurrency concerns; path resolution code is simplified via join() method without changing behavior.

🎯 2 (Simple) | ⏱️ ~12 minutes


Possibly related PRs

  • pnpm/pnpm#11839: Both PRs expand Clippy lint configuration and apply corresponding code fixes with #[expect(clippy::...)] suppressions.

Suggested reviewers

  • zkochan

🐰 A linter's dream come true,
New clippy rules in line review!
Expects and forget blend,
Code patterns we defend,
Clear comments and tests anew.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the main change: enabling additional Clippy lints in the Rust workspace configuration, which is the primary focus of the PR.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch claude/amazing-pascal-omczyy

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actions

github-actions Bot commented Jun 12, 2026

Copy link
Copy Markdown
Contributor

Micro-Benchmark Results

Linux

group                          main                                   pr
-----                          ----                                   --
tarball/download_dependency    1.02      7.7±0.27ms   563.1 KB/sec    1.00      7.6±0.57ms   574.1 KB/sec

@codecov-commenter

codecov-commenter commented Jun 12, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 88.16%. Comparing base (6648b53) to head (db6ad7e).
⚠️ Report is 1 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##             main   #12363      +/-   ##
==========================================
- Coverage   88.17%   88.16%   -0.01%     
==========================================
  Files         295      295              
  Lines       37769    37767       -2     
==========================================
- Hits        33302    33297       -5     
- Misses       4467     4470       +3     

☔ View full report in Codecov by Harness.
📢 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.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@github-actions

Copy link
Copy Markdown
Contributor

Integrated-Benchmark Report (Linux)

Each scenario reports direct installs and pnpr installs. Bencher consumes pacquet@HEAD and pnpr@HEAD.

Scenario: Isolated linker: fresh restore, cold cache + cold store

Command Mean [s] Min [s] Max [s] Relative
pacquet@HEAD 4.207 ± 0.135 4.029 4.453 1.97 ± 0.13
pacquet@main 4.094 ± 0.112 3.949 4.318 1.91 ± 0.12
pnpr@HEAD 2.138 ± 0.120 1.956 2.328 1.00
pnpr@main 2.139 ± 0.176 1.938 2.415 1.00 ± 0.10
BENCHMARK_REPORT.json
{
  "results": [
    {
      "command": "pacquet@HEAD",
      "mean": 4.206659264,
      "stddev": 0.13466556199322915,
      "median": 4.1820984967,
      "user": 3.9212651999999992,
      "system": 3.51467734,
      "min": 4.0288661602,
      "max": 4.4532068562,
      "times": [
        4.2779381202,
        4.1282065042,
        4.248095322199999,
        4.094295874199999,
        4.1556115952,
        4.3789325352,
        4.4532068562,
        4.0928542742,
        4.0288661602,
        4.208585398199999
      ]
    },
    {
      "command": "pacquet@main",
      "mean": 4.093697300800001,
      "stddev": 0.11165695245266433,
      "median": 4.0711546397,
      "user": 3.8887774999999998,
      "system": 3.4785276400000003,
      "min": 3.9492075732000003,
      "max": 4.318494149199999,
      "times": [
        4.1017474642,
        4.0289157732,
        3.9954076302000003,
        4.1532625342,
        4.0439517482,
        4.0983575312,
        3.9492075732000003,
        4.221317732199999,
        4.0263108722,
        4.318494149199999
      ]
    },
    {
      "command": "pnpr@HEAD",
      "mean": 2.1379217923,
      "stddev": 0.11981132830882388,
      "median": 2.1436857832,
      "user": 2.6172109,
      "system": 3.0024893399999995,
      "min": 1.9558675722,
      "max": 2.3275578282000002,
      "times": [
        2.0037494612,
        2.1478541402,
        2.0452473142,
        2.1186401632000003,
        2.1500768212,
        2.3153269562000003,
        2.1753802402,
        2.3275578282000002,
        1.9558675722,
        2.1395174262
      ]
    },
    {
      "command": "pnpr@main",
      "mean": 2.1389580796,
      "stddev": 0.17616649019628183,
      "median": 2.0427235692,
      "user": 2.6265122999999995,
      "system": 2.97852764,
      "min": 1.9380704132000002,
      "max": 2.4154244942000003,
      "times": [
        2.3408227862,
        1.9961588522000002,
        2.0208941072,
        2.0389220442,
        2.1748310342,
        2.0420349062,
        1.9380704132000002,
        2.0434122322,
        2.3790099262,
        2.4154244942000003
      ]
    }
  ]
}

Scenario: Isolated linker: fresh restore, hot cache + hot store

Command Mean [ms] Min [ms] Max [ms] Relative
pacquet@HEAD 614.6 ± 15.9 590.7 634.7 1.00
pacquet@main 645.4 ± 86.6 605.3 890.3 1.05 ± 0.14
pnpr@HEAD 735.7 ± 145.4 664.5 1146.4 1.20 ± 0.24
pnpr@main 705.0 ± 66.0 663.8 886.1 1.15 ± 0.11
BENCHMARK_REPORT.json
{
  "results": [
    {
      "command": "pacquet@HEAD",
      "mean": 0.6146407441599999,
      "stddev": 0.01589974528152202,
      "median": 0.61464483236,
      "user": 0.37648689999999996,
      "system": 1.29247844,
      "min": 0.59073220586,
      "max": 0.63467174186,
      "times": [
        0.60842020586,
        0.63319860386,
        0.59073220586,
        0.60935184586,
        0.62359166186,
        0.63467174186,
        0.59655040386,
        0.61993781886,
        0.63007006086,
        0.59988289286
      ]
    },
    {
      "command": "pacquet@main",
      "mean": 0.6454237378600001,
      "stddev": 0.08658232144910416,
      "median": 0.61603097036,
      "user": 0.3669718,
      "system": 1.3076716400000001,
      "min": 0.60533106386,
      "max": 0.89025500686,
      "times": [
        0.60533106386,
        0.62880877686,
        0.61713245186,
        0.60679501186,
        0.61403449086,
        0.62722053986,
        0.61492948886,
        0.63622835186,
        0.61350219586,
        0.89025500686
      ]
    },
    {
      "command": "pnpr@HEAD",
      "mean": 0.73569494796,
      "stddev": 0.1454062000813593,
      "median": 0.69402949886,
      "user": 0.385776,
      "system": 1.3595759399999996,
      "min": 0.66450754886,
      "max": 1.14638181086,
      "times": [
        0.67377387086,
        0.7177168068600001,
        0.67464403386,
        0.6881002188600001,
        0.66450754886,
        0.67582238786,
        0.70556882186,
        0.71047520086,
        1.14638181086,
        0.69995877886
      ]
    },
    {
      "command": "pnpr@main",
      "mean": 0.70496678026,
      "stddev": 0.06603965426907744,
      "median": 0.68567840986,
      "user": 0.39118319999999995,
      "system": 1.3330750400000002,
      "min": 0.66380089086,
      "max": 0.88606006586,
      "times": [
        0.67164206486,
        0.66612989686,
        0.6769855098600001,
        0.69437130986,
        0.67010883286,
        0.66380089086,
        0.70337480586,
        0.88606006586,
        0.70995520186,
        0.70723922386
      ]
    }
  ]
}

Scenario: Isolated linker: fresh install, cold cache + cold store

Command Mean [s] Min [s] Max [s] Relative
pacquet@HEAD 3.939 ± 0.050 3.860 4.032 1.82 ± 0.11
pacquet@main 3.894 ± 0.058 3.811 3.983 1.80 ± 0.11
pnpr@HEAD 2.159 ± 0.129 2.001 2.383 1.00
pnpr@main 2.177 ± 0.096 2.067 2.349 1.01 ± 0.07
BENCHMARK_REPORT.json
{
  "results": [
    {
      "command": "pacquet@HEAD",
      "mean": 3.9389935409399994,
      "stddev": 0.04978822907641614,
      "median": 3.93397456884,
      "user": 3.59496634,
      "system": 3.3595850999999994,
      "min": 3.85970257984,
      "max": 4.03192716484,
      "times": [
        4.03192716484,
        3.92057842384,
        3.92343502184,
        3.9467445848400002,
        3.96122318284,
        3.92226494984,
        3.99426644684,
        3.88527893884,
        3.94451411584,
        3.85970257984
      ]
    },
    {
      "command": "pacquet@main",
      "mean": 3.89390607324,
      "stddev": 0.058003187052427095,
      "median": 3.8811740943400004,
      "user": 3.54955024,
      "system": 3.3691649,
      "min": 3.81061458384,
      "max": 3.98320386784,
      "times": [
        3.89311783784,
        3.96582605084,
        3.91589021084,
        3.81061458384,
        3.84119457184,
        3.84550561184,
        3.86466048684,
        3.86923035084,
        3.98320386784,
        3.94981715984
      ]
    },
    {
      "command": "pnpr@HEAD",
      "mean": 2.15930548694,
      "stddev": 0.12910394416280357,
      "median": 2.11191032484,
      "user": 2.47797734,
      "system": 2.9148541,
      "min": 2.00134117784,
      "max": 2.3830350028400002,
      "times": [
        2.10301027284,
        2.00134117784,
        2.03203846284,
        2.07317743784,
        2.28413641384,
        2.18662151984,
        2.12081037684,
        2.31918817284,
        2.08969603184,
        2.3830350028400002
      ]
    },
    {
      "command": "pnpr@main",
      "mean": 2.17713739794,
      "stddev": 0.09606454458114096,
      "median": 2.17278528984,
      "user": 2.48616494,
      "system": 2.9136286,
      "min": 2.06726290184,
      "max": 2.34946645184,
      "times": [
        2.19900623784,
        2.34946645184,
        2.08848007784,
        2.22114617984,
        2.30455704884,
        2.19277819884,
        2.07154245184,
        2.1527923808400002,
        2.12434204984,
        2.06726290184
      ]
    }
  ]
}

Scenario: Isolated linker: fresh install, hot cache + hot store

Command Mean [s] Min [s] Max [s] Relative
pacquet@HEAD 1.359 ± 0.013 1.335 1.374 2.08 ± 0.07
pacquet@main 1.223 ± 0.110 1.160 1.527 1.87 ± 0.18
pnpr@HEAD 0.653 ± 0.020 0.633 0.698 1.00
pnpr@main 0.663 ± 0.006 0.656 0.674 1.02 ± 0.03
BENCHMARK_REPORT.json
{
  "results": [
    {
      "command": "pacquet@HEAD",
      "mean": 1.35901169486,
      "stddev": 0.012716694800568184,
      "median": 1.3595658423599999,
      "user": 1.2541795800000002,
      "system": 1.9125335200000002,
      "min": 1.3349998563599998,
      "max": 1.37432801336,
      "times": [
        1.3349998563599998,
        1.34787322636,
        1.36232300136,
        1.37191159936,
        1.35104199236,
        1.35362059636,
        1.37432801336,
        1.35680868336,
        1.36306706636,
        1.37414291336
      ]
    },
    {
      "command": "pacquet@main",
      "mean": 1.22283882946,
      "stddev": 0.10969267490024755,
      "median": 1.18852911436,
      "user": 1.20024118,
      "system": 1.70910652,
      "min": 1.16039755936,
      "max": 1.5274665643599998,
      "times": [
        1.16871142336,
        1.20051930636,
        1.5274665643599998,
        1.21667760136,
        1.21009905636,
        1.22974803936,
        1.16039755936,
        1.17653892236,
        1.17038771636,
        1.1678421053599999
      ]
    },
    {
      "command": "pnpr@HEAD",
      "mean": 0.65297397426,
      "stddev": 0.02022845769110653,
      "median": 0.6444847543600001,
      "user": 0.34671848,
      "system": 1.2750071200000002,
      "min": 0.63274449636,
      "max": 0.69786566836,
      "times": [
        0.63914062236,
        0.63963691236,
        0.63274449636,
        0.64382488936,
        0.66777451436,
        0.65911449736,
        0.63665581136,
        0.66783771136,
        0.64514461936,
        0.69786566836
      ]
    },
    {
      "command": "pnpr@main",
      "mean": 0.66305241456,
      "stddev": 0.005706164121433194,
      "median": 0.66329747136,
      "user": 0.3487119799999999,
      "system": 1.29651552,
      "min": 0.65630661636,
      "max": 0.67441843636,
      "times": [
        0.65865546036,
        0.66370812936,
        0.66397814436,
        0.66990155336,
        0.65707017836,
        0.65630661636,
        0.66288681336,
        0.66423508536,
        0.67441843636,
        0.65936372836
      ]
    }
  ]
}

Scenario: Isolated linker: fresh install, cold cache + hot store

Command Mean [s] Min [s] Max [s] Relative
pacquet@HEAD 2.693 ± 0.046 2.652 2.784 4.26 ± 0.09
pacquet@main 2.646 ± 0.043 2.579 2.715 4.19 ± 0.08
pnpr@HEAD 0.641 ± 0.008 0.625 0.655 1.01 ± 0.02
pnpr@main 0.632 ± 0.007 0.621 0.641 1.00
BENCHMARK_REPORT.json
{
  "results": [
    {
      "command": "pacquet@HEAD",
      "mean": 2.6926695725800003,
      "stddev": 0.04599162659025576,
      "median": 2.6798300943799997,
      "user": 1.63707876,
      "system": 1.94420922,
      "min": 2.65214866988,
      "max": 2.78381202988,
      "times": [
        2.78381202988,
        2.72408388888,
        2.6525227398799998,
        2.69501513688,
        2.65535114288,
        2.65214866988,
        2.67041728488,
        2.65510176488,
        2.68924290388,
        2.74900016388
      ]
    },
    {
      "command": "pacquet@main",
      "mean": 2.64587954018,
      "stddev": 0.04332427238030751,
      "median": 2.63582807488,
      "user": 1.58766536,
      "system": 1.9339460199999998,
      "min": 2.57854277288,
      "max": 2.71466637088,
      "times": [
        2.71466637088,
        2.65137089188,
        2.68296917388,
        2.6408540078800002,
        2.62593040488,
        2.57854277288,
        2.61018011788,
        2.61818993088,
        2.63080214188,
        2.70528958888
      ]
    },
    {
      "command": "pnpr@HEAD",
      "mean": 0.64081862258,
      "stddev": 0.007998076613017765,
      "median": 0.6401608748800001,
      "user": 0.31944016,
      "system": 1.2936641199999999,
      "min": 0.62523731388,
      "max": 0.65457717588,
      "times": [
        0.63538267388,
        0.62523731388,
        0.65457717588,
        0.63857051688,
        0.63658743888,
        0.64175123288,
        0.63840095188,
        0.64796178988,
        0.64424226788,
        0.64547486388
      ]
    },
    {
      "command": "pnpr@main",
      "mean": 0.6322127070799999,
      "stddev": 0.006967647440846865,
      "median": 0.63210250438,
      "user": 0.32693406,
      "system": 1.2562756199999998,
      "min": 0.62110264388,
      "max": 0.64101737088,
      "times": [
        0.62771421588,
        0.63424636688,
        0.64029376488,
        0.62343866588,
        0.6384968358800001,
        0.6299586418800001,
        0.64101737088,
        0.63637310688,
        0.62110264388,
        0.62948545788
      ]
    }
  ]
}

@github-actions

Copy link
Copy Markdown
Contributor

🐰 Bencher Report

Branchpr/12363
Testbedpacquet
Click to view all benchmark results
BenchmarkLatencyBenchmark Result
milliseconds (ms)
(Result Δ%)
Upper Boundary
milliseconds (ms)
(Limit %)
isolated-linker.fresh-install.cold-cache.cold-store📈 view plot
🚷 view threshold
3,938.99 ms
(-39.72%)Baseline: 6,534.24 ms
7,841.09 ms
(50.24%)
isolated-linker.fresh-install.cold-cache.hot-store📈 view plot
🚷 view threshold
2,692.67 ms
(-29.16%)Baseline: 3,800.83 ms
4,561.00 ms
(59.04%)
isolated-linker.fresh-install.hot-cache.hot-store📈 view plot
🚷 view threshold
1,359.01 ms
(+7.46%)Baseline: 1,264.62 ms
1,517.55 ms
(89.55%)
isolated-linker.fresh-restore.cold-cache.cold-store📈 view plot
🚷 view threshold
4,206.66 ms
(-41.77%)Baseline: 7,224.30 ms
8,669.16 ms
(48.52%)
isolated-linker.fresh-restore.hot-cache.hot-store📈 view plot
🚷 view threshold
614.64 ms
(-8.82%)Baseline: 674.08 ms
808.90 ms
(75.98%)
🐰 View full continuous benchmarking report in Bencher

@github-actions

Copy link
Copy Markdown
Contributor

🐰 Bencher Report

Branchpr/12363
Testbedpnpr

⚠️ WARNING: No Threshold found!

Without a Threshold, no Alerts will ever be generated.

Click here to create a new Threshold
For more information, see the Threshold documentation.
To only post results if a Threshold exists, set the --ci-only-thresholds flag.

Click to view all benchmark results
BenchmarkLatencymilliseconds (ms)
isolated-linker.fresh-install.cold-cache.cold-store📈 view plot
⚠️ NO THRESHOLD
2,159.31 ms
isolated-linker.fresh-install.cold-cache.hot-store📈 view plot
⚠️ NO THRESHOLD
640.82 ms
isolated-linker.fresh-install.hot-cache.hot-store📈 view plot
⚠️ NO THRESHOLD
652.97 ms
isolated-linker.fresh-restore.cold-cache.cold-store📈 view plot
⚠️ NO THRESHOLD
2,137.92 ms
isolated-linker.fresh-restore.hot-cache.hot-store📈 view plot
⚠️ NO THRESHOLD
735.69 ms
🐰 View full continuous benchmarking report in Bencher

claude added 5 commits June 12, 2026 20:59
…t_reason

perfectionist is adding better-targeted replacements for both, so leave
the clippy versions off to avoid duplicate diagnostics. The #[expect]
conversions they prompted stay — they are valid without the lints and
already removed four stale suppressions.
The enabled lints' names already say what they enforce, so the inline
notes and per-theme section headers restated the obvious. Drop them to
match the convention of the surrounding activations, keeping only the
two category headers that carry non-obvious context.
The lint only rewrites `x.get(i).unwrap()` to `x[i]`, erasing the word
"unwrap" from panicking call sites and making them harder to grep for.
No safety benefit, so revert the enablement and all of its rewrites.

This reverts commit f274ad8.
…hanges

Undo the #[allow] -> #[expect] conversions from bde9865 and restore the
suppressions that conversion dropped. perfectionist is adding a
better-targeted replacement; notably it exempts `allow` inside
`cfg_attr`, so the #[cfg_attr(windows, allow(unused))] attributes are
restored as-is. The clippy lints themselves were already removed.

This reverts the code changes of commit bde9865.
@KSXGitHub KSXGitHub marked this pull request as ready for review June 12, 2026 21:52
@KSXGitHub KSXGitHub requested a review from zkochan as a code owner June 12, 2026 21:52
@zkochan zkochan merged commit 4759e05 into main Jun 12, 2026
23 of 26 checks passed
@zkochan zkochan deleted the claude/amazing-pascal-omczyy branch June 12, 2026 22:03
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.

4 participants