private async Task <IEnumerable <Diagnostic> > ComputeProjectDiagnosticAnalyzerDiagnosticsAsync( Project project, ProjectDiagnosticAnalyzer analyzer, Compilation compilationOpt, CancellationToken cancellationToken) { cancellationToken.ThrowIfCancellationRequested(); try { var diagnostics = (await analyzer.AnalyzeProjectAsync(project, cancellationToken).ConfigureAwait(false)).NullToEmpty(); // Apply filtering from compilation options (source suppressions, ruleset, etc.) if (compilationOpt != null) { diagnostics = CompilationWithAnalyzers.GetEffectiveDiagnostics(diagnostics, compilationOpt).ToImmutableArrayOrEmpty(); } #if DEBUG // since all ProjectDiagnosticAnalyzers are from internal users, we only do debug check. also this can be expensive at runtime // since it requires await. if we find any offender through NFW, we should be able to fix those since all those should // from intern teams. await VerifyDiagnosticLocationsAsync(diagnostics, project, cancellationToken).ConfigureAwait(false); #endif return(diagnostics); } catch (Exception e) when(!IsCanceled(e, cancellationToken)) { OnAnalyzerException(analyzer, project.Id, compilationOpt, e); return(ImmutableArray <Diagnostic> .Empty); } }
private Task <IEnumerable <Diagnostic> > ComputeProjectDiagnosticAnalyzerDiagnosticsAsync( Project project, ProjectDiagnosticAnalyzer analyzer, Compilation compilationOpt, CancellationToken cancellationToken) { return(_owner.Owner.ComputeProjectDiagnosticAnalyzerDiagnosticsAsync(project, analyzer, compilationOpt, _owner.DiagnosticLogAggregator, cancellationToken)); }
private Task <IEnumerable <Diagnostic> > ComputeProjectDiagnosticAnalyzerDiagnosticsAsync( Project project, ProjectDiagnosticAnalyzer analyzer, Compilation?compilation, CancellationToken cancellationToken) { return(AnalyzerService.ComputeProjectDiagnosticAnalyzerDiagnosticsAsync(project, analyzer, compilation, DiagnosticLogAggregator, cancellationToken)); }
private async Task GetProjectDiagnosticsWorkerAsync(ProjectDiagnosticAnalyzer analyzer, List <Diagnostic> diagnostics) { try { await analyzer.AnalyzeProjectAsync(_project, diagnostics.Add, _cancellationToken).ConfigureAwait(false); } catch (Exception e) when(!IsCanceled(e, _cancellationToken)) { var compilation = await _project.GetCompilationAsync(_cancellationToken).ConfigureAwait(false); OnAnalyzerException(e, analyzer, compilation); } }
private static int GetPriority(StateSet state) { // compiler gets highest priority if (state.Analyzer.IsCompilerAnalyzer()) { return(BuiltInCompilerPriority); } return(state.Analyzer switch { FileContentLoadAnalyzer _ => FileContentLoadAnalyzerPriority, DocumentDiagnosticAnalyzer analyzer => Math.Max(0, analyzer.Priority), ProjectDiagnosticAnalyzer analyzer => Math.Max(0, analyzer.Priority), _ => RegularDiagnosticAnalyzerPriority, });
private async Task <IEnumerable <Diagnostic> > ComputeProjectDiagnosticAnalyzerDiagnosticsAsync( Project project, ProjectDiagnosticAnalyzer analyzer, Compilation compilationOpt, CancellationToken cancellationToken) { using (var pooledObject = SharedPools.Default <List <Diagnostic> >().GetPooledObject()) { var diagnostics = pooledObject.Object; cancellationToken.ThrowIfCancellationRequested(); try { await analyzer.AnalyzeProjectAsync(project, diagnostics.Add, cancellationToken).ConfigureAwait(false); // REVIEW: V1 doesn't convert diagnostics to effective diagnostics. not sure why. return(compilationOpt == null?diagnostics.ToImmutableArrayOrEmpty() : CompilationWithAnalyzers.GetEffectiveDiagnostics(diagnostics, compilationOpt)); } catch (Exception e) when(!IsCanceled(e, cancellationToken)) { OnAnalyzerException(analyzer, project.Id, compilationOpt, e); return(ImmutableArray <Diagnostic> .Empty); } } }
private async Task <IEnumerable <Diagnostic> > ComputeProjectDiagnosticAnalyzerDiagnosticsAsync( Project project, ProjectDiagnosticAnalyzer analyzer, Compilation compilationOpt, CancellationToken cancellationToken) { cancellationToken.ThrowIfCancellationRequested(); try { var diagnostics = await analyzer.AnalyzeProjectAsync(project, cancellationToken).ConfigureAwait(false); // Apply filtering from compilation options (source suppressions, ruleset, etc.) if (compilationOpt != null) { diagnostics = CompilationWithAnalyzers.GetEffectiveDiagnostics(diagnostics, compilationOpt).ToImmutableArrayOrEmpty(); } return(diagnostics); } catch (Exception e) when(!IsCanceled(e, cancellationToken)) { OnAnalyzerException(analyzer, project.Id, compilationOpt, e); return(ImmutableArray <Diagnostic> .Empty); } }
private async Task GetProjectDiagnosticsWorkerAsync(ProjectDiagnosticAnalyzer analyzer, List<Diagnostic> diagnostics) { try { await analyzer.AnalyzeProjectAsync(_project, diagnostics.Add, _cancellationToken).ConfigureAwait(false); } catch (Exception e) when (!IsCanceled(e, _cancellationToken)) { var compilation = await _project.GetCompilationAsync(_cancellationToken).ConfigureAwait(false); OnAnalyzerException(e, analyzer, compilation); } }
private async Task<IEnumerable<Diagnostic>> ComputeProjectDiagnosticAnalyzerDiagnosticsAsync( Project project, ProjectDiagnosticAnalyzer analyzer, Compilation compilationOpt, CancellationToken cancellationToken) { using (var pooledObject = SharedPools.Default<List<Diagnostic>>().GetPooledObject()) { var diagnostics = pooledObject.Object; cancellationToken.ThrowIfCancellationRequested(); try { await analyzer.AnalyzeProjectAsync(project, diagnostics.Add, cancellationToken).ConfigureAwait(false); // REVIEW: V1 doesn't convert diagnostics to effective diagnostics. not sure why. return compilationOpt == null ? diagnostics.ToImmutableArrayOrEmpty() : CompilationWithAnalyzers.GetEffectiveDiagnostics(diagnostics, compilationOpt); } catch (Exception e) when (!IsCanceled(e, cancellationToken)) { OnAnalyzerException(analyzer, project.Id, compilationOpt, e); return ImmutableArray<Diagnostic>.Empty; } } }
private async Task<IEnumerable<Diagnostic>> ComputeProjectDiagnosticAnalyzerDiagnosticsAsync( Project project, ProjectDiagnosticAnalyzer analyzer, Compilation compilationOpt, CancellationToken cancellationToken) { cancellationToken.ThrowIfCancellationRequested(); try { var diagnostics = await analyzer.AnalyzeProjectAsync(project, cancellationToken).ConfigureAwait(false); // Apply filtering from compilation options (source suppressions, ruleset, etc.) if (compilationOpt != null) { diagnostics = CompilationWithAnalyzers.GetEffectiveDiagnostics(diagnostics, compilationOpt).ToImmutableArrayOrEmpty(); } return diagnostics; } catch (Exception e) when (!IsCanceled(e, cancellationToken)) { OnAnalyzerException(analyzer, project.Id, compilationOpt, e); return ImmutableArray<Diagnostic>.Empty; } }