From ef734bd3704b5dd4896fb3f6913d0ad036274aa3 Mon Sep 17 00:00:00 2001 From: Brian Robbins Date: Mon, 23 Feb 2026 20:15:10 -0800 Subject: [PATCH] Handle provider names that start with a numeric digit. C# names can't start with numeric digits, so if a provider name starts with a numeric digit, prepend a '_' character onto the class name. This is an indication that the user should adjust the name appropriately, while at the same time, allowing the code to compile and run. --- .../ParserGenerationTests.cs | 14 ++++++++ .../inputs/LeadingDigitProvider.manifest.xml | 36 +++++++++++++++++++ src/TraceParserGen/TraceParserGen.cs | 7 ++++ 3 files changed, 57 insertions(+) create mode 100644 src/TraceParserGen.Tests/inputs/LeadingDigitProvider.manifest.xml diff --git a/src/TraceParserGen.Tests/ParserGenerationTests.cs b/src/TraceParserGen.Tests/ParserGenerationTests.cs index 7d76117b1..cd185795b 100644 --- a/src/TraceParserGen.Tests/ParserGenerationTests.cs +++ b/src/TraceParserGen.Tests/ParserGenerationTests.cs @@ -911,5 +911,19 @@ public void VersionedEvent_EnumerateTemplatesHasEntryPerVersion() } #endregion + + #region Leading digit provider name tests + + [Fact] + public void LeadingDigitProvider_ClassNamePrefixedWithUnderscore() + { + string content = GenerateParserFromManifest("LeadingDigitProvider.manifest.xml"); + + // Provider "3Scale-ETW-Provider" → ToCSharpName → "_3ScaleETWProvider" + // C# identifiers cannot start with a digit, so an underscore is prepended. + Assert.Contains("public sealed class _3ScaleETWProviderTraceEventParser : TraceEventParser", content); + } + + #endregion } } diff --git a/src/TraceParserGen.Tests/inputs/LeadingDigitProvider.manifest.xml b/src/TraceParserGen.Tests/inputs/LeadingDigitProvider.manifest.xml new file mode 100644 index 000000000..cf76393a8 --- /dev/null +++ b/src/TraceParserGen.Tests/inputs/LeadingDigitProvider.manifest.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/TraceParserGen/TraceParserGen.cs b/src/TraceParserGen/TraceParserGen.cs index eb266a266..5a99fe329 100644 --- a/src/TraceParserGen/TraceParserGen.cs +++ b/src/TraceParserGen/TraceParserGen.cs @@ -1006,6 +1006,13 @@ public static string ToCSharpName(string input) validName.Append(c); } + + // C# identifiers cannot start with a digit - prefix with underscore if needed. + if (validName.Length > 0 && Char.IsDigit(validName[0])) + { + validName.Insert(0, '_'); + } + return validName.ToString(); }