Przejdź do treści
Biblioteka skilli
Programowanie · Przegląd i audyt

rust-review

/rust-review

Ocenia istniejący kod Rust pod kątem idiomów, API, obsługi błędów i utrzymywalności; raport podaje priorytety i poprawkę dla każdego znaleziska.

Repozytorium
beautifulrust ↗
Licencja
MIT
Ostatnia zmiana repozytorium
27.10.2026

Ocena i bezpieczeństwo

100/ 100Klasa: dobry
Format25 / 25
Frontmatter z nazwą i opisem, poprawna nazwa, opis do 1024 znaków, nazwa zgodna z folderem.
Odkrywalność25 / 25
Opis mówi, kiedy użyć skilla, ma sensowną długość i jest w 3. osobie.
Treść35 / 35
Co najmniej 150 słów i do 500 linii, nagłówki, listy kroków, przykłady albo kod.
Higiena15 / 15
Bez zaślepek typu TODO, bez ścieżek Windows, z licencją.
Ryzykobrak sygnałów w skanie
Pliki w paczce
35
Skrypty
5
Komentarze HTML
0
Adresy URL w SKILL.md
1
Przestarzałość

Brak sygnałów. Repozytorium zmienione 27.10.2026, bez odwołań do wycofanych modeli i API.

Licencja

MIT, otwarta: można używać i zmieniać, z zachowaniem informacji o autorze.

Co sprawdzić przed instalacją
  • 5 skryptów w paczce. Przejrzyj je przed instalacją, bo Claude może je uruchomić.

Skrypty: evals/review-bevy-arena/files/src/lib.rs, evals/review-bevy-arena/files/tests/arena.rs, evals/review-bevy-arena/place-files.sh, evals/review-inventory-module/files/inventory.rs, evals/review-inventory-module/place-files.sh

Co robi i kiedy

Ocenia istniejący kod Rust pod kątem idiomów, API, obsługi błędów i utrzymywalności; raport podaje priorytety i poprawkę dla każdego znaleziska.

Wyzwalacze z opisu

checkt say
Oryginalny opis (EN)

Review existing Rust code for idiom, API design, error handling, safety, and maintainability, and produce a prioritized report where every finding cites the rule it breaks and gives a concrete fix. Use this whenever the user asks to review, audit, critique, grade, or "check" Rust code, a crate, a module, a .rs file, a diff, or a pull request, or asks what is wrong with their Rust or how to make it more idiomatic, even if they don't say "review". Pairs with the rust-best-practices skill, which covers writing new code.

Jak działa

  1. 1. Decide the scope
  2. 2. Run the tools first, if you can
  3. 3. What to look for, in priority order
  4. 4. Write the report
  5. Must fix
  6. Should fix
  7. Consider
  8. What's already good
  9. 5. Offer the lints
Sekcje z nagłówków SKILL.md, w oryginale · 167 linii, 1 221 słów
Podgląd SKILL.md
---
name: rust-review
description: >-
  Review existing Rust code for idiom, API design, error handling, safety, and
  maintainability, and produce a prioritized report where every finding cites the rule it
  breaks and gives a concrete fix. Use this whenever the user asks to review, audit,
  critique, grade, or "check" Rust code, a crate, a module, a .rs file, a diff, or a pull
  request, or asks what is wrong with their Rust or how to make it more idiomatic, even if
  they don't say "review". Pairs with the rust-best-practices skill, which covers writing
  new code.
---

# Rust review

Review Rust code against the same rules the `rust-best-practices` skill uses for writing
it, and report what to change. The output is a review, not a rewrite: the reader decides
what to fix. Only rewrite code when the user asks for that.

## 1. Decide the scope

- **What to read.** Review exactly what the user pointed at: a file, a module, a crate,
  or a diff. For a diff, review the changed lines and anything they break, not the whole
  file.
- **Library or application.** Check for a `lib.rs`, `pub` items used by other crates, or
  a published `Cargo.toml`. Library code is held to the API-design rules strictly.
  Application code gets the simplicity rules instead: concrete types, `anyhow`-style
  errors, and no speculative generality. Say which you assumed at the top of the report.
- **The edition and MSRV**, from `Cargo.toml`, so you don't recommend features the
  project can't use.
- **Frameworks.** If the crate depends on `bevy` or `bevy_ecs`, read the Bevy digest
  (`bevy.md`) in the `rust-best-practices` skill's references first. It lists the Bevy
  conventions to leave alone (by-value system parameters, the prelude, plain-data
  components) and the ECS bugs to look for.

## 2. Run the tools first, if you can

If a Rust toolchain is available, run these from the crate root and fold the results into
the report. They catch the mechanical issues, which leaves you free for design.

```bash
cargo fmt --check
cargo clippy --all-targets --all-features -- -W clippy::pedantic
cargo test
```

Don't paste raw clippy output. Group repeated warnings into one finding, and skip pedantic
lints that don't matter for this code. If the tools aren't available, say so in the report
and review by reading.

## 3. What to look for, in priority order

Work through these in order. The first two categories are where real bugs live.

**Correctness and soundness**

