Extract duplicated code in analyzers

This commit is contained in:
Tyrrrz
2021-03-21 13:35:38 +02:00
parent 7d3d79b861
commit bade0a0048
18 changed files with 129 additions and 170 deletions

View File

@@ -1,5 +1,8 @@
using System;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.Diagnostics;
namespace CliFx.Analyzers.Utils.Extensions
{
@@ -7,5 +10,39 @@ namespace CliFx.Analyzers.Utils.Extensions
{
public static bool DisplayNameMatches(this ISymbol symbol, string name) =>
string.Equals(symbol.ToDisplayString(), name, StringComparison.Ordinal);
public static void HandleClassDeclaration(
this AnalysisContext analysisContext,
Action<SyntaxNodeAnalysisContext, ClassDeclarationSyntax, ITypeSymbol> handler)
{
analysisContext.RegisterSyntaxNodeAction(ctx =>
{
if (ctx.Node is not ClassDeclarationSyntax classDeclaration)
return;
var type = ctx.SemanticModel.GetDeclaredSymbol(classDeclaration);
if (type is null)
return;
handler(ctx, classDeclaration, type);
}, SyntaxKind.ClassDeclaration);
}
public static void HandlePropertyDeclaration(
this AnalysisContext analysisContext,
Action<SyntaxNodeAnalysisContext, PropertyDeclarationSyntax, IPropertySymbol> handler)
{
analysisContext.RegisterSyntaxNodeAction(ctx =>
{
if (ctx.Node is not PropertyDeclarationSyntax propertyDeclaration)
return;
var property = ctx.SemanticModel.GetDeclaredSymbol(propertyDeclaration);
if (property is null)
return;
handler(ctx, propertyDeclaration, property);
}, SyntaxKind.PropertyDeclaration);
}
}
}