Skip to content

Inline macro, expand to re-input macro token cannot joint #19886

@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: VIM-9.1

code snippet to reproduce:

use proc_macro::{Delimiter, Group, Ident, Literal, Punct, Span, TokenStream, TokenTree, Spacing::*};

#[proc_macro]
pub fn foo(item: TokenStream) -> TokenStream {
    TokenStream::from_iter([
        TokenTree::from(Ident::new("dbg", Span::call_site())),
        TokenTree::from(Punct::new('!', Joint)),
        TokenTree::from(Group::new(
            Delimiter::Parenthesis,
            TokenStream::from_iter([
                TokenTree::from(Literal::character('a')),
                TokenTree::from(Punct::new('.', Joint)),
                TokenTree::from(Punct::new('.', Joint)),
                TokenTree::from(Punct::new('=', Joint)),
                TokenTree::from(Literal::character('b')),
            ]),
        )),
    ])
}
fn main() {
    proc_macro_impl::foo!();
}

Use ide-assist Inline macro to:

fn main() {
    dbg!('a'.. = 'b');
}

Expect:

fn main() {
    dbg!('a'..='b');
}

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