#文档 #构建依赖 #构建 #README

构建 readme-rustdocifier

一个用于将 README.md rustdoc 化以包含到 lib.rs 中的库

2 个版本

0.1.1 2022 年 2 月 17 日
0.1.0 2022 年 1 月 1 日

#144构建工具

Download history 558/week @ 2024-03-13 672/week @ 2024-03-20 395/week @ 2024-03-27 442/week @ 2024-04-03 582/week @ 2024-04-10 610/week @ 2024-04-17 583/week @ 2024-04-24 677/week @ 2024-05-01 745/week @ 2024-05-08 913/week @ 2024-05-15 928/week @ 2024-05-22 4897/week @ 2024-05-29 8044/week @ 2024-06-05 4825/week @ 2024-06-12 3957/week @ 2024-06-19 5257/week @ 2024-06-26

每月 23,703 次下载
用于 21 包(10 个直接使用)

MIT 许可证

33KB
746

readme-rustdocifier

一个用于将 README.md rustdoc 化以包含到 lib.rs 中的库。

  • 移除顶级标题。
  • 将其他标题改为高一级别。
  • 将包内部的 docs.rs 链接转换为 rustdoc 格式。
  • 不会更改代码块内的任何内容。
  • (可选)检查转换后的链接是否具有正确的版本和包名。
  • unsafe
  • 无依赖。

用法

  • 将此添加到 Cargo.toml
[build-dependencies]
readme-rustdocifier = "0.1.0"
  • 创建 README.md
  • 创建包含以下内容的 build.rs
use std::{env, error::Error, fs, path::PathBuf};

const CRATE_NAME: &str = "your_crate_name_here";

fn main() -> Result<(), Box<dyn Error>> {
    println!("cargo:rerun-if-changed=README.md");
    fs::write(
        PathBuf::from(env::var("OUT_DIR")?).join("README-rustdocified.md"),
        readme_rustdocifier::rustdocify(
            &fs::read_to_string("README.md")?,
            &env::var("CARGO_PKG_NAME")?,
            Some(&env::var("CARGO_PKG_VERSION")?),
            Some(CRATE_NAME),
        )?,
    )?;
    Ok(())
}
  • 将以下内容添加到 lib.rs 的开头
#![doc = include_str!(concat!(env!("OUT_DIR"), "/README-rustdocified.md"))]
  • 运行 cargo doc 并查看库生成的文档。

以下是一个 README.md 的示例

## foo

A foo library.

### Usage

Create [`Foo::new`].


上面的 README.md 被rustdoc化到


A foo library.

## Usage

Create [`Foo::new`].


如下格式的行转换为 rustdoc 格式:[...]: https://docs.rs/PACKAGE/...

以下转换被完成

  • https://docs.rs/PACKAGE (1)
    • crate
  • https://docs.rs/PACKAGE#fragment (1)
    • crate#fragment
  • https://docs.rs/PACKAGE/VERSION (2)
    • crate
  • https://docs.rs/PACKAGE/VERSION#fragment (2)
    • crate#fragment
  • https://docs.rs/PACKAGE/VERSION/CRATE/MODULES (2)
    • crate::MODULES
  • https://docs.rs/PACKAGE/VERSION/CRATE/MODULES#fragment (2)
    • crate::MODULES#fragment
  • https://docs.rs/PACKAGE/VERSION/CRATE/MODULES/enum.ENUM.html
    • crate::MODULES::ENUM
  • https://docs.rs/PACKAGE/VERSION/CRATE/MODULES/enum.ENUM.html#method.METHOD
    • crate::MODULES::ENUM::METHOD
  • https://docs.rs/PACKAGE/VERSION/CRATE/MODULES/enum.ENUM.html#variant.VARIANT
    • crate::MODULES::ENUM::VARIANT
  • https://docs.rs/PACKAGE/VERSION/CRATE/MODULES/enum.ENUM.html#fragment
    • crate::MODULES::ENUM#fragment
  • https://docs.rs/PACKAGE/VERSION/CRATE/MODULES/fn.FUNCTION.html
    • crate::MODULES::FUNCTION
  • https://docs.rs/PACKAGE/VERSION/CRATE/MODULES/fn.FUNCTION.html#fragment
    • crate::MODULES::FUNCTION#fragment
  • https://docs.rs/PACKAGE/VERSION/CRATE/MODULES/macro.MACRO.html
    • crate::MODULES::MACRO
  • https://docs.rs/PACKAGE/VERSION/CRATE/MODULES/macro.MACRO.html#fragment
    • crate::MODULES::MACRO#fragment
  • https://docs.rs/PACKAGE/VERSION/CRATE/MODULES/struct.STRUCT.html
    • crate::MODULES::STRUCT
  • https://docs.rs/PACKAGE/VERSION/CRATE/MODULES/struct.STRUCT.html#method.METHOD
    • crate::MODULES::STRUCT::METHOD
  • https://docs.rs/PACKAGE/VERSION/CRATE/MODULES/struct.STRUCT.html#fragment
    • crate::MODULES::STRUCT#fragment
  • https://docs.rs/PACKAGE/VERSION/CRATE/MODULES/trait.TRAIT.html
    • crate::MODULES::TRAIT
  • https://docs.rs/PACKAGE/VERSION/CRATE/MODULES/trait.TRAIT.html#tymethod.METHOD
    • crate::MODULES::TRAIT::METHOD
  • https://docs.rs/PACKAGE/VERSION/CRATE/MODULES/trait.TRAIT.html#fragment
    • crate::MODULES::TRAIT#fragment

注释

  • (1) 路径末尾可以有一个可选的 /
  • (2) 路径末尾可以有一个可选的 //index.html
  • /MODULES 和相应的 ::MODULES 可以是空的。

安全性

此crate不使用任何 unsafe 代码。这通过 #![forbid(unsafe_code)] 来强制执行。

无运行时依赖