Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Apêndice D: Ferramentas úteis de desenvolvimento

Neste apêndice, vamos ver algumas ferramentas úteis de desenvolvimento fornecidas pelo projeto Rust. Vamos falar sobre formatação automática, maneiras rápidas de aplicar correções sugeridas para avisos, um linter e integração com IDEs.

Formatação automática com rustfmt

A ferramenta rustfmt reformata seu código de acordo com o estilo de código da comunidade. Muitos projetos colaborativos usam rustfmt para evitar discussões sobre qual estilo usar ao escrever Rust: todo mundo formata o código com a mesma ferramenta.

As instalações do Rust incluem rustfmt por padrão, então você já deve ter os programas rustfmt e cargo-fmt no seu sistema. Esses dois comandos são análogos a rustc e cargo, no sentido de que rustfmt permite um controle mais refinado e cargo-fmt entende as convenções de um projeto que usa Cargo. Para formatar qualquer projeto Cargo, execute o seguinte:

$ cargo fmt

Executar esse comando reformata todo o código Rust na crate atual. Isso deve alterar apenas o estilo do código, não sua semântica. Para mais informações sobre rustfmt, consulte sua documentação.

Corrija seu código com rustfix

A ferramenta rustfix está incluída nas instalações do Rust e pode corrigir automaticamente avisos do compilador para os quais haja uma maneira clara de resolver o problema, e essa solução provavelmente será a que você quer. Você provavelmente já viu avisos do compilador antes. Por exemplo, considere este código:

Nome do arquivo: src/main.rs

fn main() {
    let mut x = 42;
    println!("{x}");
}

Aqui, estamos definindo a variável x como mutável, mas na prática nunca a mutamos. Rust nos avisa sobre isso:

$ cargo build
   Compiling myprogram v0.1.0 (file:///projects/myprogram)
warning: variable does not need to be mutable
 --> src/main.rs:2:9
  |
2 |     let mut x = 0;
  |         ----^
  |         |
  |         help: remove this `mut`
  |
  = note: `#[warn(unused_mut)]` on by default

O aviso sugere que removamos a palavra-chave mut. Podemos aplicar essa sugestão automaticamente com a ferramenta rustfix executando o comando cargo fix:

$ cargo fix
    Checking myprogram v0.1.0 (file:///projects/myprogram)
      Fixing src/main.rs (1 fix)
    Finished dev [unoptimized + debuginfo] target(s) in 0.59s

Quando olharmos src/main.rs novamente, veremos que cargo fix alterou o código:

Nome do arquivo: src/main.rs

fn main() {
    let x = 42;
    println!("{x}");
}

A variável x agora é imutável, e o aviso não aparece mais.

Você também pode usar o comando cargo fix para migrar seu código entre diferentes edições do Rust. As edições são abordadas no Apêndice E.

Mais lints com Clippy

A ferramenta Clippy é uma coleção de lints para analisar seu código, de modo que você possa detectar erros comuns e melhorar seu código Rust. Clippy está incluído nas instalações padrão do Rust.

Para executar os lints do Clippy em qualquer projeto Cargo, digite o seguinte:

$ cargo clippy

Por exemplo, suponha que você escreva um programa que usa uma aproximação de uma constante matemática, como pi, assim:

Filename: src/main.rs
fn main() {
    let x = 3.1415;
    let r = 8.0;
    println!("the area of the circle is {}", x * r * r);
}

Executar cargo clippy nesse projeto resulta neste erro:

error: approximate value of `f{32, 64}::consts::PI` found
 --> src/main.rs:2:13
  |
2 |     let x = 3.1415;
  |             ^^^^^^
  |
  = note: `#[deny(clippy::approx_constant)]` on by default
  = help: consider using the constant directly
  = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#approx_constant

Esse erro informa que Rust já possui uma constante PI mais precisa definida e que seu programa seria mais correto se usasse essa constante. Você então alteraria seu código para usar PI.

O código a seguir não resulta em erros nem avisos do Clippy:

Filename: src/main.rs
fn main() {
    let x = std::f64::consts::PI;
    let r = 8.0;
    println!("the area of the circle is {}", x * r * r);
}

Para mais informações sobre Clippy, consulte sua documentação.

Integração com IDEs usando rust-analyzer

Para ajudar na integração com IDEs, a comunidade Rust recomenda usar rust-analyzer. Essa ferramenta é um conjunto de utilitários centrados no compilador que falam o Language Server Protocol, que é uma especificação para IDEs e linguagens de programação se comunicarem entre si. Diferentes clientes podem usar rust-analyzer, como o plug-in Rust Analyzer para Visual Studio Code.

Visite a página inicial do projeto rust-analyzer para obter instruções de instalação e, em seguida, instale o suporte ao servidor de linguagem na IDE que você usa. Sua IDE ganhará recursos como autocompletar, ir para a definição e erros inline.