6 releases (breaking)
0.6.1 | Jul 4, 2024 |
---|---|
0.6.0 | Jul 1, 2024 |
0.5.0 | Jun 14, 2024 |
0.4.0 | Jun 13, 2024 |
0.1.0 | Apr 29, 2024 |
#165 in Procedural macros
143 downloads per month
Used in 3 crates
10KB
138 lines
mantra-rust-macros
This crate provides procedural macros to trace requirements using mantra
.
It also offers features to get requirement coverage via logs.
Traces
Requirement traces may be created using either the attribute macro req
,
or the function-like macro reqcov
.
See mantra-lang-tracing
on how to specify requirement IDs using req
or reqcov
.
The attribute macro may be set anywhere attribute macros are allowed. At the moment, coverage logs are only generated if the macro is set on a function.
Examples:
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() {}
}
Automatic documentation
Requirements set using the #[req()]
attribute will generate a Requirements
section in the documentation.
The requirement IDs are represented as bullet list entries.
If the environmental variable MANTRA_REQUIREMENT_BASE_URL
is set, all IDs will be transformed to links with the content of the variable as prefix.
/// Documentation for IDs is automatically generated.
#[req(req_1, req_2)]
fn some_fn() {}
Generated documentation with MANTRA_REQUIREMENT_BASE_URL
set to 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)
Coverage log
-
Feature
log
Enabling this feature will create coverage TRACE logs using the
log
crate. -
Feature
stdout
Enabling this feature will print coverage logs to stdout.
-
Feature
defmt
Enabling this feature will print coverage logs using the
defmt
crate. This is intended for embedded devices.
Examples:
#[req(fn_trace)]
fn some_fn() {}
The generated coverage log for the code above has the form:
mantra: req-id=`fn_trace`; file='<resolved by file!()>'; line='<resolved by line!()>';
Trace extraction
The extract
feature may be enabled to extract coverage data from logs.
With the feature enabled, the functions extract_first_coverage()
or extract_covered_reqs()
may be used.
Dependencies
~3.5–5.5MB
~102K SLoC