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

Rustfmt: Biçimlendirme Düzeltmeleri

Özet

  • Çeşitli biçimlendirme senaryolarına yönelik düzeltmeler.

Ayrıntılar

2024 stil sürümü, çeşitli biçimlendirme senaryoları için bir dizi düzeltme getirir.

Öğelerden sonra ya da blok sonunda ilgisiz son yorumları hizalamayın

Daha önce rustfmt, son yorumlu bir öğeyi izleyen satırdaki yorumun, bu son yorumla aynı hizaya çekilmesi gerektiğini varsayıyordu. Bu davranış değiştirildi; artık bu yorumlar girintilenmiyor.

Stil sürümü 2021:

pub const IFF_MULTICAST: ::c_int = 0x0000000800; // Supports multicast
                                                 // Multicast using broadcst. add.

pub const SQ_CRETAB: u16 = 0x000e; // CREATE TABLE
pub const SQ_DRPTAB: u16 = 0x000f; // DROP TABLE
pub const SQ_CREIDX: u16 = 0x0010; // CREATE INDEX
                                   //const SQ_DRPIDX: u16 = 0x0011; // DROP INDEX
                                   //const SQ_GRANT: u16 = 0x0012;  // GRANT
                                   //const SQ_REVOKE: u16 = 0x0013; // REVOKE

fn foo() {
    let f = bar(); // Donec consequat mi. Quisque vitae dolor. Integer lobortis. Maecenas id nulla. Lorem.
                   // Id turpis. Nam posuere lectus vitae nibh. Etiam tortor orci, sagittis
                   // malesuada, rhoncus quis, hendrerit eget, libero. Quisque commodo nulla at
    let b = baz();

    let normalized = self.ctfont.all_traits().normalized_weight(); // [-1.0, 1.0]
                                                                   // YAPILACAK(emilio): Bu araligi [.01, 10.0] yapmak anlamli olabilir;
                                                                   // css-fonts-4'un [1, 1000] araligiyla hizalamak icin.
}

Stil sürümü 2024:

pub const IFF_MULTICAST: ::c_int = 0x0000000800; // Supports multicast
// Multicast using broadcst. add.

pub const SQ_CRETAB: u16 = 0x000e; // CREATE TABLE
pub const SQ_DRPTAB: u16 = 0x000f; // DROP TABLE
pub const SQ_CREIDX: u16 = 0x0010; // CREATE INDEX
//const SQ_DRPIDX: u16 = 0x0011; // DROP INDEX
//const SQ_GRANT: u16 = 0x0012;  // GRANT
//const SQ_REVOKE: u16 = 0x0013; // REVOKE

fn foo() {
    let f = bar(); // Donec consequat mi. Quisque vitae dolor. Integer lobortis. Maecenas id nulla. Lorem.
    // Id turpis. Nam posuere lectus vitae nibh. Etiam tortor orci, sagittis
    // malesuada, rhoncus quis, hendrerit eget, libero. Quisque commodo nulla at
    let b = baz();

    let normalized = self.ctfont.all_traits().normalized_weight(); // [-1.0, 1.0]
                                                                   // YAPILACAK(emilio): Bu araligi [.01, 10.0] yapmak anlamli olabilir
                                                                   // css-fonts-4'un [1, 1000] araligiyla hizalamak icin.
}

Yorumların içindeki dizgileri girintilemeyin

Daha önce rustfmt, yorumların içindeki dizgileri yanlış biçimde biçimlendirmeye çalışıyordu.

Özgün hali:

pub fn main() {
    /*   let s = String::from(
        "
hello
world
",
    ); */
}

Stil sürümü 2021:

pub fn main() {
    /*   let s = String::from(
            "
    hello
    world
    ",
        ); */
}

Stil sürümü 2024:

Özgün halinden farklı değildir.

Uzun dizgiler ifadelerin biçimlendirilmesini engellemez

Bazı durumlarda uzun dizgiler daha önce ifadenin biçimlendirilmesini engelliyordu.

Stil sürümü 2021:

fn main() {
    let value = if x == "Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." { 0 } else {10};

    let x = Testing {
              foo: "long_long_long_long_long_long_long_lo_long_long_long_long_long_long__long_long_long_long_long_long_",
bar: "long_long_long_long_long_long_long_long_long_long_lo_long_long_lolong_long_long_lo_long_long_lolong_long_long_lo_long_long_lo",
};
}

Stil sürümü 2024:

fn main() {
    let value = if x
        == "Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
    {
        0
    } else {
        10
    };

    let x = Testing {
        foo: "long_long_long_long_long_long_long_lo_long_long_long_long_long_long__long_long_long_long_long_long_",
        bar: "long_long_long_long_long_long_long_long_long_long_lo_long_long_lolong_long_long_lo_long_long_lolong_long_long_lo_long_long_lo",
    };
}

