Configuração de Pre-commit & Editor
Ferramentas locais capturam problemas de fmt e clippy antes da CI. rust-analyzer, juntamente com format-on-save e hooks de pre-commit opcionais, mantêm o feedback instantâneo.
Receita
// .vscode/settings.json
{
"editor.formatOnSave": true,
"rust-analyzer.check.command": "clippy",
"rust-analyzer.rustfmt.extraArgs": ["+nightly"]
}# .pre-commit-config.yaml
repos:
- repo: local
hooks:
- id: cargo-fmt
entry: cargo fmt --all -- --check
language: system
pass_filenames: false
- id: cargo-clippy
entry: cargo clippy --workspace --all-targets -- -D warnings
language: system
pass_filenames: falseQuando usar isso: Onboarding de desenvolvedores e redução de churn na CI devido a falhas apenas de estilo.
Exemplo de Trabalho
# rust-toolchain.toml
[toolchain]
channel = "1.97.0"
components = ["rustfmt", "clippy"]rustup component add rustfmt clippy
pre-commit installO que isso demonstra:
- Toolchain fixada corresponde à CI Rust 1.97.0
- rust-analyzer usa clippy para diagnósticos inline
- pre-commit executa as mesmas verificações que um subconjunto da CI
componentsgarante que fmt/clippy estejam disponíveis offline
Mergulho Profundo
Essenciais do rust-analyzer
| Configuração | Efeito |
|---|---|
check.command = "clippy" | Dicas inline do clippy |
cargo.features | Conjunto de features ativas para análise |
linkedProjects | Seleção de membros do workspace |
inlayHints | Dicas de tipo/lifetime (opcional) |
Estratégias de Hooks
- pre-commit - fmt + clippy rápidos em Rust com stage
- pre-push -
cargo testcompleto (mais lento) - mise/direnv -
rustuptoolchain automático ao entrar no diretório
Armadilhas
- rust-analyzer com toolchain errada - erros espúrios. Correção:
rust-toolchain.tomlna raiz do repositório; recarregar RA. - Formatar ao salvar sem o componente rustfmt - falha silenciosa. Correção:
rustup component add rustfmt. - Hook do Clippy em cada commit - lento em workspaces grandes. Correção: escopo para crates alteradas com scripts
cargo clippy -p. - Fmt noturno em projeto estável - formatação inconsistente. Correção: usar apenas rustfmt estável 1.97.0, a menos que a equipe escolha o noturno.
- Pular hooks com --no-verify - anula o propósito. Correção: cultura + backup da CI; permitir apenas em emergências.
Alternativas
| Alternativa | Usar Quando | Não Usar Quando |
|---|---|---|
lefthook / husky | Repositórios poliglota | Apenas Rust simples |
| Apenas CI | Protótipo solo | Equipes com alto volume de PRs |
cargo watch -x check | Sessões longas de codificação | Substituir fmt ao salvar |
FAQs
Configuração do VS Code vs Cursor?
Mesma extensão rust-analyzer e chaves de settings.json.
Como selecionar o crate do workspace no RA?
rust-analyzer.linkedProjects ou Cargo: Open Cargo.toml escolhe o contexto do crate.
pre-commit no Windows?
Hooks language: system precisam do cargo no PATH; usar o mesmo rust-toolchain.toml.
Formatar imports ao salvar?
rustfmt lida com imports; habilite apenas formatOnSave.
Correção do Clippy ao salvar?
Não é o padrão; execute cargo clippy --fix manualmente com revisão.
Como compartilhar configurações?
Commit .vscode/settings.json com padrões da equipe; substituições pessoais opcionais ignoradas pelo git.
rust-analyzer lento?
Exclua target/ do observador de arquivos; use cargo clean se os metadados estiverem corrompidos; divida workspaces grandes.
Mise vs rustup?
Ambos fixam a toolchain; rust-toolchain.toml é canônico para rustup; mise pode lê-lo.
Hook apenas em arquivos com stage?
Rust fmt/clippy são em nível de crate; a verificação completa do workspace é mais segura para erros de tipo entre arquivos.
EditorConfig com rustfmt?
EditorConfig para arquivos não-Rust; rustfmt.toml controla a formatação Rust.
Relacionados
- rustfmt - regras de formatação
- Clippy - diagnósticos de lint
- Linting na CI - portões no lado do servidor
- Checklist de Configuração de Toolchain - onboarding
Versões da Stack: 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+.