From 92c5d3b8e2b3fe0352c8a5342961b07f8dc5732f Mon Sep 17 00:00:00 2001 From: Jon Shea Date: Mon, 31 Mar 2025 14:36:44 -0400 Subject: [PATCH] fix(rust): clarify error message for non-token reserved words Improve the `NonTokenReservedWord` error message by including the specific reserved word that was not used as a token. --- cli/generate/src/prepare_grammar/extract_tokens.rs | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/cli/generate/src/prepare_grammar/extract_tokens.rs b/cli/generate/src/prepare_grammar/extract_tokens.rs index 9276f68e..a2cb3dc1 100644 --- a/cli/generate/src/prepare_grammar/extract_tokens.rs +++ b/cli/generate/src/prepare_grammar/extract_tokens.rs @@ -28,8 +28,8 @@ unless they are used only as the grammar's start rule. NonSymbolExternalToken, #[error("Non-terminal symbol '{0}' cannot be used as the word token, because its rule is duplicated in '{1}'")] NonTerminalWordToken(String, String), - #[error("Reserved words must be tokens")] - NonTokenReservedWord, + #[error("Reserved word '{0}' must be a token")] + NonTokenReservedWord(String), } pub(super) fn extract_tokens( @@ -188,7 +188,12 @@ pub(super) fn extract_tokens( { reserved_words.push(Symbol::terminal(index)); } else { - Err(ExtractTokensError::NonTokenReservedWord)?; + let token_name = match &reserved_rule { + Rule::String(s) => s.clone(), + Rule::Pattern(p, _) => p.clone(), + _ => "unknown".to_string(), + }; + Err(ExtractTokensError::NonTokenReservedWord(token_name))?; } } reserved_word_contexts.push(ReservedWordContext {