本文整理汇总了C#中Microsoft.CodeAnalysis.Diagnostics.AnalysisScope.WithAnalyzers方法的典型用法代码示例。如果您正苦于以下问题:C# AnalysisScope.WithAnalyzers方法的具体用法?C# AnalysisScope.WithAnalyzers怎么用?C# AnalysisScope.WithAnalyzers使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Microsoft.CodeAnalysis.Diagnostics.AnalysisScope
的用法示例。
在下文中一共展示了AnalysisScope.WithAnalyzers方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: GetAnalyzerSemanticDiagnosticsCoreAsync
private async Task<ImmutableArray<Diagnostic>> GetAnalyzerSemanticDiagnosticsCoreAsync(SemanticModel model, TextSpan? filterSpan, ImmutableArray<DiagnosticAnalyzer> analyzers, CancellationToken cancellationToken)
{
try
{
var taskToken = Interlocked.Increment(ref _currentToken);
var analysisScope = new AnalysisScope(analyzers, model.SyntaxTree, filterSpan, syntaxAnalysis: false, concurrentAnalysis: _analysisOptions.ConcurrentAnalysis, categorizeDiagnostics: true);
var pendingAnalyzers = _analysisResultBuilder.GetPendingAnalyzers(analyzers);
if (pendingAnalyzers.Length > 0)
{
var pendingAnalysisScope = pendingAnalyzers.Length < analyzers.Length ? analysisScope.WithAnalyzers(pendingAnalyzers) : analysisScope;
Func<AsyncQueue<CompilationEvent>> getEventQueue = () => GetPendingEvents(analyzers, model.SyntaxTree);
// Compute the analyzer diagnostics for the given analysis scope.
// We need to loop till symbol analysis is complete for any partial symbols being processed for other tree diagnostic requests.
do
{
await ComputeAnalyzerDiagnosticsAsync(pendingAnalysisScope, getEventQueue, taskToken, cancellationToken).ConfigureAwait(false);
} while (_analysisOptions.ConcurrentAnalysis && _analysisState.HasPendingSymbolAnalysis(pendingAnalysisScope));
if (_analysisOptions.ConcurrentAnalysis)
{
// Wait for all active tree tasks as they might still be reporting diagnostics for partial symbols defined in this tree.
await WaitForActiveAnalysisTasksAsync(waitForTreeTasks: true, waitForCompilationOrNonConcurrentTask: false, cancellationToken: cancellationToken).ConfigureAwait(false);
}
}
// Return computed analyzer diagnostics for the given analysis scope.
return _analysisResultBuilder.GetDiagnostics(analysisScope, getLocalDiagnostics: true, getNonLocalDiagnostics: false);
}
catch (Exception e) when (FatalError.ReportUnlessCanceled(e))
{
throw ExceptionUtilities.Unreachable;
}
}
示例2: GetAnalyzerSyntaxDiagnosticsCoreAsync
private async Task<ImmutableArray<Diagnostic>> GetAnalyzerSyntaxDiagnosticsCoreAsync(SyntaxTree tree, ImmutableArray<DiagnosticAnalyzer> analyzers, CancellationToken cancellationToken)
{
try
{
var taskToken = Interlocked.Increment(ref _currentToken);
var analysisScope = new AnalysisScope(analyzers, tree, filterSpan: null, syntaxAnalysis: true, concurrentAnalysis: _analysisOptions.ConcurrentAnalysis, categorizeDiagnostics: true);
var pendingAnalyzers = _analysisResultBuilder.GetPendingAnalyzers(analyzers);
if (pendingAnalyzers.Length > 0)
{
var pendingAnalysisScope = pendingAnalyzers.Length < analyzers.Length ? analysisScope.WithAnalyzers(pendingAnalyzers) : analysisScope;
Func<AsyncQueue<CompilationEvent>> getEventQueue = () => s_EmptyEventQueue;
// Compute the analyzer diagnostics for the pending analysis scope.
await ComputeAnalyzerDiagnosticsAsync(pendingAnalysisScope, getEventQueue, taskToken, cancellationToken).ConfigureAwait(false);
}
// Return computed analyzer diagnostics for the given analysis scope.
return _analysisResultBuilder.GetDiagnostics(analysisScope, getLocalDiagnostics: true, getNonLocalDiagnostics: false);
}
catch (Exception e) when (FatalError.ReportUnlessCanceled(e))
{
throw ExceptionUtilities.Unreachable;
}
}