Skip to content

Commit 5be12e4

Browse files
committed
feat: hint at unterminated strings in unknown prefix errors
When encountering 'unknown literal prefix' errors, check for unbalanced quotes in recent code and suggest checking for unterminated string literals.
1 parent 4e147e7 commit 5be12e4

File tree

1 file changed

+13
-1
lines changed

1 file changed

+13
-1
lines changed

crates/parser/src/lexed_str.rs

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,13 @@ impl<'a> Converter<'a> {
149149
}
150150
}
151151

152+
/// Simple check for recent unterminated string literal
153+
fn has_recent_unterminated_string(&self) -> bool {
154+
let start = self.offset.saturating_sub(500);
155+
let recent_text = &self.res.text[start..self.offset];
156+
recent_text.chars().filter(|&c| c == '"').count() % 2 == 1
157+
}
158+
152159
fn finalize_with_eof(mut self) -> LexedStr<'a> {
153160
self.res.push(EOF, self.offset);
154161
self.res
@@ -267,7 +274,12 @@ impl<'a> Converter<'a> {
267274
rustc_lexer::TokenKind::Unknown => ERROR,
268275
rustc_lexer::TokenKind::UnknownPrefix if token_text == "builtin" => IDENT,
269276
rustc_lexer::TokenKind::UnknownPrefix => {
270-
errors.push("unknown literal prefix".into());
277+
let error_msg = if self.has_recent_unterminated_string() {
278+
format!("unknown literal prefix `{}` (note: check for unterminated string literal)", token_text)
279+
} else {
280+
"unknown literal prefix".into()
281+
};
282+
errors.push(error_msg);
271283
IDENT
272284
}
273285
rustc_lexer::TokenKind::Eof => EOF,

0 commit comments

Comments
 (0)