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
+
+ --"#]],
+ );
+}