From 0d421d9da28d9a0589cf55b12d327fd80354134a Mon Sep 17 00:00:00 2001 From: John Vert Date: Wed, 6 May 2020 12:50:10 -0700 Subject: [PATCH] Better check for valid c# identifier, (#112) fixes net-daemon/netdaemon #111 Co-authored-by: John Vert --- src/DaemonRunner/DaemonRunner/Service/App/CodeGenerator.cs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/DaemonRunner/DaemonRunner/Service/App/CodeGenerator.cs b/src/DaemonRunner/DaemonRunner/Service/App/CodeGenerator.cs index 5b70bbe5c..efe8044e6 100644 --- a/src/DaemonRunner/DaemonRunner/Service/App/CodeGenerator.cs +++ b/src/DaemonRunner/DaemonRunner/Service/App/CodeGenerator.cs @@ -82,9 +82,12 @@ public class CodeGenerator { var (fluent, fluentInterface) = _FluentApiMapper[domain]; var name = entity[(entity.IndexOf(".") + 1)..]; - // Make sure the name is valid - if (long.TryParse(name, out _)) + // Quick check to make sure the name is a valid C# identifier. Should really check to make + // sure it doesn't collide with a reserved keyword as well. + if (!char.IsLetter(name[0]) && (name[0] != '_')) + { name = "e_" + name; + } var propertyCode = $@"public {fluentInterface} {name.ToCamelCase()} => _app.{fluent}(""{entity}"");"; var propDeclaration = CSharpSyntaxTree.ParseText(propertyCode).GetRoot().ChildNodes().OfType().FirstOrDefault();