mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-09-27 20:42:04 +00:00
Don't bail on parse errors in macro input for builtin expansion
This commit is contained in:
parent
b02027d4fe
commit
e7e87fc69d
2 changed files with 18 additions and 4 deletions
|
@ -792,6 +792,23 @@ mod tests {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_format_args_expand_with_broken_member_access() {
|
||||||
|
check_expansion(
|
||||||
|
r#"
|
||||||
|
#[rustc_builtin_macro]
|
||||||
|
macro_rules! format_args {
|
||||||
|
($fmt:expr) => ({ /* compiler built-in */ });
|
||||||
|
($fmt:expr, $($args:tt)*) => ({ /* compiler built-in */ })
|
||||||
|
}
|
||||||
|
format_args!("{} {:?}", a.);
|
||||||
|
"#,
|
||||||
|
expect![[
|
||||||
|
r#"unsafe{std::fmt::Arguments::new_v1(&[], &[std::fmt::ArgumentV1::new(&(a.),std::fmt::Display::fmt),])}"#
|
||||||
|
]],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_include_bytes_expand() {
|
fn test_include_bytes_expand() {
|
||||||
check_expansion(
|
check_expansion(
|
||||||
|
|
|
@ -90,7 +90,7 @@ pub fn parse_to_token_tree(text: &str) -> Option<(tt::Subtree, TokenMap)> {
|
||||||
Some((subtree, conv.id_alloc.map))
|
Some((subtree, conv.id_alloc.map))
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Split token tree with seperate expr: $($e:expr)SEP*
|
/// Split token tree with separate expr: $($e:expr)SEP*
|
||||||
pub fn parse_exprs_with_sep(tt: &tt::Subtree, sep: char) -> Vec<tt::Subtree> {
|
pub fn parse_exprs_with_sep(tt: &tt::Subtree, sep: char) -> Vec<tt::Subtree> {
|
||||||
if tt.token_trees.is_empty() {
|
if tt.token_trees.is_empty() {
|
||||||
return Vec::new();
|
return Vec::new();
|
||||||
|
@ -101,9 +101,6 @@ pub fn parse_exprs_with_sep(tt: &tt::Subtree, sep: char) -> Vec<tt::Subtree> {
|
||||||
|
|
||||||
while iter.peek_n(0).is_some() {
|
while iter.peek_n(0).is_some() {
|
||||||
let expanded = iter.expect_fragment(ParserEntryPoint::Expr);
|
let expanded = iter.expect_fragment(ParserEntryPoint::Expr);
|
||||||
if expanded.err.is_some() {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
res.push(match expanded.value {
|
res.push(match expanded.value {
|
||||||
None => break,
|
None => break,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue