protected static CodeStyleOption2 <ParenthesesPreference> GetLanguageOption(AnalyzerOptionsProvider options, PrecedenceKind precedenceKind)
 => precedenceKind switch
 {
 protected abstract CodeStyleOption2 <UnusedValuePreference> GetUnusedValueAssignmentOption(AnalyzerOptionsProvider provider);
示例#3
0
 protected abstract CodeStyleOption2 <string> GetCodeStyleOption(AnalyzerOptionsProvider options);
 protected abstract CodeStyleOption2 <TOptionValue> GetCodeStyleOption(AnalyzerOptionsProvider provider);
示例#5
0
    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;
示例#7
0
 protected override CodeStyleOption2 <string> GetCodeStyleOption(AnalyzerOptionsProvider options)
 => ((CSharpAnalyzerOptionsProvider)options).PreferredModifierOrder;
 protected override CodeStyleOption2 <UnusedValuePreference> GetUnusedValueAssignmentOption(AnalyzerOptionsProvider provider)
 => ((CSharpAnalyzerOptionsProvider)provider).UnusedValueAssignment;
示例#9
0
 internal static CodeStyleOption2 <ExpressionBodyPreference> GetCodeStyleOption(AnalyzerOptionsProvider provider)
 => ((CSharpAnalyzerOptionsProvider)provider).PreferExpressionBodiedLambdas;