Closed
Description
rust-analyzer version: rust-analyzer 1.88.0-nightly (a15cce2 2025-04-17)
rustc version: rustc 1.88.0-nightly (a15cce269 2025-04-17)
editor or extension: VIM9.1 coc-rust-analyzer
code snippet to reproduce:
struct Foo;
#[proc_macro_impl::identity_walk]
impl<'a> AsRef<&'a i32> for Foo {
|
}
|
is cursor, input fn
, complete fn as_ref(..)~
:
struct Foo;
#[proc_macro_impl::identity_walk]
impl<'a> AsRef<&'a i32> for Foo {
fn as_ref(&self) -> &&'ai32 {
}
}
Expect &&'a i32
:
struct Foo;
#[proc_macro_impl::identity_walk]
impl<'a> AsRef<&'a i32> for Foo {
fn as_ref(&self) -> &&'a i32 {
}
}
proc_macro implements:
use proc_macro::*;
#[proc_macro_attribute]
pub fn identity_walk(_attr: TokenStream, stream: TokenStream) -> TokenStream {
stream.into_iter()
.map(|tt| match tt {
TokenTree::Group(g) => {
let mut sub = Group::new(
g.delimiter(),
identity_walk(TokenStream::new(), g.stream()),
);
sub.set_span(g.span());
sub.into()
},
_ => tt,
})
.collect()
}