mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-10-28 18:43:01 +00:00
Fix another issue with fixup reversing
We need to *remove* the whole subtree, but we don't advance `i` by this, because it hasn't gotten there yet (and never will).
This commit is contained in:
parent
cc016df54b
commit
bbcb71a403
4 changed files with 85 additions and 5 deletions
|
|
@ -376,8 +376,8 @@ impl ChangeFixture {
|
|||
}
|
||||
}
|
||||
|
||||
fn default_test_proc_macros() -> [(String, ProcMacro); 8] {
|
||||
[
|
||||
fn default_test_proc_macros() -> Box<[(String, ProcMacro)]> {
|
||||
Box::new([
|
||||
(
|
||||
r#"
|
||||
#[proc_macro_attribute]
|
||||
|
|
@ -498,7 +498,22 @@ pub fn issue_17479(input: TokenStream) -> TokenStream {
|
|||
disabled: false,
|
||||
},
|
||||
),
|
||||
]
|
||||
(
|
||||
r#"
|
||||
#[proc_macro_attribute]
|
||||
pub fn issue_18898(_attr: TokenStream, input: TokenStream) -> TokenStream {
|
||||
input
|
||||
}
|
||||
"#
|
||||
.into(),
|
||||
ProcMacro {
|
||||
name: Symbol::intern("issue_18898"),
|
||||
kind: ProcMacroKind::Bang,
|
||||
expander: sync::Arc::new(Issue18898ProcMacroExpander),
|
||||
disabled: false,
|
||||
},
|
||||
),
|
||||
])
|
||||
}
|
||||
|
||||
fn filter_test_proc_macros(
|
||||
|
|
@ -801,3 +816,54 @@ impl ProcMacroExpander for Issue17479ProcMacroExpander {
|
|||
})
|
||||
}
|
||||
}
|
||||
|
||||
// Reads ident type within string quotes, for issue #17479.
|
||||
#[derive(Debug)]
|
||||
struct Issue18898ProcMacroExpander;
|
||||
impl ProcMacroExpander for Issue18898ProcMacroExpander {
|
||||
fn expand(
|
||||
&self,
|
||||
subtree: &TopSubtree,
|
||||
_: Option<&TopSubtree>,
|
||||
_: &Env,
|
||||
def_site: Span,
|
||||
_: Span,
|
||||
_: Span,
|
||||
_: Option<String>,
|
||||
) -> Result<TopSubtree, ProcMacroExpansionError> {
|
||||
let span = subtree
|
||||
.token_trees()
|
||||
.flat_tokens()
|
||||
.last()
|
||||
.ok_or_else(|| ProcMacroExpansionError::Panic("malformed input".to_owned()))?
|
||||
.first_span();
|
||||
let overly_long_subtree = quote! {span =>
|
||||
{
|
||||
let a = 5;
|
||||
let a = 5;
|
||||
let a = 5;
|
||||
let a = 5;
|
||||
let a = 5;
|
||||
let a = 5;
|
||||
let a = 5;
|
||||
let a = 5;
|
||||
let a = 5;
|
||||
let a = 5;
|
||||
let a = 5;
|
||||
let a = 5;
|
||||
let a = 5;
|
||||
let a = 5;
|
||||
let a = 5;
|
||||
let a = 5;
|
||||
let a = 5;
|
||||
let a = 5;
|
||||
let a = 5;
|
||||
}
|
||||
};
|
||||
Ok(quote! { def_site =>
|
||||
fn foo() {
|
||||
#overly_long_subtree
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue