Skip to main content

oak_macros/
lib.rs

1#![warn(missing_docs)]
2#![doc = include_str!("readme.md")]
3
4extern crate proc_macro;
5
6use proc_macro::TokenStream;
7
8mod define_rules;
9mod doc;
10mod format_rule;
11mod json;
12mod test;
13mod to_doc;
14
15/// Generates a lexer test.
16#[proc_macro]
17pub fn test_lexer(input: TokenStream) -> TokenStream {
18    test::test_lexer(input)
19}
20
21/// Generates a parser test.
22#[proc_macro]
23pub fn test_parser(input: TokenStream) -> TokenStream {
24    test::test_parser(input)
25}
26
27/// Attribute macro for defining Oak tests.
28#[proc_macro_attribute]
29pub fn oak_test(attr: TokenStream, item: TokenStream) -> TokenStream {
30    test::oak_test(attr, item)
31}
32
33/// Derives the `AsDocument` trait.
34#[proc_macro_derive(AsDocument, attributes(oak))]
35pub fn derive_as_document(input: TokenStream) -> TokenStream {
36    to_doc::derive_as_document(input)
37}
38
39/// Derives the `FormatRule` trait.
40#[proc_macro_derive(FormatRule, attributes(oak))]
41pub fn derive_format_rule(input: TokenStream) -> TokenStream {
42    format_rule::derive_format_rule(input)
43}
44
45/// Macro for defining language rules.
46#[proc_macro]
47pub fn define_rules(input: TokenStream) -> TokenStream {
48    define_rules::define_rules(input)
49}
50
51/// Macro for generating documentation from templates.
52#[proc_macro]
53pub fn doc(input: TokenStream) -> TokenStream {
54    doc::doc(input)
55}
56
57/// Macro for defining JSON-like structures.
58#[proc_macro]
59pub fn json(input: TokenStream) -> TokenStream {
60    json::json(input)
61}