Skip to content

Commit

Permalink
Add support for AnalysisMode
Browse files Browse the repository at this point in the history
Closes dotnet#4100

**Proposal**
This new property would allow users to switch between following 3 analysis modes:

1. **Default mode**: Analyzers with enabled by default and severity values that we ship today. It will continue to be the default analysis mode.
2. **OptIn or AllDisabled or Conservative mode**: All analyzers are disabled by default. Only the ones that user explicitly enables in their editorconfig/ruleset will be enabled with the explicitly configured severity.
3. **OptOut or AllEnabled or Aggressive mode**: Majority of analyzers get enabled as warnings, similar to the current FxCop analyzers package. We still want some security rules and no longer recommended rules to be disabled, but for all practical purposes, we can consider this to be the most aggressive analysis mode for the package.

The property should work amicably with AnalysisLevel, i.e. if user sets AnalysisLevel to 5.0, the aggressive, all-enabled mode only turns on rules shipped in or before 5.0 to warnings. Rules shipping after 5.0 will still be turned off by default.

**Targeted scenarios**

1. **User requests**: We already have a few user requests to enable aggressive analysis mode, similar to FxCop analyzers:
   1. dotnet#4100: This was requested from a customer from Jon’s blog.
   2. dotnet/roslyn#47046: This was requested from a customer trying out our bulk configuration editorconfig functionality to switch NetAnalyzers to be as aggressive as FxCopAnalyzers
This feature enables users who are super passionate about analyzers and code quality to easily switch to an opt-out, aggressive, analysis mode, which seems fantastic to me! At the same time, it helps users who like complete opt-in model with explicit control over each rule that is enabled in their configuration file.

2. **Path to deprecation for FxCopAnalyzers package**: Currently, we ship identical CA rules in FxCopAnalyzers and NetAnalyzers package/SDK. The only difference is default severity and enabled by default values for rules. Adding this AnalysisMode knob means existing FxCop analyzer customers can easily migrate to the .NET SDK based analyzers and get equivalent functionality and this allows us to deprecate this package soon. This will make the overall code quality analyzers story much cleaner from an end user perspective.
  • Loading branch information
mavasani committed Aug 31, 2020
1 parent 12b559b commit 9e8b60a
Show file tree
Hide file tree
Showing 36 changed files with 224 additions and 84 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,8 @@ public sealed class AvoidExcessiveParametersOnGenericTypes : DiagnosticAnalyzer
s_localizableDescription,
isPortedFxCopRule: true,
isDataflowRule: false,
isEnabledByDefaultInFxCopAnalyzers: false);
isEnabledByDefaultInFxCopAnalyzers: false,
isEnabledByDefaultInAggressiveMode: false);

public override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics => ImmutableArray.Create(Rule);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,8 @@ public sealed class AvoidOutParameters : DiagnosticAnalyzer
description: s_localizableDescription,
isPortedFxCopRule: true,
isDataflowRule: false,
isEnabledByDefaultInFxCopAnalyzers: false);
isEnabledByDefaultInFxCopAnalyzers: false,
isEnabledByDefaultInAggressiveMode: false);

public override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics => ImmutableArray.Create(Rule);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,8 @@ public class CollectionPropertiesShouldBeReadOnlyAnalyzer : DiagnosticAnalyzer
RuleLevel.Disabled, // Guidance needs to be improved to be more clear
description: s_localizableDescription,
isPortedFxCopRule: true,
isDataflowRule: false);
isDataflowRule: false,
isEnabledByDefaultInAggressiveMode: false);

public override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics => ImmutableArray.Create(Rule);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,8 @@ public sealed class DoNotExposeGenericLists : DiagnosticAnalyzer
description: s_localizableDescription,
isPortedFxCopRule: true,
isDataflowRule: false,
isEnabledByDefaultInFxCopAnalyzers: false);
isEnabledByDefaultInFxCopAnalyzers: false,
isEnabledByDefaultInAggressiveMode: false);

public override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics => ImmutableArray.Create(Rule);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,8 @@ public sealed class DoNotNameEnumValuesReserved : DiagnosticAnalyzer
description: s_localizableDescription,
isPortedFxCopRule: true,
isDataflowRule: false,
isEnabledByDefaultInFxCopAnalyzers: false);
isEnabledByDefaultInFxCopAnalyzers: false,
isEnabledByDefaultInAggressiveMode: false);

