Merge pull request #19745 from Veykril/push-rnqulnqvltro

minor: Add a mbe test for parsing negative literals
diff --git a/crates/hir-def/src/nameres/path_resolution.rs b/crates/hir-def/src/nameres/path_resolution.rs
index 2ad5e9e..74ce33a 100644
--- a/crates/hir-def/src/nameres/path_resolution.rs
+++ b/crates/hir-def/src/nameres/path_resolution.rs
@@ -483,6 +483,7 @@
             curr_per_ns = match curr.def {
                 ModuleDefId::ModuleId(module) => {
                     if module.krate != self.krate {
+                        // FIXME: Inefficient
                         let path = ModPath::from_segments(
                             PathKind::SELF,
                             path.segments()[i..].iter().cloned(),
diff --git a/crates/mbe/src/tests.rs b/crates/mbe/src/tests.rs
index a5672e4..3369dff 100644
--- a/crates/mbe/src/tests.rs
+++ b/crates/mbe/src/tests.rs
@@ -356,3 +356,120 @@
             ;"#]],
     );
 }
+
+#[test]
+fn minus_belongs_to_literal() {
+    let decl = r#"
+(-1) => {-1};
+(- 2) => {- 2};
+(- 3.0) => {- 3.0};
+(@$lit:literal) => {$lit}
+"#;
+    let check = |args, expect| check(Edition::CURRENT, Edition::CURRENT, decl, args, expect);
+    check(
+        "-1",
+        expect![[r#"
+            SUBTREE $$ 1:0@0..2#ROOT2024 1:0@0..2#ROOT2024
+              PUNCH   - [alone] 0:0@10..11#ROOT2024
+              LITERAL Integer 1 0:0@11..12#ROOT2024
+
+            -1"#]],
+    );
+    check(
+        "- 1",
+        expect![[r#"
+            SUBTREE $$ 1:0@0..3#ROOT2024 1:0@0..3#ROOT2024
+              PUNCH   - [alone] 0:0@10..11#ROOT2024
+              LITERAL Integer 1 0:0@11..12#ROOT2024
+
+            -1"#]],
+    );
+    check(
+        "-2",
+        expect![[r#"
+            SUBTREE $$ 1:0@0..2#ROOT2024 1:0@0..2#ROOT2024
+              PUNCH   - [alone] 0:0@25..26#ROOT2024
+              LITERAL Integer 2 0:0@27..28#ROOT2024
+
+            -2"#]],
+    );
+    check(
+        "- 2",
+        expect![[r#"
+            SUBTREE $$ 1:0@0..3#ROOT2024 1:0@0..3#ROOT2024
+              PUNCH   - [alone] 0:0@25..26#ROOT2024
+              LITERAL Integer 2 0:0@27..28#ROOT2024
+
+            -2"#]],
+    );
+    check(
+        "-3.0",
+        expect![[r#"
+            SUBTREE $$ 1:0@0..4#ROOT2024 1:0@0..4#ROOT2024
+              PUNCH   - [alone] 0:0@43..44#ROOT2024
+              LITERAL Float 3.0 0:0@45..48#ROOT2024
+
+            -3.0"#]],
+    );
+    check(
+        "- 3.0",
+        expect![[r#"
+            SUBTREE $$ 1:0@0..5#ROOT2024 1:0@0..5#ROOT2024
+              PUNCH   - [alone] 0:0@43..44#ROOT2024
+              LITERAL Float 3.0 0:0@45..48#ROOT2024
+
+            -3.0"#]],
+    );
+    check(
+        "@1",
+        expect![[r#"
+            SUBTREE $$ 1:0@0..2#ROOT2024 1:0@0..2#ROOT2024
+              LITERAL Integer 1 1:0@1..2#ROOT2024
+
+            1"#]],
+    );
+    check(
+        "@-1",
+        expect![[r#"
+            SUBTREE $$ 1:0@0..3#ROOT2024 1:0@0..3#ROOT2024
+              PUNCH   - [alone] 1:0@1..2#ROOT2024
+              LITERAL Integer 1 1:0@2..3#ROOT2024
+
+            -1"#]],
+    );
+    check(
+        "@1.0",
+        expect![[r#"
+            SUBTREE $$ 1:0@0..4#ROOT2024 1:0@0..4#ROOT2024
+              LITERAL Float 1.0 1:0@1..4#ROOT2024
+
+            1.0"#]],
+    );
+    check(
+        "@-1.0",
+        expect![[r#"
+            SUBTREE $$ 1:0@0..5#ROOT2024 1:0@0..5#ROOT2024
+              PUNCH   - [alone] 1:0@1..2#ROOT2024
+              LITERAL Float 1.0 1:0@2..5#ROOT2024
+
+            -1.0"#]],
+    );
+    check(
+        "@--1.0",
+        expect![[r#"
+            ExpandError {
+                inner: (
+                    1:0@1..2#ROOT2024,
+                    BindingError(
+                        "expected literal",
+                    ),
+                ),
+            }
+
+            SUBTREE $$ 1:0@0..6#ROOT2024 1:0@0..6#ROOT2024
+              PUNCH   - [joint] 1:0@1..2#ROOT2024
+              PUNCH   - [alone] 1:0@2..3#ROOT2024
+
+            --"#]],
+    );
+}