mirror of
https://github.com/rust-lang/rust-analyzer
synced 2024-12-28 05:53:45 +00:00
Auto merge of #15903 - Veykril:inner-diag, r=Veykril
Fix builtin line! expansion `concat` expects only literals, not whole syntax nodes, so we need to expand as such
This commit is contained in:
commit
b8b4b22c1b
5 changed files with 46 additions and 26 deletions
|
@ -17,7 +17,7 @@ fn main() { column!(); }
|
||||||
#[rustc_builtin_macro]
|
#[rustc_builtin_macro]
|
||||||
macro_rules! column {() => {}}
|
macro_rules! column {() => {}}
|
||||||
|
|
||||||
fn main() { 0 as u32; }
|
fn main() { 0u32; }
|
||||||
"#]],
|
"#]],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -74,7 +74,7 @@ fn main() { line!() }
|
||||||
#[rustc_builtin_macro]
|
#[rustc_builtin_macro]
|
||||||
macro_rules! line {() => {}}
|
macro_rules! line {() => {}}
|
||||||
|
|
||||||
fn main() { 0 as u32 }
|
fn main() { 0u32 }
|
||||||
"#]],
|
"#]],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -970,3 +970,37 @@ builtin #format_args ("{}", &[0 2]);
|
||||||
"##]],
|
"##]],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn eager_concat_line() {
|
||||||
|
check(
|
||||||
|
r#"
|
||||||
|
#[rustc_builtin_macro]
|
||||||
|
#[macro_export]
|
||||||
|
macro_rules! concat {}
|
||||||
|
|
||||||
|
#[rustc_builtin_macro]
|
||||||
|
#[macro_export]
|
||||||
|
macro_rules! line {}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
concat!("event ", line!());
|
||||||
|
}
|
||||||
|
|
||||||
|
"#,
|
||||||
|
expect![[r##"
|
||||||
|
#[rustc_builtin_macro]
|
||||||
|
#[macro_export]
|
||||||
|
macro_rules! concat {}
|
||||||
|
|
||||||
|
#[rustc_builtin_macro]
|
||||||
|
#[macro_export]
|
||||||
|
macro_rules! line {}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
"event 0u32";
|
||||||
|
}
|
||||||
|
|
||||||
|
"##]],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
|
@ -78,7 +78,7 @@ pub fn find_builtin_macro(
|
||||||
|
|
||||||
register_builtin! {
|
register_builtin! {
|
||||||
LAZY:
|
LAZY:
|
||||||
(column, Column) => column_expand,
|
(column, Column) => line_expand,
|
||||||
(file, File) => file_expand,
|
(file, File) => file_expand,
|
||||||
(line, Line) => line_expand,
|
(line, Line) => line_expand,
|
||||||
(module_path, ModulePath) => module_path_expand,
|
(module_path, ModulePath) => module_path_expand,
|
||||||
|
@ -127,11 +127,13 @@ fn line_expand(
|
||||||
_tt: &tt::Subtree,
|
_tt: &tt::Subtree,
|
||||||
) -> ExpandResult<tt::Subtree> {
|
) -> ExpandResult<tt::Subtree> {
|
||||||
// dummy implementation for type-checking purposes
|
// dummy implementation for type-checking purposes
|
||||||
let expanded = quote! {
|
ExpandResult::ok(tt::Subtree {
|
||||||
0 as u32
|
delimiter: tt::Delimiter::unspecified(),
|
||||||
};
|
token_trees: vec![tt::TokenTree::Leaf(tt::Leaf::Literal(tt::Literal {
|
||||||
|
text: "0u32".into(),
|
||||||
ExpandResult::ok(expanded)
|
span: tt::Span::UNSPECIFIED,
|
||||||
|
}))],
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fn log_syntax_expand(
|
fn log_syntax_expand(
|
||||||
|
@ -164,19 +166,6 @@ fn stringify_expand(
|
||||||
ExpandResult::ok(expanded)
|
ExpandResult::ok(expanded)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn column_expand(
|
|
||||||
_db: &dyn ExpandDatabase,
|
|
||||||
_id: MacroCallId,
|
|
||||||
_tt: &tt::Subtree,
|
|
||||||
) -> ExpandResult<tt::Subtree> {
|
|
||||||
// dummy implementation for type-checking purposes
|
|
||||||
let expanded = quote! {
|
|
||||||
0 as u32
|
|
||||||
};
|
|
||||||
|
|
||||||
ExpandResult::ok(expanded)
|
|
||||||
}
|
|
||||||
|
|
||||||
fn assert_expand(
|
fn assert_expand(
|
||||||
_db: &dyn ExpandDatabase,
|
_db: &dyn ExpandDatabase,
|
||||||
_id: MacroCallId,
|
_id: MacroCallId,
|
||||||
|
|
|
@ -684,8 +684,7 @@ fn infer_builtin_macros_line() {
|
||||||
}
|
}
|
||||||
"#,
|
"#,
|
||||||
expect![[r#"
|
expect![[r#"
|
||||||
!0..1 '0': i32
|
!0..4 '0u32': u32
|
||||||
!0..6 '0asu32': u32
|
|
||||||
63..87 '{ ...!(); }': ()
|
63..87 '{ ...!(); }': ()
|
||||||
73..74 'x': u32
|
73..74 'x': u32
|
||||||
"#]],
|
"#]],
|
||||||
|
@ -723,8 +722,7 @@ fn infer_builtin_macros_column() {
|
||||||
}
|
}
|
||||||
"#,
|
"#,
|
||||||
expect![[r#"
|
expect![[r#"
|
||||||
!0..1 '0': i32
|
!0..4 '0u32': u32
|
||||||
!0..6 '0asu32': u32
|
|
||||||
65..91 '{ ...!(); }': ()
|
65..91 '{ ...!(); }': ()
|
||||||
75..76 'x': u32
|
75..76 'x': u32
|
||||||
"#]],
|
"#]],
|
||||||
|
|
|
@ -380,7 +380,6 @@ impl GlobalState {
|
||||||
ws
|
ws
|
||||||
})
|
})
|
||||||
.collect::<Vec<_>>();
|
.collect::<Vec<_>>();
|
||||||
|
|
||||||
// Workspaces are the same, but we've updated build data.
|
// Workspaces are the same, but we've updated build data.
|
||||||
self.workspaces = Arc::new(workspaces);
|
self.workspaces = Arc::new(workspaces);
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Reference in a new issue