From 041266b54bce666e604edbe2f30f0a05126cdfab Mon Sep 17 00:00:00 2001 From: jun0 Date: Tue, 25 Aug 2026 11:27:54 +0900 Subject: [PATCH] [rustjava-ci-beta-clippy-double-must-use-red] fix beta clippy double_must_use red MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit beta 1.99.0-beta.1 (clippy 0.1.99) flags 13 `double_must_use` errors on `origin/main` with zero code change — all 13 originate in attribute macro expansion, not our source. - async-trait 0.1.89 -> 0.1.92 (Cargo.lock only; 0.1.92 dropped the `push(#[must_use])` in expand.rs) => 7 hits gone - async-recursion is already at latest 1.1.1, so its 6+1 sites get a scoped `#[allow(clippy::double_must_use)]` (no crate-wide allow) - rust.yml matrix: `fail-fast: false` so one red job stops cancelling the other five (they currently read as "6 jobs failed" when only 1 failed) Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01DEx9MyAY9utJdWSq9yGSGR --- .github/workflows/rust.yml | 1 + Cargo.lock | 31 +++++++++++++++++++++---------- REPORT.md | 13 +++++++++++++ STATE.md | 3 +++ jvm/src/jvm.rs | 6 ++++++ jvm_rust/src/interpreter.rs | 1 + 6 files changed, 45 insertions(+), 10 deletions(-) diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 74dff429..7d49d20f 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -13,6 +13,7 @@ jobs: rust_ci: runs-on: ${{ matrix.os }} strategy: + fail-fast: false matrix: os: [macos-latest, ubuntu-latest, windows-latest] rust: [stable, beta] diff --git a/Cargo.lock b/Cargo.lock index fba25156..fb4a3833 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -31,18 +31,18 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] name = "async-trait" -version = "0.1.89" +version = "0.1.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" +checksum = "82f6aeea286b8eb4dd3431a1be1b59d290ace00f5bfd8e2a159bc2a05e2c1667" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.4", ] [[package]] @@ -124,7 +124,7 @@ checksum = "1ac70aa55017e108007fbaf5aa0f54b021c98f92ff8af59d42eda9da96e3dd4f" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -625,6 +625,17 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "syn" +version = "3.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6275cddf4610d1775e6d1fe9469b2e77d0f39fd98fb7450901b821e0c53649f" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + [[package]] name = "synstructure" version = "0.13.2" @@ -633,7 +644,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -684,7 +695,7 @@ checksum = "385a6cb71ab9ab790c5fe8d67f1645e6c450a7ce006a33de03daa956cf70a496" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -811,7 +822,7 @@ checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", "synstructure", ] @@ -832,7 +843,7 @@ checksum = "11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", "synstructure", ] @@ -866,7 +877,7 @@ checksum = "625dc425cab0dca6dc3c3319506e6593dcb08a9f387ea3b284dbd52a92c40555" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] diff --git a/REPORT.md b/REPORT.md index 4b23d58d..5d96c2af 100644 --- a/REPORT.md +++ b/REPORT.md @@ -1,5 +1,18 @@ # REPORT +## [2026-08-25] beta clippy `double_must_use` red 해소 (rustjava-ci-beta-clippy-double-must-use-red) +- 무엇을: `Cargo.lock` 의 `async-trait` 0.1.89→**0.1.92**, `#[async_recursion]` **7지점**에 국소 + `#[allow(clippy::double_must_use)]`, `rust.yml` matrix 에 `fail-fast: false` 1줄. **기능 변경 0.** +- 왜: `rustup run beta cargo clippy --all -- -D warnings` 가 `origin/main`(코드 무변경)과 열린 PR + 양쪽에서 **동일하게 13건** red 였다 ⇒ ★코드가 아니라 **부동 beta 채널이 움직였다**(1.99.0-beta.1, + 2026-08-17). 13건 **전부** `note: this error originates in the attribute macro …` — 우리 소스에 + `#[must_use]` 를 쓴 지점은 **0건**이고 `async_trait` 7 + `async_recursion` 6 의 매크로 확장이 찍은 것이다. + 0.1.92 의 `async-trait` 은 그 `push(#[must_use])` 를 삭제해 7건이 사라지고, `async-recursion` 은 + **1.1.1 이 최신**이라 올릴 곳이 없어 그 7지점(6+jvm_rust 1)만 국소 억제했다 — crate/워크스페이스 전역 억제는 쓰지 않았다. +- 사용자 영향: 없음(런타임 동작 무변경). `main` 과 열린 PR 전건을 막던 게이트③ 병목이 풀린다. +- 후속 추천: ★열린 PR 은 **자동으로 green 이 되지 않는다** — 이 PR 착지 후 각 PR 의 CI 재실행이 필요하다 + (PR #13 `upstream-sync-s2` 는 이미 게이트② approve 상태라 재실행만 남는다). + ## [2026-08-17] `coverage` 상시 red 해소 (rustjava-coverage-workflow-codecov-token-red) - 무엇을: `.github/workflows/coverage.yml` 의 `fail_ci_if_error` 를 `true` → **`false`** 로 내리고 이유·복구법을 주석으로 박았다. **변경 파일 1개**(워크플로) + 문서 2개. diff --git a/STATE.md b/STATE.md index 59cb1497..7968e2d5 100644 --- a/STATE.md +++ b/STATE.md @@ -1,6 +1,9 @@ # STATE ## 진행중 +- [rustjava-ci-beta-clippy-double-must-use-red] beta clippy `double_must_use` 13건 red 해소 — + `async-trait` 0.1.89→0.1.92 + `async_recursion` 7지점 국소 `allow` + matrix `fail-fast: false`. + **PR 대기 — 게이트③ 미착지.** - [rustjava-coverage-workflow-codecov-token-red] `coverage` 상시 red 해소 — `fail_ci_if_error: false`. ★**실증: 착지 전 브랜치에서 «이 저장소 최초의 green coverage»** (25번째 run, 앞선 24건 전부 red). **PR 대기 — 게이트③ 미착지.** diff --git a/jvm/src/jvm.rs b/jvm/src/jvm.rs index f461639d..0a54cc70 100644 --- a/jvm/src/jvm.rs +++ b/jvm/src/jvm.rs @@ -111,6 +111,7 @@ impl Jvm { Ok(jvm) } + #[allow(clippy::double_must_use)] // `#[must_use]` comes from the async_recursion macro expansion, not our code #[async_recursion::async_recursion] pub async fn instantiate_class(&self, class_name: &str) -> Result> { tracing::trace!("Instantiate {class_name}"); @@ -322,6 +323,7 @@ impl Jvm { } // non-virtual + #[allow(clippy::double_must_use)] // `#[must_use]` comes from the async_recursion macro expansion, not our code #[async_recursion::async_recursion] pub async fn invoke_special(&self, instance: &Box, class_name: &str, name: &str, descriptor: &str, args: T) -> Result where @@ -356,6 +358,7 @@ impl Jvm { } } + #[allow(clippy::double_must_use)] // `#[must_use]` comes from the async_recursion macro expansion, not our code #[async_recursion::async_recursion] pub async fn store_array(&self, array: &mut Box, offset: usize, values: T) -> Result<()> where @@ -527,11 +530,13 @@ impl Jvm { monitor.notify(count); } + #[allow(clippy::double_must_use)] // `#[must_use]` comes from the async_recursion macro expansion, not our code #[async_recursion::async_recursion] pub async fn resolve_class(&self, class_name: &str) -> Result { self.resolve_class_internal(class_name, None).await } + #[allow(clippy::double_must_use)] // `#[must_use]` comes from the async_recursion macro expansion, not our code #[async_recursion::async_recursion] async fn resolve_class_internal(&self, class_name: &str, class_loader_wrapper: Option<&dyn ClassLoaderWrapper>) -> Result { tracing::trace!("Resolving class {class_name}"); @@ -755,6 +760,7 @@ impl Jvm { Ok(()) } + #[allow(clippy::double_must_use)] // `#[must_use]` comes from the async_recursion macro expansion, not our code #[async_recursion::async_recursion] pub async fn ensure_initialized(&self, class: &Class) -> Result<()> { if class.definition.name().starts_with('[') { diff --git a/jvm_rust/src/interpreter.rs b/jvm_rust/src/interpreter.rs index 0204b07a..647398bd 100644 --- a/jvm_rust/src/interpreter.rs +++ b/jvm_rust/src/interpreter.rs @@ -1054,6 +1054,7 @@ impl Interpreter { }) } + #[allow(clippy::double_must_use)] // `#[must_use]` comes from the async_recursion macro expansion, not our code #[async_recursion::async_recursion] async fn new_multi_array(jvm: &Jvm, array_class: &str, dimensions: &[i32]) -> Result> { let mut array = jvm.instantiate_array(&array_class[1..], dimensions[0] as _).await?;