كتابة توثيق لمشروع Rust: من الألف إلى الياء

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مقدمة: لماذا التوثيق في Rust ليس مجرد نزوة

في عالم البرمجة النظامية، يحتل Rust مكانة خاصة بفضل أمانه وأدائه ومترجمه الصارم. ومع ذلك، حتى أكثر الأكواد أناقةً تصبح عديمة الفائدة إذا لم يفهمها المطورون. التوثيق هو الجسر بين كودك ومستخدميه. في Rust، هذه العملية ليست موصى بها فحسب، بل مدمجة في النظام البيئي على مستوى الأدوات.

في هذه المقالة، سنشرح كيفية كتابة التوثيق لمشروع Rust من الصفر: من تعليقات التوثيق الأساسية إلى إنشاء كتاب كامل باستخدام mdbook. ستتعلم كيفية استخدام rustdoc، تنسيق Markdown والاختبارات في التوثيق لجعل مشروعك واضحًا واحترافيًا.



الأساسيات: توثيق الكود باستخدام تعليقات التوثيق

يقدم Rust نوعين من التعليقات: العادية (//) وتعليقات التوثيق (/// و //!). تتم معالجة تعليقات التوثيق تلقائيًا بواسطة أداة rustdoc التي تنشئ توثيق HTML. هذا هو أساس أي مشروع Rust.



تعليقات التوثيق للعناصر العامة

استخدم /// لتوثيق الدوال، الهياكل، السمات والوحدات. مثال:

/// تحسب مضروب العدد n./// /// # الوسائط/// * `n` - عدد صحيح غير سالب./// /// # الإرجاع/// * `u64` - مضروب العدد n./// /// # أمثلة/// ```/// let result = factorial(5);/// assert_eq!(result, 120);/// ```pub fn factorial(n: u32) -> u64 {    (1..=n).product()}

لاحظ الأقسام # الوسائط، # الإرجاع و # أمثلة. هذه عناوين Markdown قياسية تعزز قابلية القراءة.



التوثيق الداخلي للوحدات

لتوثيق الوحدة نفسها (الملف) استخدم //!:

//! وحدة للعمليات الرياضية.//!//! توفر هذه الوحدة دوال لحساب المضروب،//! أعداد فيبوناتشي وخوارزميات رياضية أخرى.


تقنيات متقدمة: الاختبارات، الروابط والسمات

من نقاط القوة في rustdoc القدرة على تشغيل الكود من التوثيق كاختبارات. هذا يضمن أن أمثلتك محدثة وتعمل دائمًا.



الاختبارات في التوثيق (doctests)

أي كتلة كود داخل تعليقات التوثيق موسومة بـ ```rust أو ببساطة ``` تصبح تلقائيًا اختبارًا عند تشغيل cargo test. مثال:

/// تجمع رقمين.////// ```/// let sum = add(2, 3);/// assert_eq!(sum, 5);/// ```pub fn add(a: i32, b: i32) -> i32 {    a + b}

لإخفاء الأسطر التي لا ينبغي أن تكون في المثال (مثل fn main())، استخدم السمة # :

/// ```/// # fn main() {/// let x = 42;/// assert_eq!(x, 42);/// # }/// ```


روابط لعناصر أخرى

يمكنك الربط بدوال أو هياكل أو وحدات أخرى باستخدام الصيغة [`الاسم`]. سيقوم Rustdoc تلقائيًا بإنشاء رابط تشعبي:

/// تستخدم الدالة [`factorial`] لحساب التوافيق.


سمات التوثيق

تسمح السمات بالتحكم في سلوك rustdoc:

  • #[doc(hidden)] — يخفي العنصر من التوثيق.
  • #[doc(alias = "اسم_بديل")] — يضيف اسمًا مستعارًا للبحث.
  • #[doc(cfg(feature = "some_feature"))] — يعرض التوثيق فقط عند تفعيل الميزة.

مثال على استخدام #[doc(alias)]:

#[doc(alias = "hello")]pub fn greet(name: &str) -> String {    format!("Hello, {}!", name)}


التوليد والنشر: cargo doc و docs.rs

عند كتابة التوثيق، يجب توليده

المدونات

توصيات الكتب