diff --git a/src/Analyzers/CSharp/Analyzers/RemoveUnnecessaryDiscardDesignation/CSharpRemoveUnnecessaryDiscardDesignationDiagnosticAnalyzer.cs b/src/Analyzers/CSharp/Analyzers/RemoveUnnecessaryDiscardDesignation/CSharpRemoveUnnecessaryDiscardDesignationDiagnosticAnalyzer.cs
index 5f16decccd4c7..cc0345a5e0ff4 100644
--- a/src/Analyzers/CSharp/Analyzers/RemoveUnnecessaryDiscardDesignation/CSharpRemoveUnnecessaryDiscardDesignationDiagnosticAnalyzer.cs
+++ b/src/Analyzers/CSharp/Analyzers/RemoveUnnecessaryDiscardDesignation/CSharpRemoveUnnecessaryDiscardDesignationDiagnosticAnalyzer.cs
@@ -22,7 +22,6 @@ public CSharpRemoveUnnecessaryDiscardDesignationDiagnosticAnalyzer()
: base(IDEDiagnosticIds.RemoveUnnecessaryDiscardDesignationDiagnosticId,
EnforceOnBuildValues.RemoveUnnecessaryDiscardDesignation,
option: null,
- fadingOption: null,
new LocalizableResourceString(nameof(CSharpAnalyzersResources.Remove_unnessary_discard), CSharpAnalyzersResources.ResourceManager, typeof(CSharpAnalyzersResources)),
new LocalizableResourceString(nameof(CSharpAnalyzersResources.Discard_can_be_removed), CSharpAnalyzersResources.ResourceManager, typeof(CSharpAnalyzersResources)))
{
diff --git a/src/Analyzers/CSharp/Analyzers/RemoveUnnecessaryLambdaExpression/CSharpRemoveUnnecessaryLambdaExpressionDiagnosticAnalyzer.cs b/src/Analyzers/CSharp/Analyzers/RemoveUnnecessaryLambdaExpression/CSharpRemoveUnnecessaryLambdaExpressionDiagnosticAnalyzer.cs
index 09b8536d26371..d9bcdbeefe068 100644
--- a/src/Analyzers/CSharp/Analyzers/RemoveUnnecessaryLambdaExpression/CSharpRemoveUnnecessaryLambdaExpressionDiagnosticAnalyzer.cs
+++ b/src/Analyzers/CSharp/Analyzers/RemoveUnnecessaryLambdaExpression/CSharpRemoveUnnecessaryLambdaExpressionDiagnosticAnalyzer.cs
@@ -30,7 +30,6 @@ internal sealed class CSharpRemoveUnnecessaryLambdaExpressionDiagnosticAnalyzer(
IDEDiagnosticIds.RemoveUnnecessaryLambdaExpressionDiagnosticId,
EnforceOnBuildValues.RemoveUnnecessaryLambdaExpression,
CSharpCodeStyleOptions.PreferMethodGroupConversion,
- fadingOption: null,
new LocalizableResourceString(nameof(CSharpAnalyzersResources.Remove_unnecessary_lambda_expression), CSharpAnalyzersResources.ResourceManager, typeof(CSharpAnalyzersResources)),
new LocalizableResourceString(nameof(CSharpAnalyzersResources.Lambda_expression_can_be_removed), CSharpAnalyzersResources.ResourceManager, typeof(CSharpAnalyzersResources)))
{
diff --git a/src/Analyzers/CSharp/Analyzers/RemoveUnnecessaryNullableDirective/CSharpRemoveRedundantNullableDirectiveDiagnosticAnalyzer.cs b/src/Analyzers/CSharp/Analyzers/RemoveUnnecessaryNullableDirective/CSharpRemoveRedundantNullableDirectiveDiagnosticAnalyzer.cs
index 01f60a7845fc8..6ec3c6db3f64a 100644
--- a/src/Analyzers/CSharp/Analyzers/RemoveUnnecessaryNullableDirective/CSharpRemoveRedundantNullableDirectiveDiagnosticAnalyzer.cs
+++ b/src/Analyzers/CSharp/Analyzers/RemoveUnnecessaryNullableDirective/CSharpRemoveRedundantNullableDirectiveDiagnosticAnalyzer.cs
@@ -20,7 +20,6 @@ public CSharpRemoveRedundantNullableDirectiveDiagnosticAnalyzer()
IDEDiagnosticIds.RemoveRedundantNullableDirectiveDiagnosticId,
EnforceOnBuildValues.RemoveRedundantNullableDirective,
option: null,
- fadingOption: null,
new LocalizableResourceString(nameof(CSharpAnalyzersResources.Remove_redundant_nullable_directive), CSharpAnalyzersResources.ResourceManager, typeof(CSharpAnalyzersResources)),
new LocalizableResourceString(nameof(CSharpAnalyzersResources.Nullable_directive_is_redundant), CSharpAnalyzersResources.ResourceManager, typeof(CSharpAnalyzersResources)))
{
diff --git a/src/Analyzers/CSharp/Analyzers/RemoveUnnecessaryNullableDirective/CSharpRemoveUnnecessaryNullableDirectiveDiagnosticAnalyzer.cs b/src/Analyzers/CSharp/Analyzers/RemoveUnnecessaryNullableDirective/CSharpRemoveUnnecessaryNullableDirectiveDiagnosticAnalyzer.cs
index 544731492afc0..75c1c100b55bc 100644
--- a/src/Analyzers/CSharp/Analyzers/RemoveUnnecessaryNullableDirective/CSharpRemoveUnnecessaryNullableDirectiveDiagnosticAnalyzer.cs
+++ b/src/Analyzers/CSharp/Analyzers/RemoveUnnecessaryNullableDirective/CSharpRemoveUnnecessaryNullableDirectiveDiagnosticAnalyzer.cs
@@ -23,7 +23,6 @@ internal sealed class CSharpRemoveUnnecessaryNullableDirectiveDiagnosticAnalyzer
: AbstractBuiltInUnnecessaryCodeStyleDiagnosticAnalyzer(IDEDiagnosticIds.RemoveUnnecessaryNullableDirectiveDiagnosticId,
EnforceOnBuildValues.RemoveUnnecessaryNullableDirective,
option: null,
- fadingOption: null,
new LocalizableResourceString(nameof(CSharpAnalyzersResources.Remove_unnecessary_nullable_directive), CSharpAnalyzersResources.ResourceManager, typeof(CSharpAnalyzersResources)),
new LocalizableResourceString(nameof(CSharpAnalyzersResources.Nullable_directive_is_unnecessary), CSharpAnalyzersResources.ResourceManager, typeof(CSharpAnalyzersResources)))
{
diff --git a/src/Analyzers/CSharp/Analyzers/RemoveUnnecessarySuppressions/CSharpRemoveUnnecessaryNullableWarningSuppressionsDiagnosticAnalyzer.cs b/src/Analyzers/CSharp/Analyzers/RemoveUnnecessarySuppressions/CSharpRemoveUnnecessaryNullableWarningSuppressionsDiagnosticAnalyzer.cs
index 36810dbace4f3..9a1c4b8afb3af 100644
--- a/src/Analyzers/CSharp/Analyzers/RemoveUnnecessarySuppressions/CSharpRemoveUnnecessaryNullableWarningSuppressionsDiagnosticAnalyzer.cs
+++ b/src/Analyzers/CSharp/Analyzers/RemoveUnnecessarySuppressions/CSharpRemoveUnnecessaryNullableWarningSuppressionsDiagnosticAnalyzer.cs
@@ -15,7 +15,6 @@ internal sealed partial class CSharpRemoveUnnecessaryNullableWarningSuppressions
IDEDiagnosticIds.RemoveUnnecessaryNullableWarningSuppression,
EnforceOnBuildValues.RemoveUnnecessaryNullableWarningSuppression,
option: null,
- fadingOption: null,
new LocalizableResourceString(nameof(AnalyzersResources.Remove_unnecessary_suppression), AnalyzersResources.ResourceManager, typeof(AnalyzersResources)),
new LocalizableResourceString(nameof(AnalyzersResources.Suppression_is_unnecessary), AnalyzersResources.ResourceManager, typeof(CompilerExtensionsResources)))
{
diff --git a/src/Analyzers/CSharp/Analyzers/RemoveUnnecessaryUnsafeModifier/CSharpRemoveUnnecessaryUnsafeModifierDiagnosticAnalyzer.cs b/src/Analyzers/CSharp/Analyzers/RemoveUnnecessaryUnsafeModifier/CSharpRemoveUnnecessaryUnsafeModifierDiagnosticAnalyzer.cs
index e81c8d06efefd..76892f35e35b2 100644
--- a/src/Analyzers/CSharp/Analyzers/RemoveUnnecessaryUnsafeModifier/CSharpRemoveUnnecessaryUnsafeModifierDiagnosticAnalyzer.cs
+++ b/src/Analyzers/CSharp/Analyzers/RemoveUnnecessaryUnsafeModifier/CSharpRemoveUnnecessaryUnsafeModifierDiagnosticAnalyzer.cs
@@ -14,7 +14,6 @@ internal sealed partial class CSharpRemoveUnnecessaryUnsafeModifierDiagnosticAna
IDEDiagnosticIds.RemoveUnnecessaryUnsafeModifier,
EnforceOnBuildValues.RemoveUnnecessaryUnsafeModifier,
option: null,
- fadingOption: null,
new LocalizableResourceString(nameof(AnalyzersResources.Remove_unnecessary_unsafe_modifier), AnalyzersResources.ResourceManager, typeof(AnalyzersResources)),
new LocalizableResourceString(nameof(AnalyzersResources.unsafe_modifier_is_unnecessary), AnalyzersResources.ResourceManager, typeof(CompilerExtensionsResources)))
{
diff --git a/src/Analyzers/CSharp/Analyzers/RemoveUnreachableCode/CSharpRemoveUnreachableCodeDiagnosticAnalyzer.cs b/src/Analyzers/CSharp/Analyzers/RemoveUnreachableCode/CSharpRemoveUnreachableCodeDiagnosticAnalyzer.cs
index 2b5b01f7f4dcc..743b31ce1eb41 100644
--- a/src/Analyzers/CSharp/Analyzers/RemoveUnreachableCode/CSharpRemoveUnreachableCodeDiagnosticAnalyzer.cs
+++ b/src/Analyzers/CSharp/Analyzers/RemoveUnreachableCode/CSharpRemoveUnreachableCodeDiagnosticAnalyzer.cs
@@ -24,7 +24,6 @@ public CSharpRemoveUnreachableCodeDiagnosticAnalyzer()
: base(IDEDiagnosticIds.RemoveUnreachableCodeDiagnosticId,
EnforceOnBuildValues.RemoveUnreachableCode,
option: null,
- fadingOption: FadingOptions.FadeOutUnreachableCode,
new LocalizableResourceString(nameof(CSharpAnalyzersResources.Unreachable_code_detected), CSharpAnalyzersResources.ResourceManager, typeof(CSharpAnalyzersResources)),
configurable: false)
{
diff --git a/src/Analyzers/CSharp/Analyzers/UseDefaultLiteral/CSharpUseDefaultLiteralDiagnosticAnalyzer.cs b/src/Analyzers/CSharp/Analyzers/UseDefaultLiteral/CSharpUseDefaultLiteralDiagnosticAnalyzer.cs
index 0c146cd0ca9c7..e521c46d4913c 100644
--- a/src/Analyzers/CSharp/Analyzers/UseDefaultLiteral/CSharpUseDefaultLiteralDiagnosticAnalyzer.cs
+++ b/src/Analyzers/CSharp/Analyzers/UseDefaultLiteral/CSharpUseDefaultLiteralDiagnosticAnalyzer.cs
@@ -18,7 +18,6 @@ public CSharpUseDefaultLiteralDiagnosticAnalyzer()
: base(IDEDiagnosticIds.UseDefaultLiteralDiagnosticId,
EnforceOnBuildValues.UseDefaultLiteral,
CSharpCodeStyleOptions.PreferSimpleDefaultExpression,
- fadingOption: null,
new LocalizableResourceString(nameof(CSharpAnalyzersResources.Simplify_default_expression), CSharpAnalyzersResources.ResourceManager, typeof(CSharpAnalyzersResources)),
new LocalizableResourceString(nameof(CSharpAnalyzersResources.default_expression_can_be_simplified), CSharpAnalyzersResources.ResourceManager, typeof(CSharpAnalyzersResources)))
{
diff --git a/src/Analyzers/Core/Analyzers/AbstractBuiltInUnnecessaryCodeStyleDiagnosticAnalyzer.cs b/src/Analyzers/Core/Analyzers/AbstractBuiltInUnnecessaryCodeStyleDiagnosticAnalyzer.cs
index 922dc5ad9ff11..e7e0f673a93de 100644
--- a/src/Analyzers/Core/Analyzers/AbstractBuiltInUnnecessaryCodeStyleDiagnosticAnalyzer.cs
+++ b/src/Analyzers/Core/Analyzers/AbstractBuiltInUnnecessaryCodeStyleDiagnosticAnalyzer.cs
@@ -2,10 +2,7 @@
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
-using System.Collections.Generic;
using System.Collections.Immutable;
-using System.Linq;
-using Microsoft.CodeAnalysis.Diagnostics;
using Microsoft.CodeAnalysis.Options;
namespace Microsoft.CodeAnalysis.CodeStyle;
@@ -25,10 +22,6 @@ internal abstract class AbstractBuiltInUnnecessaryCodeStyleDiagnosticAnalyzer :
/// Code style option that can be used to configure the given .
/// , if there is no such unique option.
///
- ///
- /// Per-language fading option that can be used to configure if the diagnostic should be faded in the IDE or not.
- /// , if there is no such unique fading option.
- ///
/// Title for the diagnostic descriptor
///
/// Message for the diagnostic descriptor.
@@ -39,13 +32,11 @@ protected AbstractBuiltInUnnecessaryCodeStyleDiagnosticAnalyzer(
string diagnosticId,
EnforceOnBuild enforceOnBuild,
IOption2? option,
- PerLanguageOption2? fadingOption,
LocalizableString title,
LocalizableString? messageFormat = null,
bool configurable = true)
: base(diagnosticId, enforceOnBuild, option, title, messageFormat, isUnnecessary: true, configurable)
{
- AddDiagnosticIdToFadingOptionMapping(diagnosticId, fadingOption);
}
///
@@ -57,10 +48,6 @@ protected AbstractBuiltInUnnecessaryCodeStyleDiagnosticAnalyzer(
///
/// Set of two or more per-language options that can be used to configure the diagnostic severity of the given diagnosticId.
///
- ///
- /// Per-language fading option that can be used to configure if the diagnostic should be faded in the IDE or not.
- /// , if there is no such unique fading option.
- ///
/// Title for the diagnostic descriptor
///
/// Message for the diagnostic descriptor.
@@ -71,69 +58,35 @@ protected AbstractBuiltInUnnecessaryCodeStyleDiagnosticAnalyzer(
string diagnosticId,
EnforceOnBuild enforceOnBuild,
ImmutableHashSet options,
- PerLanguageOption2? fadingOption,
LocalizableString title,
LocalizableString? messageFormat = null,
bool configurable = true)
: base(diagnosticId, enforceOnBuild, options, title, messageFormat, isUnnecessary: true, configurable)
{
- AddDiagnosticIdToFadingOptionMapping(diagnosticId, fadingOption);
}
///
- /// Constructor for an unnecessary code style analyzer with multiple descriptors. All unnecessary descriptors will share the same
+ /// Constructor for an unnecessary code style analyzer with multiple descriptors.
///
/// Descriptors supported by this analyzer
- /// The fading option used to control descriptors that are unnecessary.
- protected AbstractBuiltInUnnecessaryCodeStyleDiagnosticAnalyzer(ImmutableArray descriptors, PerLanguageOption2 fadingOption)
+ protected AbstractBuiltInUnnecessaryCodeStyleDiagnosticAnalyzer(ImmutableArray descriptors)
: base(descriptors)
{
- foreach (var descriptor in descriptors)
- {
- if (descriptor.CustomTags.Any(t => t == WellKnownDiagnosticTags.Unnecessary))
- {
- AddDiagnosticIdToFadingOptionMapping(descriptor.Id, fadingOption);
- }
- }
}
///
/// Constructor for a code style analyzer with a multiple diagnostic descriptors with a code style options that can be used to configure each descriptor.
///
- protected AbstractBuiltInUnnecessaryCodeStyleDiagnosticAnalyzer(ImmutableArray<(DiagnosticDescriptor Descriptor, IOption2 Option)> supportedDiagnosticsWithOptions, PerLanguageOption2? fadingOption)
+ protected AbstractBuiltInUnnecessaryCodeStyleDiagnosticAnalyzer(ImmutableArray<(DiagnosticDescriptor Descriptor, IOption2 Option)> supportedDiagnosticsWithOptions)
: base(supportedDiagnosticsWithOptions)
{
- AddDescriptorsToFadingOptionMapping(supportedDiagnosticsWithOptions.Select(static item => item.Descriptor), fadingOption);
}
///
/// Constructor for a code style analyzer with multiple diagnostic descriptors with zero or more code style options that can be used to configure each descriptor.
///
- protected AbstractBuiltInUnnecessaryCodeStyleDiagnosticAnalyzer(ImmutableArray<(DiagnosticDescriptor Descriptor, ImmutableHashSet Options)> supportedDiagnosticsWithOptions, PerLanguageOption2? fadingOption)
+ protected AbstractBuiltInUnnecessaryCodeStyleDiagnosticAnalyzer(ImmutableArray<(DiagnosticDescriptor Descriptor, ImmutableHashSet Options)> supportedDiagnosticsWithOptions)
: base(supportedDiagnosticsWithOptions)
{
- AddDescriptorsToFadingOptionMapping(supportedDiagnosticsWithOptions.Select(static item => item.Descriptor), fadingOption);
- }
-
- private static void AddDiagnosticIdToFadingOptionMapping(string diagnosticId, PerLanguageOption2? fadingOption)
- {
- if (fadingOption != null)
- {
- IDEDiagnosticIdToOptionMappingHelper.AddFadingOptionMapping(diagnosticId, fadingOption);
- }
- }
-
- private static void AddDescriptorsToFadingOptionMapping(IEnumerable descriptors, PerLanguageOption2? fadingOption)
- {
- if (fadingOption != null)
- {
- foreach (var descriptor in descriptors)
- {
- if (descriptor.CustomTags.Any(t => t == WellKnownDiagnosticTags.Unnecessary))
- {
- IDEDiagnosticIdToOptionMappingHelper.AddFadingOptionMapping(descriptor.Id, fadingOption);
- }
- }
- }
}
}
diff --git a/src/Analyzers/Core/Analyzers/IDEDiagnosticIdToOptionMappingHelper.cs b/src/Analyzers/Core/Analyzers/IDEDiagnosticIdToOptionMappingHelper.cs
index ab070b6da8c48..bab1761725b87 100644
--- a/src/Analyzers/Core/Analyzers/IDEDiagnosticIdToOptionMappingHelper.cs
+++ b/src/Analyzers/Core/Analyzers/IDEDiagnosticIdToOptionMappingHelper.cs
@@ -21,16 +21,12 @@ internal static class IDEDiagnosticIdToOptionMappingHelper
{
private static readonly ConcurrentDictionary> s_diagnosticIdToOptionMap = new();
private static readonly ConcurrentDictionary>> s_diagnosticIdToLanguageSpecificOptionsMap = new();
- private static readonly ConcurrentDictionary> s_diagnosticIdToFadingOptionMap = new();
public static bool TryGetMappedOptions(string diagnosticId, string language, [NotNullWhen(true)] out ImmutableHashSet? options)
=> s_diagnosticIdToOptionMap.TryGetValue(diagnosticId, out options) ||
(s_diagnosticIdToLanguageSpecificOptionsMap.TryGetValue(language, out var map) &&
map.TryGetValue(diagnosticId, out options));
- public static bool TryGetMappedFadingOption(string diagnosticId, [NotNullWhen(true)] out PerLanguageOption2? fadingOption)
- => s_diagnosticIdToFadingOptionMap.TryGetValue(diagnosticId, out fadingOption);
-
public static ImmutableHashSet KnownIDEDiagnosticIds
=> [.. s_diagnosticIdToOptionMap.Keys,
.. s_diagnosticIdToLanguageSpecificOptionsMap.Values.SelectMany(map => map.Keys)];
@@ -89,16 +85,4 @@ private static void AddOptionMapping(ConcurrentDictionary fadingOption)
- {
- diagnosticId = diagnosticId ?? throw new ArgumentNullException(nameof(diagnosticId));
- fadingOption = fadingOption ?? throw new ArgumentNullException(nameof(fadingOption));
-
- // Verify that the option is either being added for the first time, or the existing option is already the same.
- // Latter can happen in tests as we re-instantiate the analyzer for every test, which attempts to add the mapping every time.
- Debug.Assert(!s_diagnosticIdToFadingOptionMap.TryGetValue(diagnosticId, out var existingOption) || existingOption.Equals(fadingOption));
-
- s_diagnosticIdToFadingOptionMap.TryAdd(diagnosticId, fadingOption);
- }
}
diff --git a/src/Analyzers/Core/Analyzers/IDEDiagnosticIds.cs b/src/Analyzers/Core/Analyzers/IDEDiagnosticIds.cs
index f91bfe6051c70..6875e9a3fef22 100644
--- a/src/Analyzers/Core/Analyzers/IDEDiagnosticIds.cs
+++ b/src/Analyzers/Core/Analyzers/IDEDiagnosticIds.cs
@@ -12,7 +12,10 @@ internal static class IDEDiagnosticIds
public const string SimplifyMemberAccessDiagnosticId = "IDE0002";
public const string RemoveThisOrMeQualificationDiagnosticId = "IDE0003";
public const string RemoveUnnecessaryCastDiagnosticId = "IDE0004";
+
public const string RemoveUnnecessaryImportsDiagnosticId = "IDE0005";
+ public const string RemoveUnnecessaryImportsGeneratedCodeDiagnosticId = RemoveUnnecessaryImportsDiagnosticId + "_gen";
+
public const string IntellisenseBuildFailedDiagnosticId = "IDE0006";
public const string UseImplicitTypeDiagnosticId = "IDE0007";
public const string UseExplicitTypeDiagnosticId = "IDE0008";
diff --git a/src/Analyzers/Core/Analyzers/RemoveUnnecessaryCast/AbstractRemoveUnnecessaryCastDiagnosticAnalyzer.cs b/src/Analyzers/Core/Analyzers/RemoveUnnecessaryCast/AbstractRemoveUnnecessaryCastDiagnosticAnalyzer.cs
index 540a073cf8501..c626efcc8fbfb 100644
--- a/src/Analyzers/Core/Analyzers/RemoveUnnecessaryCast/AbstractRemoveUnnecessaryCastDiagnosticAnalyzer.cs
+++ b/src/Analyzers/Core/Analyzers/RemoveUnnecessaryCast/AbstractRemoveUnnecessaryCastDiagnosticAnalyzer.cs
@@ -21,7 +21,6 @@ protected AbstractRemoveUnnecessaryCastDiagnosticAnalyzer()
: base(IDEDiagnosticIds.RemoveUnnecessaryCastDiagnosticId,
EnforceOnBuildValues.RemoveUnnecessaryCast,
option: null,
- fadingOption: null,
new LocalizableResourceString(nameof(AnalyzersResources.Remove_Unnecessary_Cast), AnalyzersResources.ResourceManager, typeof(AnalyzersResources)),
new LocalizableResourceString(nameof(CompilerExtensionsResources.Cast_is_redundant), CompilerExtensionsResources.ResourceManager, typeof(CompilerExtensionsResources)))
{
diff --git a/src/Analyzers/Core/Analyzers/RemoveUnnecessaryImports/AbstractRemoveUnnecessaryImportsDiagnosticAnalyzer.cs b/src/Analyzers/Core/Analyzers/RemoveUnnecessaryImports/AbstractRemoveUnnecessaryImportsDiagnosticAnalyzer.cs
index 7c8df9538f1e3..466d9d23ddde0 100644
--- a/src/Analyzers/Core/Analyzers/RemoveUnnecessaryImports/AbstractRemoveUnnecessaryImportsDiagnosticAnalyzer.cs
+++ b/src/Analyzers/Core/Analyzers/RemoveUnnecessaryImports/AbstractRemoveUnnecessaryImportsDiagnosticAnalyzer.cs
@@ -47,7 +47,7 @@ internal abstract class AbstractRemoveUnnecessaryImportsDiagnosticAnalyzer GetDescriptors(LocalizableString titleAndMessage, out DiagnosticDescriptor classificationIdDescriptor, out DiagnosticDescriptor generatedCodeClassificationIdDescriptor)
{
classificationIdDescriptor = CreateDescriptorWithId(IDEDiagnosticIds.RemoveUnnecessaryImportsDiagnosticId, EnforceOnBuildValues.RemoveUnnecessaryImports, hasAnyCodeStyleOption: false, titleAndMessage, isUnnecessary: true);
- generatedCodeClassificationIdDescriptor = CreateDescriptorWithId(IDEDiagnosticIds.RemoveUnnecessaryImportsDiagnosticId + "_gen", EnforceOnBuild.Never, hasAnyCodeStyleOption: false, titleAndMessage, isUnnecessary: true, isConfigurable: false);
+ generatedCodeClassificationIdDescriptor = CreateDescriptorWithId(IDEDiagnosticIds.RemoveUnnecessaryImportsGeneratedCodeDiagnosticId, EnforceOnBuild.Never, hasAnyCodeStyleOption: false, titleAndMessage, isUnnecessary: true, isConfigurable: false);
return
[
s_fixableIdDescriptor,
diff --git a/src/Analyzers/Core/Analyzers/RemoveUnnecessaryParentheses/AbstractRemoveUnnecessaryParenthesesDiagnosticAnalyzer.cs b/src/Analyzers/Core/Analyzers/RemoveUnnecessaryParentheses/AbstractRemoveUnnecessaryParenthesesDiagnosticAnalyzer.cs
index 7565ffc800089..99688921b5270 100644
--- a/src/Analyzers/Core/Analyzers/RemoveUnnecessaryParentheses/AbstractRemoveUnnecessaryParenthesesDiagnosticAnalyzer.cs
+++ b/src/Analyzers/Core/Analyzers/RemoveUnnecessaryParentheses/AbstractRemoveUnnecessaryParenthesesDiagnosticAnalyzer.cs
@@ -25,7 +25,6 @@ protected AbstractRemoveUnnecessaryParenthesesDiagnosticAnalyzer()
: base(IDEDiagnosticIds.RemoveUnnecessaryParenthesesDiagnosticId,
EnforceOnBuildValues.RemoveUnnecessaryParentheses,
options: ParenthesesDiagnosticAnalyzersHelper.Options,
- fadingOption: null,
new LocalizableResourceString(nameof(AnalyzersResources.Remove_unnecessary_parentheses), AnalyzersResources.ResourceManager, typeof(AnalyzersResources)),
new LocalizableResourceString(nameof(AnalyzersResources.Parentheses_can_be_removed), AnalyzersResources.ResourceManager, typeof(AnalyzersResources)))
{
diff --git a/src/Analyzers/Core/Analyzers/RemoveUnusedMembers/AbstractRemoveUnusedMembersDiagnosticAnalyzer.cs b/src/Analyzers/Core/Analyzers/RemoveUnusedMembers/AbstractRemoveUnusedMembersDiagnosticAnalyzer.cs
index 36023f6ce699e..80a1dac516783 100644
--- a/src/Analyzers/Core/Analyzers/RemoveUnusedMembers/AbstractRemoveUnusedMembersDiagnosticAnalyzer.cs
+++ b/src/Analyzers/Core/Analyzers/RemoveUnusedMembers/AbstractRemoveUnusedMembersDiagnosticAnalyzer.cs
@@ -27,8 +27,7 @@ internal abstract class AbstractRemoveUnusedMembersDiagnosticAnalyzer<
TTypeDeclarationSyntax,
TMemberDeclarationSyntax>()
: AbstractBuiltInUnnecessaryCodeStyleDiagnosticAnalyzer(
- [s_removeUnusedMembersRule, s_removeUnreadMembersRule],
- FadingOptions.FadeOutUnusedMembers)
+ [s_removeUnusedMembersRule, s_removeUnreadMembersRule])
where TDocumentationCommentTriviaSyntax : SyntaxNode
where TIdentifierNameSyntax : SyntaxNode
where TTypeDeclarationSyntax : TMemberDeclarationSyntax
diff --git a/src/Analyzers/Core/Analyzers/RemoveUnusedParametersAndValues/AbstractRemoveUnusedParametersAndValuesDiagnosticAnalyzer.cs b/src/Analyzers/Core/Analyzers/RemoveUnusedParametersAndValues/AbstractRemoveUnusedParametersAndValuesDiagnosticAnalyzer.cs
index f71da73217fa4..27af11fc52973 100644
--- a/src/Analyzers/Core/Analyzers/RemoveUnusedParametersAndValues/AbstractRemoveUnusedParametersAndValuesDiagnosticAnalyzer.cs
+++ b/src/Analyzers/Core/Analyzers/RemoveUnusedParametersAndValues/AbstractRemoveUnusedParametersAndValuesDiagnosticAnalyzer.cs
@@ -100,8 +100,7 @@ protected AbstractRemoveUnusedParametersAndValuesDiagnosticAnalyzer(
(s_expressionValueIsUnusedRule, unusedValueExpressionStatementOption),
(s_valueAssignedIsUnusedRule, unusedValueAssignmentOption),
(s_unusedParameterRule, CodeStyleOptions2.UnusedParameters)
- ],
- fadingOption: null)
+ ])
{
}
diff --git a/src/Analyzers/Core/Analyzers/SimplifyInterpolation/AbstractSimplifyInterpolationDiagnosticAnalyzer.cs b/src/Analyzers/Core/Analyzers/SimplifyInterpolation/AbstractSimplifyInterpolationDiagnosticAnalyzer.cs
index b24f3b83f3381..ffc42d2c3f395 100644
--- a/src/Analyzers/Core/Analyzers/SimplifyInterpolation/AbstractSimplifyInterpolationDiagnosticAnalyzer.cs
+++ b/src/Analyzers/Core/Analyzers/SimplifyInterpolation/AbstractSimplifyInterpolationDiagnosticAnalyzer.cs
@@ -17,7 +17,6 @@ internal abstract class AbstractSimplifyInterpolationDiagnosticAnalyzer<
TExpressionSyntax>() : AbstractBuiltInUnnecessaryCodeStyleDiagnosticAnalyzer(IDEDiagnosticIds.SimplifyInterpolationId,
EnforceOnBuildValues.SimplifyInterpolation,
CodeStyleOptions2.PreferSimplifiedInterpolation,
- fadingOption: null,
new LocalizableResourceString(nameof(AnalyzersResources.Simplify_interpolation), AnalyzersResources.ResourceManager, typeof(AnalyzersResources)),
new LocalizableResourceString(nameof(AnalyzersResources.Interpolation_can_be_simplified), AnalyzersResources.ResourceManager, typeof(AnalyzersResources)))
where TInterpolationSyntax : SyntaxNode
diff --git a/src/Analyzers/Core/Analyzers/SimplifyTypeNames/SimplifyTypeNamesDiagnosticAnalyzerBase.cs b/src/Analyzers/Core/Analyzers/SimplifyTypeNames/SimplifyTypeNamesDiagnosticAnalyzerBase.cs
index 0d428287adffe..9c6402bd71b11 100644
--- a/src/Analyzers/Core/Analyzers/SimplifyTypeNames/SimplifyTypeNamesDiagnosticAnalyzerBase.cs
+++ b/src/Analyzers/Core/Analyzers/SimplifyTypeNames/SimplifyTypeNamesDiagnosticAnalyzerBase.cs
@@ -57,8 +57,7 @@ protected SimplifyTypeNamesDiagnosticAnalyzerBase()
CodeStyleOptions2.PreferIntrinsicPredefinedTypeKeywordInDeclaration,
CodeStyleOptions2.PreferIntrinsicPredefinedTypeKeywordInMemberAccess,
])
- ],
- fadingOption: null)
+ ])
{
}
diff --git a/src/Analyzers/Core/Analyzers/UseInferredMemberName/AbstractUseInferredMemberNameDiagnosticAnalyzer.cs b/src/Analyzers/Core/Analyzers/UseInferredMemberName/AbstractUseInferredMemberNameDiagnosticAnalyzer.cs
index fe3d46a82ad42..0d78a8c99913c 100644
--- a/src/Analyzers/Core/Analyzers/UseInferredMemberName/AbstractUseInferredMemberNameDiagnosticAnalyzer.cs
+++ b/src/Analyzers/Core/Analyzers/UseInferredMemberName/AbstractUseInferredMemberNameDiagnosticAnalyzer.cs
@@ -15,7 +15,6 @@ public AbstractUseInferredMemberNameDiagnosticAnalyzer()
: base(IDEDiagnosticIds.UseInferredMemberNameDiagnosticId,
EnforceOnBuildValues.UseInferredMemberName,
options: [CodeStyleOptions2.PreferInferredAnonymousTypeMemberNames, CodeStyleOptions2.PreferInferredTupleNames],
- fadingOption: null,
new LocalizableResourceString(nameof(AnalyzersResources.Use_inferred_member_name), AnalyzersResources.ResourceManager, typeof(AnalyzersResources)),
new LocalizableResourceString(nameof(AnalyzersResources.Member_name_can_be_simplified), AnalyzersResources.ResourceManager, typeof(AnalyzersResources)))
{
diff --git a/src/Analyzers/Core/CodeFixes/CodeFixes.projitems b/src/Analyzers/Core/CodeFixes/CodeFixes.projitems
index f834431567d47..37941d0485f25 100644
--- a/src/Analyzers/Core/CodeFixes/CodeFixes.projitems
+++ b/src/Analyzers/Core/CodeFixes/CodeFixes.projitems
@@ -107,6 +107,7 @@
+
diff --git a/src/Analyzers/Core/CodeFixes/Options/FadingOptions.cs b/src/Analyzers/Core/CodeFixes/Options/FadingOptions.cs
new file mode 100644
index 0000000000000..c19206ac833ce
--- /dev/null
+++ b/src/Analyzers/Core/CodeFixes/Options/FadingOptions.cs
@@ -0,0 +1,32 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Diagnostics.CodeAnalysis;
+using Microsoft.CodeAnalysis.Diagnostics;
+using Microsoft.CodeAnalysis.Options;
+
+namespace Microsoft.CodeAnalysis.CodeStyle;
+
+internal static class FadingOptions
+{
+ public static readonly PerLanguageOption2 FadeOutUnusedImports = new("dotnet_fade_out_unused_imports", defaultValue: true);
+ public static readonly PerLanguageOption2 FadeOutUnusedMembers = new("dotnet_fade_out_unused_members", defaultValue: true);
+ public static readonly PerLanguageOption2 FadeOutUnreachableCode = new("dotnet_fade_out_unreachable_code", defaultValue: true);
+
+ // When adding a new fading option, be sure to update dictionary below with apppropriate diagnostic id mapping.
+
+ private static readonly ImmutableDictionary> s_diagnosticToFadingOption = new Dictionary>
+ {
+ { IDEDiagnosticIds.RemoveUnusedMembersDiagnosticId, FadeOutUnusedMembers },
+ { IDEDiagnosticIds.RemoveUnreadMembersDiagnosticId, FadeOutUnusedMembers },
+ { IDEDiagnosticIds.RemoveUnreachableCodeDiagnosticId, FadeOutUnreachableCode },
+ { IDEDiagnosticIds.RemoveUnnecessaryImportsDiagnosticId, FadeOutUnusedImports },
+ { IDEDiagnosticIds.RemoveUnnecessaryImportsGeneratedCodeDiagnosticId, FadeOutUnusedImports },
+ }.ToImmutableDictionary();
+
+ public static bool TryGetFadingOptionForDiagnostic(string diagnosticId, [NotNullWhen(true)] out PerLanguageOption2? fadingOption)
+ => s_diagnosticToFadingOption.TryGetValue(diagnosticId, out fadingOption);
+}
diff --git a/src/Analyzers/VisualBasic/Analyzers/RemoveUnnecessaryByVal/VisualBasicRemoveUnnecessaryByValDiagnosticAnalyzer.vb b/src/Analyzers/VisualBasic/Analyzers/RemoveUnnecessaryByVal/VisualBasicRemoveUnnecessaryByValDiagnosticAnalyzer.vb
index 10b7de28599e6..4b4518deaa3d6 100644
--- a/src/Analyzers/VisualBasic/Analyzers/RemoveUnnecessaryByVal/VisualBasicRemoveUnnecessaryByValDiagnosticAnalyzer.vb
+++ b/src/Analyzers/VisualBasic/Analyzers/RemoveUnnecessaryByVal/VisualBasicRemoveUnnecessaryByValDiagnosticAnalyzer.vb
@@ -16,7 +16,6 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.RemoveUnnecessaryByVal
diagnosticId:=IDEDiagnosticIds.RemoveUnnecessaryByValDiagnosticId,
enforceOnBuild:=EnforceOnBuildValues.RemoveUnnecessaryByVal,
[option]:=Nothing,
- fadingOption:=Nothing,
title:=New LocalizableResourceString(NameOf(VisualBasicAnalyzersResources.Remove_ByVal), VisualBasicAnalyzersResources.ResourceManager, GetType(VisualBasicAnalyzersResources)))
End Sub
diff --git a/src/Features/Core/Portable/SimplifyThisOrMe/AbstractSimplifyThisOrMeDiagnosticAnalyzer.cs b/src/Features/Core/Portable/SimplifyThisOrMe/AbstractSimplifyThisOrMeDiagnosticAnalyzer.cs
index 6496d508f90cb..77955f653376a 100644
--- a/src/Features/Core/Portable/SimplifyThisOrMe/AbstractSimplifyThisOrMeDiagnosticAnalyzer.cs
+++ b/src/Features/Core/Portable/SimplifyThisOrMe/AbstractSimplifyThisOrMeDiagnosticAnalyzer.cs
@@ -31,7 +31,6 @@ protected AbstractSimplifyThisOrMeDiagnosticAnalyzer()
CodeStyleOptions2.QualifyMethodAccess,
CodeStyleOptions2.QualifyEventAccess,
],
- fadingOption: null,
new LocalizableResourceString(nameof(FeaturesResources.Remove_qualification), FeaturesResources.ResourceManager, typeof(FeaturesResources)),
new LocalizableResourceString(nameof(AnalyzersResources.Name_can_be_simplified), AnalyzersResources.ResourceManager, typeof(AnalyzersResources)))
{
diff --git a/src/LanguageServer/Protocol/Extensions/ProtocolConversions.Diagnostics.cs b/src/LanguageServer/Protocol/Extensions/ProtocolConversions.Diagnostics.cs
index 4d7216e45b5b0..fd7afb65c56d2 100644
--- a/src/LanguageServer/Protocol/Extensions/ProtocolConversions.Diagnostics.cs
+++ b/src/LanguageServer/Protocol/Extensions/ProtocolConversions.Diagnostics.cs
@@ -2,8 +2,10 @@
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
+using System.Collections.Generic;
using System.Collections.Immutable;
using System.Linq;
+using Microsoft.CodeAnalysis.CodeStyle;
using Microsoft.CodeAnalysis.Diagnostics;
using Microsoft.CodeAnalysis.LanguageServer.Features.Diagnostics;
using Microsoft.CodeAnalysis.LanguageServer.Handler.Diagnostics;
@@ -52,9 +54,11 @@ internal static ImmutableArray AddBuildTagIfNotPresent(Immutable
}
// DiagnosticId supports fading, check if the corresponding VS option is turned on.
- if (!SupportsFadingOption(diagnosticData, globalOptionService))
+ if (FadingOptions.TryGetFadingOptionForDiagnostic(diagnosticData.Id, out var fadingOption))
{
- return [diagnostic];
+ Contract.ThrowIfNull(diagnosticData.Language, $"diagnostic {diagnosticData.Id} is missing a language");
+ if (!globalOptionService.GetOption(fadingOption, diagnosticData.Language))
+ return [diagnostic];
}
// Check to see if there are specific locations marked to fade.
@@ -266,15 +270,4 @@ private static DiagnosticTag[] ConvertTags(DiagnosticData diagnosticData, bool p
return result.ToArray();
}
-
- private static bool SupportsFadingOption(DiagnosticData diagnosticData, IGlobalOptionService globalOptionService)
- {
- if (IDEDiagnosticIdToOptionMappingHelper.TryGetMappedFadingOption(diagnosticData.Id, out var fadingOption))
- {
- Contract.ThrowIfNull(diagnosticData.Language, $"diagnostic {diagnosticData.Id} is missing a language");
- return globalOptionService.GetOption(fadingOption, diagnosticData.Language);
- }
-
- return true;
- }
}
diff --git a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/CodeStyle/FadingOptions.cs b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/CodeStyle/FadingOptions.cs
deleted file mode 100644
index a53cb54f98835..0000000000000
--- a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/CodeStyle/FadingOptions.cs
+++ /dev/null
@@ -1,14 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-using Microsoft.CodeAnalysis.Options;
-
-namespace Microsoft.CodeAnalysis.CodeStyle;
-
-internal static class FadingOptions
-{
- public static readonly PerLanguageOption2 FadeOutUnusedImports = new("dotnet_fade_out_unused_imports", defaultValue: true);
- public static readonly PerLanguageOption2 FadeOutUnusedMembers = new("dotnet_fade_out_unused_members", defaultValue: true);
- public static readonly PerLanguageOption2 FadeOutUnreachableCode = new("dotnet_fade_out_unreachable_code", defaultValue: true);
-}
diff --git a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/CompilerExtensions.projitems b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/CompilerExtensions.projitems
index b89f612deef4a..b051c4f56184f 100644
--- a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/CompilerExtensions.projitems
+++ b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/CompilerExtensions.projitems
@@ -144,7 +144,6 @@
-