protected static CodeStyleOption2 <ParenthesesPreference> GetLanguageOption(AnalyzerOptionsProvider options, PrecedenceKind precedenceKind) => precedenceKind switch {
protected abstract CodeStyleOption2 <UnusedValuePreference> GetUnusedValueAssignmentOption(AnalyzerOptionsProvider provider);
protected abstract CodeStyleOption2 <string> GetCodeStyleOption(AnalyzerOptionsProvider options);
protected abstract CodeStyleOption2 <TOptionValue> GetCodeStyleOption(AnalyzerOptionsProvider provider);
protected async Task <Diagnostic[]> GetSortedDiagnosticsFromDocumentsAsync(AnalyzerVerificationContext context, DiagnosticAnalyzer analyzer, Document[] documents, params DiagnosticResult[] expected) { var projects = new HashSet <Project>(); foreach (var document in documents) { projects.Add(document.Project); } var diagnostics = new List <Diagnostic>(); foreach (var project in projects) { var analyzers = ImmutableArray.Create(analyzer) .AddRange(GetRelatedAnalyzers(analyzer)); var compilation = await project.GetCompilationAsync(); Assert.NotNull(compilation); var optionsProvider = new AnalyzerOptionsProvider(context.Options); var options = new AnalyzerOptions(ImmutableArray <AdditionalText> .Empty, optionsProvider); var analyzerOptions = new CompilationWithAnalyzersOptions(options, (e, _, _) => throw e, true, true, true); var compilationOptions = new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary, reportSuppressedDiagnostics: true); var specificDiagnosticOptions = compilationOptions.SpecificDiagnosticOptions; // Force all tested diagnostics to be enabled foreach (var descriptor in analyzer.SupportedDiagnostics) { specificDiagnosticOptions = specificDiagnosticOptions.SetItem(descriptor.Id, ReportDiagnostic.Info); } var compilationWithAnalyzers = compilation .WithOptions(compilationOptions.WithSpecificDiagnosticOptions(specificDiagnosticOptions)) .WithAnalyzers(analyzers, analyzerOptions); var allDiagnostics = await compilationWithAnalyzers.GetAllDiagnosticsAsync(); var errors = allDiagnostics.Where(d => d.Severity == DiagnosticSeverity.Error).ToList(); foreach (var error in errors) { Assert.True(false, $"Line {error.Location.GetLineSpan().StartLinePosition.Line}: {error.GetMessage()}"); } var diags = allDiagnostics .Except(errors) .Where(d => d.Location.IsInSource); //only keep diagnostics related to a source location foreach (var diag in diags) { // We should not hit this anymore, but keep in case we change the previous filter if (diag.Location == Location.None || diag.Location.IsInMetadata) { diagnostics.Add(diag); } else { foreach (var document in documents) { var tree = await document.GetSyntaxTreeAsync(); if (tree == diag.Location.SourceTree) { diagnostics.Add(diag); } } } } } var results = SortDiagnostics(FilterDiagnostics(diagnostics, context.Filters)); diagnostics.Clear(); return(results); }
protected override CodeStyleOption2 <ExpressionBodyPreference> GetCodeStyleOption(AnalyzerOptionsProvider provider) => ((CSharpAnalyzerOptionsProvider)provider).PreferExpressionBodiedLambdas;
protected override CodeStyleOption2 <string> GetCodeStyleOption(AnalyzerOptionsProvider options) => ((CSharpAnalyzerOptionsProvider)options).PreferredModifierOrder;
protected override CodeStyleOption2 <UnusedValuePreference> GetUnusedValueAssignmentOption(AnalyzerOptionsProvider provider) => ((CSharpAnalyzerOptionsProvider)provider).UnusedValueAssignment;
internal static CodeStyleOption2 <ExpressionBodyPreference> GetCodeStyleOption(AnalyzerOptionsProvider provider) => ((CSharpAnalyzerOptionsProvider)provider).PreferExpressionBodiedLambdas;