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

Rustdoc İç İçe include! Değişikliği

Özet

Bir doctest include_str! ile içe alındığında, bu doctest kendi içinde ayrıca include!, include_str! veya include_bytes! kullanıyorsa yol artık Rust kaynak dosyasına göre değil, Markdown dosyasına göre çözülür.

Ayrıntılar

2024 sürümünden önce #[doc=include_str!("path/file.md")] ile belge eklemek, o dosyadaki doctest’lere span bilgisini taşımıyordu. Sonuç olarak Markdown dosyası kaynak dosyadan farklı bir dizindeyse, içe alınan yollar kaynak dosyaya göre yazılmak zorundaydı.

Örneğin şu dosyalara sahip bir kütüphane crate’i düşünün:

  • Cargo.toml
  • README.md
  • src/
    • lib.rs
  • examples/
    • data.bin

lib.rs dosyasının şu içeriğe sahip olduğunu varsayalım:

#![doc=include_str!("../README.md")]

Ve README.md dosyası da şöyle olsun:

```
let _ = include_bytes!("../examples/data.bin");
//                      ^^^ buna dikkat edin
```

2024 sürümünden önce README.md içindeki yol, lib.rs dosyasına göre yazılmalıydı. 2024 ve sonrasında ise artık README.md dosyasının kendisine göre yazılır. Bu yüzden README.md şu şekilde güncellenir:

```
let _ = include_bytes!("examples/data.bin");
```

Taşıma

Etkilenen doctest’lerdeki yolları dönüştüren otomatik bir taşıma yoktur. Doctest’lerinizden biri etkileniyorsa, yeni sürüme geçtikten sonra testleri derlerken buna benzer bir hata görürsünüz:

error: couldn't read `../examples/data.bin`: No such file or directory (os error 2)
 --> src/../README.md:2:24
  |
2 | let _ = include_bytes!("../examples/data.bin");
  |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  = note: this error originates in the macro `include_bytes` (in Nightly builds, run with -Z macro-backtrace for more info)
help: there is a file with the same name in a different directory
  |
2 | let _ = include_bytes!("examples/data.bin");
  |                        ~~~~~~~~~~~~~~~~~~~

Doctest’lerinizi Rust 2024’e taşımak için etkilenen tüm yolları, doctest’leri içeren dosyaya göre göreceli olacak şekilde güncelleyin.