about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJacob Pratt <jacob@jhpratt.dev>2025-08-22 22:01:00 -0400
committerGitHub <noreply@github.com>2025-08-22 22:01:00 -0400
commit8cabd61dca14159378e58c8c5e6772d0eb9e664b (patch)
tree1fbe83d030eeef5a526e30297404950a61e889ce
parentd3c9908a8a91e8d732201caac2c809d4e96d0027 (diff)
parentf43f974b9e14af328b7982d6320cc4d7a9104410 (diff)
Rollup merge of #145751 - epage:infostring, r=joshtriplett
fix(lexer): Allow '-' in the frontmatter infostring continue set

This more closely matches the RFC and what our T-lang contact has asked
for, see https://github.com/rust-lang/rust/issues/136889#issuecomment-3212715312

Tracking issue: rust-lang/rust#136889
-rw-r--r--compiler/rustc_lexer/src/lib.rs4
-rw-r--r--tests/ui/frontmatter/hyphen-in-infostring-leading.rs9
-rw-r--r--tests/ui/frontmatter/hyphen-in-infostring-leading.stderr10
-rw-r--r--tests/ui/frontmatter/hyphen-in-infostring-non-leading.rs9
4 files changed, 30 insertions, 2 deletions
diff --git a/compiler/rustc_lexer/src/lib.rs b/compiler/rustc_lexer/src/lib.rs
index e80196ed567..483cc3e93dc 100644
--- a/compiler/rustc_lexer/src/lib.rs
+++ b/compiler/rustc_lexer/src/lib.rs
@@ -540,11 +540,11 @@ impl Cursor<'_> {
         // whitespace between the opening and the infostring.
         self.eat_while(|ch| ch != '\n' && is_whitespace(ch));
 
-        // copied from `eat_identifier`, but allows `.` in infostring to allow something like
+        // copied from `eat_identifier`, but allows `-` and `.` in infostring to allow something like
         // `---Cargo.toml` as a valid opener
         if is_id_start(self.first()) {
             self.bump();
-            self.eat_while(|c| is_id_continue(c) || c == '.');
+            self.eat_while(|c| is_id_continue(c) || c == '-' || c == '.');
         }
 
         self.eat_while(|ch| ch != '\n' && is_whitespace(ch));
diff --git a/tests/ui/frontmatter/hyphen-in-infostring-leading.rs b/tests/ui/frontmatter/hyphen-in-infostring-leading.rs
new file mode 100644
index 00000000000..8652fd76ad5
--- /dev/null
+++ b/tests/ui/frontmatter/hyphen-in-infostring-leading.rs
@@ -0,0 +1,9 @@
+--- -toml
+//~^ ERROR: invalid infostring for frontmatter
+---
+
+// infostrings cannot have leading hyphens
+
+#![feature(frontmatter)]
+
+fn main() {}
diff --git a/tests/ui/frontmatter/hyphen-in-infostring-leading.stderr b/tests/ui/frontmatter/hyphen-in-infostring-leading.stderr
new file mode 100644
index 00000000000..167b537d62b
--- /dev/null
+++ b/tests/ui/frontmatter/hyphen-in-infostring-leading.stderr
@@ -0,0 +1,10 @@
+error: invalid infostring for frontmatter
+  --> $DIR/hyphen-in-infostring-leading.rs:1:4
+   |
+LL | --- -toml
+   |    ^^^^^^
+   |
+   = note: frontmatter infostrings must be a single identifier immediately following the opening
+
+error: aborting due to 1 previous error
+
diff --git a/tests/ui/frontmatter/hyphen-in-infostring-non-leading.rs b/tests/ui/frontmatter/hyphen-in-infostring-non-leading.rs
new file mode 100644
index 00000000000..35e7b96ff87
--- /dev/null
+++ b/tests/ui/frontmatter/hyphen-in-infostring-non-leading.rs
@@ -0,0 +1,9 @@
+--- Cargo-toml
+---
+
+// infostrings can contain hyphens as long as a hyphen isn't the first character.
+//@ check-pass
+
+#![feature(frontmatter)]
+
+fn main() {}