impl bloklarında jenerik girintisi düzeltildi

impl öğelerindeki jenerikler gereğinden fazla girintileniyordu.

Stil sürümü 2021:

impl<
        Target: FromEvent<A> + FromEvent<B>,
        A: Widget2<Ctx = C>,
        B: Widget2<Ctx = C>,
        C: for<'a> CtxFamily<'a>,
    > Widget2 for WidgetEventLifter<Target, A, B>
{
    type Ctx = C;
    type Event = Vec<Target>;
}

Stil sürümü 2024:

impl<
    Target: FromEvent<A> + FromEvent<B>,
    A: Widget2<Ctx = C>,
    B: Widget2<Ctx = C>,
    C: for<'a> CtxFamily<'a>,
> Widget2 for WidgetEventLifter<Target, A, B>
{
    type Ctx = C;
    type Event = Vec<Target>;
}

Karmaşık bir fn biçimlendirilirken doğru girintiyi kullanın

Bazı durumlarda karmaşık bir fn imzası alışılmadık bir girintiyle sonuçlanıyordu; bu durum artık düzeltildi.

Stil sürümü 2021:

fn build_sorted_static_get_entry_names(
    mut entries: Vec<(u8, &'static str)>,
) -> (impl Fn(
    AlphabeticalTraversal,
    Box<dyn dirents_sink::Sink<AlphabeticalTraversal>>,
) -> BoxFuture<'static, Result<Box<dyn dirents_sink::Sealed>, Status>>
        + Send
        + Sync
        + 'static) {
}

Stil sürümü 2024:

fn build_sorted_static_get_entry_names(
    mut entries: Vec<(u8, &'static str)>,
) -> (
    impl Fn(
        AlphabeticalTraversal,
        Box<dyn dirents_sink::Sink<AlphabeticalTraversal>>,
    ) -> BoxFuture<'static, Result<Box<dyn dirents_sink::Sealed>, Status>>
    + Send
    + Sync
    + 'static
) {
}

İç içe demet indeksleme ifadesinde fazladan boşluğu önleyin

İç içe demet indeksleme ifadeleri yanlışlıkla fazladan boşluk içeriyordu.

Stil sürümü 2021:

fn main() {
    let _ = ((1,),).0 .0;
}

Stil sürümü 2024:

fn main() {
    let _ = ((1,),).0.0;
}

match içindeki blokta yer alan return/break/continue ifadelerini noktalı virgülle bitirin

match kolundaki bir blok içinde bulunan return, break ya da continue, yanlışlıkla noktalı virgülsüz bırakılıyordu.

Stil sürümü 2021:

fn foo() {
    match 0 {
        0 => {
            return AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
        }
        _ => "",
    };
}

Stil sürümü 2024:

fn foo() {
    match 0 {
        0 => {
            return AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA;
        }
        _ => "",
    };
}

Uzun dizi ve dilim desenleri artık satır kaydırır

Uzun dizi ve dilim desenleri doğru biçimde satır kaydırmıyordu.

Stil sürümü 2021:

fn main() {
    let [aaaaaaaaaaaaaaaaaaaaaaaaaa, bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb, cccccccccccccccccccccccccc, ddddddddddddddddddddddddd] =
        panic!();
}

Stil sürümü 2024:

fn main() {
    let [
        aaaaaaaaaaaaaaaaaaaaaaaaaa,
        bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,
        cccccccccccccccccccccccccc,
        ddddddddddddddddddddddddd,
    ] = panic!();
}

Son ifade deyimini ifade olarak biçimlendirin

Bir bloktaki son deyim bir ifade ise artık ifade olarak biçimlendirilir.

Stil sürümü 2021:

fn main() {
    let toto = || {
        if true {
            42
        } else {
            24
        }
    };

    {
        T
    }
}

Stil sürümü 2024:

fn main() {
    let toto = || {
        if true { 42 } else { 24 }
    };

    { T }
}

Fonksiyon ve makro çağrıları arasında aynı biçimlendirme

Bazı biçimlendirmeler artık makro çağrısında da fonksiyon çağrısındakiyle aynıdır.

Stil sürümü 2021:

fn main() {
    macro_call!(HAYSTACK
        .par_iter()
        .find_any(|&&x| x[0] % 1000 == 999)
        .is_some());

    fn_call(
        HAYSTACK
            .par_iter()
            .find_any(|&&x| x[0] % 1000 == 999)
            .is_some(),
    );
}

Stil sürümü 2024:

fn main() {
    macro_call!(
        HAYSTACK
            .par_iter()
            .find_any(|&&x| x[0] % 1000 == 999)
            .is_some()
    );

    fn_call(
        HAYSTACK
            .par_iter()
            .find_any(|&&x| x[0] % 1000 == 999)
            .is_some(),
    );
}

Gövdesi tek bir döngü olan kapanışlarda blok biçimini zorunlu kılın

Tek bir döngü içeren kapanışlar artık blok ifadesi olarak biçimlendirilir.

Stil sürümü 2021:

fn main() {
    thread::spawn(|| loop {
        println!("yineleme");
    });
}

Stil sürümü 2024:

fn main() {
    thread::spawn(|| {
        loop {
            println!("yineleme");
        }
    });
}

where cümleciklerindeki boş satırlar artık kaldırılır

where cümleciği içindeki boş satırlar artık kaldırılır.

Stil sürümü 2021:

fn foo<T>(_: T)
where
    T: std::fmt::Debug,

    T: std::fmt::Display,
{
}

Stil sürümü 2024:

fn foo<T>(_: T)
where
    T: std::fmt::Debug,
    T: std::fmt::Display,
{
}

Öznitelikli let-else deyiminin biçimlendirmesi düzeltildi

Bir let-else deyiminde öznitelik varsa, bu durum else kısmının yanlış şekilde ayrı satıra sarılmasına neden oluyordu.

Stil sürümü 2021:

fn main() {
    #[cfg(target_os = "linux")]
    let x = 42
    else {
        todo!()
    };

    // Bu, öznitelik olmadan da aynıdır.
    let x = 42 else { todo!() };
}

Stil sürümü 2024:

fn main() {
    #[cfg(target_os = "linux")]
    let x = 42 else { todo!() };

    // Bu, öznitelik olmadan da aynıdır.
    let x = 42 else { todo!() };
}

Enum varyantı belge yorumlarını kaydırırken bir sütun kayma hatası

wrap_comments özelliği kullanıldığında yorumlar bir sütun kaymalı biçimde satır kaydırıyordu.

Özgün hali:

pub enum Severity {
    /// Ama burada bu yorum 120 sutun genisliginde ve bicimlendirici hala bunu iki ayri satira bolmek istiyor.
    Error,
    /// Bu yorum 119 sutun genisliginde ve kusursuz calisiyor. Ornek metin. ornek metin. ornek metin. ornek metin ornek.
    Warning,
}

Stil sürümü 2021:

pub enum Severity {
    /// Ama burada bu yorum 120 sutun genisliginde ve bicimlendirici bunu hala iki ayri satira
    /// bolmek istiyor.
    Error,
    /// Bu yorum 119 sutun genisliginde ve kusursuz calisiyor. Ornek metin. ornek metin. ornek metin. ornek metin ornek.
    Warning,
}

Stil sürümü 2024:

pub enum Severity {
    /// Ama burada bu yorum 120 sutun genisliginde ve bicimlendirici hala bunu iki ayri satira bolmek istiyor.
    Error,
    /// Bu yorum 119 sutun genisliginde ve kusursuz calisiyor. Ornek metin. ornek metin. ornek metin. ornek metin ornek.
    Warning,
}

format_macro_matchers için bir sütun kayma hatası

format_macro_matchers özelliği kullanıldığında eşleştirici bir sütun kaymalı biçimde satır kaydırıyordu.

Stil sürümü 2021:

macro_rules! test {
    ($aasdfghj:expr, $qwertyuiop:expr, $zxcvbnmasdfghjkl:expr, $aeiouaeiouaeio:expr, $add:expr) => {{
        return;
    }};
}

Stil sürümü 2024:

macro_rules! test {
    (
        $aasdfghj:expr, $qwertyuiop:expr, $zxcvbnmasdfghjkl:expr, $aeiouaeiouaeio:expr, $add:expr
    ) => {{
        return;
    }};
}

match => sonrasındaki yorumda => bulununca oluşan hata düzeltildi

Bazı durumlarda bir match ifadesindeki => sonrasında gelen yorumun içinde yeniden => geçmesi, doğru biçimlendirmeyi bozuyordu.

Stil sürümü 2021:

fn main() {
    match a {
        _ =>
        // => iceren yorum
                {
            println!("A")
        }
    }
}

Stil sürümü 2024:

fn main() {
    match a {
        _ =>
        // => iceren yorum
        {
            println!("A")
        }
    }
}

match ifadesindeki birden çok iç öznitelik yanlış girintileniyordu

Bir match ifadesi içindeki birden çok iç öznitelik yanlış girintileniyordu.

Stil sürümü 2021:

pub fn main() {
    match a {
        #![attr1]
    #![attr2]
        _ => None,
    }
}

Stil sürümü 2024:

pub fn main() {
    match a {
        #![attr1]
        #![attr2]
        _ => None,
    }
}

Taşıma

Bu değişiklik, cargo fmt ya da rustfmti 2024 sürümüyle çalıştırarak otomatik olarak uygulanabilir. Taşıma ve stil sürümlerinin nasıl çalıştığı hakkında daha fazla bilgi için Stil sürümü bölümüne bakın.