Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion compiler/rustc_lexer/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -599,14 +599,16 @@ impl Cursor<'_> {
if potential_closing.is_none() {
// a less fortunate recovery if all else fails which finds any dashes preceded by whitespace
// on a standalone line. Might be wrong.
let mut base_index = 0;
while let Some(closing) = rest.find("---") {
let preceding_chars_start = rest[..closing].rfind("\n").map_or(0, |i| i + 1);
if rest[preceding_chars_start..closing].chars().all(is_horizontal_whitespace) {
// candidate found
potential_closing = Some(closing);
potential_closing = Some(closing + base_index);
break;
} else {
rest = &rest[closing + 3..];
base_index += closing + 3;
}
}
}
Expand Down
12 changes: 12 additions & 0 deletions tests/ui/frontmatter/unclosed-6.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
---
//~^ ERROR unclosed frontmatter
🦀---
---

// This test checks the location of the --- recovered by the parser is not
// incorrectly tracked during the less fortunate recovery case and multiple
// candidates are found, as seen with #146847

#![feature(frontmatter)]

fn main() {}
19 changes: 19 additions & 0 deletions tests/ui/frontmatter/unclosed-6.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
error: unclosed frontmatter
--> $DIR/unclosed-6.rs:1:1
|
LL | / ---
LL | |
LL | | 🦀---
LL | | ---
... |
LL | |
| |_^
|
note: frontmatter opening here was not closed
--> $DIR/unclosed-6.rs:1:1
|
LL | ---
| ^^^

error: aborting due to 1 previous error

Loading