internal static bool IsAnalyzerSuppressed(this CompilationOptions compilationOptions, DiagnosticDescriptor descriptor) { switch (descriptor.GetEffectiveSeverity(compilationOptions)) { case ReportDiagnostic.Suppress: return(true); case ReportDiagnostic.Default: throw new InvalidOperationException("This should be unreachable."); default: return(false); } }
internal ReportDiagnostic GetEffectiveSeverity(DiagnosticDescriptor descriptor, CompilationOptions compilationOptions) { ReportDiagnostic reportDiagnostic = descriptor.GetEffectiveSeverity(compilationOptions); if (reportDiagnostic == ReportDiagnostic.Suppress) { return(reportDiagnostic); } if (reportDiagnostic.ToDiagnosticSeverity() < SeverityLevel) { return(ReportDiagnostic.Suppress); } return(reportDiagnostic); }
/// <summary> /// Gets project-level effective severity of the given <paramref name="descriptor"/> accounting for severity configurations from both the following sources: /// 1. Compilation options from ruleset file, if any, and command line options such as /nowarn, /warnaserror, etc. /// 2. Analyzer config documents at the project root directory or in ancestor directories. /// </summary> public static ReportDiagnostic GetEffectiveSeverity(this DiagnosticDescriptor descriptor, CompilationOptions compilationOptions, ImmutableDictionary <string, ReportDiagnostic> analyzerConfigSpecificDiagnosticOptions) { var effectiveSeverity = descriptor.GetEffectiveSeverity(compilationOptions); // Apply analyzer config options on top of compilation options, unless the diagnostic is explicitly suppressed by compilation options (/nowarn). var isSuppressedByCompilationOptions = effectiveSeverity == ReportDiagnostic.Suppress && compilationOptions.SpecificDiagnosticOptions.ContainsKey(descriptor.Id); if (!isSuppressedByCompilationOptions && analyzerConfigSpecificDiagnosticOptions.TryGetValue(descriptor.Id, out var reportDiagnostic)) { effectiveSeverity = reportDiagnostic; } return(effectiveSeverity); }
/// <summary> /// Gets project-level effective severity of the given <paramref name="descriptor"/> accounting for severity configurations from both the following sources: /// 1. Compilation options from ruleset file, if any, and command line options such as /nowarn, /warnaserror, etc. /// 2. Analyzer config documents at the project root directory or in ancestor directories. /// </summary> public static ReportDiagnostic GetEffectiveSeverity(this DiagnosticDescriptor descriptor, CompilationOptions compilationOptions, AnalyzerConfigOptionsResult?analyzerConfigOptions) { var effectiveSeverity = descriptor.GetEffectiveSeverity(compilationOptions); // Apply analyzer config options on top of compilation options. // Note that they override any diagnostic settings from compilation options (/nowarn, /warnaserror). if (analyzerConfigOptions.HasValue) { if (analyzerConfigOptions.Value.TreeOptions.TryGetValue(descriptor.Id, out var reportDiagnostic) && reportDiagnostic != ReportDiagnostic.Default || TryGetSeverityFromBulkConfiguration(descriptor, analyzerConfigOptions.Value, out reportDiagnostic)) { Debug.Assert(reportDiagnostic != ReportDiagnostic.Default); effectiveSeverity = reportDiagnostic; } } return(effectiveSeverity); }
/// <summary> /// Gets project-level effective severity of the given <paramref name="descriptor"/> accounting for severity configurations from both the following sources: /// 1. Compilation options from ruleset file, if any, and command line options such as /nowarn, /warnaserror, etc. /// 2. Analyzer config documents at the project root directory or in ancestor directories. /// </summary> public static ReportDiagnostic GetEffectiveSeverity(this DiagnosticDescriptor descriptor, CompilationOptions compilationOptions, AnalyzerConfigOptionsResult?analyzerConfigOptions) { var effectiveSeverity = descriptor.GetEffectiveSeverity(compilationOptions); // Apply analyzer config options, unless configured with a non-default value in compilation options. // Note that compilation options (/nowarn, /warnaserror) override analyzer config options. if (analyzerConfigOptions.HasValue && (!compilationOptions.SpecificDiagnosticOptions.TryGetValue(descriptor.Id, out var reportDiagnostic) || reportDiagnostic == ReportDiagnostic.Default)) { if (analyzerConfigOptions.Value.TreeOptions.TryGetValue(descriptor.Id, out reportDiagnostic) && reportDiagnostic != ReportDiagnostic.Default || TryGetSeverityFromBulkConfiguration(descriptor, analyzerConfigOptions.Value, out reportDiagnostic)) { Debug.Assert(reportDiagnostic != ReportDiagnostic.Default); effectiveSeverity = reportDiagnostic; } } return(effectiveSeverity); }
private static bool IsEnabled(CompilationOptions options, DiagnosticDescriptor diagnosticDescriptor) => diagnosticDescriptor.GetEffectiveSeverity(options) != ReportDiagnostic.Suppress;
private static ReportDiagnostic GetEffectiveSeverity(DiagnosticDescriptor descriptor, CompilationOptions options) { return(options == null ? MapSeverityToReport(descriptor.DefaultSeverity) : descriptor.GetEffectiveSeverity(options)); }
private static void TestEffectiveSeverity( DiagnosticSeverity defaultSeverity, ReportDiagnostic expectedEffectiveSeverity, Dictionary<string, ReportDiagnostic> specificOptions = null, ReportDiagnostic generalOption = ReportDiagnostic.Default, bool isEnabledByDefault = true) { specificOptions = specificOptions ?? new Dictionary<string, ReportDiagnostic>(); var options = new CSharpCompilationOptions(OutputKind.ConsoleApplication, generalDiagnosticOption: generalOption, specificDiagnosticOptions: specificOptions); var descriptor = new DiagnosticDescriptor(id: "Test0001", title: "Test0001", messageFormat: "Test0001", category: "Test0001", defaultSeverity: defaultSeverity, isEnabledByDefault: isEnabledByDefault); var effectiveSeverity = descriptor.GetEffectiveSeverity(options); Assert.Equal(expectedEffectiveSeverity, effectiveSeverity); }
private static ReportDiagnostic GetEffectiveSeverity(DiagnosticDescriptor descriptor, CompilationOptions options) { return options == null ? MapSeverityToReport(descriptor.DefaultSeverity) : descriptor.GetEffectiveSeverity(options); }
public static ReportDiagnostic GetEffectiveSeverity(this DiagnosticDescriptor descriptor, CompilationOptions options) { return(options == null ? descriptor.DefaultSeverity.ToReportDiagnostic() : descriptor.GetEffectiveSeverity(options)); }
/// <summary> /// Gets project-level effective severity of the given <paramref name="descriptor"/> accounting for severity configurations from both the following sources: /// 1. Compilation options from ruleset file, if any, and command line options such as /nowarn, /warnaserror, etc. /// 2. Analyzer config documents at the project root directory or in ancestor directories. /// </summary> public static ReportDiagnostic GetEffectiveSeverity(this DiagnosticDescriptor descriptor, Project project) => descriptor.GetEffectiveSeverity(project.CompilationOptions, project.GetAnalyzerConfigSpecialDiagnosticOptions());