- Undefined behavior: an `unsafe` block without a `// SAFETY:` comment, `transmute` to
  cast enums or extend lifetimes, `unsafe impl Send`/`Sync` used to silence the compiler,
  or a safe function that can cause UB through safe calls (unsound).
- Panics on reachable paths: `unwrap()`, `expect()`, indexing, `as` casts that wrap, or
  integer overflow, wherever input from outside can reach them.
- Trait contracts: a hand-written `Ord` with a derived `PartialEq`, or `Hash` that
  disagrees with `Eq`. These silently corrupt `BTreeMap`, `HashMap`, `sort`, and `dedup`.
- Lock hazards: a `MutexGuard` held across `.await` or returned to a caller, user
  closures called under a lock, or a poisoned lock recovered with `into_inner`.
- ECS bugs in Bevy code: two queries that can reach the same component mutably (a
  B0001 panic on the first frame), systems that read each other's results with no
  order between them, and deferred `Commands` read back before they apply.
- Destructors that panic, block, or can fail.

**Error handling**

- Errors that callers can't use: `()`, `String`, or `Box<dyn Error>` as a library's
  public error type, an error enum without `Display` and `std::error::Error`, or
  `anyhow::Error` in a library's public API.
- Errors that lose information: `map_err(|_| ...)`, no `source()`, or messages without
  the path, line, or value that failed.
- Panics used for expected failures, or `catch_unwind` used as control flow.

**API design** (strict for libraries)

- Parameters: `&String`, `&Vec<T>`, or `&Box<T>` instead of `&str`, `&[T]`, or `&T`; a
  `bool` parameter in a public signature; ownership taken and then cloned, or a borrow
  cloned internally to get ownership.
- Visibility: public fields that should be private, `Rc`, `RefCell`, or `Arc` in public
  signatures, or third-party types leaking into the API.
- Missing standard traits: `Debug` on public types, `Display` on errors, `Default` next to
  a zero-argument `new()`, and `FromStr` instead of an ad-hoc `from_str` method.
- Naming: `get_` prefixes on getters, `as_`/`to_`/`into_` that don't match their cost and
  ownership, and `Manager`/`Service`/`Util` names.
- Evolution: public enums or structs that should be `#[non_exhaustive]`, or traits that
  should be sealed.

**Idiom and clarity**

- Clones that exist only to satisfy the borrow checker.
- Check-then-unwrap (`if x.is_some() { x.unwrap() }`), and `match` where a combinator is
  clearer, or the reverse.
- String building with `+`, hand loops that are clearer as iterators, or iterator chains
  long enough to need a loop.
- `HashMap` iteration order leaking into output or tests.
- `#![deny(warnings)]` in source, `#[allow]` without a reason, and glob imports of
  external crates (a framework's documented prelude, such as `bevy::prelude`, is fine).

**Documentation and tests**

- Public items without docs, and docs that restate the name.
- Missing `# Errors`, `# Panics`, or `# Safety` sections where they apply.
- Doc examples that use `unwrap()` instead of `?`.
- Logic with no tests, or tests that only restate constants.

The `rust-best-practices` skill and its `references/` folder hold the full rules and their
reasoning. If it is installed, read the relevant reference when a finding needs a rule
you're unsure of. Otherwise, rely on the summary above.

## 4. Write the report

Use this structure:

~~~markdown
# Rust review: <what was reviewed>

<One paragraph: what the code does, library or application, overall verdict, and the
single most important thing to fix. Say whether clippy and tests were run.>

## Must fix
### 1. <Short title> (`src/file.rs:42`)
**Rule:** <rule name and source, e.g. "Errors implement std::error::Error (C-GOOD-ERR,
Rust API Guidelines)">
**Problem:** <what is wrong and the concrete consequence, one or two sentences>
**Fix:**
```rust
<the smallest code change that fixes it>
```

## Should fix
### 2. ...

## Consider
### 3. ...

## What's already good
- <2 to 4 specific things the code does well>
~~~

How to sort findings:

- **Must fix** means a bug, a soundness hole, a reachable panic, or an API mistake that
  becomes a breaking change once published.
- **Should fix** means it works but violates a rule with a real cost, such as worse error
  messages, harder testing, or a confusing API.
- **Consider** means style, naming, and polish.

Rules for each finding:

- **Cite a location** as `file:line` for every finding (write `whole file` for a finding
  that has no single location, such as missing tests), and cite the rule with its source:
  an API Guidelines code such as `C-GETTER`, an Effective Rust item number, a Microsoft
  guideline code such as `M-PANIC-ON-BUG`, a clippy lint name, or "Google Rust Style
  Guide". A reader should be able to look the rule up.
- **Show the fix as code**, kept to the lines that change. Don't rewrite whole functions.
- **Group repeats.** One finding for "eight `unwrap()` calls on parse results", listing
  the lines, rather than eight findings.
- **Respect intent.** If something looks deliberate, such as a documented quirk or a
  comment explaining it, mention it under Consider with the trade-off. Don't mark it
  Must fix.
- **Keep it proportionate.** For a short file, five to ten findings is plenty. Don't pad
  the list, and don't hide a real bug among style nits.
