Rust文档生成工具库documented的使用,高效自动化生成代码文档与API参考
use documented::{Documented, DocumentedFields, DocumentedVariants};
/// Trying is the first step to failure.
#[derive(Documented, DocumentedFields, DocumentedVariants)]
enum AlwaysPlay {
/// And Kb8.
#[allow(dead_code)]
Kb1,
/// But only if you are white.
F6,
}
// Documented
assert_eq!(AlwaysPlay::DOCS, "Trying is the first step to failure.");
// DocumentedFields
assert_eq!(
AlwaysPlay::FIELD_DOCS,
["And Kb8.", "But only if you are white."]
);
assert_eq!(AlwaysPlay::get_field_docs("Kb1"), Ok("And Kb8."));
// DocumentedVariants
assert_eq!(
AlwaysPlay::F6.get_variant_docs(),
"But only if you are white."
);
完整示例代码:
// 引入documented宏
use documented::{Documented, DocumentedFields, DocumentedVariants};
/// 用户信息结构体
/// 这是一个表示用户基本信息的结构体
#[derive(Documented, DocumentedFields)]
struct User {
/// 用户ID,唯一标识符
id: u64,
/// 用户名,用于登录和显示
username: String,
/// 用户邮箱地址
email: String,
/// 用户年龄
age: u8,
/// 用户是否激活
is_active: bool,
}
/// 订单状态枚举
/// 表示订单的不同状态
#[derive(Documented, DocumentedVariants)]
enum OrderStatus {
/// 订单已创建,等待支付
Pending,
/// 订单已支付,等待发货
Paid,
/// 订单已发货,运输中
Shipped,
/// 订单已送达,完成
Delivered,
/// 订单已取消
Cancelled,
/// 订单退款中
Refunding,
/// 订单已退款
Refunded,
}
fn main() {
// 访问结构体文档
println!("User结构体文档: {}", User::DOCS);
// 访问结构体字段文档
println!("所有字段文档: {:?}", User::FIELD_DOCS);
println!("username字段文档: {:?}", User::get_field_docs("username"));
println!("email字段文档: {:?}", User::get_field_docs("email"));
// 访问枚举文档
println!("OrderStatus枚举文档: {}", OrderStatus::DOCS);
// 访问枚举变体文档
let status = OrderStatus::Shipped;
println!("Shipped变体文档: {}", status.get_variant_docs());
// 获取所有变体文档
println!("Pending变体文档: {}", OrderStatus::Pending.get_variant_docs());
println!("Paid变体文档: {}", OrderStatus::Paid.get_variant_docs());
// 示例:在运行时动态显示文档
let user_fields = ["id", "username", "email", "age", "is_active"];
for field in user_fields.iter() {
if let Ok(docs) = User::get_field_docs(field) {
println!("字段 {} 的文档: {}", field, docs);
}
}
// 示例:处理订单状态时的文档显示
let order_statuses = [
OrderStatus::Pending,
OrderStatus::Paid,
OrderStatus::Shipped,
OrderStatus::Delivered,
];
for status in order_statuses.iter() {
println!("状态 {:?}: {}", status, status.get_variant_docs());
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_user_docs() {
assert_eq!(User::DOCS, "用户信息结构体\n这是一个表示用户基本信息的结构体");
assert_eq!(User::get_field_docs("username"), Ok("用户名,用于登录和显示"));
assert_eq!(User::get_field_docs("email"), Ok("用户邮箱地址"));
}
#[test]
fn test_order_status_docs() {
assert_eq!(OrderStatus::DOCS, "订单状态枚举\n表示订单的不同状态");
assert_eq!(OrderStatus::Pending.get_variant_docs(), "订单已创建,等待支付");
assert_eq!(OrderStatus::Shipped.get_variant_docs(), "订单已发货,运输中");
}
}
Cargo.toml 配置:
[package]
name = "documented-demo"
version = "0.1.0"
edition = "2021"
[dependencies]
documented = "0.9.2"
这个示例展示了如何使用documented库来自动化生成和访问代码文档。通过派生Documented、DocumentedFields和DocumentedVariants宏,可以在运行时获取类型、字段和枚举变体的文档字符串,从而实现动态的文档显示和API参考功能。
1 回复
Rust文档生成工具库documented的使用指南
概述
documented是一个专为Rust项目设计的文档生成工具库,能够帮助开发者高效自动化地生成代码文档和API参考。该工具与Rust内置的rustdoc
工具深度集成,提供了更丰富的自定义选项和自动化功能。
核心特性
- 自动化文档生成
- 支持Markdown格式
- 自定义文档模板
- API参考自动生成
- 代码示例验证
- 多格式输出支持(HTML、PDF等)
安装方法
在Cargo.toml中添加依赖:
[dependencies]
documented = "0.4.2"
或者使用cargo命令安装:
cargo add documented
基本使用方法
1. 基础配置
创建doc.toml
配置文件:
[package]
name = "my-project"
version = "0.1.0"
[output]
format = "html"
directory = "./docs"
2. 生成文档
在项目根目录运行:
cargo documented
或者使用自定义配置:
cargo documented --config path/to/config.toml
3. 代码注释示例
/// 计算两个数字的和
///
/// # 示例
///
/// ```
/// use my_crate::add;
///
/// let result = add(2, 3);
/// assert_eq!(result, 5);
/// ```
///
/// # 参数
/// - `a`: 第一个加数
/// - `b`: 第二个加数
///
/// # 返回值
/// 返回两个参数的和
pub fn add(a: i32, b: i32) -> i32 {
a + b
}
高级功能
自定义模板
[template]
path = "./custom_template"
variables = { project_name = "My Awesome Project" }
多模块支持
//! 主模块文档
//!
//! 这里可以写详细的模块说明
mod utils {
//! 工具模块
//!
//! 包含各种实用函数
/// 工具函数示例
pub fn helper_function() {
// 函数实现
}
}
生成API参考
cargo documented --api-reference
配置选项详解
[output]
format = "html" # 输出格式:html, markdown, pdf
directory = "./docs" # 输出目录
theme = "dark" # 主题选项
[processing]
include_private = false # 是否包含私有项
warnings_as_errors = true # 警告视为错误
[metadata]
authors = ["作者1", "作者2"]
repository = "https://github.com/username/repo"
集成到CI/CD
在.github/workflows/docs.yml中添加:
name: Generate Documentation
on:
push:
branches: [ main ]
jobs:
docs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Generate docs
run: |
cargo install documented
cargo documented
最佳实践
- 为所有公共API添加详细的文档注释
- 包含代码示例并确保示例能够编译通过
- 定期运行文档生成以确保文档与代码同步
- 使用版本控制管理文档变更
故障排除
常见问题:
- 确保所有依赖项都已正确安装
- 检查配置文件格式是否正确
- 验证代码注释是否符合Rustdoc标准
通过合理使用documented库,可以显著提升Rust项目的文档质量,为团队协作和项目维护提供有力支持。
完整示例demo
以下是一个完整的Rust项目示例,展示如何使用documented库:
Cargo.toml
[package]
name = "math-utils"
version = "0.1.0"
edition = "2021"
[dependencies]
documented = "0.4.2"
src/lib.rs
//! 数学工具库
//!
//! 提供基本的数学运算函数
/// 计算两个数字的和
///
/// # 示例
///
/// ```
/// use math_utils::add;
///
/// let result = add(2, 3);
/// assert_eq!(result, 5);
/// ```
///
/// # 参数
/// - `a`: 第一个加数
/// - `b`: 第二个加数
///
/// # 返回值
/// 返回两个参数的和
pub fn add(a: i32, b: i32) -> i32 {
a + b
}
/// 计算两个数字的差
///
/// # 示例
///
/// ```
/// use math_utils::subtract;
///
/// let result = subtract(5, 3);
/// assert_eq!(result, 2);
/// ```
///
/// # 参数
/// - `a`: 被减数
/// - `b`: 减数
///
/// # 返回值
/// 返回两个参数的差
pub fn subtract(a: i32, b: i32) -> i32 {
a - b
}
/// 工具模块
pub mod utils {
//! 实用工具函数
/// 检查数字是否为偶数
///
/// # 示例
///
/// ```
/// use math_utils::utils::is_even;
///
/// assert!(is_even(4));
/// assert!(!is_even(5));
/// ```
pub fn is_even(num: i32) -> bool {
num % 2 == 0
}
}
doc.toml
[package]
name = "math-utils"
version = "0.1.0"
[output]
format = "html"
directory = "./target/docs"
theme = "dark"
[processing]
include_private = false
warnings_as_errors = true
[metadata]
authors = ["开发者"]
description = "一个简单的数学工具库"
生成文档的命令
# 安装documented(如果尚未安装)
cargo install documented
# 生成文档
cargo documented
# 或者使用自定义配置文件
cargo documented --config doc.toml
# 生成包含API参考的文档
cargo documented --api-reference
GitHub Actions配置 (.github/workflows/docs.yml)
name: Generate Documentation
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
docs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup Rust
uses: actions-rs/toolchain@v1
with:
toolchain: stable
override: true
- name: Generate documentation
run: |
cargo install documented
cargo documented
- name: Deploy to GitHub Pages
if: github.ref == 'refs/heads/main'
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./target/docs
这个完整示例展示了如何使用documented库来为一个数学工具库生成完整的文档,包括基本的配置、代码注释规范、以及CI/CD集成。