Основы
Комментарии и документирование кода
Комментарии
// Строчные комментарии
/* Блочные комментарии */
Поддерживаются вложенные блочные комментарии.
Старайтесь избегать использования блочных комментариев.
Комментарии документации (doc comments)
Команда cargo doc
генерирует документацию проекта с помощью rustdoc. Для генерации документации используются док-комментарии.
Обычно мы добавляем док-комментарии в библиотечные крейты (library crates). Внутри док-комментариев можно использовать Markdown.
/// Строчные комментарии; документируют следующий элемент
/** Блочные комментарии; документируют следующий элемент */
//! Строчные комментарии; документируют вложенный элемент
/*! Блочные комментарии; документируют вложенный элемент !*/
Пример:
/// Этот модуль содержит тесты; внешний комментарий
mod tests {
// ...
}
mod tests {
//! Этот модуль содержит тесты; внутренний комментарий
// ...
}
Ключевое слово mod
используется для модулей. Мы обсудим это позже.
Док-атрибуты (doc attributes)
Док-атрибуты являются альтернативой док-комментариям. Мы используем их для управления rustdoc
. Подробнее о док-атрибутах можно почитать здесь.
В следующем примере каждый комментарий эквивалентен соответствующему док-атрибуту:
/// Внешний комментарий
#[doc = "Внешний комментарий"]
//! Внутренний комментарий
#![doc = "Внутренний комментарий"]
Атрибут - это общие метаданные в свободной форме, которые интерпретируются в соответствии с названием, соглашением, версиями языка и компилятора. Синтаксис:
- внешний атрибут:
#[attr]
- внутренний атрибут:
#![attr]
Перед тем, как двигаться дальше...
- Используйте
//!
только для написания документации крейта. Для блоковmod
используйте///
снаружи блоков. Взгляните на использование док-комментариев//!
и///
в популярных крейтах на crates.io. Например, взгляните на serde/src/lib.rs и rand/src/lib.rs - выполните команду
cargo new hello_lib --lib
для создания образца крейта и замените код в файлеsrc/lib.rs
на следующий:
//! Простой крейт Hello World
/// Эта функц ия возвращает приветствие; Hello, world!
pub fn hello() -> String {
("Hello, world!").to_string()
}
#[cfg(test)]
mod tests {
use super::hello;
#[test]
fn test_hello() {
assert_eq!(hello(), "Hello, world!");
}
}
Затем выполните cargo doc --open
для генерации документации и ее открытия в вашем дефолтном браузере.