代码分析场景
本文档提供代码分析场景的实现示例。
📋 文档信息
| 属性 | 值 |
|---|---|
| 难度 | 高级 |
| 阅读时间 | 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