Введение: Зачем документация в Rust — это не просто прихоть
В мире системного программирования Rust занимает особое место благодаря своей безопасности, производительности и строгому компилятору. Однако даже самый элегантный код бесполезен, если разработчики не понимают, как его использовать. Документация — это мост между вашим кодом и его пользователями. В Rust этот процесс не просто рекомендован, а встроен в экосистему на уровне инструментов.
В этой статье мы разберем, как писать документацию для Rust проекта с нуля: от базовых doc-комментариев до создания полноценной книги с помощью mdbook. Вы узнаете, как использовать rustdoc, форматирование Markdown и тесты в документации, чтобы ваш проект стал понятным и профессиональным.
Основы: Документирование кода с помощью doc-комментариев
Rust предлагает два типа комментариев: обычные (//) и doc-комментарии (/// и //!). Doc-комментарии автоматически обрабатываются инструментом rustdoc, который генерирует HTML-документацию. Это основа любого Rust проекта.
Doc-комментарии для публичных элементов
Используйте /// для документирования функций, структур, трейтов и модулей. Пример:
/// Вычисляет факториал числа n.
///
/// # Аргументы
/// * `n` - неотрицательное целое число.
///
/// # Возвращает
/// * `u64` - факториал числа n.
///
/// # Примеры
/// ```
/// let result = factorial(5);
/// assert_eq!(result, 120);
/// ```
pub fn factorial(n: u32) -> u64 {
(1..=n).product()
}
Обратите внимание на секции # Аргументы, # Возвращает и # Примеры. Это стандартные заголовки Markdown, которые улучшают читаемость.
Внутренняя документация модулей
Для документирования самого модуля (файла) используйте //!:
//! Модуль для математических операций.
//!
//! Этот модуль предоставляет функции для вычисления факториала,
//! чисел Фибоначчи и других математических алгоритмов.
Продвинутые техники: Тесты, ссылки и атрибуты
Одна из сильных сторон rustdoc — возможность запускать код из документации как тесты. Это гарантирует, что ваши примеры всегда актуальны и работают.
Тесты в документации (doctests)
Любой блок кода внутри doc-комментариев, помеченный как ```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
Когда документация написана, её нужно сгенерировать. Для этого используется команда cargo doc.
Локальная генерация
Выполните в терминале:
cargo doc --open
Эта команда сгенерирует документацию в папке target/doc и откроет её в браузере. Флаг --open опционален.
Для документации всех зависимостей используйте:
cargo doc --document-private-items
Флаг --document-private-items включает приватные элементы (по умолчанию документируются только публичные).
Публикация на docs.rs
Если ваш проект опубликован на crates.io, документация автоматически собирается и размещается на docs.rs. Для этого достаточно выполнить:
cargo publish
docs.rs автоматически запустит cargo doc для вашего проекта. Чтобы указать фичи, которые должны быть включены при сборке документации, добавьте в Cargo.toml:
[package.metadata.docs.rs]
features = ["full", "serde"]
Создание книги проекта с mdbook
Для больших проектов одной документации из doc-комментариев может быть недостаточно. В таких случаях используют mdbook — инструмент для создания книг из Markdown-файлов. Это идеальный способ написать руководство пользователя или архитектурный обзор.
Установка и инициализация
cargo install mdbook
mdbook init my-book
cd my-book
mdbook serve --open
Команда mdbook init создаст структуру папок с файлом SUMMARY.md, в котором определяется оглавление книги.
Пример структуры SUMMARY.md
# Summary
- [Введение](introduction.md)
- [Установка](installation.md)
- [Базовое использование](usage.md)
- [Конфигурация](configuration.md)
- [API Reference](api.md)
Затем вы наполняете каждый Markdown-файл содержимым. mdbook поддержи