about summary refs log tree commit diff
diff options
context:
space:
mode:
authorEd Page <eopage@gmail.com>2025-08-22 09:26:19 -0500
committerEd Page <eopage@gmail.com>2025-08-22 09:26:19 -0500
commitf43f974b9e14af328b7982d6320cc4d7a9104410 (patch)
tree863748bf3210571671bda093539d26a72b339e50
parent9b0ddec2a8f3ed9a72df14921b3aa164993dd83b (diff)
downloadrust-f43f974b9e14af328b7982d6320cc4d7a9104410.tar.gz
rust-f43f974b9e14af328b7982d6320cc4d7a9104410.zip
fix(lexer): Allow '-' in the 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
-rw-r--r--compiler/rustc_lexer/src/lib.rs4
-rw-r--r--tests/ui/frontmatter/hyphen-in-infostring-non-leading.rs4
-rw-r--r--tests/ui/frontmatter/hyphen-in-infostring-non-leading.stderr10
3 files changed, 4 insertions, 14 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-non-leading.rs b/tests/ui/frontmatter/hyphen-in-infostring-non-leading.rs
index ccb80d8799a..35e7b96ff87 100644
--- a/tests/ui/frontmatter/hyphen-in-infostring-non-leading.rs
+++ b/tests/ui/frontmatter/hyphen-in-infostring-non-leading.rs
@@ -1,8 +1,8 @@
 --- Cargo-toml
-//~^ ERROR: invalid infostring for frontmatter
 ---
 
-// infostrings cannot have hyphens
+// infostrings can contain hyphens as long as a hyphen isn't the first character.
+//@ check-pass
 
 #![feature(frontmatter)]
 
diff --git a/tests/ui/frontmatter/hyphen-in-infostring-non-leading.stderr b/tests/ui/frontmatter/hyphen-in-infostring-non-leading.stderr
deleted file mode 100644
index 959cf74e327..00000000000
--- a/tests/ui/frontmatter/hyphen-in-infostring-non-leading.stderr
+++ /dev/null
@@ -1,10 +0,0 @@
-error: invalid infostring for frontmatter
-  --> $DIR/hyphen-in-infostring-non-leading.rs:1:4
-   |
-LL | --- Cargo-toml
-   |    ^^^^^^^^^^^
-   |
-   = note: frontmatter infostrings must be a single identifier immediately following the opening
-
-error: aborting due to 1 previous error
-