Subcomandos Úteis do Cargo
Além de build e test, o ecossistema adiciona subcomandos para expansão de macros, grafos de dependência, análise de tamanho de binários, testes mais rápidos e fluxos de trabalho de reconstrução automática.
Receita
cargo install cargo-expand cargo-nextest cargo-watch cargo-bloat
cargo expand my_fn
cargo tree -d
cargo bloat --release
cargo nextest run
cargo watch -x checkQuando usar isso: Depurando macros, otimizando binários de release ou aprimorando o ciclo de desenvolvimento local.
Exemplo de Trabalho
Kit de ferramentas diário para um workspace:
# Verificação de tipos ao salvar
cargo watch -c -x 'check --workspace'
# Expande a saída de uma macro derive
cargo expand -p api handlers::create_order
# Encontra dependências duplicadas
cargo tree -d
# Detalhamento do tamanho do binário de release
cargo bloat --release -n 20
# Runner de testes paralelo mais rápido
cargo nextest run --workspaceO que isso demonstra:
cargo-expandmostra o código gerado por macros para depuraçãocargo treevisualiza e deduplica o grafo de dependênciascargo bloatatribui o tamanho do binário a símbolos e cratescargo-nextestexecuta testes com paralelismo e relatórios aprimoradoscargo-watchreexecuta comandos quando os arquivos mudam
Mergulho Profundo
Comandos Internos de Alto Valor
| Comando | Propósito |
|---|---|
cargo check | Verificação rápida de tipos sem linkagem |
cargo doc --open | Construir e navegar na documentação |
cargo metadata | Grafo de projeto em JSON para ferramentas |
cargo package | Validar o tarball de publicação |
cargo fmt / clippy | Formatar e fazer lint (rustfmt/clippy) |
Subcomandos Instalados
| Ferramenta | Instalar | Usar |
|---|---|---|
cargo-expand | cargo install cargo-expand | Inspecionar saída de macro |
cargo-bloat | cargo install cargo-bloat | Perfilamento de tamanho |
cargo-nextest | cargo install cargo-nextest | Orquestração rápida de testes |
cargo-watch | cargo install cargo-watch | Automação de observação de arquivos |
cargo-llvm-cov | cargo install cargo-llvm-cov | Relatórios de cobertura |
Integração CI
- run: cargo nextest run --workspace
- run: cargo clippy --workspace --all-targets -- -D warnings
- run: cargo bloat --release --crates | head -30Armadilhas
- Expandir no pacote errado - saída vazia. Correção: passe
-p nome_do_crateem workspaces. - Bloat sem
--release- tamanhos enganosos em relação à produção. Correção: sempre profile builds de release. - nextest sem configuração - alguns testes precisam de
test-threads = 1. Correção:.config/nextest.tomlpor crate necessário. - watch gerando jobs ilimitados - ventiladores do laptop giram. Correção: use
-cpara limpar a tela e os padrões de debounce. - Instalar ferramentas na CI a cada execução - pipelines lentos. Correção: cache
~/.cargo/binou use imagens de CI pré-construídas.
Alternativas
| Alternativa | Usar Quando | Não Usar Quando |
|---|---|---|
rustc -Zunpretty=expanded | Debug de macro apenas em nightly | Equipes com toolchain estável |
cargo test simples | Repositórios simples, poucos testes | Workspaces grandes que precisam de filtros do nextest |
Linker mold / lld | Dor no tempo de linkagem | Fluxos de trabalho de macro/depuração |
FAQs
Como expando um derive específico?
cargo expand -p meu_crate path::to::Type mostra a expansão completa incluindo a saída de #[derive(serde::Deserialize)].
O que `cargo tree -i` faz?
Árvore inversa: mostra quais crates dependem de um determinado pacote (útil para auditar por que windows-sys aparece).
O nextest é compatível com `cargo test`?
Na maioria das vezes sim; alguns harnesses de teste personalizados precisam de configuração. nextest suporta retentativas, partições e saída JUnit.
Como observo apenas um crate?
cargo watch -x 'check -p api' restringe a um membro do workspace.
O bloat pode mostrar o tamanho por crate?
cargo bloat --release --crates agrega por nome de crate dependente.
O que é cargo hack?
Instale cargo-hack para verificar todas as combinações de features (cargo hack check --feature-powerset).
Como acelerar a linkagem?
Use mold ou lld via configurações de linker em .cargo/config.toml; separado dos subcomandos, mas combina bem com loops de watch/check.
O expand funciona em macros procedurais?
Sim, após a expansão completa da macro. Para depuração de crates proc-macro, também use eprintln! no crate da macro.
Como listar subcomandos instalados?
cargo --list mostra subcomandos embutidos e de terceiros no PATH.
Essas ferramentas são sensíveis ao MSRV?
Elas rodam na sua toolchain de host; mantenha-as atualizadas junto com Rust 1.97. Elas não afetam o MSRV do crate publicado.
Relacionado
- Noções Básicas do Cargo - fluxo de trabalho principal
- Depurando Macros - solução de problemas de macros
- Reduzindo o Tamanho de Binários - agir sobre a saída do bloat
- Cobertura e CI - llvm-cov em pipelines
Versões da Pilha: Esta página foi escrita para Rust 1.97.0 (edição 2024), Tokio 1.x, Axum 0.8, serde 1.0, sqlx 0.8, clap 4, e Polars 0.46+.