xflags_macros/
lib.rs

1mod ast;
2mod parse;
3mod emit;
4mod update;
5
6#[proc_macro]
7pub fn xflags(_ts: proc_macro::TokenStream) -> proc_macro::TokenStream {
8    // Stub out the code, but let rust-analyzer resolve the invocation
9    #[cfg(not(test))]
10    {
11        let text = match parse::xflags(_ts) {
12            Ok(cmd) => emit::emit(&cmd),
13            Err(err) => format!("compile_error!(\"invalid flags syntax, {err}\");"),
14        };
15        text.parse().unwrap()
16    }
17    #[cfg(test)]
18    unimplemented!()
19}
20
21#[proc_macro]
22pub fn parse_or_exit(_ts: proc_macro::TokenStream) -> proc_macro::TokenStream {
23    // Stub out the code, but let rust-analyzer resolve the invocation
24    #[cfg(not(test))]
25    {
26        let text = match parse::parse_or_exit(_ts) {
27            Ok(cmd) => emit::emit(&cmd),
28            Err(err) => format!("compile_error!(\"invalid flags syntax, {err}\")"),
29        };
30        text.parse().unwrap()
31    }
32    #[cfg(test)]
33    {
34        let _ = parse::parse_or_exit;
35        unimplemented!();
36    }
37}
38
39#[cfg(test)]
40pub fn compile(src: &str) -> String {
41    use proc_macro2::TokenStream;
42
43    let ts = src.parse::<TokenStream>().unwrap();
44    let cmd = parse::xflags(ts).unwrap();
45    emit::emit(&cmd)
46}