适用于 Daily Routines 项目的代码规范分析器
$ dotnet add package DailyRoutines.CodeAnalysis这个项目包含为 DailyRoutines 设计的代码规范分析器,用于确保代码风格一致性。
DailyRoutines.CodeAnalysis/
├── Common/ # 通用基础设施
│ ├── BaseAnalyzer.cs # 分析器基类
│ ├── BaseCodeFixProvider.cs # 代码修复提供者基类
│ ├── DiagnosticCategories.cs # 诊断类别常量
│ ├── DiagnosticDescriptorFactory.cs # 诊断描述符工厂
│ └── DiagnosticRules.cs # 所有规则的描述符集合
├── Rules/ # 规则实现
│ ├── Naming/ # 命名规则相关
│ │ ├── DoNotUseUnderscorePrefixInNamesAnalyzer.cs
│ │ └── DoNotUseUnderscorePrefixInNamesCodeFixProvider.cs
│ ├── Usage/ # 用法规则相关
│ │ ├── UseNintInsteadOfIntPtrAnalyzer.cs
│ │ └── UseNintInsteadOfIntPtrCodeFixProvider.cs
│ ├── Design/ # 设计规则相关
│ │ ├── ControlStatementBodyMustBeOnNewLineAnalyzer.cs
│ │ ├── ControlStatementBodyMustBeOnNewLineCodeFixProvider.cs
│ │ ├── ControlStatementBlockUsageAnalyzer.cs
│ │ ├── ControlStatementBlockUsageCodeFixProvider.cs
│ │ ├── BinaryOperatorsMustBeAtEndOfLineAnalyzer.cs
│ │ ├── BinaryOperatorsMustBeAtEndOfLineCodeFixProvider.cs
│ │ ├── ConfigurationClassesMustNotUseReadonlyFieldsAnalyzer.cs
│ │ └── ConfigurationClassesMustNotUseReadonlyFieldsCodeFixProvider.cs
│ └── Performance/ # 性能规则相关(待添加)
└── Templates/ # 规则模板
├── TemplateAnalyzer.cs # 分析器模板
└── TemplateCodeFixProvider.cs # 代码修复提供者模板
| 规则 ID | 类别 | 描述 | 严重性 |
|---|---|---|---|
| DR0001 | 用法 | 使用 nint 代替 IntPtr | 警告 |
| DR0002 | 命名 | 不允许命名以下划线开头 | 警告 |
| DR0004 | 设计 | 控制语句的语句体必须另起一行 | 警告 |
| DR0005 | 设计 | 只包含简单单行语句的控制语句不应使用大括号 | 警告 |
| DR0006 | 设计 | 包含多行语句或控制流语句的控制语句必须使用大括号 | 警告 |
| DR0007 | 设计 | 二元运算符必须在行尾而不是行首 | 警告 |
| DR0008 | 设计 | 继承自 ManagerConfiguration 或 ModuleConfiguration 的类中不允许使用 readonly 修饰符 | 警告 |
要添加新的规则,请按照以下步骤操作:
Common/DiagnosticRules.cs 中添加新的规则描述符Templates 目录下的模板文件,根据你的规则进行修改Templates/TemplateAnalyzer.cs 到适当的类别文件夹中,例如 Rules/Performance/AvoidUnnecessaryAllocationAnalyzer.csCommon/DiagnosticRules.cs 中添加规则描述符:/// <summary>
/// 诊断规则:避免不必要的内存分配
/// </summary>
public static readonly DiagnosticDescriptor AvoidUnnecessaryAllocation = DiagnosticDescriptorFactory.Create(
id: "0003",
title: "避免不必要的内存分配",
messageFormat: "这段代码可能导致不必要的内存分配",
category: DiagnosticCategories.Performance,
description: "避免在性能敏感的代码路径中进行不必要的内存分配。"
);[DiagnosticAnalyzer(LanguageNames.CSharp)]
public class AvoidUnnecessaryAllocationAnalyzer : BaseAnalyzer
{
public AvoidUnnecessaryAllocationAnalyzer()
: base(DiagnosticRules.AvoidUnnecessaryAllocation)
{
}
protected override void RegisterAnalyzers(AnalysisContext context)
{
// 实现分析逻辑...
}
}<描述性名称>Analyzer<与分析器相同的描述性名称>CodeFixProviderDR<四位数字> (例如 DR0001)# 构建项目
dotnet build
# 生成NuGet包
dotnet pack -c Release本项目采用MIT许可证。有关详细信息,请参阅 LICENSE 文件。