needy/lib.rs
1//! # Requirements tracing macro
2//!
3//! ```
4//! use needy::requirements;
5//!
6//! // The macro is used to annotate functions, usually tests, which test a certain requirement id.
7//! #[requirements(REQ_001)]
8//! #[test]
9//! fn test_1() {}
10//!
11//! // You can pass multiple requirements like this ...
12//! #[requirements(REQ_001, REQ_002)]
13//! #[test]
14//! fn test_2() {}
15//!
16//! // ... or like this.
17//! #[requirements(REQ_001)]
18//! #[requirements(REQ_002)]
19//! #[test]
20//! fn test_3() {}
21//! ```
22
23#![allow(clippy::test_attr_in_doctest)]
24
25mod codegen;
26mod parse;
27
28use proc_macro::TokenStream;
29
30use crate::codegen::codegen;
31use crate::parse::parse;
32
33#[proc_macro_attribute]
34pub fn requirements(args: TokenStream, item: TokenStream) -> TokenStream {
35 let ir = parse(args, item.clone());
36 let mut konst = codegen(ir);
37
38 // emit the const and the original function
39 konst.extend(item);
40 konst
41}