GeWuYou 330bd8b0b0 feat(generator): 添加优先级源代码生成器和相关分析器
- 新增 PriorityGenerator 源生成器,自动生成 IPrioritized 接口实现
- 添加 PriorityAttribute 特性,用于标记类的优先级值
- 实现 PriorityUsageAnalyzer 分析器,检测优先级使用建议
- 添加预定义的 PriorityGroup 常量,提供标准优先级分组
- 在 AnalyzerReleases.Unshipped.md 中注册新的诊断规则
- 更新项目依赖,升级 Meziantou.Analyzer 和 Polyfill 版本
- 为测试项目添加源生成器项目引用
- 添加 PriorityGenerator 的快照测试用例
2026-03-05 22:52:59 +08:00

63 lines
2.4 KiB
C#

using Microsoft.CodeAnalysis;
namespace GFramework.SourceGenerators.diagnostics;
/// <summary>
/// Priority 特性相关的诊断信息
/// </summary>
internal static class PriorityDiagnostic
{
private const string Category = "GFramework.Priority";
/// <summary>
/// GF_Priority_001: Priority 特性只能应用于类
/// </summary>
public static readonly DiagnosticDescriptor OnlyApplyToClass = new(
id: "GF_Priority_001",
title: "Priority 特性只能应用于类",
messageFormat: "Priority 特性只能应用于类,不能应用于 '{0}'",
category: Category,
defaultSeverity: DiagnosticSeverity.Error,
isEnabledByDefault: true,
description: "Priority 特性设计用于类级别的优先级标记,不支持其他类型。"
);
/// <summary>
/// GF_Priority_002: 类已手动实现 IPrioritized 接口
/// </summary>
public static readonly DiagnosticDescriptor AlreadyImplemented = new(
id: "GF_Priority_002",
title: "类已实现 IPrioritized 接口",
messageFormat: "类 '{0}' 已手动实现 IPrioritized 接口,将跳过自动生成",
category: Category,
defaultSeverity: DiagnosticSeverity.Warning,
isEnabledByDefault: true,
description: "当类已经手动实现 IPrioritized 接口时,源生成器将跳过代码生成以避免冲突。"
);
/// <summary>
/// GF_Priority_003: 类必须声明为 partial
/// </summary>
public static readonly DiagnosticDescriptor MustBePartial = new(
id: "GF_Priority_003",
title: "类必须声明为 partial",
messageFormat: "类 '{0}' 使用了 Priority 特性,必须声明为 partial",
category: Category,
defaultSeverity: DiagnosticSeverity.Error,
isEnabledByDefault: true,
description: "源生成器需要在 partial 类中生成 IPrioritized 接口实现。"
);
/// <summary>
/// GF_Priority_004: Priority 值缺失或无效
/// </summary>
public static readonly DiagnosticDescriptor InvalidValue = new(
id: "GF_Priority_004",
title: "Priority 值无效",
messageFormat: "Priority 特性的值无效或缺失",
category: Category,
defaultSeverity: DiagnosticSeverity.Error,
isEnabledByDefault: true,
description: "Priority 特性必须提供一个有效的整数值。"
);
}