1 use quote::quote;
2 use syn::{parse_macro_input, DeriveInput};
3
4 use diagnostic::Diagnostic;
5
6 mod code;
7 mod diagnostic;
8 mod diagnostic_arg;
9 mod diagnostic_source;
10 mod fmt;
11 mod forward;
12 mod help;
13 mod label;
14 mod related;
15 mod severity;
16 mod source_code;
17 mod url;
18 mod utils;
19
20 #[proc_macro_derive(
21 Diagnostic,
22 attributes(diagnostic, source_code, label, related, help, diagnostic_source)
23 )]
derive_diagnostic(input: proc_macro::TokenStream) -> proc_macro::TokenStream24 pub fn derive_diagnostic(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
25 let input = parse_macro_input!(input as DeriveInput);
26 let cmd = match Diagnostic::from_derive_input(input) {
27 Ok(cmd) => cmd.gen(),
28 Err(err) => return err.to_compile_error().into(),
29 };
30 // panic!("{:#}", cmd.to_token_stream());
31 quote!(#cmd).into()
32 }
33