chore: deny clippy::inline_always at the workspace level - #9726
Conversation
Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk> Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GTBhQJigN9KMk4nAnRFCzs
Merging this PR will degrade performance by 26.24%
|
| Mode | Benchmark | BASE |
HEAD |
Efficiency | |
|---|---|---|---|---|---|
| ❌ | WallTime | arrow_checked_add_u32_neon[16384] |
13.4 µs | 20.4 µs | -34.36% |
| ❌ | WallTime | arrow_checked_add_u32_avx2[16384] |
17.7 µs | 21.3 µs | -17.1% |
Tip
Investigate this regression by commenting @codspeedbot fix this regression on this PR, or directly use the CodSpeed MCP with your agent.
Comparing claude/vortex-inline-always-lint-iuc5no (e26d5b9) with develop (b4863a1)
Footnotes
-
206 benchmarks were skipped, so the baseline results were used instead. If they were deleted from the codebase, click here and archive them to remove them from the performance reports. ↩
Ban new uses of `#[inline(always)]` workspace-wide. The 91 existing uses are deliberate hot-path annotations, so each is grandfathered with a per-site `#[allow(clippy::inline_always)]` rather than removed; codegen is unchanged. New uses now need the same explicit opt-out, backed by a measurement. Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk> Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GTBhQJigN9KMk4nAnRFCzs
Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk> Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GTBhQJigN9KMk4nAnRFCzs
robert3005
left a comment
There was a problem hiding this comment.
I would expect these inlines are not always necessary but let's grandfather them for now
Summary
Ban new uses of
#[inline(always)]across the workspace.clippy::inline_alwaysis pedantic-only and the workspace does not enable thepedanticgroup, so the lint has to be named explicitly to have any effect.The 91 existing uses are deliberate hot-path annotations —
vortex-bufferbit accessors, the SIMD compress and AVX2 take kernels,vortex-computelane kernels, FastLanes unpacking — several with comments explaining whyalwaysis load-bearing (e.g.#[target_feature]wrappers that need a fully-inlined copy per feature set). Removing them would change codegen in the hottest paths in the repo with no benchmarks to back it, so they are grandfathered with a per-site#[allow(clippy::inline_always)]instead. Codegen is unchanged. Any new#[inline(always)]now fails the build unless the author adds the same explicit opt-out, which is the point.Changes
Cargo.toml:inline_always = "deny"in[workspace.lints.clippy], with a comment explaining the grandfathering.#[allow(clippy::inline_always)]above each existing#[inline(always)]. Mechanical, no behavior or codegen change.Checks
cargo clippy --workspace --all-targets --all-features— clean.vortex-duckdb,vortex-sqllogictestandbenchmarks/duckdb-benchwere excluded locally: thevortex-duckdbbuild script downloadsduckdb v1.5.5.zipand gets HTTP 403 through the sandbox proxy. None of those three crates contains an#[inline(always)], so they need no grandfathering; CI covers them.cargo +nightly fmt --all— clean (unrelated reformatting this newer nightly wanted invortex-ffi/vortex-duckdbwas reverted, so it stays out of this diff).#[inline(always)]added tovortex-utilsfailedcargo clippy -p vortex-utils, then was removed.🤖 Generated with Claude Code
https://claude.ai/code/session_01GTBhQJigN9KMk4nAnRFCzs