Skip to content

The tokens completed within the proc-macro are stuck together #19972

Closed
@A4-Tacks

Description

@A4-Tacks

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()
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions