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

D - Faydalı Geliştirme Araçları

Bu ekte, Rust projesinin sunduğu bazı faydalı geliştirme araçlarını inceleyeceğiz. Otomatik kod biçimlendirmeye, derleyici uyarılarına yönelik düzeltmeleri hızlıca uygulamanın yollarına, kod denetleyicisine (linter) ve tümleşik geliştirme ortamlarıyla (IDE) entegrasyona göz atacağız.

rustfmt ile Otomatik Biçimlendirme

rustfmt aracı, kodunuzu topluluk kod stiline göre yeniden biçimlendirir. Pek çok ortak proje, Rust yazarken hangi biçimlendirme stilinin kullanılacağı konusundaki tartışmaları önlemek için rustfmt kullanır: Herkes kodunu bu araçla biçimlendirir.

Rust kurulumları varsayılan olarak rustfmt içerir; dolayısıyla sisteminizde rustfmt ve cargo-fmt programları hâlihazırda kurulu olmalıdır. Bu iki komut, rustfmt aracının daha ince ayarlı denetime izin vermesi ve cargo-fmt aracının Cargo kullanan bir projenin kurallarını anlaması bakımından rustc ve cargo ikilisine benzer. Herhangi bir Cargo projesini biçimlendirmek için şu komutu çalıştırın:

$ cargo fmt

Bu komutu çalıştırmak, mevcut crate içindeki tüm Rust kodunu yeniden biçimlendirir. Bu işlem kodun anlamını (semantiğini) değil, yalnızca yazım stilini değiştirir. rustfmt hakkında daha fazla bilgi için belgelendirmesine göz atabilirsiniz.

rustfix ile Kodunuzu Düzeltme

Rust kurulumlarıyla birlikte gelen rustfix aracı, sorunu gidermenin açık ve büyük olasılıkla sizin de isteyeceğiniz net bir yolu bulunan derleyici uyarılarını otomatik olarak düzeltebilir. Daha önce derleyici uyarılarıyla mutlaka karşılaşmışsınızdır. Örneğin şu kodu ele alalım:

Dosya adı: src/main.rs

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

Burada x değişkenini değiştirilebilir (mut) olarak tanımlıyoruz, ancak gerçekte onu hiçbir yerde değiştirmiyoruz. Rust bizi bu konuda uyarır:

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

Uyarı, mut anahtar kelimesini kaldırmamızı önerir. cargo fix komutunu çalıştırarak rustfix aracının bu öneriyi otomatik olarak uygulamasını sağlayabiliriz:

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

src/main.rs dosyasına yeniden baktığımızda cargo fix komutunun kodu güncellediğini görürüz:

Dosya adı: src/main.rs

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

x değişkeni artık değiştirilemezdir ve derleyici uyarısı ortadan kalkmıştır.

cargo fix komutunu ayrıca kodunuzu farklı Rust sürümleri (editions) arasında geçirmek için de kullanabilirsiniz. Sürümler Ek E bölümünde ele alınmaktadır.

Clippy ile Daha Fazla Lint Denetimi

Clippy aracı, yaygın hataları yakalayabilmeniz ve Rust kodunuzu daha idiyomatik hâle getirebilmeniz için kodunuzu analiz eden bir lint (statik kod denetimi kuralı) koleksiyonudur. Clippy, standart Rust kurulumlarına dahildir.

Herhangi bir Cargo projesinde Clippy denetimlerini çalıştırmak için şu komutu girin:

$ cargo clippy

Örneğin pi (π) gibi matematiksel bir sabitin yaklaşık değerini elle yazdığınız şu programı düşünün:

Dosya adı: src/main.rs
fn main() {
    let x = 3.1415;
    let r = 8.0;
    println!("dairenin alanı: {}", x * r * r);
}

Bu projede cargo clippy çalıştırmak şu hatayla sonuçlanır:

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

Bu hata size Rust standart kütüphanesinde zaten çok daha duyarlı bir PI sabitinin tanımlı olduğunu ve doğrudan bu sabiti kullanmanız hâlinde programınızın daha doğru sonuç üreteceğini bildirir. Bunun üzerine kodunuzu PI sabitini kullanacak şekilde güncellersiniz.

Aşağıdaki kod Clippy tarafından herhangi bir hata veya uyarı üretilmeden geçer:

Dosya adı: src/main.rs
fn main() {
    let x = std::f64::consts::PI;
    let r = 8.0;
    println!("dairenin alanı: {}", x * r * r);
}

Clippy hakkında daha fazla bilgi için belgelendirmesine başvurabilirsiniz.

Not: Sürekli Entegrasyon (CI) Hattında Biçim ve Lint Denetimi: Ekip projelerinde ve CI (GitHub Actions, GitLab CI vb.) iş akışlarında dosyaları değiştirmeden yalnızca biçimlendirme kurallarına uyulup uyulmadığını sınamak için cargo fmt --all -- --check, tüm Clippy uyarılarını derleme hatasına dönüştürmek için ise cargo clippy --all-targets -- -D warnings komutları yaygın olarak kullanılır. Ayrıca Clippy’nin otomatik düzeltilebilir önerilerini tek adımda uygulamak isterseniz cargo clippy --fix komutunu çalıştırabilirsiniz.

rust-analyzer ile IDE Entegrasyonu

IDE ve kod düzenleyici entegrasyonu için Rust topluluğu rust-analyzer kullanımını önerir. Bu araç, geliştirme ortamları ile programlama dillerinin birbirleriyle iletişim kurmasına yönelik açık bir standart olan Dil Sunucusu Protokolü (Language Server Protocol — LSP) üzerinden çalışan derleyici merkezli bir yardımcı araçlar kümesidir. Visual Studio Code için rust-analyzer eklentisi, Zed, Neovim, Helix, Emacs veya JetBrains RustRover/IntelliJ gibi farklı istemciler rust-analyzer altyapısını kullanabilir.

Kurulum yönergeleri için rust-analyzer projesinin ana sayfasını ziyaret edin ve ardından kullandığınız düzenleyicide dil sunucusu desteğini etkinleştirin. Düzenleyiciniz bu sayede otomatik tamamlama, tanıma gitme (jump to definition), satır içi tür ipuçları (inlay hints) ve anlık hata gösterimi gibi yetenekler kazanacaktır.