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 中使用
10KB
138 代码行数(不含注释)
mantra-rust-macros
该crate提供过程宏,用于使用 mantra
跟踪需求。它还提供通过日志获取需求覆盖率的功能。
跟踪
可以使用属性宏 req
或函数式宏 reqcov
创建需求跟踪。有关如何使用 req
或 reqcov
指定需求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_URL
为 https://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