From 69f9ef30cc6606cf54d6a6c669aa69c4a6c5d423 Mon Sep 17 00:00:00 2001 From: firestar99 Date: Tue, 26 Aug 2025 13:12:27 +0200 Subject: [PATCH] node-macro: modernize `node` macro --- node-graph/node-macro/src/lib.rs | 4 ++-- node-graph/node-macro/src/parsing.rs | 21 ++++----------------- 2 files changed, 6 insertions(+), 19 deletions(-) diff --git a/node-graph/node-macro/src/lib.rs b/node-graph/node-macro/src/lib.rs index 001d3074ce..a944c4f73b 100644 --- a/node-graph/node-macro/src/lib.rs +++ b/node-graph/node-macro/src/lib.rs @@ -13,7 +13,7 @@ mod validation; #[proc_macro_attribute] pub fn node(attr: TokenStream, item: TokenStream) -> TokenStream { // Performs the `node_impl` macro's functionality of attaching an `impl Node for TheGivenStruct` block to the node struct - parsing::new_node_fn(attr.into(), item.into()).into() + parsing::new_node_fn(attr.into(), item.into()).unwrap_or_else(|err| err.to_compile_error()).into() } /// Generate meta-information for an enum. @@ -27,5 +27,5 @@ pub fn node(attr: TokenStream, item: TokenStream) -> TokenStream { /// Doc comments on a variant become tooltip text. #[proc_macro_derive(ChoiceType, attributes(widget, menu_separator, label, icon))] pub fn derive_choice_type(input_item: TokenStream) -> TokenStream { - TokenStream::from(derive_choice_type::derive_choice_type_impl(input_item.into()).unwrap_or_else(|err| err.to_compile_error())) + derive_choice_type::derive_choice_type_impl(input_item.into()).unwrap_or_else(|err| err.to_compile_error()).into() } diff --git a/node-graph/node-macro/src/parsing.rs b/node-graph/node-macro/src/parsing.rs index 69e035d9f3..00e3377f63 100644 --- a/node-graph/node-macro/src/parsing.rs +++ b/node-graph/node-macro/src/parsing.rs @@ -642,24 +642,11 @@ fn extract_attribute<'a>(attrs: &'a [Attribute], name: &str) -> Option<&'a Attri } // Modify the new_node_fn function to use the code generation -pub fn new_node_fn(attr: TokenStream2, item: TokenStream2) -> TokenStream2 { - let parse_result = parse_node_fn(attr, item.clone()); - let Ok(mut parsed_node) = parse_result else { - let e = parse_result.unwrap_err(); - return Error::new(e.span(), format!("Failed to parse node function: {e}")).to_compile_error(); - }; - +pub fn new_node_fn(attr: TokenStream2, item: TokenStream2) -> syn::Result { + let mut parsed_node = parse_node_fn(attr, item.clone()).map_err(|e| Error::new(e.span(), format!("Failed to parse node function: {e}")))?; parsed_node.replace_impl_trait_in_input(); - if let Err(e) = crate::validation::validate_node_fn(&parsed_node) { - return Error::new(e.span(), format!("Validation Error:\n{e}")).to_compile_error(); - } - match generate_node_code(&parsed_node) { - Ok(parsed) => parsed, - Err(e) => { - // Return the error as a compile error - Error::new(e.span(), format!("Failed to parse node function: {e}")).to_compile_error() - } - } + crate::validation::validate_node_fn(&parsed_node).map_err(|e| Error::new(e.span(), format!("Validation Error: {e}")))?; + generate_node_code(&parsed_node).map_err(|e| Error::new(e.span(), format!("Failed to generate node code: {e}"))) } impl ParsedNodeFn {