Я хочу обработать все идентификаторы в коде с помощью моего специального анализатора кода. Я перехватил все это, кроме идентификатора y
в таком выражении:
var z = from x in new int[] { }
group x by x into y
select new { };
Пример минимального исходного кода анализатора:
[DiagnosticAnalyzer(LanguageNames.CSharp)]
public class IdentifierAnalyzer : DiagnosticAnalyzer
{
private static readonly DiagnosticDescriptor Rule = new DiagnosticDescriptor("Id", "", "", "Naming", DiagnosticSeverity.Warning, true, null);
public override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics => ImmutableArray.Create(Rule);
public override void Initialize(AnalysisContext context)
{
context.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.Analyze | GeneratedCodeAnalysisFlags.ReportDiagnostics);
context.EnableConcurrentExecution();
context.RegisterSyntaxNodeAction(AnalyzeNode, SyntaxKinds);
}
private static readonly SyntaxKind[] SyntaxKinds = new[] {
SyntaxKind.JoinIntoClause,
//TODO: LINQ group...into <identifier>
};
private static void AnalyzeNode(SyntaxNodeAnalysisContext context)
{
switch (context.Node)
{
case JoinIntoClauseSyntax joinIntoClause:
if (IsNotValid(joinIntoClause.Identifier.Text))
context.ReportDiagnostic(Diagnostic.Create(Rule, joinIntoClause.Identifier.GetLocation(), joinIntoClause.Identifier.Text));
break;
//TODO: LINQ group...into <identifier>
}
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
private static bool IsNotValid(string text)
{
return true;
}
}