• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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