Как мне написать C # анализатор, который работает только на diff-коде или только что добавленном коде? - PullRequest
1 голос
/ 14 октября 2019

У меня есть определенное количество проектов на 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()?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...