summaryrefslogtreecommitdiff
path: root/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib.rs')
-rw-r--r--src/lib.rs32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/lib.rs b/src/lib.rs
new file mode 100644
index 0000000..0f7e64e
--- /dev/null
+++ b/src/lib.rs
@@ -0,0 +1,32 @@
+use quote::quote;
+use syn::{parse_macro_input, DeriveInput};
+
+use diagnostic::Diagnostic;
+
+mod code;
+mod diagnostic;
+mod diagnostic_arg;
+mod diagnostic_source;
+mod fmt;
+mod forward;
+mod help;
+mod label;
+mod related;
+mod severity;
+mod source_code;
+mod url;
+mod utils;
+
+#[proc_macro_derive(
+ Diagnostic,
+ attributes(diagnostic, source_code, label, related, help, diagnostic_source)
+)]
+pub fn derive_diagnostic(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
+ let input = parse_macro_input!(input as DeriveInput);
+ let cmd = match Diagnostic::from_derive_input(input) {
+ Ok(cmd) => cmd.gen(),
+ Err(err) => return err.to_compile_error().into(),
+ };
+ // panic!("{:#}", cmd.to_token_stream());
+ quote!(#cmd).into()
+}