У меня есть определенное количество проектов на C #. Некоторые из них клонированы из TFS \ AzureDevOps, а некоторые из Git. Для этих проектов я пишу собственный анализатор C #. Теперь мне нужно определить, игнорируются ли правила, которые я разрабатываю в анализаторе, только что добавленным кодом. Идея состоит в том, чтобы выполнять статический анализ кода только для вновь добавленного кода. По сути, это скорее статический анализ кода diff, в котором diff выдает ожидающие изменения.
Для простоты, когда вы создаете проект анализатора в Visual Studio, вы получаете следующий фрагмент кода, откуда вы можетеначало:
// This method has been registered as a symbol action against 'SymbolKind.NamedType'
private static void AnalyzeSymbol(SymbolAnalysisContext context)
{
var namedTypeSymbol = (INamedTypeSymbol)context.Symbol;
// Find just those named type symbols with names containing lowercase letters.
if (namedTypeSymbol.Name.ToCharArray().Any(char.IsLower))
{
// For all such symbols, produce a diagnostic.
var diagnostic = Diagnostic.Create(Rule, namedTypeSymbol.Locations[0], namedTypeSymbol.Name);
// Report the diagnostic
context.ReportDiagnostic(diagnostic);
}
}
Мне нужно сделать что-то вроде этого:
// This method has been registered as a symbol action against 'SymbolKind.NamedType'
private static void AnalyzeSymbol(SymbolAnalysisContext context)
{
// Before creating a diagnostic and reporting it, I want to detect
// whether the symbol under question is from newly added code or not
if (IsNewCode(context))
{
var namedTypeSymbol = (INamedTypeSymbol)context.Symbol;
// Find just those named type symbols with names containing lowercase letters.
if (namedTypeSymbol.Name.ToCharArray().Any(char.IsLower))
{
// For all such symbols, produce a diagnostic.
var diagnostic = Diagnostic.Create(Rule, namedTypeSymbol.Locations[0], namedTypeSymbol.Name);
// Report the diagnostic
context.ReportDiagnostic(diagnostic);
}
}
}
Как реализовать здесь метод IsNewCode()
?