rustfmt
rustfmt (via cargo fmt) impõe formatação consistente em Rust para que as revisões se concentrem no comportamento, não na colocação de chaves.
Receita
cargo fmt
cargo fmt --check# rustfmt.toml
edition = "2024"
max_width = 100
imports_granularity = "Module"Quando usar isso: Todo projeto Rust; execute ao salvar localmente e --check em CI.
Exemplo de Trabalho
# rustfmt.toml na raiz do repositório
edition = "2024"
max_width = 100
newline_style = "Unix"
use_small_heuristics = "Max"- run: cargo fmt --all -- --checkO que isso demonstra:
editionalinha o formatador com a edição da linguagem--checkfalha a CI em desvios sem escrever arquivosrustfmt.tomlaplica-se a todo o workspace quando está na raizcargo fmt --allinclui membros do workspace
Mergulho Profundo
Opções Comuns
| Opção | Efeito |
|---|---|
max_width | Coluna de quebra de linha |
chain_width | Quebra de cadeia de métodos |
format_code_in_doc_comments | Formata doctests |
group_imports | Estilo de importação de mesclagem/uso |
Integração com Editor
- rust-analyzer
rust-analyzer.rustfmt.extraArgs - Formatar ao salvar no VS Code / Cursor com rust-analyzer
- Hook de pré-commit:
cargo fmt --check
Armadilhas
- Diferentes versões do rustfmt - Ruído de diferença entre CI e local. Correção: Fixe a toolchain em
rust-toolchain.tomlpara 1.97.0. - Arquivos gerados formatados - Dor de mesclagem. Correção: Exclua em
rustfmt.tomlcaminhosignoreou não comite fontes geradas. - Código com muitos macros feio - Limitações do rustfmt. Correção:
#[rustfmt::skip]com moderação, com um comentário explicando o porquê. - Pular fmt em PR - Debates de estilo retornam. Correção: Tolerância zero
--checkno main. - Discrepância de edição - Regras incorretas de reordenação de importação. Correção:
edition = "2024"em rustfmt.toml corresponde aCargo.toml.
Alternativas
| Alternativa | Use Quando | Não Use Quando |
|---|---|---|
| Guia de estilo manual | Nunca para equipes Rust | Sempre - use rustfmt |
dprint com plugin Rust | Repositórios poliglota | Workspace Rust puro |
#[rustfmt::skip] | Blocos críticos de layout FFI | Módulos inteiros |
FAQs
Onde colocar rustfmt.toml?
Raiz do repositório para workspaces; aplica-se a todos os membros, a menos que substituído por crate.
fmt vs clippy?
fmt é apenas estilo; clippy é lógica de linting. Execute ambos em CI.
Formatar diretório de testes?
Sim - cargo fmt --all inclui testes e benchmarks.
Como ignorar um arquivo?
ignore = ["src/ffi/generated.rs"] em rustfmt.toml.
fmt muda a semântica?
Não - apenas espaços em branco e ordem de importação; ainda execute testes após grandes reformatações.
rustfmt em stable?
Vem com a toolchain Rust 1.97.0; sem instalação separada.
CI no Windows?
Defina newline_style = "Unix" para finais de linha consistentes em snapshots e fmt.
Formatar antes do commit?
Hook de pré-commit ou formatação ao salvar no editor; CI --check como backup.
Substituição de membro do workspace?
rustfmt.toml aninhado no crate membro substitui a raiz para aquele crate apenas.
fmt em conflitos de mesclagem?
Reexecute cargo fmt após resolver; evite alinhar chaves manualmente.
Relacionado
- Clippy - companheiro de linting
- Configuração de Pré-commit e Editor - fluxo de trabalho local
- Linting em CI - pipeline
- Melhores Práticas de Linting e Formatação - política de equipe
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+.