public override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics => ImmutableArray.Create(Rule);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,8 @@ public sealed class DoNotOverloadOperatorEqualsOnReferenceTypes : DiagnosticAnal
description: s_localizableDescription,
isPortedFxCopRule: true,
isDataflowRule: false,
isEnabledByDefaultInFxCopAnalyzers: false);
isEnabledByDefaultInFxCopAnalyzers: false,
isEnabledByDefaultInAggressiveMode: false);

public override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics => ImmutableArray.Create(Rule);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,8 @@ public sealed class DoNotPassTypesByReference : DiagnosticAnalyzer
description: s_localizableDescription,
isPortedFxCopRule: true,
isDataflowRule: false,
isEnabledByDefaultInFxCopAnalyzers: false);
isEnabledByDefaultInFxCopAnalyzers: false,
isEnabledByDefaultInAggressiveMode: false);

public override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics => ImmutableArray.Create(Rule);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,8 @@ public sealed class InterfaceMethodsShouldBeCallableByChildTypesAnalyzer : Diagn
description: s_localizableDescription,
isPortedFxCopRule: true,
isDataflowRule: false,
isEnabledByDefaultInFxCopAnalyzers: false);
isEnabledByDefaultInFxCopAnalyzers: false,
isEnabledByDefaultInAggressiveMode: false);

public sealed override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics => ImmutableArray.Create(Rule);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,8 @@ public sealed class MarkAssembliesWithComVisibleAnalyzer : DiagnosticAnalyzer
description: s_localizableDescription,
isPortedFxCopRule: true,
isDataflowRule: false,
isEnabledByDefaultInFxCopAnalyzers: false);
isEnabledByDefaultInFxCopAnalyzers: false,
isEnabledByDefaultInAggressiveMode: false);

internal static readonly DiagnosticDescriptor RuleAddComVisible = DiagnosticDescriptorHelper.Create(RuleId,
s_localizableTitle,
Expand All @@ -37,7 +38,8 @@ public sealed class MarkAssembliesWithComVisibleAnalyzer : DiagnosticAnalyzer
description: s_localizableDescription,
isPortedFxCopRule: true,
isDataflowRule: false,
isEnabledByDefaultInFxCopAnalyzers: false);
isEnabledByDefaultInFxCopAnalyzers: false,
isEnabledByDefaultInAggressiveMode: false);

public override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics => ImmutableArray.Create(RuleChangeComVisible, RuleAddComVisible);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,8 @@ public sealed class MovePInvokesToNativeMethodsClassAnalyzer : DiagnosticAnalyze
description: s_localizableDescription,
isPortedFxCopRule: true,
isDataflowRule: false,
isEnabledByDefaultInFxCopAnalyzers: false);
isEnabledByDefaultInFxCopAnalyzers: false,
isEnabledByDefaultInAggressiveMode: false);

private const string NativeMethodsText = "NativeMethods";
private const string SafeNativeMethodsText = "SafeNativeMethods";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,8 @@ public sealed class UseGenericEventHandlerInstancesAnalyzer : DiagnosticAnalyzer
description: s_localizableDescriptionForDelegate,
isPortedFxCopRule: true,
isDataflowRule: false,
isEnabledByDefaultInFxCopAnalyzers: false);
isEnabledByDefaultInFxCopAnalyzers: false,
isEnabledByDefaultInAggressiveMode: false);

internal static DiagnosticDescriptor RuleForEvents = DiagnosticDescriptorHelper.Create(
RuleId,
Expand All @@ -52,7 +53,8 @@ public sealed class UseGenericEventHandlerInstancesAnalyzer : DiagnosticAnalyzer
description: s_localizableDescriptionForEvent,
isPortedFxCopRule: true,
isDataflowRule: false,
isEnabledByDefaultInFxCopAnalyzers: false);
isEnabledByDefaultInFxCopAnalyzers: false,
isEnabledByDefaultInAggressiveMode: false);

internal static DiagnosticDescriptor RuleForEvents2 = DiagnosticDescriptorHelper.Create(
RuleId,
Expand Down
Loading

0 comments on commit 9e8b60a

Please sign in to comment.