Skip to content

代码分析场景

本文档提供代码分析场景的实现示例。


📋 文档信息

属性
难度高级
阅读时间30 分钟
前置知识语义模型、诊断 API
相关文档语义模型 API诊断 API

代码质量分析

检测未使用的变量

csharp
[DiagnosticAnalyzer(LanguageNames.CSharp)]
public class UnusedVariableAnalyzer : DiagnosticAnalyzer
{
    public override void Initialize(AnalysisContext context)
    {
        context.RegisterSemanticModelAction(AnalyzeSemanticModel);
    }
    
    private void AnalyzeSemanticModel(SemanticModelAnalysisContext context)
    {
        var root = context.SemanticModel.SyntaxTree.GetRoot();
        var variables = root.DescendantNodes()
            .OfType<VariableDeclaratorSyntax>();
        
        foreach (var variable in variables)
        {
            var symbol = context.SemanticModel.GetDeclaredSymbol(variable);
            if (symbol != null && !IsSymbolUsed(symbol, context.SemanticModel, root))
            {
                var diagnostic = Diagnostic.Create(
                    Rule,
                    variable.GetLocation(),
                    symbol.Name);
                context.ReportDiagnostic(diagnostic);
            }
        }
    }
}

性能分析

检测性能问题

csharp
[DiagnosticAnalyzer(LanguageNames.CSharp)]
public class PerformanceAnalyzer : DiagnosticAnalyzer
{
    public override void Initialize(AnalysisContext context)
    {
        context.RegisterSyntaxNodeAction(
            AnalyzeInvocation,
            SyntaxKind.InvocationExpression);
    }
}

关键要点

  • ✅ 使用 DiagnosticAnalyzer 进行代码分析
  • ✅ 注册适当的分析上下文
  • ✅ 使用语义模型获取符号信息
  • ✅ 报告有意义的诊断信息

相关文档


最后更新: 2026-02-06

基于 MIT 许可发布