about summary refs log tree commit diff
diff options
context:
space:
mode:
authorLukas Wirth <lukastw97@gmail.com>2023-11-15 12:41:14 +0100
committerLukas Wirth <lukastw97@gmail.com>2023-11-15 14:06:10 +0100
commite8c4007cfcbb606e167ee90bc4eca2753284f7fc (patch)
treef8b96e6f20673d637ce41372449d5c7e4a5d2b3a
parent57ef70cc08aff007d438ad6c0a85a4174319438c (diff)
downloadrust-e8c4007cfcbb606e167ee90bc4eca2753284f7fc.tar.gz
rust-e8c4007cfcbb606e167ee90bc4eca2753284f7fc.zip
Fix builtin line! expansion
-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 4aedb22c6bc..106ead83fad 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 b416f45ff20..2886b2a366c 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 30b19b6e51b..a04de10b899 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 1e6e946a13f..d16e0eb0137 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 3fae08b82e2..8dba83ed5ed 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 {