diff --git a/actix-macros/src/lib.rs b/actix-macros/src/lib.rs index 5c51da2b..4be79178 100644 --- a/actix-macros/src/lib.rs +++ b/actix-macros/src/lib.rs @@ -30,12 +30,8 @@ use quote::quote; pub fn main(args: TokenStream, item: TokenStream) -> TokenStream { let mut input = match syn::parse::(item.clone()) { Ok(input) => input, - Err(err) => { - let mut item = item; - let compile_err = TokenStream::from(err.to_compile_error()); - item.extend(compile_err); - return item; - } + // on parse err, make IDEs happy; see fn docs + Err(err) => return input_and_compile_error(item, err), }; let args = syn::parse_macro_input!(args as syn::AttributeArgs); @@ -113,12 +109,8 @@ pub fn main(args: TokenStream, item: TokenStream) -> TokenStream { pub fn test(args: TokenStream, item: TokenStream) -> TokenStream { let mut input = match syn::parse::(item.clone()) { Ok(input) => input, - Err(err) => { - let mut item = item; - let compile_err = TokenStream::from(err.to_compile_error()); - item.extend(compile_err); - return item; - } + // on parse err, make IDEs happy; see fn docs + Err(err) => return input_and_compile_error(item, err), }; let args = syn::parse_macro_input!(args as syn::AttributeArgs); @@ -196,3 +188,15 @@ pub fn test(args: TokenStream, item: TokenStream) -> TokenStream { }) .into() } + +/// Converts the error to a token stream and appends it to the original input. +/// +/// Returning the original input in addition to the error is good for IDEs which can gracefully +/// recover and show more precise errors within the macro body. +/// +/// See for more info. +fn input_and_compile_error(mut item: TokenStream, err: syn::Error) -> TokenStream { + let compile_err = TokenStream::from(err.to_compile_error()); + item.extend(compile_err); + return item; +} diff --git a/bytestring/Cargo.toml b/bytestring/Cargo.toml index ba14f7be..34237ce9 100644 --- a/bytestring/Cargo.toml +++ b/bytestring/Cargo.toml @@ -24,4 +24,5 @@ serde = { version = "1.0", optional = true } [dev-dependencies] serde_json = "1.0" +# TODO: remove when ahash MSRV is restored ahash = { version = "=0.7.4", default-features = false }