From bc2b73b19aad87585f9d2615358f53f8e35ddc41 Mon Sep 17 00:00:00 2001 From: GeWuYou <95328647+GeWuYou@users.noreply.github.com> Date: Thu, 25 Dec 2025 08:42:03 +0800 Subject: [PATCH] =?UTF-8?q?refactor(generator):=20=E9=87=8D=E6=9E=84?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E7=94=9F=E6=88=90=E5=99=A8=E4=BB=A5=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E6=96=B0=E5=B1=9E=E6=80=A7=E5=90=8D=E7=A7=B0=E5=92=8C?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将LogAttribute中的Category属性重命名为Name - 更新构造函数参数名称从category到name - 添加类和方法的XML文档注释 - 将生成的日志字段类型从ILog改为ILogger - 更新日志创建方式从Log.CreateLogger到ConsoleLoggerFactory.GetLogger - 移除项目中的空文件夹引用 - 优化代码结构和注释格式 --- GFramework.Game/GFramework.Game.csproj | 5 --- .../generator/logging/LogAttribute.cs | 8 ++--- .../generator/logging/LoggerGenerator.cs | 36 +++++++++++++++---- 3 files changed, 34 insertions(+), 15 deletions(-) diff --git a/GFramework.Game/GFramework.Game.csproj b/GFramework.Game/GFramework.Game.csproj index 8e4d4d0..271f741 100644 --- a/GFramework.Game/GFramework.Game.csproj +++ b/GFramework.Game/GFramework.Game.csproj @@ -6,11 +6,6 @@ enable enable - - - - - diff --git a/GFramework.Generator.Attributes/generator/logging/LogAttribute.cs b/GFramework.Generator.Attributes/generator/logging/LogAttribute.cs index d8f73cf..d933912 100644 --- a/GFramework.Generator.Attributes/generator/logging/LogAttribute.cs +++ b/GFramework.Generator.Attributes/generator/logging/LogAttribute.cs @@ -10,7 +10,7 @@ namespace GFramework.Generator.Attributes.generator.logging; public sealed class LogAttribute : Attribute { /// 日志分类名(默认使用类名) - public string? Category { get; set; } + public string? Name { get; set; } /// 生成字段名 public string FieldName { get; set; } = "_log"; @@ -24,9 +24,9 @@ public sealed class LogAttribute : Attribute /// /// 初始化 LogAttribute 类的新实例 /// - /// 日志分类名,默认使用类名 - public LogAttribute(string? category) + /// 日志分类名,默认使用类名 + public LogAttribute(string? name) { - Category = category; + Name = name; } } \ No newline at end of file diff --git a/GFramework.Generator/generator/logging/LoggerGenerator.cs b/GFramework.Generator/generator/logging/LoggerGenerator.cs index a21f8f6..766558f 100644 --- a/GFramework.Generator/generator/logging/LoggerGenerator.cs +++ b/GFramework.Generator/generator/logging/LoggerGenerator.cs @@ -9,6 +9,9 @@ using Microsoft.CodeAnalysis.Text; namespace GFramework.Generator.generator.logging { + /// + /// 日志生成器,用于为标记了LogAttribute的类自动生成日志字段 + /// [Generator] public sealed class LoggerGenerator : IIncrementalGenerator { @@ -17,6 +20,10 @@ namespace GFramework.Generator.generator.logging private const string AttributeShortName = "LogAttribute"; private const string AttributeShortNameWithoutSuffix = "Log"; + /// + /// 初始化生成器,设置语法过滤和代码生成逻辑 + /// + /// 增量生成器初始化上下文 public void Initialize(IncrementalGeneratorInitializationContext context) { // 1. 语法过滤:快速筛选候选类 @@ -78,6 +85,11 @@ namespace GFramework.Generator.generator.logging }); } + /// + /// 获取类符号上的LogAttribute特性 + /// + /// 类符号 + /// LogAttribute特性数据,如果不存在则返回null private static AttributeData? GetAttribute(INamedTypeSymbol classSymbol) { return classSymbol.GetAttributes().FirstOrDefault(a => @@ -91,6 +103,12 @@ namespace GFramework.Generator.generator.logging }); } + /// + /// 生成日志字段代码 + /// + /// 类符号 + /// LogAttribute特性数据 + /// 生成的C#代码字符串 private static string Generate(INamedTypeSymbol classSymbol, AttributeData attr) { var ns = classSymbol.ContainingNamespace.IsGlobalNamespace @@ -99,15 +117,15 @@ namespace GFramework.Generator.generator.logging var className = classSymbol.Name; - // === 解析 Category === - var category = className; // 默认使用类名 + // === 解析 Name === + var name = className; // 默认使用类名 // 检查是否有构造函数参数 if (attr.ConstructorArguments.Length > 0) { var argValue = attr.ConstructorArguments[0].Value; - category = argValue switch + name = argValue switch { // 情况 1: 参数存在,但值为 null (例如 [Log] 且构造函数有默认值 null) null => className, @@ -143,8 +161,8 @@ namespace GFramework.Generator.generator.logging sb.AppendLine(" {"); sb.AppendLine($" /// Auto-generated logger"); sb.AppendLine( - $" {access} {staticKeyword}readonly ILog {fieldName} = " + - $"Log.CreateLogger(\"{category}\");"); + $" {access} {staticKeyword}readonly ILogger {fieldName} = " + + $"new ConsoleLoggerFactory.GetLogger(\"{name}\");"); sb.AppendLine(" }"); if (ns is not null) @@ -153,9 +171,15 @@ namespace GFramework.Generator.generator.logging return sb.ToString(); } + /// + /// 从特性数据中获取命名参数的值 + /// + /// 特性数据 + /// 参数名称 + /// 参数值,如果不存在则返回null private static object? GetNamedArg(AttributeData attr, string name) { return (from kv in attr.NamedArguments where kv.Key == name select kv.Value.Value).FirstOrDefault(); } } -} \ No newline at end of file +}