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

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

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

ابدأ الدورة

مقدمة: لماذا التوثيق في Rust ليس ترفًا بل ضرورة

\n\n

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

\n\n

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

\n\n

1. الأساسيات: تعليقات التوثيق وrustdoc

\n\n

يوجد في Rust نوعان من التعليقات: العادية (// و /* */) وتعليقات التوثيق (/// و //!). تتم معالجة النوع الأخير بواسطة أداة rustdoc، التي تقوم بتوليد توثيق HTML.

\n\n

1.1. تعليقات التوثيق الخارجية والداخلية

\n\n
    \n
  • /// — تعليق خارجي. يُكتب قبل العنصر (دالة، هيكل، trait) ويصفه.
  • \n
  • //! — تعليق داخلي. يُستخدم لتوثيق الوحدة النمطية نفسها، أو الكريت، أو الملف.
  • \n
\n\n
/// تحسب مضروب العدد n.\n///\n/// # أمثلة\n/// ```\n/// let result = factorial(5);\n/// assert_eq!(result, 120);\n/// ```\npub fn factorial(n: u32) -> u32 {\n    (1..=n).product()\n}\n\n//! # الكريت الخارق الخاص بي\n//!\n//! يوفر هذا الكريت أدوات للعمل مع الرياضيات.\n//! لمزيد من التفاصيل، راجع [التوثيق](https://example.com).
\n\n

1.2. تشغيل توليد التوثيق

\n\n

لتوليد التوثيق، قم بتنفيذ الأمر التالي:

\n\n
cargo doc --open
\n\n

سيقوم هذا الأمر بمسح جميع تعليقات التوثيق في مشروعك، وإنشاء ملفات HTML في مجلد target/doc/ وفتحها في المتصفح. سترى صفحة تحتوي على قائمة بالوحدات النمطية والدوال والهياكل — تمامًا كما في docs.rs.

\n\n

2. أقسام التوثيق: كيفية جعله قابلاً للقراءة

\n\n

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

\n\n

2.1. الأقسام القياسية

\n\n

من المعتاد استخدام الأقسام التالية (تبدأ بـ # ):

\n\n
    \n
  • # أمثلة — مثال أو أكثر على الاستخدام.
  • \n
  • # حالات الذعر (Panics) — في أي الحالات تسبب الدالة ذعرًا.
  • \n
  • # الأخطاء — إذا كانت الدالة تُرجع Result، فصف الأخطاء المحتملة.
  • \n
  • # الأمان — إلزامي للدوال unsafe.
  • \n
  • # الوسائط — وصف المعاملات (على الرغم من أنها غالبًا ما توصف مباشرة في النص).
  • \n
\n\n
/// تقرأ محتوى الملف وتعيده كسلسلة نصية.\n///\n/// # الوسائط\n/// * `path` — مسار الملف.\n///\n/// # الأخطاء\n/// تُرجع `io::Error` إذا كان الملف غير موجود أو غير قابل للقراءة.\n///\n/// # حالات الذعر\n/// تسبب ذعرًا إذا كان المسار يحتوي على بايت صفري.\n///\n/// # أمثلة\n/// ```\n/// let content = read_file("hello.txt").unwrap();\n/// println!("{}", content);\n/// ```\npub fn read_file(path: &str) -> Result<String, std::io::Error> {\n    std::fs::read_to_string(path)\n}
\n\n

2.2. الروابط والروابط المتقاطعة

\n\n

يمكنك الإشارة إلى عناصر أخرى في الكود. سيقوم rustdoc تلقائيًا بتحويلها إلى روابط تشعبية:

\n\n
/// تستخدم الدالة [`factorial`] لحساب التوافيق.\n/// انظر أيضًا الوحدة النمطية [`math::combinatorics`].\npub fn combinations(n: u32, k: u32) -> u32 {\n    factorial(n) / (factorial(k) * factorial(n - k))\n}
\n\n

إذا كنت بحاجة إلى الإشارة إلى

المدونات

توصيات الكتب