Skip to main content

oak_macros/
lib.rs

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