- **"What's already good" is required.** It tells the author what to keep and makes the
  rest credible.

## 5. Offer the lints

If the project lacks a `[lints]` table, end the report by suggesting the BeautifulRust
lints config (`lints/lints.toml` and `lints/clippy.toml` in the BeautifulRust repo,
https://github.com/morganlinton/BeautifulRust). It makes clippy catch most of the
mechanical findings above automatically. Name two or three findings from this review that
it would have caught.
Pliki w paczce (35)
  • SKILL.md 8 KB
  • evals/review-bevy-arena/case.yaml 1 KB
  • evals/review-bevy-arena/place-files.sh 1 KB
  • evals/review-bevy-arena/prompt.md 1 KB
  • evals/review-bevy-arena/files/Cargo.lock 32 KB
  • evals/review-bevy-arena/files/Cargo.toml 1 KB
  • evals/review-bevy-arena/files/src/lib.rs 6 KB
  • evals/review-bevy-arena/files/tests/arena.rs 3 KB
  • evals/review-bevy-arena/graders/01-flags-query-conflict.md 1 KB
  • evals/review-bevy-arena/graders/02-flags-deferred-wave-ordering.md 1 KB
  • evals/review-bevy-arena/graders/03-flags-single-unwrap.md 1 KB
  • evals/review-bevy-arena/graders/04-flags-bool-parameter.md 1 KB
  • evals/review-bevy-arena/graders/05-keeps-system-params-by-value.md 1 KB
  • evals/review-bevy-arena/graders/06-accepts-bevy-prelude.md 1 KB
  • evals/review-bevy-arena/graders/07-passive-components-keep-pub-fields.md 1 KB
  • evals/review-bevy-arena/graders/08-type-complexity-handled-as-ecs.md 1 KB
  • evals/review-bevy-arena/graders/09-findings-cite-locations-and-rules.md 1 KB
  • evals/review-bevy-arena/graders/10-fixes-shown-as-code.md 1 KB
  • evals/review-bevy-arena/graders/11-code-left-unchanged.md 1 KB
  • evals/review-inventory-module/case.yaml 1 KB
  • evals/review-inventory-module/place-files.sh 1 KB
  • evals/review-inventory-module/prompt.md 1 KB
  • evals/review-inventory-module/files/inventory.rs 3 KB
  • evals/review-inventory-module/graders/01-flags-panics-as-top-priority.md 1 KB
  • evals/review-inventory-module/graders/02-flags-rc-refcell-api.md 1 KB
  • evals/review-inventory-module/graders/03-flags-borrowed-param-types.md 1 KB
  • evals/review-inventory-module/graders/04-flags-error-type.md 1 KB
  • evals/review-inventory-module/graders/05-flags-bool-parameter.md 1 KB
  • evals/review-inventory-module/graders/06-flags-nondeterministic-output.md 1 KB
  • evals/review-inventory-module/graders/07-flags-deny-warnings.md 1 KB
  • evals/review-inventory-module/graders/08-findings-cite-locations.md 1 KB
  • evals/review-inventory-module/graders/09-findings-cite-named-rules.md 1 KB
  • evals/review-inventory-module/graders/10-fixes-shown-as-code.md 1 KB
  • evals/review-inventory-module/graders/11-says-what-is-good.md 1 KB
  • evals/review-inventory-module/graders/12-code-left-unchanged.md 1 KB

Wersje

RepozytoriumWynikLicencja
Ta strona · morganlinton/beautifulrust100MIT
RediSearch/RediSearch100AGPL-3.0
athola/claude-night-market100MIT
claude-dev-suite/claude-dev-suite90MIT

Migawka bazy z 28.10.2026 · wersja paczki c196b7f94cc5 (skrót SHA-256 całej paczki)

Pobrania w ostatnich 30 dniach: 0 · ranking

Zgłoś problem z tym skillem: szkodliwa treść, błędny opis albo prośba autora o usunięcie.

Podobne skille

  • 100rust-best-practices
    Stosuje wytyczne Microsoft Pragmatic Rust przy każdej edycji kodu Rust: obsługa błędów, projekt API, wydajność i idiomy.
  • 100rust
    Wskazuje, jak pisać i przeglądać kod Rust zgodnie z wytycznymi stylu, gdy użytkownik o to prosi.
  • 100rust
    Podpowiada dobre praktyki Rust przy pisaniu i przeglądzie kodu: struktura, wzorce, wydajność i obsługa błędów.
  • 100rust-best-practices
    Podpowiada idiomatyczny Rust według podręcznika Apollo GraphQL: pożyczanie zamiast klonowania, typy Result, testy i dokumentacja.
  • 100audit-code-review
    Recenzuje pull request lub diff pod kątem poprawności, bezpieczeństwa i utrzymywalności.
  • 100rust-port
    Przenosi kod z C, C++, Pythona, Go lub JavaScriptu do idiomatycznego Rust, zachowując pierwotne działanie i testy potwierdzające zgodność.

Uwagi i zgłoszenia

Wiadomość trafi do Bartosza Sokolińskiego. Adres e-mail jest potrzebny tylko do odpowiedzi. Szczegóły w polityce prywatności.