Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/workflows/rust.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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]
Expand Down
31 changes: 21 additions & 10 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

13 changes: 13 additions & 0 deletions REPORT.md
Original file line number Diff line number Diff line change
@@ -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개.
Expand Down
3 changes: 3 additions & 0 deletions STATE.md
Original file line number Diff line number Diff line change
@@ -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 대기 — 게이트③ 미착지.**
Expand Down
6 changes: 6 additions & 0 deletions jvm/src/jvm.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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<Box<dyn ClassInstance>> {
tracing::trace!("Instantiate {class_name}");
Expand Down Expand Up @@ -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<T, U>(&self, instance: &Box<dyn ClassInstance>, class_name: &str, name: &str, descriptor: &str, args: T) -> Result<U>
where
Expand Down Expand Up @@ -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<T, U>(&self, array: &mut Box<dyn ClassInstance>, offset: usize, values: T) -> Result<()>
where
Expand Down Expand Up @@ -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<Class> {
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<Class> {
tracing::trace!("Resolving class {class_name}");
Expand Down Expand Up @@ -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('[') {
Expand Down
1 change: 1 addition & 0 deletions jvm_rust/src/interpreter.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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<Box<dyn ClassInstance>> {
let mut array = jvm.instantiate_array(&array_class[1..], dimensions[0] as _).await?;
Expand Down