---
name: global-rust-project-review
description: Revisão completa de segurança, arquitetura, performance e padronização para projetos em Rust. Use esta skill sempre que o usuário pedir para revisar, auditar, analisar a qualidade ou fazer code review de um projeto, crate ou workspace Rust — incluindo compiladores, parsers, ferramentas de linha de comando ou bibliotecas. Também use ao configurar um novo projeto Rust, ou quando o usuário mencionar cargo audit, clippy, segurança de dependências, código unsafe, ou organização de workspace.
compatibility: Requer Rust/cargo, bash ou PowerShell e Python 3 instalados. As ferramentas cargo-audit, cargo-deny, cargo-geiger, cargo-modules, cargo-bloat, cargo-udeps e cargo-machete são opcionais — os scripts avisam o comando de instalação quando alguma estiver faltando.
---

# Revisão de Projetos Rust

Esta skill revisa um projeto Rust em quatro frentes: segurança, arquitetura, performance e padronização. Em vez de reimplementar análises que o próprio ecossistema Rust já resolve bem, ela orquestra ferramentas existentes (cargo-audit, clippy, cargo-geiger, etc.) e junta tudo num relatório único, fácil de ler.

## Quando usar

- Pedido de revisão, auditoria ou code review de um projeto Rust.
- Antes de um release, pra checar segurança e qualidade.
- Ao configurar um workspace novo, pra já estruturar lints e CI corretamente.
- Em projetos de compilador/parser (lexer, parser, AST, codegen como crates separados), onde a checagem de arquitetura ajuda a achar acoplamento indevido entre camadas.

## Como executar a revisão

1. Confirme que está na raiz de um crate ou workspace Rust (existe um `Cargo.toml` ali).
2. Rode os quatro scripts de checagem a partir da raiz do projeto. Cada um grava seu relatório em `.rust-review/`:

   **Linux/macOS/Git Bash:**
   ```bash
   bash scripts/run_security_check.sh
   bash scripts/run_arch_check.sh
   bash scripts/run_perf_check.sh
   bash scripts/run_style_check.sh
   ```

   **Windows (PowerShell):**
   ```powershell
   & scripts/run_security_check.ps1
   & scripts/run_arch_check.ps1
   & scripts/run_perf_check.ps1
   & scripts/run_style_check.ps1
   ```

   Ou rode tudo de uma vez (a partir da raiz do projeto Rust):
   ```powershell
   & "<skill-root>/scripts/run_review.ps1" -ProjectPath .
   ```

3. Junte tudo num relatório consolidado:
   ```bash
   python3 scripts/aggregate_report.py
   ```
4. Leia `.rust-review/REVIEW.md` e priorize os achados nesta ordem: segurança > arquitetura > performance > padronização. Segurança e arquitetura custam mais caro pra corrigir depois, então vêm primeiro.
5. Complemente com `global-rust-idiomatic-safety` para padrões de código e checklist de qualidade durante correções.

## Instalando as ferramentas que faltam

Os scripts checam se cada ferramenta está instalada antes de rodar. Pra instalar tudo de uma vez:

```bash
cargo install cargo-audit cargo-deny cargo-geiger cargo-modules cargo-bloat cargo-machete
rustup toolchain install nightly
cargo +nightly install cargo-udeps --locked
```

## Projetos de compilador (lexer/parser/AST/codegen)

Se o projeto for um compilador ou interpretador — workspace dividido em crates como `lexer`, `parser`, `ast`, `codegen` — leia `references/compiler_patterns.md` antes de avaliar a arquitetura. Esse arquivo cobre padrões específicos (arena allocator, interning de strings, índices em vez de referências na AST) que os scripts genéricos não conseguem checar automaticamente, porque dependem de decisão de design, não de uma regra fixa.

## Limitações importantes

- A busca por `unwrap()` / `expect()` / `panic!()` é uma heurística baseada em grep — pode ter falsos positivos dentro de blocos `#[cfg(test)]` que estejam no mesmo arquivo do código de produção. Revise manualmente antes de tratar como bug real.
- A checagem de camadas de arquitetura (domínio não deve importar IO direto) é manual — o script só lembra de perguntar, ele não consegue validar isso sozinho, porque depende da arquitetura específica do projeto.
- Rode os scripts sempre dentro do diretório do projeto, com `cargo` disponível no PATH.
