#requirements #macro #coverage #proc-macro #logs #logging-framework #trace

无std mantra-rust-macros

mantra 框架提供创建需求跟踪和覆盖率日志的宏

6 个版本 (破坏性更新)

0.6.1 2024 年 7 月 4 日
0.6.0 2024 年 7 月 1 日
0.5.0 2024 年 6 月 14 日
0.4.0 2024 年 6 月 13 日
0.1.0 2024 年 4 月 29 日

#138 in 过程宏

每月下载量 21
3 crates 中使用

MIT 许可证

10KB
138 代码行数(不含注释)

mantra-rust-macros

该crate提供过程宏,用于使用 mantra 跟踪需求。它还提供通过日志获取需求覆盖率的功能。

跟踪

可以使用属性宏 req 或函数式宏 reqcov 创建需求跟踪。有关如何使用 reqreqcov 指定需求ID,请参阅 mantra-lang-tracing

属性宏可以在允许属性宏的任何地方设置。目前,只有在函数上设置宏时才会生成覆盖率日志。

示例

use mantra_rust_macros::{req, reqcov};

/// Coverage log is generated
#[req(fn_trace)]
fn some_fn() {
    // coverage log is generated
    reqcov!(function_like_trace);
}

#[req(const_trace)]
const SOME_CONST: usize = 1;

#[req(type_trace)]
type SomeType = bool;

#[req(struct_trace)]
struct SomeStruct {
    /// Attribute macros cannot be set for fields.
    some_field: bool,
}

#[req(mod_trace)]
mod some_mod {}

#[req(trait_trace)]
trait SomeTrait {
    #[req(trait_type_trace)]
    type A;

    /// Coverage log is generated
    #[req(trait_fn_default_trace)]
    fn some_trait_fn() {}
}

自动文档

使用 #[req()] 属性设置的需求将生成文档中的 Requirements 部分。需求ID表示为项目符号列表条目。如果设置了环境变量 MANTRA_REQUIREMENT_BASE_URL,则所有ID都将转换为带有变量内容的链接。

/// Documentation for IDs is automatically generated.
#[req(req_1, req_2)]
fn some_fn() {}

设置 MANTRA_REQUIREMENT_BASE_URLhttps://github.com/mhatzl/mantra/wiki/5-Requirements/ 的生成文档

Documentation for IDs is automatically generated.

# Requirements

- [req_1](https://github.com/mhatzl/mantra/wiki/5-Requirements/req_1)
- [req_2](https://github.com/mhatzl/mantra/wiki/5-Requirements/req_2)

覆盖率日志

  • 功能 log

    启用此功能将使用 log crate 创建覆盖率 TRACE 日志。

  • 功能 stdout

    启用此功能将打印覆盖率日志到 stdout。

  • 功能 defmt

    启用此功能将使用 defmt crate 打印覆盖率日志。这适用于嵌入式设备。

示例

#[req(fn_trace)]
fn some_fn() {}

上述代码生成的覆盖率日志形式为

mantra: req-id=`fn_trace`; file='<resolved by file!()>'; line='<resolved by line!()>';

跟踪提取

可以启用 extract 功能以从日志中提取覆盖率数据。启用此功能后,可以使用函数 extract_first_coverage()extract_covered_reqs()

依赖关系

~3.5–5.5MB
~103K SLoC