Unnamed repository; edit this file 'description' to name the repository.
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
bors 2023-11-15
parent 57ef70c · parent e8c4007 · commit b8b4b22
-rw-r--r--crates/hir-def/src/macro_expansion_tests/builtin_fn_macro.rs4
-rw-r--r--crates/hir-def/src/macro_expansion_tests/mbe/regression.rs34
-rw-r--r--crates/hir-expand/src/builtin_fn_macro.rs27
-rw-r--r--crates/hir-ty/src/tests/macros.rs6
-rw-r--r--crates/rust-analyzer/src/reload.rs1
5 files changed, 46 insertions, 26 deletions
diff --git a/crates/hir-def/src/macro_expansion_tests/builtin_fn_macro.rs b/crates/hir-def/src/macro_expansion_tests/builtin_fn_macro.rs
index 4aedb22c6b..106ead83fa 100644
--- a/crates/hir-def/src/macro_expansion_tests/builtin_fn_macro.rs
+++ b/crates/hir-def/src/macro_expansion_tests/builtin_fn_macro.rs
@@ -17,7 +17,7 @@ fn main() { column!(); }
#[rustc_builtin_macro]
macro_rules! column {() => {}}
-fn main() { 0 as u32; }
+fn main() { 0u32; }
"#]],
);
}
@@ -74,7 +74,7 @@ fn main() { line!() }
#[rustc_builtin_macro]
macro_rules! line {() => {}}
-fn main() { 0 as u32 }
+fn main() { 0u32 }
"#]],
);
}
diff --git a/crates/hir-def/src/macro_expansion_tests/mbe/regression.rs b/crates/hir-def/src/macro_expansion_tests/mbe/regression.rs
index b416f45ff2..2886b2a366 100644
--- a/crates/hir-def/src/macro_expansion_tests/mbe/regression.rs
+++ b/crates/hir-def/src/macro_expansion_tests/mbe/regression.rs
@@ -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";
+}
+
+"##]],
+ );
+}
diff --git a/crates/hir-expand/src/builtin_fn_macro.rs b/crates/hir-expand/src/builtin_fn_macro.rs
index 30b19b6e51..a04de10b89 100644
--- a/crates/hir-expand/src/builtin_fn_macro.rs
+++ b/crates/hir-expand/src/builtin_fn_macro.rs
@@ -78,7 +78,7 @@ pub fn find_builtin_macro(
register_builtin! {
LAZY:
- (column, Column) => column_expand,
+ (column, Column) => line_expand,
(file, File) => file_expand,
(line, Line) => line_expand,
(module_path, ModulePath) => module_path_expand,
@@ -127,11 +127,13 @@ fn line_expand(
_tt: &tt::Subtree,
) -> ExpandResult<tt::Subtree> {
// dummy implementation for type-checking purposes
- let expanded = quote! {
- 0 as u32
- };
-
- ExpandResult::ok(expanded)
+ ExpandResult::ok(tt::Subtree {
+ delimiter: tt::Delimiter::unspecified(),
+ token_trees: vec![tt::TokenTree::Leaf(tt::Leaf::Literal(tt::Literal {
+ text: "0u32".into(),
+ span: tt::Span::UNSPECIFIED,
+ }))],
+ })
}
fn log_syntax_expand(
@@ -164,19 +166,6 @@ fn stringify_expand(
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(
_db: &dyn ExpandDatabase,
_id: MacroCallId,
diff --git a/crates/hir-ty/src/tests/macros.rs b/crates/hir-ty/src/tests/macros.rs
index 1e6e946a13..d16e0eb013 100644
--- a/crates/hir-ty/src/tests/macros.rs
+++ b/crates/hir-ty/src/tests/macros.rs
@@ -684,8 +684,7 @@ fn infer_builtin_macros_line() {
}
"#,
expect![[r#"
- !0..1 '0': i32
- !0..6 '0asu32': u32
+ !0..4 '0u32': u32
63..87 '{ ...!(); }': ()
73..74 'x': u32
"#]],
@@ -723,8 +722,7 @@ fn infer_builtin_macros_column() {
}
"#,
expect![[r#"
- !0..1 '0': i32
- !0..6 '0asu32': u32
+ !0..4 '0u32': u32
65..91 '{ ...!(); }': ()
75..76 'x': u32
"#]],
diff --git a/crates/rust-analyzer/src/reload.rs b/crates/rust-analyzer/src/reload.rs
index 3fae08b82e..8dba83ed5e 100644
--- a/crates/rust-analyzer/src/reload.rs
+++ b/crates/rust-analyzer/src/reload.rs
@@ -380,7 +380,6 @@ impl GlobalState {
ws
})
.collect::<Vec<_>>();
-
// Workspaces are the same, but we've updated build data.
self.workspaces = Arc::new(workspaces);
} else {