From 74fee05ad2e6688aa23af11c1b51120c802c0f8d Mon Sep 17 00:00:00 2001 From: Tom Grushka Date: Sat, 30 Aug 2025 18:49:44 -0600 Subject: [PATCH] Problem: rust-analyzer can't resolve symbols in #[function_component] using remote yew-macro crate from crates.io or github. Cause: spans get mangled during cross-crate resolution. Solution: anchor parse_quote_spanned! calls to their call sites. Impact: fixes control-click editor navigation for all symbols in --- packages/yew-macro/src/hook/body.rs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/yew-macro/src/hook/body.rs b/packages/yew-macro/src/hook/body.rs index ff49193e36b..f98d9349cd1 100644 --- a/packages/yew-macro/src/hook/body.rs +++ b/packages/yew-macro/src/hook/body.rs @@ -1,7 +1,6 @@ use std::sync::{Arc, Mutex}; use proc_macro_error::emit_error; -use syn::spanned::Spanned; use syn::visit_mut::VisitMut; use syn::{ parse_quote_spanned, visit_mut, Expr, ExprCall, ExprClosure, ExprForLoop, ExprIf, ExprLoop, @@ -52,7 +51,8 @@ impl VisitMut for BodyRewriter { note = "see: https://yew.rs/docs/next/concepts/function-components/hooks" ); } else { - *i = parse_quote_spanned! { i.span() => ::yew::functional::Hook::run(#i, #ctx_ident) }; + // Use Span::call_site() instead of i.span() to fix rust-analyzer nav + *i = parse_quote_spanned! { proc_macro2::Span::call_site() => ::yew::functional::Hook::run(#i, #ctx_ident) }; } return; @@ -78,7 +78,8 @@ impl VisitMut for BodyRewriter { note = "see: https://yew.rs/docs/next/concepts/function-components/hooks" ); } else { - *i = parse_quote_spanned! { i.span() => ::yew::functional::Hook::run(#i, #ctx_ident) }; + // Use Span::call_site() instead of i.span() to fix rust-analyzer nav + *i = parse_quote_spanned! { proc_macro2::Span::call_site() => ::yew::functional::Hook::run(#i, #ctx_ident) }; } } else { visit_mut::visit_expr_macro_mut(self, m);