nanjj

Mdbook预处理插件

Table of Contents

我学了点Rust语言,用Rust语言写了个Mdbook预处理插件。

1. 预处理插件

Mdbook预处理插件是一个可执行程序,Mdbook做预处理时会把markdown内容 以及配置通过标准输入发给它,它做预处理,把结果输出到标准输出。

以下是本博客的=book.toml=配置:

{{#include ../../book.toml:8}}

这样Mdbook会通过标准输入发配置上下文和书的内容给 mdbook-blog , mdbook-blog 做预处理,把结果打到标准输出。

因此我需要写这个 mdbook-blog =, =Cargo.toml :

{{#include ../../Cargo.toml}}

实现在 src/main.rs :

{{#include ../main.rs}}

2. Mdbook与博客

Mdbook为写书而有,并非为博客所写。我把我的博客架构在Mdbook上也就是 图省事。博客需要有一个首页,一般的首页是把最新几篇摘要生成一个列表放在 那。我这个插件是把首页重定向到最新一篇。这实现简单,而且用起来还不错。

3. Rust的学习

这个Mdbook插件是我用Rust写的第一个程序。通过这个程序的编写,我对 Rust的包结构,模块组织,基本语法以及错误处理有了点认识。另外着重看了 下Rust的自动测试。

Rust把自动测试分为3类:

  1. 单元测试,
  2. 文档测试,
  3. 集成测试。

其中文档测试是其他语言所不具备的。写在文档里的例子,在 cargo test 的时 候也会被执行。

单元测试如何做,敏捷开发界有许多争议,比如私有方法是否要覆盖之类。但单 元测试是否要做,大概是没有争议的。Rust选了比较实际的路线,把选择权给 了开发。

集成测试其实就是接口测试,只测对外暴露的接口。 libs 集成测试没问题, binary 没有对外接口,咋做呢?Rust给了个方案,同时后 src/main.rs 和 src/libs.rs ,让 binary 也可以成为 libs ,这样问题就解决了。

综合其上,三种测试统称为自动测试。一个遗留问题是代码覆盖率,不知如何做。