From 28adb7a0c2186f69d18cd475fc594832f6fbdaa4 Mon Sep 17 00:00:00 2001
From: Josh Suereth <Joshua.Suereth@gmail.com>
Date: Wed, 8 May 2024 21:00:20 -0400
Subject: [PATCH] Fix #151 - expand id parsing

Current parsing is a bit inflexible, improve parsing to include more.
---
 crates/weaver_semconv_gen/src/parser.rs | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/crates/weaver_semconv_gen/src/parser.rs b/crates/weaver_semconv_gen/src/parser.rs
index 948dfd5a..e62ef907 100644
--- a/crates/weaver_semconv_gen/src/parser.rs
+++ b/crates/weaver_semconv_gen/src/parser.rs
@@ -72,7 +72,10 @@ fn parse_markdown_gen_parameters(input: &str) -> IResult<&str, Vec<MarkdownGenPa
 
 /// nom parser for semconv ids.
 fn parse_id(input: &str) -> IResult<&str, &str> {
-    recognize(many0_count(alt((alpha1, tag("."), tag("_"), tag("-")))))(input)
+    recognize(pair(
+        alpha1, // First character must be alpha, then anything is accepted.
+        many0_count(alt((alphanumeric1, tag("."), tag("_"), tag("-")))),
+    ))(input)
 }
 
 /// nom parser for <!-- semconv {id}({args}) -->
@@ -134,6 +137,9 @@ mod tests {
         assert!(is_markdown_snippet_directive(
             "<!-- semconv registry.user_agent -->"
         ));
+        assert!(is_markdown_snippet_directive(
+            "<!-- semconv registry.user_agent.p99 -->"
+        ));
         assert!(is_markdown_snippet_directive(
             "<!-- semconv my.id(full) -->"
         ));