From 64b8c3dfd54cc6ebf14a9f113dfb024c0ac954cf Mon Sep 17 00:00:00 2001 From: Greg Johnston Date: Sun, 20 Jul 2025 19:58:41 -0400 Subject: [PATCH] fix: use dummy macro output to improve rust-analyzer experience for `#[lazy_route]` --- router_macro/src/lib.rs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/router_macro/src/lib.rs b/router_macro/src/lib.rs index 39c6bccc4..a492a4d7b 100644 --- a/router_macro/src/lib.rs +++ b/router_macro/src/lib.rs @@ -6,7 +6,7 @@ use proc_macro::{TokenStream, TokenTree}; use proc_macro2::Span; -use proc_macro_error2::{abort, proc_macro_error}; +use proc_macro_error2::{abort, proc_macro_error, set_dummy}; use quote::{quote, ToTokens}; use syn::{ spanned::Spanned, FnArg, Ident, ImplItem, ItemImpl, Path, Type, TypePath, @@ -213,7 +213,9 @@ fn lazy_route_impl( _args: proc_macro::TokenStream, s: TokenStream, ) -> TokenStream { - let mut im = syn::parse::(s).unwrap_or_else(|e| { + set_dummy(s.clone().into()); + + let mut im = syn::parse::(s.clone()).unwrap_or_else(|e| { abort!(e.span(), "`lazy_route` can only be used on an `impl` block") }); if im.trait_.is_none() { @@ -268,7 +270,7 @@ fn lazy_route_impl( }); match item { - None => abort!(im.span(), "must contain a fn called `view`"), + None => s, Some(fun) => { if let Some(a) = fun.sig.asyncness { abort!(a.span(), "`view` method should not be async")