diff --git a/.config/tsaoptions.json b/.config/tsaoptions.json
new file mode 100644
index 0000000000..66a041f018
--- /dev/null
+++ b/.config/tsaoptions.json
@@ -0,0 +1,10 @@
+{
+ "instanceUrl": "https://devdiv.visualstudio.com/",
+ "template": "TFSDEVDIV",
+ "projectName": "DEVDIV",
+ "areaPath": "DevDiv\\NET Developer Experience\\Productivity",
+ "iterationPath": "DevDiv",
+ "notificationAliases": [ "mlinfraswat@microsoft.com" ],
+ "repositoryName":"roslyn-analyzers",
+ "codebaseName": "roslyn-analyzers"
+}
\ No newline at end of file
diff --git a/azure-pipelines-microbuild.yml b/azure-pipelines-microbuild.yml
index 324a28d68a..6c7b3e3f95 100644
--- a/azure-pipelines-microbuild.yml
+++ b/azure-pipelines-microbuild.yml
@@ -1,3 +1,10 @@
+parameters:
+ # Optionally do not publish to TSA. Useful for e.g. verifying fixes before PR.
+- name: TSAEnabled
+ displayName: Publish results to TSA
+ type: boolean
+ default: true
+
# Branches that trigger a build on commit
trigger:
- main
@@ -81,7 +88,40 @@ stages:
PathtoPublish: 'artifacts\VSSetup\$(_BuildConfig)'
ArtifactName: 'VSIXes'
condition: succeeded()
-
+- stage: analysis
+ displayName: Code analysis
+ pool:
+ name: NetCore1ESPool-Internal
+ demands: ImageOverride -equals windows.vs2022preview.amd64
+ jobs:
+ - job: codeql
+ displayName: CodeQL
+ timeoutInMinutes: 120
+ variables:
+ # CG is handled in the primary CI pipeline
+ - name: skipComponentGovernanceDetection
+ value: true
+ # Force CodeQL enabled so it may be run on any branch
+ - name: Codeql.Enabled
+ value: true
+ # Do not let CodeQL 3000 Extension gate scan frequency
+ - name: Codeql.Cadence
+ value: 0
+ - name: Codeql.TSAEnabled
+ value: true
+ steps:
+ - task: UseDotNet@2
+ inputs:
+ useGlobalJson: true
+ - task: CodeQL3000Init@0
+ displayName: CodeQL Initialize
+ - script: eng\common\cibuild.cmd
+ -configuration Release
+ -prepareMachine
+ /p:Test=false
+ displayName: Windows Build
+ - task: CodeQL3000Finalize@0
+ displayName: CodeQL Finalize
- template: eng\common\templates\post-build\post-build.yml
parameters:
publishingInfraVersion: 3
diff --git a/azure-pipelines.yml b/azure-pipelines.yml
index 2f469068f4..a58e277d24 100644
--- a/azure-pipelines.yml
+++ b/azure-pipelines.yml
@@ -103,7 +103,7 @@ jobs:
- job: Markdownlint
pool:
- vmImage: ubuntu-18.04
+ vmImage: ubuntu-22.04
steps:
- script: sudo npm install -g markdownlint-cli@0.31.1
displayName: Install markdownlint-cli
diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml
index a9ec0c7ddf..aaa606b0cc 100644
--- a/eng/Version.Details.xml
+++ b/eng/Version.Details.xml
@@ -3,9 +3,9 @@
-
+
https://github.com/dotnet/arcade
- 6f93ec8da69a42fbe9a702a33e104f94773c3f03
+ 5be556106f26f171f32187951b9a141f9580d03a
diff --git a/eng/Versions.props b/eng/Versions.props
index 25071613d8..4b4a782426 100644
--- a/eng/Versions.props
+++ b/eng/Versions.props
@@ -16,7 +16,7 @@
3.3.4
beta1
- 7.0.0
+ 8.0.0
preview1
$(VersionPrefix)
+
+
+
+ PreserveNewest
+ AnalyzerReleases\$(AssemblyName)\AnalyzerReleases.Unshipped.md
+
diff --git a/src/Microsoft.CodeAnalysis.Analyzers/CSharp/CSharpImmutableObjectMethodAnalyzer.cs b/src/Microsoft.CodeAnalysis.Analyzers/CSharp/CSharpImmutableObjectMethodAnalyzer.cs
index efebc83fe4..da96c09977 100644
--- a/src/Microsoft.CodeAnalysis.Analyzers/CSharp/CSharpImmutableObjectMethodAnalyzer.cs
+++ b/src/Microsoft.CodeAnalysis.Analyzers/CSharp/CSharpImmutableObjectMethodAnalyzer.cs
@@ -13,6 +13,9 @@ namespace Microsoft.CodeAnalysis.CSharp.Analyzers
{
using static CodeAnalysisDiagnosticsResources;
+ ///
+ /// RS1014:
+ ///
[DiagnosticAnalyzer(LanguageNames.CSharp)]
public class CSharpImmutableObjectMethodAnalyzer : DiagnosticAnalyzer
{
diff --git a/src/Microsoft.CodeAnalysis.Analyzers/Core/FixAnalyzers/FixerWithFixAllAnalyzer.cs b/src/Microsoft.CodeAnalysis.Analyzers/Core/FixAnalyzers/FixerWithFixAllAnalyzer.cs
index 8cac63a6c7..00c8fcbc6a 100644
--- a/src/Microsoft.CodeAnalysis.Analyzers/Core/FixAnalyzers/FixerWithFixAllAnalyzer.cs
+++ b/src/Microsoft.CodeAnalysis.Analyzers/Core/FixAnalyzers/FixerWithFixAllAnalyzer.cs
@@ -14,6 +14,9 @@ namespace Microsoft.CodeAnalysis.Analyzers.FixAnalyzers
using static CodeAnalysisDiagnosticsResources;
///
+ /// RS1010:
+ /// RS1011:
+ /// RS1016:
/// A that intends to support fix all occurrences must classify the registered code actions into equivalence classes by assigning it an explicit, non-null equivalence key which is unique across all registered code actions by this fixer.
/// This enables the to fix all diagnostics in the required scope by applying code actions from this fixer that are in the equivalence class of the trigger code action.
/// This analyzer catches violations of this requirement in the code actions registered by a that supports .
diff --git a/src/Microsoft.CodeAnalysis.Analyzers/Core/InternalImplementationOnlyAnalyzer.cs b/src/Microsoft.CodeAnalysis.Analyzers/Core/InternalImplementationOnlyAnalyzer.cs
index fc563b5f83..661adf7d49 100644
--- a/src/Microsoft.CodeAnalysis.Analyzers/Core/InternalImplementationOnlyAnalyzer.cs
+++ b/src/Microsoft.CodeAnalysis.Analyzers/Core/InternalImplementationOnlyAnalyzer.cs
@@ -11,6 +11,9 @@ namespace Microsoft.CodeAnalysis.Analyzers
{
using static CodeAnalysisDiagnosticsResources;
+ ///
+ /// RS1009:
+ ///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
public class InternalImplementationOnlyAnalyzer : DiagnosticAnalyzer
{
diff --git a/src/Microsoft.CodeAnalysis.Analyzers/Core/MetaAnalyzers/ClassIsNotDiagnosticAnalyzer.cs b/src/Microsoft.CodeAnalysis.Analyzers/Core/MetaAnalyzers/ClassIsNotDiagnosticAnalyzer.cs
index f942173685..b6b8251032 100644
--- a/src/Microsoft.CodeAnalysis.Analyzers/Core/MetaAnalyzers/ClassIsNotDiagnosticAnalyzer.cs
+++ b/src/Microsoft.CodeAnalysis.Analyzers/Core/MetaAnalyzers/ClassIsNotDiagnosticAnalyzer.cs
@@ -9,6 +9,9 @@ namespace Microsoft.CodeAnalysis.Analyzers.MetaAnalyzers
{
using static CodeAnalysisDiagnosticsResources;
+ ///
+ /// RS1027:
+ ///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
public sealed class ClassIsNotDiagnosticAnalyzer : DiagnosticAnalyzer
{
diff --git a/src/Microsoft.CodeAnalysis.Analyzers/Core/MetaAnalyzers/CompareSymbolsCorrectlyAnalyzer.cs b/src/Microsoft.CodeAnalysis.Analyzers/Core/MetaAnalyzers/CompareSymbolsCorrectlyAnalyzer.cs
index c80b4d170c..7798b48e0c 100644
--- a/src/Microsoft.CodeAnalysis.Analyzers/Core/MetaAnalyzers/CompareSymbolsCorrectlyAnalyzer.cs
+++ b/src/Microsoft.CodeAnalysis.Analyzers/Core/MetaAnalyzers/CompareSymbolsCorrectlyAnalyzer.cs
@@ -13,6 +13,9 @@ namespace Microsoft.CodeAnalysis.Analyzers.MetaAnalyzers
{
using static CodeAnalysisDiagnosticsResources;
+ ///
+ /// RS1024:
+ ///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
public class CompareSymbolsCorrectlyAnalyzer : DiagnosticAnalyzer
{
diff --git a/src/Microsoft.CodeAnalysis.Analyzers/Core/MetaAnalyzers/ConfigureGeneratedCodeAnalysisAnalyzer.cs b/src/Microsoft.CodeAnalysis.Analyzers/Core/MetaAnalyzers/ConfigureGeneratedCodeAnalysisAnalyzer.cs
index 5618f05afa..c1c0afd751 100644
--- a/src/Microsoft.CodeAnalysis.Analyzers/Core/MetaAnalyzers/ConfigureGeneratedCodeAnalysisAnalyzer.cs
+++ b/src/Microsoft.CodeAnalysis.Analyzers/Core/MetaAnalyzers/ConfigureGeneratedCodeAnalysisAnalyzer.cs
@@ -11,6 +11,9 @@ namespace Microsoft.CodeAnalysis.Analyzers.MetaAnalyzers
{
using static CodeAnalysisDiagnosticsResources;
+ ///
+ /// RS1025:
+ ///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
public class ConfigureGeneratedCodeAnalysisAnalyzer : DiagnosticAnalyzerCorrectnessAnalyzer
{
diff --git a/src/Microsoft.CodeAnalysis.Analyzers/Core/MetaAnalyzers/DiagnosticAnalyzerAPIUsageAnalyzer.cs b/src/Microsoft.CodeAnalysis.Analyzers/Core/MetaAnalyzers/DiagnosticAnalyzerAPIUsageAnalyzer.cs
index f4242c82b7..ffbc827f19 100644
--- a/src/Microsoft.CodeAnalysis.Analyzers/Core/MetaAnalyzers/DiagnosticAnalyzerAPIUsageAnalyzer.cs
+++ b/src/Microsoft.CodeAnalysis.Analyzers/Core/MetaAnalyzers/DiagnosticAnalyzerAPIUsageAnalyzer.cs
@@ -17,6 +17,9 @@ namespace Microsoft.CodeAnalysis.Analyzers.MetaAnalyzers
{
using static CodeAnalysisDiagnosticsResources;
+ ///
+ /// RS1022:
+ ///
public abstract class DiagnosticAnalyzerApiUsageAnalyzer : DiagnosticAnalyzer
where TTypeSyntax : SyntaxNode
{
diff --git a/src/Microsoft.CodeAnalysis.Analyzers/Core/MetaAnalyzers/DiagnosticAnalyzerAttributeAnalyzer.cs b/src/Microsoft.CodeAnalysis.Analyzers/Core/MetaAnalyzers/DiagnosticAnalyzerAttributeAnalyzer.cs
index 72413a48c2..ddf317fc0a 100644
--- a/src/Microsoft.CodeAnalysis.Analyzers/Core/MetaAnalyzers/DiagnosticAnalyzerAttributeAnalyzer.cs
+++ b/src/Microsoft.CodeAnalysis.Analyzers/Core/MetaAnalyzers/DiagnosticAnalyzerAttributeAnalyzer.cs
@@ -10,6 +10,10 @@ namespace Microsoft.CodeAnalysis.Analyzers.MetaAnalyzers
{
using static CodeAnalysisDiagnosticsResources;
+ ///
+ /// RS1001:
+ /// RS1004:
+ ///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
public sealed class DiagnosticAnalyzerAttributeAnalyzer : DiagnosticAnalyzerCorrectnessAnalyzer
{
@@ -24,14 +28,14 @@ public sealed class DiagnosticAnalyzerAttributeAnalyzer : DiagnosticAnalyzerCorr
customTags: WellKnownDiagnosticTagsExtensions.Telemetry);
public static readonly DiagnosticDescriptor AddLanguageSupportToAnalyzerRule = new(
- DiagnosticIds.AddLanguageSupportToAnalyzerRuleId,
- CreateLocalizableResourceString(nameof(AddLanguageSupportToAnalyzerTitle)),
- CreateLocalizableResourceString(nameof(AddLanguageSupportToAnalyzerMessage)),
- DiagnosticCategory.MicrosoftCodeAnalysisCorrectness,
- DiagnosticSeverity.Warning,
- isEnabledByDefault: true,
- description: CreateLocalizableResourceString(nameof(AddLanguageSupportToAnalyzerDescription)),
- customTags: WellKnownDiagnosticTagsExtensions.Telemetry);
+ DiagnosticIds.AddLanguageSupportToAnalyzerRuleId,
+ CreateLocalizableResourceString(nameof(AddLanguageSupportToAnalyzerTitle)),
+ CreateLocalizableResourceString(nameof(AddLanguageSupportToAnalyzerMessage)),
+ DiagnosticCategory.MicrosoftCodeAnalysisCorrectness,
+ DiagnosticSeverity.Warning,
+ isEnabledByDefault: true,
+ description: CreateLocalizableResourceString(nameof(AddLanguageSupportToAnalyzerDescription)),
+ customTags: WellKnownDiagnosticTagsExtensions.Telemetry);
public override ImmutableArray SupportedDiagnostics { get; } = ImmutableArray.Create(MissingDiagnosticAnalyzerAttributeRule, AddLanguageSupportToAnalyzerRule);
diff --git a/src/Microsoft.CodeAnalysis.Analyzers/Core/MetaAnalyzers/DiagnosticDescriptorCreationAnalyzer.cs b/src/Microsoft.CodeAnalysis.Analyzers/Core/MetaAnalyzers/DiagnosticDescriptorCreationAnalyzer.cs
index 0704987206..f72ad8f129 100644
--- a/src/Microsoft.CodeAnalysis.Analyzers/Core/MetaAnalyzers/DiagnosticDescriptorCreationAnalyzer.cs
+++ b/src/Microsoft.CodeAnalysis.Analyzers/Core/MetaAnalyzers/DiagnosticDescriptorCreationAnalyzer.cs
@@ -24,6 +24,17 @@ namespace Microsoft.CodeAnalysis.Analyzers.MetaAnalyzers
using PooledResourcesDataValueConcurrentDictionary = PooledConcurrentDictionary>;
using PooledFieldToResourceNameAndFileNameConcurrentDictionary = PooledConcurrentDictionary;
+ ///
+ /// RS1007
+ /// RS1015
+ /// RS1017
+ /// RS1019
+ /// RS1028
+ /// RS1029
+ /// RS1031
+ /// RS1032
+ /// RS1033
+ ///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
public sealed partial class DiagnosticDescriptorCreationAnalyzer : DiagnosticAnalyzer
{
@@ -58,9 +69,6 @@ public sealed partial class DiagnosticDescriptorCreationAnalyzer : DiagnosticAna
"Text.CSharp.Analyzers",
"Text.VisualBasic.Analyzers");
- ///
- /// RS1007 ()
- ///
public static readonly DiagnosticDescriptor UseLocalizableStringsInDescriptorRule = new(
DiagnosticIds.UseLocalizableStringsInDescriptorRuleId,
CreateLocalizableResourceString(nameof(UseLocalizableStringsInDescriptorTitle)),
@@ -71,9 +79,6 @@ public sealed partial class DiagnosticDescriptorCreationAnalyzer : DiagnosticAna
description: CreateLocalizableResourceString(nameof(UseLocalizableStringsInDescriptorDescription)),
customTags: WellKnownDiagnosticTagsExtensions.Telemetry);
- ///
- /// RS1015 ()
- ///
public static readonly DiagnosticDescriptor ProvideHelpUriInDescriptorRule = new(
DiagnosticIds.ProvideHelpUriInDescriptorRuleId,
CreateLocalizableResourceString(nameof(ProvideHelpUriInDescriptorTitle)),
@@ -84,9 +89,6 @@ public sealed partial class DiagnosticDescriptorCreationAnalyzer : DiagnosticAna
description: CreateLocalizableResourceString(nameof(ProvideHelpUriInDescriptorDescription)),
customTags: WellKnownDiagnosticTagsExtensions.Telemetry);
- ///
- /// RS1017 ()
- ///
public static readonly DiagnosticDescriptor DiagnosticIdMustBeAConstantRule = new(
DiagnosticIds.DiagnosticIdMustBeAConstantRuleId,
CreateLocalizableResourceString(nameof(DiagnosticIdMustBeAConstantTitle)),
@@ -97,9 +99,6 @@ public sealed partial class DiagnosticDescriptorCreationAnalyzer : DiagnosticAna
description: CreateLocalizableResourceString(nameof(DiagnosticIdMustBeAConstantDescription)),
customTags: WellKnownDiagnosticTagsExtensions.Telemetry);
- ///
- /// RS1019 ()
- ///
public static readonly DiagnosticDescriptor UseUniqueDiagnosticIdRule = new(
DiagnosticIds.UseUniqueDiagnosticIdRuleId,
CreateLocalizableResourceString(nameof(UseUniqueDiagnosticIdTitle)),
@@ -110,9 +109,6 @@ public sealed partial class DiagnosticDescriptorCreationAnalyzer : DiagnosticAna
description: CreateLocalizableResourceString(nameof(UseUniqueDiagnosticIdDescription)),
customTags: WellKnownDiagnosticTagsExtensions.CompilationEndAndTelemetry);
- ///
- /// RS1028 ()
- ///
public static readonly DiagnosticDescriptor ProvideCustomTagsInDescriptorRule = new(
DiagnosticIds.ProvideCustomTagsInDescriptorRuleId,
CreateLocalizableResourceString(nameof(ProvideCustomTagsInDescriptorTitle)),
@@ -123,9 +119,6 @@ public sealed partial class DiagnosticDescriptorCreationAnalyzer : DiagnosticAna
description: CreateLocalizableResourceString(nameof(ProvideCustomTagsInDescriptorDescription)),
customTags: WellKnownDiagnosticTagsExtensions.Telemetry);
- ///
- /// RS1029 ()
- ///
public static readonly DiagnosticDescriptor DoNotUseReservedDiagnosticIdRule = new(
DiagnosticIds.DoNotUseReservedDiagnosticIdRuleId,
CreateLocalizableResourceString(nameof(DoNotUseReservedDiagnosticIdTitle)),
@@ -136,9 +129,6 @@ public sealed partial class DiagnosticDescriptorCreationAnalyzer : DiagnosticAna
description: CreateLocalizableResourceString(nameof(DoNotUseReservedDiagnosticIdDescription)),
customTags: WellKnownDiagnosticTagsExtensions.Telemetry);
- ///
- /// RS1031 ()
- ///
public static readonly DiagnosticDescriptor DefineDiagnosticTitleCorrectlyRule = new(
DiagnosticIds.DefineDiagnosticTitleCorrectlyRuleId,
CreateLocalizableResourceString(nameof(DefineDiagnosticTitleCorrectlyTitle)),
@@ -148,9 +138,6 @@ public sealed partial class DiagnosticDescriptorCreationAnalyzer : DiagnosticAna
isEnabledByDefault: true,
customTags: WellKnownDiagnosticTagsExtensions.Telemetry);
- ///
- /// RS1032 ()
- ///
public static readonly DiagnosticDescriptor DefineDiagnosticMessageCorrectlyRule = new(
DiagnosticIds.DefineDiagnosticMessageCorrectlyRuleId,
CreateLocalizableResourceString(nameof(DefineDiagnosticMessageCorrectlyTitle)),
@@ -160,9 +147,6 @@ public sealed partial class DiagnosticDescriptorCreationAnalyzer : DiagnosticAna
isEnabledByDefault: true,
customTags: WellKnownDiagnosticTagsExtensions.Telemetry);
- ///
- /// RS1033 ()
- ///
public static readonly DiagnosticDescriptor DefineDiagnosticDescriptionCorrectlyRule = new(
DiagnosticIds.DefineDiagnosticDescriptionCorrectlyRuleId,
CreateLocalizableResourceString(nameof(DefineDiagnosticDescriptionCorrectlyTitle)),
diff --git a/src/Microsoft.CodeAnalysis.Analyzers/Core/MetaAnalyzers/DiagnosticDescriptorCreationAnalyzer_IdRangeAndCategoryValidation.cs b/src/Microsoft.CodeAnalysis.Analyzers/Core/MetaAnalyzers/DiagnosticDescriptorCreationAnalyzer_IdRangeAndCategoryValidation.cs
index e2d1510b0a..5a6b37d64a 100644
--- a/src/Microsoft.CodeAnalysis.Analyzers/Core/MetaAnalyzers/DiagnosticDescriptorCreationAnalyzer_IdRangeAndCategoryValidation.cs
+++ b/src/Microsoft.CodeAnalysis.Analyzers/Core/MetaAnalyzers/DiagnosticDescriptorCreationAnalyzer_IdRangeAndCategoryValidation.cs
@@ -19,14 +19,16 @@ namespace Microsoft.CodeAnalysis.Analyzers.MetaAnalyzers
{
using static CodeAnalysisDiagnosticsResources;
+ ///
+ /// RS1018
+ /// RS1020
+ /// RS1021
+ ///
public sealed partial class DiagnosticDescriptorCreationAnalyzer
{
private const string DiagnosticCategoryAndIdRangeFile = "DiagnosticCategoryAndIdRanges.txt";
private static readonly (string? prefix, int start, int end) s_defaultAllowedIdsInfo = (null, -1, -1);
- ///
- /// RS1018 ()
- ///
public static readonly DiagnosticDescriptor DiagnosticIdMustBeInSpecifiedFormatRule = new(
DiagnosticIds.DiagnosticIdMustBeInSpecifiedFormatRuleId,
CreateLocalizableResourceString(nameof(DiagnosticIdMustBeInSpecifiedFormatTitle)),
@@ -37,9 +39,6 @@ public sealed partial class DiagnosticDescriptorCreationAnalyzer
description: CreateLocalizableResourceString(nameof(DiagnosticIdMustBeInSpecifiedFormatDescription)),
customTags: WellKnownDiagnosticTagsExtensions.Telemetry);
- ///
- /// RS1020 ()
- ///
public static readonly DiagnosticDescriptor UseCategoriesFromSpecifiedRangeRule = new(
DiagnosticIds.UseCategoriesFromSpecifiedRangeRuleId,
CreateLocalizableResourceString(nameof(UseCategoriesFromSpecifiedRangeTitle)),
@@ -50,9 +49,6 @@ public sealed partial class DiagnosticDescriptorCreationAnalyzer
description: CreateLocalizableResourceString(nameof(UseCategoriesFromSpecifiedRangeDescription)),
customTags: WellKnownDiagnosticTagsExtensions.Telemetry);
- ///
- /// RS1021 ()
- ///
public static readonly DiagnosticDescriptor AnalyzerCategoryAndIdRangeFileInvalidRule = new(
DiagnosticIds.AnalyzerCategoryAndIdRangeFileInvalidRuleId,
CreateLocalizableResourceString(nameof(AnalyzerCategoryAndIdRangeFileInvalidTitle)),
diff --git a/src/Microsoft.CodeAnalysis.Analyzers/Core/MetaAnalyzers/DoNotUseCompilationGetSemanticModelAnalyzer.cs b/src/Microsoft.CodeAnalysis.Analyzers/Core/MetaAnalyzers/DoNotUseCompilationGetSemanticModelAnalyzer.cs
index 85c5400395..9910368d25 100644
--- a/src/Microsoft.CodeAnalysis.Analyzers/Core/MetaAnalyzers/DoNotUseCompilationGetSemanticModelAnalyzer.cs
+++ b/src/Microsoft.CodeAnalysis.Analyzers/Core/MetaAnalyzers/DoNotUseCompilationGetSemanticModelAnalyzer.cs
@@ -11,6 +11,9 @@ namespace Microsoft.CodeAnalysis.Analyzers.MetaAnalyzers
{
using static CodeAnalysisDiagnosticsResources;
+ ///
+ /// RS1030:
+ ///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
public sealed class DoNotUseCompilationGetSemanticModelAnalyzer : DiagnosticAnalyzer
{
diff --git a/src/Microsoft.CodeAnalysis.Analyzers/Core/MetaAnalyzers/EnableConcurrentExecutionAnalyzer.cs b/src/Microsoft.CodeAnalysis.Analyzers/Core/MetaAnalyzers/EnableConcurrentExecutionAnalyzer.cs
index 6245fb0a18..7099d2f5a4 100644
--- a/src/Microsoft.CodeAnalysis.Analyzers/Core/MetaAnalyzers/EnableConcurrentExecutionAnalyzer.cs
+++ b/src/Microsoft.CodeAnalysis.Analyzers/Core/MetaAnalyzers/EnableConcurrentExecutionAnalyzer.cs
@@ -11,6 +11,9 @@ namespace Microsoft.CodeAnalysis.Analyzers.MetaAnalyzers
{
using static CodeAnalysisDiagnosticsResources;
+ ///
+ /// RS1026:
+ ///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
public sealed class EnableConcurrentExecutionAnalyzer : DiagnosticAnalyzerCorrectnessAnalyzer
{
diff --git a/src/Microsoft.CodeAnalysis.Analyzers/Core/MetaAnalyzers/PreferIsKindAnalyzer.cs b/src/Microsoft.CodeAnalysis.Analyzers/Core/MetaAnalyzers/PreferIsKindAnalyzer.cs
index 531c6ea243..2ee2789e1f 100644
--- a/src/Microsoft.CodeAnalysis.Analyzers/Core/MetaAnalyzers/PreferIsKindAnalyzer.cs
+++ b/src/Microsoft.CodeAnalysis.Analyzers/Core/MetaAnalyzers/PreferIsKindAnalyzer.cs
@@ -11,6 +11,9 @@ namespace Microsoft.CodeAnalysis.Analyzers.MetaAnalyzers
{
using static CodeAnalysisDiagnosticsResources;
+ ///
+ /// RS1034:
+ ///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
public sealed class PreferIsKindAnalyzer : DiagnosticAnalyzer
{
diff --git a/src/Microsoft.CodeAnalysis.Analyzers/Core/MetaAnalyzers/RegisterActionAnalyzer.cs b/src/Microsoft.CodeAnalysis.Analyzers/Core/MetaAnalyzers/RegisterActionAnalyzer.cs
index fcb89fa498..cd8844655a 100644
--- a/src/Microsoft.CodeAnalysis.Analyzers/Core/MetaAnalyzers/RegisterActionAnalyzer.cs
+++ b/src/Microsoft.CodeAnalysis.Analyzers/Core/MetaAnalyzers/RegisterActionAnalyzer.cs
@@ -16,6 +16,13 @@ namespace Microsoft.CodeAnalysis.Analyzers.MetaAnalyzers
{
using static CodeAnalysisDiagnosticsResources;
+ ///
+ /// RS1002:
+ /// RS1003:
+ /// RS1006:
+ /// RS1012:
+ /// RS1013:
+ ///
public abstract class RegisterActionAnalyzer : DiagnosticAnalyzerCorrectnessAnalyzer
where TInvocationExpressionSyntax : SyntaxNode
where TArgumentSyntax : SyntaxNode
diff --git a/src/Microsoft.CodeAnalysis.Analyzers/Core/UpgradeMSBuildWorkspaceAnalyzer.cs b/src/Microsoft.CodeAnalysis.Analyzers/Core/UpgradeMSBuildWorkspaceAnalyzer.cs
index 61e20fa656..e39d57fd99 100644
--- a/src/Microsoft.CodeAnalysis.Analyzers/Core/UpgradeMSBuildWorkspaceAnalyzer.cs
+++ b/src/Microsoft.CodeAnalysis.Analyzers/Core/UpgradeMSBuildWorkspaceAnalyzer.cs
@@ -9,6 +9,9 @@ namespace Microsoft.CodeAnalysis.Analyzers
{
using static CodeAnalysisDiagnosticsResources;
+ ///
+ /// RS1023:
+ ///
public abstract class UpgradeMSBuildWorkspaceAnalyzer : DiagnosticAnalyzer
{
private const string WorkspacesDesktop = "Microsoft.CodeAnalysis.Workspaces.Desktop";
diff --git a/src/Microsoft.CodeAnalysis.BannedApiAnalyzers/Core/RestrictedInternalsVisibleToAnalyzer.cs b/src/Microsoft.CodeAnalysis.BannedApiAnalyzers/Core/RestrictedInternalsVisibleToAnalyzer.cs
index 587fd3b42a..fb6717d120 100644
--- a/src/Microsoft.CodeAnalysis.BannedApiAnalyzers/Core/RestrictedInternalsVisibleToAnalyzer.cs
+++ b/src/Microsoft.CodeAnalysis.BannedApiAnalyzers/Core/RestrictedInternalsVisibleToAnalyzer.cs
@@ -16,6 +16,9 @@ namespace Microsoft.CodeAnalysis.BannedApiAnalyzers
{
using static BannedApiAnalyzerResources;
+ ///
+ /// RS0035:
+ ///
public abstract class RestrictedInternalsVisibleToAnalyzer : DiagnosticAnalyzer
where TNameSyntax : SyntaxNode
where TSyntaxKind : struct
diff --git a/src/NetAnalyzers/CSharp/Microsoft.NetCore.Analyzers/Performance/CSharpConstantExpectedAnalyzer.cs b/src/NetAnalyzers/CSharp/Microsoft.NetCore.Analyzers/Performance/CSharpConstantExpectedAnalyzer.cs
new file mode 100644
index 0000000000..ae87caec60
--- /dev/null
+++ b/src/NetAnalyzers/CSharp/Microsoft.NetCore.Analyzers/Performance/CSharpConstantExpectedAnalyzer.cs
@@ -0,0 +1,64 @@
+// Copyright (c) Microsoft. All Rights Reserved. Licensed under the MIT license. See License.txt in the project root for license information.
+
+using System.Linq;
+using Microsoft.CodeAnalysis;
+using Microsoft.CodeAnalysis.CSharp;
+using Microsoft.CodeAnalysis.CSharp.Syntax;
+using Microsoft.CodeAnalysis.Diagnostics;
+using Microsoft.NetCore.Analyzers.Performance;
+
+namespace Microsoft.NetCore.CSharp.Analyzers.Performance
+{
+ [DiagnosticAnalyzer(LanguageNames.CSharp)]
+ public sealed class CSharpConstantExpectedAnalyzer : ConstantExpectedAnalyzer
+ {
+ private static readonly CSharpDiagnosticHelper s_diagnosticHelper = new();
+ private static readonly IdentifierNameSyntax s_constantExpectedIdentifier = (IdentifierNameSyntax)SyntaxFactory.ParseName(ConstantExpected);
+ private static readonly IdentifierNameSyntax s_constantExpectedAttributeIdentifier = (IdentifierNameSyntax)SyntaxFactory.ParseName(ConstantExpectedAttribute);
+
+ protected override DiagnosticHelper Helper => s_diagnosticHelper;
+
+ protected override void RegisterAttributeSyntax(CompilationStartAnalysisContext context, ConstantExpectedContext constantExpectedContext)
+ {
+ context.RegisterSyntaxNodeAction(context => OnAttributeNode(context, constantExpectedContext), SyntaxKind.Attribute);
+ }
+
+ private void OnAttributeNode(SyntaxNodeAnalysisContext context, ConstantExpectedContext constantExpectedContext)
+ {
+ var attributeSyntax = (AttributeSyntax)context.Node;
+ var attributeName = attributeSyntax.Name;
+ if (!attributeName.IsEquivalentTo(s_constantExpectedIdentifier) && !attributeName.IsEquivalentTo(s_constantExpectedAttributeIdentifier))
+ {
+ return;
+ }
+
+ if (attributeSyntax.Parent.Parent is ParameterSyntax parameter)
+ {
+ var parameterSymbol = context.SemanticModel.GetDeclaredSymbol(parameter);
+ OnParameterWithConstantExpectedAttribute(parameterSymbol, constantExpectedContext, context.ReportDiagnostic);
+ }
+ }
+
+ private sealed class CSharpDiagnosticHelper : DiagnosticHelper
+ {
+ private readonly IdentifierNameSyntax _constantExpectedMinIdentifier = (IdentifierNameSyntax)SyntaxFactory.ParseName(ConstantExpectedMin);
+ private readonly IdentifierNameSyntax _constantExpectedMaxIdentifier = (IdentifierNameSyntax)SyntaxFactory.ParseName(ConstantExpectedMax);
+
+ public override Location? GetMaxLocation(SyntaxNode attributeNode) => GetArgumentLocation(attributeNode, _constantExpectedMaxIdentifier);
+
+ public override Location? GetMinLocation(SyntaxNode attributeNode) => GetArgumentLocation(attributeNode, _constantExpectedMinIdentifier);
+
+ private static Location? GetArgumentLocation(SyntaxNode attributeNode, IdentifierNameSyntax targetNameSyntax)
+ {
+ var attributeSyntax = (AttributeSyntax)attributeNode;
+ if (attributeSyntax.ArgumentList is null)
+ {
+ return null;
+ }
+ var targetArg = attributeSyntax.ArgumentList.Arguments.FirstOrDefault(arg => arg.NameEquals.Name.IsEquivalentTo(targetNameSyntax, true));
+ return targetArg?.GetLocation();
+ }
+ }
+ }
+}
+;
\ No newline at end of file
diff --git a/src/NetAnalyzers/CSharp/Microsoft.NetCore.Analyzers/Runtime/CSharpDoNotUseStackallocInLoops.cs b/src/NetAnalyzers/CSharp/Microsoft.NetCore.Analyzers/Runtime/CSharpDoNotUseStackallocInLoops.cs
index 22a2a694f2..e5eeac01f4 100644
--- a/src/NetAnalyzers/CSharp/Microsoft.NetCore.Analyzers/Runtime/CSharpDoNotUseStackallocInLoops.cs
+++ b/src/NetAnalyzers/CSharp/Microsoft.NetCore.Analyzers/Runtime/CSharpDoNotUseStackallocInLoops.cs
@@ -38,7 +38,8 @@ public sealed override void Initialize(AnalysisContext context)
// foreach loops are special, in that as with other loops we don't want stackallocs
// in the body of the loop, but in the expression of a foreach is ok.
case SyntaxKind.ForEachStatement:
- ForEachStatementSyntax foreachStatement = (ForEachStatementSyntax)node;
+ case SyntaxKind.ForEachVariableStatement:
+ var foreachStatement = (CommonForEachStatementSyntax)node;
if (foreachStatement.Expression.Contains(ctx.Node))
{
continue;
@@ -71,7 +72,7 @@ static bool ShouldWarn(IOperation? op, SyntaxNode node)
foreach (IOperation child in block.Operations)
{
if (child.Syntax.SpanStart > node.SpanStart &&
- (child is IReturnOperation || (child is IBranchOperation branch && branch.BranchKind == BranchKind.Break)))
+ (child is IReturnOperation or IBranchOperation { BranchKind: BranchKind.Break }))
{
// Err on the side of false negatives / caution and say this stackalloc is ok.
// Note, too, it's possible we're breaking out of a nested loop, and the outer loop
@@ -88,7 +89,7 @@ static bool ShouldWarn(IOperation? op, SyntaxNode node)
}
// Warn as needed.
- if (ShouldWarn(ctx.SemanticModel.GetOperationWalkingUpParentChain(ctx.Node, default), ctx.Node))
+ if (ShouldWarn(ctx.SemanticModel.GetOperationWalkingUpParentChain(ctx.Node, ctx.CancellationToken), ctx.Node))
{
ctx.ReportDiagnostic(ctx.Node.CreateDiagnostic(Rule));
}
diff --git a/src/NetAnalyzers/Core/AnalyzerReleases.Shipped.md b/src/NetAnalyzers/Core/AnalyzerReleases.Shipped.md
index e5586b2214..0f56a95458 100644
--- a/src/NetAnalyzers/Core/AnalyzerReleases.Shipped.md
+++ b/src/NetAnalyzers/Core/AnalyzerReleases.Shipped.md
@@ -287,3 +287,27 @@ Rule ID | Category | Severity | Notes
CA1801 | Usage | Disabled | ReviewUnusedParametersAnalyzer, [Documentation](https://learn.microsoft.com/visualstudio/code-quality/ca1801)
IL3000 | Publish | Disabled | Moved analyzer to mono/linker
IL3001 | Publish | Disabled | Moved analyzer to mono/linker
+
+## Release 7.0
+
+### New Rules
+
+Rule ID | Category | Severity | Notes
+--------|----------|----------|-------
+CA1311 | Globalization | Hidden | SpecifyCultureForToLowerAndToUpper, [Documentation](https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1311)
+CA1420 | Interoperability | Warning | FeatureUnsupportedWhenRuntimeMarshallingDisabled, [Documentation](https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1420)
+CA1421 | Interoperability | Info | MethodUsesRuntimeMarshallingEvenWhenMarshallingDisabled, [Documentation](https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1421)
+CA1422 | Interoperability | Warning | PlatformCompatibilityAnalyzer, [Documentation](https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1422)
+CA1849 | Performance | Disabled | UseAsyncMethodInAsyncContext, [Documentation](https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1849)
+CA1850 | Performance | Info | PreferHashDataOverComputeHashAnalyzer, [Documentation](https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1850)
+CA1851 | Performance | Disabled | AvoidMultipleEnumerations, [Documentation](https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1851)
+CA1852 | Performance | Hidden | SealInternalTypes, [Documentation](https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1852)
+CA1853 | Performance | Info | DoNotGuardDictionaryRemoveByContainsKey, [Documentation](https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1853)
+CA1854 | Performance | Info | PreferDictionaryTryGetValueAnalyzer, [Documentation](https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1854)
+CA1855 | Performance | Info | UseSpanClearInsteadOfFillAnalyzer, [Documentation](https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1855)
+CA2019 | Reliability | Info | UseThreadStaticCorrectly, [Documentation](https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2019)
+CA2020 | Reliability | Info | PreventNumericIntPtrUIntPtrBehavioralChanges, [Documentation](https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2020)
+CA2259 | Usage | Warning | UseThreadStaticCorrectly, [Documentation](https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2259)
+CA2260 | Usage | Warning | ImplementGenericMathInterfacesCorrectly, [Documentation](https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2260)
+CA5404 | Security | Disabled | DoNotDisableTokenValidationChecks, [Documentation](https://learn.microsoft.com/visualstudio/code-quality/ca5404)
+CA5405 | Security | Disabled | DoNotAlwaysSkipTokenValidationInDelegates, [Documentation](https://learn.microsoft.com/visualstudio/code-quality/ca5405)
diff --git a/src/NetAnalyzers/Core/AnalyzerReleases.Unshipped.md b/src/NetAnalyzers/Core/AnalyzerReleases.Unshipped.md
index 43032124eb..4cb7d58e49 100644
--- a/src/NetAnalyzers/Core/AnalyzerReleases.Unshipped.md
+++ b/src/NetAnalyzers/Core/AnalyzerReleases.Unshipped.md
@@ -4,20 +4,5 @@
Rule ID | Category | Severity | Notes
--------|----------|----------|-------
-CA1311 | Globalization | Hidden | SpecifyCultureForToLowerAndToUpper, [Documentation](https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1311)
-CA1420 | Interoperability | Warning | FeatureUnsupportedWhenRuntimeMarshallingDisabled, [Documentation](https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1420)
-CA1421 | Interoperability | Info | MethodUsesRuntimeMarshallingEvenWhenMarshallingDisabled, [Documentation](https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1421)
-CA1422 | Interoperability | Warning | PlatformCompatibilityAnalyzer, [Documentation](https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1422)
-CA1849 | Performance | Disabled | UseAsyncMethodInAsyncContext, [Documentation](https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1849)
-CA1850 | Performance | Info | PreferHashDataOverComputeHashAnalyzer, [Documentation](https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1850)
-CA1851 | Performance | Disabled | AvoidMultipleEnumerations, [Documentation](https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1851)
-CA1852 | Performance | Hidden | SealInternalTypes, [Documentation](https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1852)
-CA1853 | Performance | Info | DoNotGuardDictionaryRemoveByContainsKey, [Documentation](https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1853)
-CA1854 | Performance | Info | PreferDictionaryTryGetValueAnalyzer, [Documentation](https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1854)
-CA1855 | Performance | Info | UseSpanClearInsteadOfFillAnalyzer, [Documentation](https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1855)
-CA2019 | Reliability | Info | UseThreadStaticCorrectly, [Documentation](https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2019)
-CA2020 | Reliability | Info | PreventNumericIntPtrUIntPtrBehavioralChanges, [Documentation](https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2020)
-CA2259 | Usage | Warning | UseThreadStaticCorrectly, [Documentation](https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2259)
-CA2260 | Usage | Warning | ImplementGenericMathInterfacesCorrectly, [Documentation](https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2260)
-CA5404 | Security | Disabled | DoNotDisableTokenValidationChecks, [Documentation](https://learn.microsoft.com/visualstudio/code-quality/ca5404)
-CA5405 | Security | Disabled | DoNotAlwaysSkipTokenValidationInDelegates, [Documentation](https://learn.microsoft.com/visualstudio/code-quality/ca5405)
+CA1856 | Performance | Error | ConstantExpectedAnalyzer, [Documentation](https://docs.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1856)
+CA1857 | Performance | Warning | ConstantExpectedAnalyzer, [Documentation](https://docs.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1857)
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/AbstractTypesShouldNotHaveConstructors.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/AbstractTypesShouldNotHaveConstructors.cs
index db11e37084..e26c3b37b0 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/AbstractTypesShouldNotHaveConstructors.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/AbstractTypesShouldNotHaveConstructors.cs
@@ -12,7 +12,7 @@ namespace Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines
using static MicrosoftCodeQualityAnalyzersResources;
///
- /// CA1012: Abstract classes should not have public constructors
+ /// CA1012:
///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
public sealed class AbstractTypesShouldNotHaveConstructorsAnalyzer : DiagnosticAnalyzer
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/AvoidEmptyInterfaces.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/AvoidEmptyInterfaces.cs
index b26dc5030b..ca9cec4328 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/AvoidEmptyInterfaces.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/AvoidEmptyInterfaces.cs
@@ -12,7 +12,7 @@ namespace Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines
using static MicrosoftCodeQualityAnalyzersResources;
///
- /// CA1040: Avoid empty interfaces
+ /// CA1040:
///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
public sealed class AvoidEmptyInterfacesAnalyzer : DiagnosticAnalyzer
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/AvoidExcessiveParametersOnGenericTypes.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/AvoidExcessiveParametersOnGenericTypes.cs
index 7a99916a01..cc69c0ecc3 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/AvoidExcessiveParametersOnGenericTypes.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/AvoidExcessiveParametersOnGenericTypes.cs
@@ -10,6 +10,9 @@ namespace Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines
{
using static MicrosoftCodeQualityAnalyzersResources;
+ ///
+ /// CA1005:
+ ///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
public sealed class AvoidExcessiveParametersOnGenericTypes : DiagnosticAnalyzer
{
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/AvoidOutParameters.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/AvoidOutParameters.cs
index ea979867ac..6a24023fde 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/AvoidOutParameters.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/AvoidOutParameters.cs
@@ -12,6 +12,9 @@ namespace Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines
{
using static MicrosoftCodeQualityAnalyzersResources;
+ ///
+ /// CA1021:
+ ///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
public sealed class AvoidOutParameters : DiagnosticAnalyzer
{
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/CancellationTokenParametersMustComeLast.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/CancellationTokenParametersMustComeLast.cs
index a1279286a7..bd388898bb 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/CancellationTokenParametersMustComeLast.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/CancellationTokenParametersMustComeLast.cs
@@ -12,7 +12,7 @@ namespace Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines
using static MicrosoftCodeQualityAnalyzersResources;
///
- /// CA1068: CancellationToken parameters must come last.
+ /// CA1068:
///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
public sealed class CancellationTokenParametersMustComeLastAnalyzer : DiagnosticAnalyzer
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/CollectionPropertiesShouldBeReadOnly.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/CollectionPropertiesShouldBeReadOnly.cs
index cba5a8c72b..22c8dd32c7 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/CollectionPropertiesShouldBeReadOnly.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/CollectionPropertiesShouldBeReadOnly.cs
@@ -14,7 +14,7 @@ namespace Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines
using static MicrosoftCodeQualityAnalyzersResources;
///
- /// CA2227: Collection properties should be read only
+ /// CA2227:
///
/// Cause:
/// An externally visible writable property is a type that implements System.Collections.ICollection.
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/CollectionsShouldImplementGenericInterface.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/CollectionsShouldImplementGenericInterface.cs
index ce85b77af6..2507a39a43 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/CollectionsShouldImplementGenericInterface.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/CollectionsShouldImplementGenericInterface.cs
@@ -16,7 +16,7 @@ namespace Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines
using static MicrosoftCodeQualityAnalyzersResources;
///
- /// CA1010: Collections should implement generic interface
+ /// CA1010:
///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
public sealed class CollectionsShouldImplementGenericInterfaceAnalyzer : DiagnosticAnalyzer
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/DeclareTypesInNamespaces.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/DeclareTypesInNamespaces.cs
index bd530ce03f..f013dc8d37 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/DeclareTypesInNamespaces.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/DeclareTypesInNamespaces.cs
@@ -11,7 +11,7 @@ namespace Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines
using static MicrosoftCodeQualityAnalyzersResources;
///
- /// CA1050: Declare types in namespaces
+ /// CA1050:
///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
public sealed class DeclareTypesInNamespacesAnalyzer : DiagnosticAnalyzer
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/DefineAccessorsForAttributeArguments.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/DefineAccessorsForAttributeArguments.cs
index 9aae01ef86..d88211eee4 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/DefineAccessorsForAttributeArguments.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/DefineAccessorsForAttributeArguments.cs
@@ -14,7 +14,7 @@ namespace Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines
using static MicrosoftCodeQualityAnalyzersResources;
///
- /// CA1019: Define accessors for attribute arguments
+ /// CA1019:
///
/// Cause:
/// In its constructor, an attribute defines arguments that do not have corresponding properties.
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/DoNotDeclareProtectedMembersInSealedTypes.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/DoNotDeclareProtectedMembersInSealedTypes.cs
index 91315728f1..c87be4436d 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/DoNotDeclareProtectedMembersInSealedTypes.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/DoNotDeclareProtectedMembersInSealedTypes.cs
@@ -11,6 +11,7 @@ namespace Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines
using static MicrosoftCodeQualityAnalyzersResources;
///
+ /// CA1047:
/// This rule is not implemented for C# as the compiler warning CS0628 already covers this part.
///
#pragma warning disable RS1004 // Recommend adding language support to diagnostic analyzer
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/DoNotDeclareStaticMembersOnGenericTypes.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/DoNotDeclareStaticMembersOnGenericTypes.cs
index 6941428409..1ed4d01824 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/DoNotDeclareStaticMembersOnGenericTypes.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/DoNotDeclareStaticMembersOnGenericTypes.cs
@@ -11,7 +11,7 @@ namespace Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines
using static MicrosoftCodeQualityAnalyzersResources;
///
- /// CA1000: Do not declare static members on generic types
+ /// CA1000:
///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
public sealed class DoNotDeclareStaticMembersOnGenericTypesAnalyzer : DiagnosticAnalyzer
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/DoNotDeclareVisibleInstanceFields.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/DoNotDeclareVisibleInstanceFields.cs
index 2ededa9507..14e1514fc0 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/DoNotDeclareVisibleInstanceFields.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/DoNotDeclareVisibleInstanceFields.cs
@@ -11,7 +11,7 @@ namespace Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines
using static MicrosoftCodeQualityAnalyzersResources;
///
- /// CA1051: Do not declare visible instance fields
+ /// CA1051:
///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
public sealed class DoNotDeclareVisibleInstanceFieldsAnalyzer : DiagnosticAnalyzer
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/DoNotDirectlyAwaitATask.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/DoNotDirectlyAwaitATask.cs
index 3a634619b2..16900225d1 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/DoNotDirectlyAwaitATask.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/DoNotDirectlyAwaitATask.cs
@@ -14,7 +14,7 @@ namespace Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines
using static MicrosoftCodeQualityAnalyzersResources;
///
- /// CA2007: Do not directly await a Task in libraries. Append ConfigureAwait(false) to the task.
+ /// CA2007:
///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
public sealed class DoNotDirectlyAwaitATaskAnalyzer : DiagnosticAnalyzer
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/DoNotExposeGenericLists.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/DoNotExposeGenericLists.cs
index baff44419c..16da9400ab 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/DoNotExposeGenericLists.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/DoNotExposeGenericLists.cs
@@ -10,6 +10,9 @@ namespace Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines
{
using static MicrosoftCodeQualityAnalyzersResources;
+ ///
+ /// CA1002:
+ ///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
public sealed class DoNotExposeGenericLists : DiagnosticAnalyzer
{
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/DoNotHideBaseClassMethods.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/DoNotHideBaseClassMethods.cs
index 2193acf5d2..a2e0ccdf62 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/DoNotHideBaseClassMethods.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/DoNotHideBaseClassMethods.cs
@@ -13,7 +13,7 @@ namespace Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines
using static MicrosoftCodeQualityAnalyzersResources;
///
- /// CA1061: Do not hide base class methods
+ /// CA1061:
///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
public sealed class DoNotHideBaseClassMethodsAnalyzer : DiagnosticAnalyzer
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/DoNotNameEnumValuesReserved.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/DoNotNameEnumValuesReserved.cs
index 5b5f4e2511..2bdb0e29b4 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/DoNotNameEnumValuesReserved.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/DoNotNameEnumValuesReserved.cs
@@ -10,6 +10,9 @@ namespace Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines
{
using static MicrosoftCodeQualityAnalyzersResources;
+ ///
+ /// CA1700:
+ ///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
public sealed class DoNotNameEnumValuesReserved : DiagnosticAnalyzer
{
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/DoNotOverloadOperatorEqualsOnReferenceTypes.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/DoNotOverloadOperatorEqualsOnReferenceTypes.cs
index b76cbf1017..b367787796 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/DoNotOverloadOperatorEqualsOnReferenceTypes.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/DoNotOverloadOperatorEqualsOnReferenceTypes.cs
@@ -10,6 +10,9 @@ namespace Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines
{
using static MicrosoftCodeQualityAnalyzersResources;
+ ///
+ /// CA1046:
+ ///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
public sealed class DoNotOverloadOperatorEqualsOnReferenceTypes : DiagnosticAnalyzer
{
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/DoNotPassTypesByReference.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/DoNotPassTypesByReference.cs
index 0aacf71dde..690e51b02c 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/DoNotPassTypesByReference.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/DoNotPassTypesByReference.cs
@@ -10,6 +10,9 @@ namespace Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines
{
using static MicrosoftCodeQualityAnalyzersResources;
+ ///
+ /// CA1045:
+ ///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
public sealed class DoNotPassTypesByReference : DiagnosticAnalyzer
{
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/DoNotPrefixEnumValuesWithTypeName.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/DoNotPrefixEnumValuesWithTypeName.cs
index 4a5aa38691..e98022e083 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/DoNotPrefixEnumValuesWithTypeName.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/DoNotPrefixEnumValuesWithTypeName.cs
@@ -15,7 +15,7 @@ namespace Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines
using static MicrosoftCodeQualityAnalyzersResources;
///
- /// CA1712: Do not prefix enum values with type name
+ /// CA1712:
///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
public sealed class DoNotPrefixEnumValuesWithTypeNameAnalyzer : DiagnosticAnalyzer
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/DoNotRaiseExceptionsInUnexpectedLocations.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/DoNotRaiseExceptionsInUnexpectedLocations.cs
index 7d31db6212..36b38ea1c4 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/DoNotRaiseExceptionsInUnexpectedLocations.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/DoNotRaiseExceptionsInUnexpectedLocations.cs
@@ -15,7 +15,7 @@ namespace Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines
using static MicrosoftCodeQualityAnalyzersResources;
///
- /// CA1065: Do not raise exceptions in unexpected locations
+ /// CA1065:
///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
public sealed class DoNotRaiseExceptionsInUnexpectedLocationsAnalyzer : DiagnosticAnalyzer
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/EnumShouldNotHaveDuplicatedValues.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/EnumShouldNotHaveDuplicatedValues.cs
index 2cad74e4d1..864757d526 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/EnumShouldNotHaveDuplicatedValues.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/EnumShouldNotHaveDuplicatedValues.cs
@@ -13,6 +13,9 @@ namespace Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines
{
using static MicrosoftCodeQualityAnalyzersResources;
+ ///
+ /// CA1069:
+ ///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
public class EnumShouldNotHaveDuplicatedValues : DiagnosticAnalyzer
{
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/EnumStorageShouldBeInt32.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/EnumStorageShouldBeInt32.cs
index d8711ab0c4..d859e3adba 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/EnumStorageShouldBeInt32.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/EnumStorageShouldBeInt32.cs
@@ -11,7 +11,7 @@ namespace Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines
using static MicrosoftCodeQualityAnalyzersResources;
///
- /// CA1028: Enum Storage should be Int32
+ /// CA1028:
/// Implementation slightly modified from original FxCop after discussing with Nick Guerrera
/// FxCop implementation used 2 distinct diagnostic messages depending on the underlying type of the enum
/// In this implementation, we have only 1 diagnostic message - "If possible, make the underlying type of '{0}' System.Int32 instead of {1}."
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/EnumWithFlagsAttribute.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/EnumWithFlagsAttribute.cs
index d4cfd0477e..3a000641f4 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/EnumWithFlagsAttribute.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/EnumWithFlagsAttribute.cs
@@ -16,16 +16,14 @@ namespace Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines
using static MicrosoftCodeQualityAnalyzersResources;
///
- /// Implements CA1027 and CA2217
- ///
- /// 1) CA1027: Mark enums with FlagsAttribute
+ /// CA1027:
///
/// Cause:
/// The values of a public enumeration are powers of two or are combinations of other values that are defined in the enumeration,
/// and the System.FlagsAttribute attribute is not present.
/// To reduce false positives, this rule does not report a violation for enumerations that have contiguous values.
///
- /// 2) CA2217: Do not mark enums with FlagsAttribute
+ /// CA2217:
///
/// Cause:
/// An externally visible enumeration is marked with FlagsAttribute and it has one or more values that are not powers of two or
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/EnumsShouldHaveZeroValue.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/EnumsShouldHaveZeroValue.cs
index 4cdb05ed45..d71e6a5cba 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/EnumsShouldHaveZeroValue.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/EnumsShouldHaveZeroValue.cs
@@ -15,7 +15,7 @@ namespace Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines
using static MicrosoftCodeQualityAnalyzersResources;
///
- /// CA1008: Enums should have zero value
+ /// CA1008:
///
/// Cause:
/// An enumeration without an applied System.FlagsAttribute does not define a member that has a value of zero;
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/EquatableAnalyzer.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/EquatableAnalyzer.cs
index a736646794..2a5b8d7b8f 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/EquatableAnalyzer.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/EquatableAnalyzer.cs
@@ -11,6 +11,10 @@ namespace Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines
{
using static MicrosoftCodeQualityAnalyzersResources;
+ ///
+ /// CA1066:
+ /// CA1067:
+ ///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
public sealed class EquatableAnalyzer : DiagnosticAnalyzer
{
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/EventsShouldNotHaveBeforeOrAfterPrefix.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/EventsShouldNotHaveBeforeOrAfterPrefix.cs
index 9617c82cf8..4299aed807 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/EventsShouldNotHaveBeforeOrAfterPrefix.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/EventsShouldNotHaveBeforeOrAfterPrefix.cs
@@ -11,6 +11,9 @@ namespace Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines
{
using static MicrosoftCodeQualityAnalyzersResources;
+ ///
+ /// CA1713:
+ ///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
public sealed class EventsShouldNotHaveBeforeOrAfterPrefix : DiagnosticAnalyzer
{
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/ExceptionsShouldBePublic.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/ExceptionsShouldBePublic.cs
index 230e3a008e..82465d9ef2 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/ExceptionsShouldBePublic.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/ExceptionsShouldBePublic.cs
@@ -13,7 +13,7 @@ namespace Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines
using static MicrosoftCodeQualityAnalyzersResources;
///
- /// CA1064: Exceptions should be public
+ /// CA1064:
///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
public sealed class ExceptionsShouldBePublicAnalyzer : DiagnosticAnalyzer
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/IdentifiersShouldDifferByMoreThanCase.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/IdentifiersShouldDifferByMoreThanCase.cs
index 6d62df7743..7207c93a46 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/IdentifiersShouldDifferByMoreThanCase.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/IdentifiersShouldDifferByMoreThanCase.cs
@@ -14,6 +14,9 @@ namespace Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines
{
using static MicrosoftCodeQualityAnalyzersResources;
+ ///
+ /// CA1708:
+ ///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
public sealed class IdentifiersShouldDifferByMoreThanCaseAnalyzer : DiagnosticAnalyzer
{
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/IdentifiersShouldHaveCorrectPrefix.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/IdentifiersShouldHaveCorrectPrefix.cs
index 5742d456d6..a7808571a0 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/IdentifiersShouldHaveCorrectPrefix.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/IdentifiersShouldHaveCorrectPrefix.cs
@@ -12,6 +12,9 @@ namespace Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines
{
using static MicrosoftCodeQualityAnalyzersResources;
+ ///
+ /// CA1715:
+ ///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
public sealed class IdentifiersShouldHaveCorrectPrefixAnalyzer : DiagnosticAnalyzer
{
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/IdentifiersShouldHaveCorrectSuffix.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/IdentifiersShouldHaveCorrectSuffix.cs
index c4546e17fd..eb54c44fa9 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/IdentifiersShouldHaveCorrectSuffix.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/IdentifiersShouldHaveCorrectSuffix.cs
@@ -16,7 +16,7 @@ namespace Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines
using static MicrosoftCodeQualityAnalyzersResources;
///
- /// CA1710: Identifiers should have correct suffix
+ /// CA1710:
///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
public sealed class IdentifiersShouldHaveCorrectSuffixAnalyzer : DiagnosticAnalyzer
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/IdentifiersShouldNotContainTypeNames.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/IdentifiersShouldNotContainTypeNames.cs
index 5840a87b7c..be173d2857 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/IdentifiersShouldNotContainTypeNames.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/IdentifiersShouldNotContainTypeNames.cs
@@ -12,7 +12,7 @@ namespace Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines
using static MicrosoftCodeQualityAnalyzersResources;
///
- /// CA1720-redefined: Identifiers should not contain type names
+ /// CA1720:
/// Cause:
/// The name of a parameter or a member contains a language-specific data type name.
///
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/IdentifiersShouldNotContainUnderscores.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/IdentifiersShouldNotContainUnderscores.cs
index 19f666616f..3279307bc9 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/IdentifiersShouldNotContainUnderscores.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/IdentifiersShouldNotContainUnderscores.cs
@@ -12,7 +12,7 @@ namespace Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines
using static MicrosoftCodeQualityAnalyzersResources;
///
- /// CA1707: Identifiers should not contain underscores
+ /// CA1707:
///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
public sealed class IdentifiersShouldNotContainUnderscoresAnalyzer : DiagnosticAnalyzer
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/IdentifiersShouldNotHaveIncorrectSuffix.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/IdentifiersShouldNotHaveIncorrectSuffix.cs
index d64bebce6b..0755ca16ce 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/IdentifiersShouldNotHaveIncorrectSuffix.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/IdentifiersShouldNotHaveIncorrectSuffix.cs
@@ -13,7 +13,7 @@ namespace Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines
using static MicrosoftCodeQualityAnalyzersResources;
///
- /// CA1711: Identifiers should not have incorrect suffix
+ /// CA1711:
///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
public sealed class IdentifiersShouldNotHaveIncorrectSuffixAnalyzer : DiagnosticAnalyzer
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/IdentifiersShouldNotMatchKeywords.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/IdentifiersShouldNotMatchKeywords.cs
index 1f1a997ed1..ed45319efb 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/IdentifiersShouldNotMatchKeywords.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/IdentifiersShouldNotMatchKeywords.cs
@@ -14,7 +14,7 @@ namespace Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines
using static MicrosoftCodeQualityAnalyzersResources;
///
- /// CA1716: Identifiers should not match keywords
+ /// CA1716:
///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
public sealed class IdentifiersShouldNotMatchKeywordsAnalyzer : DiagnosticAnalyzer
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/ImplementIDisposableCorrectly.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/ImplementIDisposableCorrectly.cs
index eeb9e88ee1..6e6aff04f0 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/ImplementIDisposableCorrectly.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/ImplementIDisposableCorrectly.cs
@@ -14,7 +14,7 @@ namespace Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines
using static MicrosoftCodeQualityAnalyzersResources;
///
- /// CA1063: Implement IDisposable Correctly
+ /// CA1063:
///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
public sealed class ImplementIDisposableCorrectlyAnalyzer : DiagnosticAnalyzer
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/ImplementStandardExceptionConstructors.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/ImplementStandardExceptionConstructors.cs
index 7eac9d1e55..d1fbfe702a 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/ImplementStandardExceptionConstructors.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/ImplementStandardExceptionConstructors.cs
@@ -11,7 +11,7 @@ namespace Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines
using static MicrosoftCodeQualityAnalyzersResources;
///
- /// CA1032 - redefined: Implement standard exception constructors
+ /// CA1032:
/// Cause: A type extends System.Exception and does not declare all the required constructors.
/// Description: Exception types must implement the following constructors. Failure to provide the full set of constructors can make it difficult to correctly handle exceptions
/// For CSharp, example when type name is GoodException
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/InterfaceMethodsShouldBeCallableByChildTypes.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/InterfaceMethodsShouldBeCallableByChildTypes.cs
index 8cb9418dfa..96b221cfc6 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/InterfaceMethodsShouldBeCallableByChildTypes.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/InterfaceMethodsShouldBeCallableByChildTypes.cs
@@ -13,7 +13,7 @@ namespace Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines
using static MicrosoftCodeQualityAnalyzersResources;
///
- /// CA1033: Interface methods should be callable by child types
+ /// CA1033:
///
/// Consider a base type that explicitly implements a public interface method.
/// A type that derives from the base type can access the inherited interface method only through a reference to the current instance ('this' in C#) that is cast to the interface.
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/MarkAssembliesWithAttributesDiagnosticAnalyzer.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/MarkAssembliesWithAttributesDiagnosticAnalyzer.cs
index 62e1d6d43c..50b4d09d20 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/MarkAssembliesWithAttributesDiagnosticAnalyzer.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/MarkAssembliesWithAttributesDiagnosticAnalyzer.cs
@@ -10,6 +10,10 @@ namespace Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines
{
using static MicrosoftCodeQualityAnalyzersResources;
+ ///
+ /// CA1016:
+ /// CA1014:
+ ///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
public sealed class MarkAssembliesWithAttributesDiagnosticAnalyzer : DiagnosticAnalyzer
{
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/MarkAssembliesWithComVisible.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/MarkAssembliesWithComVisible.cs
index 459a4608d5..29dc33cb00 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/MarkAssembliesWithComVisible.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/MarkAssembliesWithComVisible.cs
@@ -11,6 +11,9 @@ namespace Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines
{
using static MicrosoftCodeQualityAnalyzersResources;
+ ///
+ /// CA1017:
+ ///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
public sealed class MarkAssembliesWithComVisibleAnalyzer : DiagnosticAnalyzer
{
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/MarkAttributesWithAttributeUsage.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/MarkAttributesWithAttributeUsage.cs
index 06f5b82213..e5243685bd 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/MarkAttributesWithAttributeUsage.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/MarkAttributesWithAttributeUsage.cs
@@ -12,7 +12,7 @@ namespace Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines
using static MicrosoftCodeQualityAnalyzersResources;
///
- /// CA1018: Custom attributes should have AttributeUsage attribute defined.
+ /// CA1018:
///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
public sealed class MarkAttributesWithAttributeUsageAnalyzer : DiagnosticAnalyzer
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/MovePInvokesToNativeMethodsClass.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/MovePInvokesToNativeMethodsClass.cs
index efc03645a9..ac1104acc9 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/MovePInvokesToNativeMethodsClass.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/MovePInvokesToNativeMethodsClass.cs
@@ -13,7 +13,7 @@ namespace Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines
using static MicrosoftCodeQualityAnalyzersResources;
///
- /// CA1060 - Move P/Invokes to native methods class
+ /// CA1060:
///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
public sealed class MovePInvokesToNativeMethodsClassAnalyzer : DiagnosticAnalyzer
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/NestedTypesShouldNotBeVisible.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/NestedTypesShouldNotBeVisible.cs
index 1d274aa909..55e53fff08 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/NestedTypesShouldNotBeVisible.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/NestedTypesShouldNotBeVisible.cs
@@ -13,7 +13,7 @@ namespace Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines
using static MicrosoftCodeQualityAnalyzersResources;
///
- /// CA1034: Nested types should not be visible
+ /// CA1034:
///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
public sealed class NestedTypesShouldNotBeVisibleAnalyzer : DiagnosticAnalyzer
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/NonConstantFieldsShouldNotBeVisible.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/NonConstantFieldsShouldNotBeVisible.cs
index 245080c86e..bbecf90b41 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/NonConstantFieldsShouldNotBeVisible.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/NonConstantFieldsShouldNotBeVisible.cs
@@ -11,7 +11,7 @@ namespace Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines
using static MicrosoftCodeQualityAnalyzersResources;
///
- /// CA2211: Non-constant fields should not be visible
+ /// CA2211:
///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
public sealed class NonConstantFieldsShouldNotBeVisibleAnalyzer : DiagnosticAnalyzer
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/OperatorOverloadsHaveNamedAlternates.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/OperatorOverloadsHaveNamedAlternates.cs
index 0a729fbb05..02f409ef06 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/OperatorOverloadsHaveNamedAlternates.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/OperatorOverloadsHaveNamedAlternates.cs
@@ -13,7 +13,7 @@ namespace Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines
using static MicrosoftCodeQualityAnalyzersResources;
///
- /// CA2225: Operator overloads have named alternates
+ /// CA2225:
///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
public sealed class OperatorOverloadsHaveNamedAlternatesAnalyzer : DiagnosticAnalyzer
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/OperatorsShouldHaveSymmetricalOverloads.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/OperatorsShouldHaveSymmetricalOverloads.cs
index 272ac051c9..d39689ae5c 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/OperatorsShouldHaveSymmetricalOverloads.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/OperatorsShouldHaveSymmetricalOverloads.cs
@@ -11,7 +11,7 @@ namespace Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines
using static MicrosoftCodeQualityAnalyzersResources;
///
- /// CA2226: Operators should have symmetrical overloads
+ /// CA2226:
///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
public sealed class OperatorsShouldHaveSymmetricalOverloadsAnalyzer : DiagnosticAnalyzer
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/OverloadOperatorEqualsOnOverridingValueTypeEquals.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/OverloadOperatorEqualsOnOverridingValueTypeEquals.cs
index 3c1d5a0d68..37a5fbab60 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/OverloadOperatorEqualsOnOverridingValueTypeEquals.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/OverloadOperatorEqualsOnOverridingValueTypeEquals.cs
@@ -11,7 +11,7 @@ namespace Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines
using static MicrosoftCodeQualityAnalyzersResources;
///
- /// CA2231: A value type overrides Equals but does not implement the equality operator.
+ /// CA2231:
///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
public sealed class OverloadOperatorEqualsOnOverridingValueTypeEqualsAnalyzer : DiagnosticAnalyzer
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/OverrideEqualsAndOperatorEqualsOnValueTypes.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/OverrideEqualsAndOperatorEqualsOnValueTypes.cs
index 30edabe538..9c45a485c5 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/OverrideEqualsAndOperatorEqualsOnValueTypes.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/OverrideEqualsAndOperatorEqualsOnValueTypes.cs
@@ -12,7 +12,7 @@ namespace Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines
using static MicrosoftCodeQualityAnalyzersResources;
///
- /// CA1815: Override equals and operator equals on value types
+ /// CA1815:
///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
public class OverrideEqualsAndOperatorEqualsOnValueTypesAnalyzer : DiagnosticAnalyzer
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/OverrideMethodsOnComparableTypes.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/OverrideMethodsOnComparableTypes.cs
index 0c19c3b745..924b925059 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/OverrideMethodsOnComparableTypes.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/OverrideMethodsOnComparableTypes.cs
@@ -13,7 +13,8 @@ namespace Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines
using static MicrosoftCodeQualityAnalyzersResources;
///
- /// CA1036: A public or protected type implements the System.IComparable interface and
+ /// CA1036:
+ /// A public or protected type implements the System.IComparable interface and
/// does not override Object.Equals or does not overload the language-specific operator
/// for equality, inequality, less than, less than or equal, greater than or
/// greater than or equal. The rule does not report a violation if the type inherits
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/ParameterNamesShouldMatchBaseDeclaration.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/ParameterNamesShouldMatchBaseDeclaration.cs
index 19b0db36af..86dd43e857 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/ParameterNamesShouldMatchBaseDeclaration.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/ParameterNamesShouldMatchBaseDeclaration.cs
@@ -12,7 +12,7 @@ namespace Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines
using static MicrosoftCodeQualityAnalyzersResources;
///
- /// CA1725: Parameter names should match base declaration
+ /// CA1725:
///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
public sealed class ParameterNamesShouldMatchBaseDeclarationAnalyzer : DiagnosticAnalyzer
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/PassSystemUriObjectsInsteadOfStrings.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/PassSystemUriObjectsInsteadOfStrings.cs
index 10eaaf3846..f981ebdd37 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/PassSystemUriObjectsInsteadOfStrings.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/PassSystemUriObjectsInsteadOfStrings.cs
@@ -15,7 +15,7 @@ namespace Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines
using static MicrosoftCodeQualityAnalyzersResources;
///
- /// CA2234: Pass system uri objects instead of strings
+ /// CA2234:
///
public abstract class PassSystemUriObjectsInsteadOfStringsAnalyzer : DiagnosticAnalyzer
{
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/PropertiesShouldNotBeWriteOnly.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/PropertiesShouldNotBeWriteOnly.cs
index 0810d61132..d3befba4f9 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/PropertiesShouldNotBeWriteOnly.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/PropertiesShouldNotBeWriteOnly.cs
@@ -12,7 +12,7 @@ namespace Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines
using static MicrosoftCodeQualityAnalyzersResources;
///
- /// CA1044: Properties should not be write only
+ /// CA1044:
///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
public sealed class PropertiesShouldNotBeWriteOnlyAnalyzer : DiagnosticAnalyzer
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/PropertiesShouldNotReturnArrays.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/PropertiesShouldNotReturnArrays.cs
index 6ed389647c..b12d761df7 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/PropertiesShouldNotReturnArrays.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/PropertiesShouldNotReturnArrays.cs
@@ -11,7 +11,7 @@ namespace Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines
using static MicrosoftCodeQualityAnalyzersResources;
///
- /// CA1819: Properties should not return arrays
+ /// CA1819:
///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
public sealed class PropertiesShouldNotReturnArraysAnalyzer : DiagnosticAnalyzer
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/PropertyNamesShouldNotMatchGetMethods.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/PropertyNamesShouldNotMatchGetMethods.cs
index 4f55cb76c8..5e85917a8f 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/PropertyNamesShouldNotMatchGetMethods.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/PropertyNamesShouldNotMatchGetMethods.cs
@@ -13,7 +13,7 @@ namespace Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines
using static MicrosoftCodeQualityAnalyzersResources;
///
- /// CA1721: Property names should not match get methods
+ /// CA1721:
///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
public sealed class PropertyNamesShouldNotMatchGetMethodsAnalyzer : DiagnosticAnalyzer
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/ProvideObsoleteAttributeMessage.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/ProvideObsoleteAttributeMessage.cs
index 28a28e9876..65d58e793d 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/ProvideObsoleteAttributeMessage.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/ProvideObsoleteAttributeMessage.cs
@@ -12,7 +12,7 @@ namespace Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines
using static MicrosoftCodeQualityAnalyzersResources;
///
- /// CA1041: Provide ObsoleteAttribute message
+ /// CA1041:
///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
public sealed class ProvideObsoleteAttributeMessageAnalyzer : DiagnosticAnalyzer
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/StaticHolderTypes.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/StaticHolderTypes.cs
index a693c3c3de..75386e44b2 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/StaticHolderTypes.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/StaticHolderTypes.cs
@@ -11,8 +11,7 @@ namespace Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines
using static MicrosoftCodeQualityAnalyzersResources;
///
- /// CA1052: Static holder classes should be marked static, and should not have default
- /// constructors.
+ /// CA1052:
///
///
///
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/TypeNamesShouldNotMatchNamespaces.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/TypeNamesShouldNotMatchNamespaces.cs
index a6368bbbbd..c4d515a7d8 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/TypeNamesShouldNotMatchNamespaces.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/TypeNamesShouldNotMatchNamespaces.cs
@@ -14,7 +14,7 @@ namespace Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines
using static MicrosoftCodeQualityAnalyzersResources;
///
- /// CA1724: Type names should not match namespaces
+ /// CA1724:
///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
public sealed class TypeNamesShouldNotMatchNamespacesAnalyzer : DiagnosticAnalyzer
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/TypesThatOwnDisposableFieldsShouldBeDisposable.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/TypesThatOwnDisposableFieldsShouldBeDisposable.cs
index 2af0c99091..0808ef0590 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/TypesThatOwnDisposableFieldsShouldBeDisposable.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/TypesThatOwnDisposableFieldsShouldBeDisposable.cs
@@ -14,7 +14,7 @@ namespace Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines
using static MicrosoftCodeQualityAnalyzersResources;
///
- /// CA1001: Types that own disposable fields should be disposable
+ /// CA1001:
///
public abstract class TypesThatOwnDisposableFieldsShouldBeDisposableAnalyzer : DiagnosticAnalyzer
where TTypeDeclarationSyntax : SyntaxNode
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/UriParametersShouldNotBeStrings.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/UriParametersShouldNotBeStrings.cs
index 1cc9d1215c..9d66b410eb 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/UriParametersShouldNotBeStrings.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/UriParametersShouldNotBeStrings.cs
@@ -12,7 +12,7 @@ namespace Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines
using static MicrosoftCodeQualityAnalyzersResources;
///
- /// CA1054: Uri parameters should not be strings
+ /// CA1054:
///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
public class UriParametersShouldNotBeStringsAnalyzer : DiagnosticAnalyzer
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/UriPropertiesShouldNotBeStrings.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/UriPropertiesShouldNotBeStrings.cs
index 3a9caf722c..28e9badd96 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/UriPropertiesShouldNotBeStrings.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/UriPropertiesShouldNotBeStrings.cs
@@ -11,7 +11,7 @@ namespace Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines
using static MicrosoftCodeQualityAnalyzersResources;
///
- /// CA1056: Uri properties should not be strings
+ /// CA1056:
///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
public class UriPropertiesShouldNotBeStringsAnalyzer : DiagnosticAnalyzer
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/UriReturnValuesShouldNotBeStrings.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/UriReturnValuesShouldNotBeStrings.cs
index 021362761c..d2dea5e8f2 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/UriReturnValuesShouldNotBeStrings.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/UriReturnValuesShouldNotBeStrings.cs
@@ -11,7 +11,7 @@ namespace Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines
using static MicrosoftCodeQualityAnalyzersResources;
///
- /// CA1055: Uri return values should not be strings
+ /// CA1055:
///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
public class UriReturnValuesShouldNotBeStringsAnalyzer : DiagnosticAnalyzer
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/UseEventsWhereAppropriate.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/UseEventsWhereAppropriate.cs
index 47b5538215..1888c6596c 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/UseEventsWhereAppropriate.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/UseEventsWhereAppropriate.cs
@@ -13,7 +13,7 @@ namespace Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines
using static MicrosoftCodeQualityAnalyzersResources;
///
- /// CA1030: Use events where appropriate
+ /// CA1030:
///
/// This rule detects methods that have names that ordinarily would be used for events.
/// Events follow the Observer or Publish-Subscribe design pattern; they are used when a state change in one object must be communicated to other objects.
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/UseGenericEventHandlerInstances.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/UseGenericEventHandlerInstances.cs
index 7ef5871e62..5cc4f7cab4 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/UseGenericEventHandlerInstances.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/UseGenericEventHandlerInstances.cs
@@ -11,8 +11,7 @@ namespace Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines
using static MicrosoftCodeQualityAnalyzersResources;
///
- /// CA1003: Use generic event handler instances
- /// CA1009: A delegate that handles a public or protected event does not have the correct signature, return type, or parameter names.
+ /// CA1003:
///
/// Recommends that event handlers use
///
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/UseIntegralOrStringArgumentForIndexers.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/UseIntegralOrStringArgumentForIndexers.cs
index aaff9f8ea3..9c60be6615 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/UseIntegralOrStringArgumentForIndexers.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/UseIntegralOrStringArgumentForIndexers.cs
@@ -12,7 +12,7 @@ namespace Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines
using static MicrosoftCodeQualityAnalyzersResources;
///
- /// CA1043: Use Integral Or String Argument For Indexers
+ /// CA1043:
///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
public sealed class UseIntegralOrStringArgumentForIndexersAnalyzer : DiagnosticAnalyzer
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/UsePropertiesWhereAppropriate.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/UsePropertiesWhereAppropriate.cs
index 72f80191c3..4329a0dbdc 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/UsePropertiesWhereAppropriate.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/UsePropertiesWhereAppropriate.cs
@@ -12,7 +12,7 @@ namespace Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines
using static MicrosoftCodeQualityAnalyzersResources;
///
- /// CA1024: Use properties where appropriate
+ /// CA1024:
///
/// Cause:
/// A public or protected method has a name that starts with Get, takes no parameters, and returns a value that is not an array.
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/Documentation/AvoidUsingCrefTagsWithAPrefix.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/Documentation/AvoidUsingCrefTagsWithAPrefix.cs
index 4ac338b8fe..40b658a49d 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/Documentation/AvoidUsingCrefTagsWithAPrefix.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/Documentation/AvoidUsingCrefTagsWithAPrefix.cs
@@ -10,7 +10,7 @@ namespace Microsoft.CodeQuality.Analyzers.Documentation
using static MicrosoftCodeQualityAnalyzersResources;
///
- /// CA1200: Avoid using cref tags with a prefix
+ /// CA1200:
///
public abstract class AvoidUsingCrefTagsWithAPrefixAnalyzer : DiagnosticAnalyzer
{
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/Maintainability/AvoidDeadConditionalCode.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/Maintainability/AvoidDeadConditionalCode.cs
index daa42f0553..9c4fffe4e8 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/Maintainability/AvoidDeadConditionalCode.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/Maintainability/AvoidDeadConditionalCode.cs
@@ -18,7 +18,9 @@ namespace Microsoft.CodeQuality.Analyzers.Maintainability
using static MicrosoftCodeQualityAnalyzersResources;
///
- /// CA1508: Flags conditional expressions which are always true/false and null checks for operations that are always null/non-null based on predicate analysis.
+ /// CA1508:
+ ///
+ /// Flags conditional expressions which are always true/false and null checks for operations that are always null/non-null based on predicate analysis.
///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
public sealed class AvoidDeadConditionalCode : DiagnosticAnalyzer
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/Maintainability/AvoidUninstantiatedInternalClasses.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/Maintainability/AvoidUninstantiatedInternalClasses.cs
index 98ccc0f003..614889bd70 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/Maintainability/AvoidUninstantiatedInternalClasses.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/Maintainability/AvoidUninstantiatedInternalClasses.cs
@@ -16,7 +16,7 @@ namespace Microsoft.CodeQuality.Analyzers.Maintainability
using static MicrosoftCodeQualityAnalyzersResources;
///
- /// CA1812: Avoid uninstantiated internal classes
+ /// CA1812:
///
public abstract class AvoidUninstantiatedInternalClassesAnalyzer : DiagnosticAnalyzer
{
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/Maintainability/AvoidUnusedPrivateFields.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/Maintainability/AvoidUnusedPrivateFields.cs
index 41eaa4820a..e6f86c14db 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/Maintainability/AvoidUnusedPrivateFields.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/Maintainability/AvoidUnusedPrivateFields.cs
@@ -14,7 +14,7 @@ namespace Microsoft.CodeQuality.Analyzers.Maintainability
using static MicrosoftCodeQualityAnalyzersResources;
///
- /// CA1823: Avoid unused private fields
+ /// CA1823:
///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
public sealed class AvoidUnusedPrivateFieldsAnalyzer : DiagnosticAnalyzer
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/Maintainability/CodeMetricsAnalyzer.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/Maintainability/CodeMetricsAnalyzer.cs
index 50963fdcff..993b7d1108 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/Maintainability/CodeMetricsAnalyzer.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/Maintainability/CodeMetricsAnalyzer.cs
@@ -19,11 +19,11 @@ namespace Microsoft.CodeQuality.Analyzers.Maintainability.CodeMetrics
using static MicrosoftCodeQualityAnalyzersResources;
///
- /// CA1501: Avoid excessive inheritance
- /// CA1502: Avoid excessive complexity
- /// CA1505: Avoid unmaintainable code
- /// CA1506: Avoid excessive class coupling
- /// CA1509: Invalid entry in code metrics rule specification file
+ /// CA1501:
+ /// CA1502:
+ /// CA1505:
+ /// CA1506:
+ /// CA1509:
///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
public sealed class CodeMetricsAnalyzer : DiagnosticAnalyzer
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/Maintainability/DoNotIgnoreMethodResults.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/Maintainability/DoNotIgnoreMethodResults.cs
index 6be3c385e8..66575322a9 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/Maintainability/DoNotIgnoreMethodResults.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/Maintainability/DoNotIgnoreMethodResults.cs
@@ -13,7 +13,7 @@ namespace Microsoft.CodeQuality.Analyzers.Maintainability
using static MicrosoftCodeQualityAnalyzersResources;
///
- /// CA1806: Do not ignore method results
+ /// CA1806:
///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
public sealed class DoNotIgnoreMethodResultsAnalyzer : DiagnosticAnalyzer
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/Maintainability/UseNameofInPlaceOfString.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/Maintainability/UseNameofInPlaceOfString.cs
index 9ae0f20e33..b85d070d2f 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/Maintainability/UseNameofInPlaceOfString.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/Maintainability/UseNameofInPlaceOfString.cs
@@ -13,7 +13,7 @@ namespace Microsoft.CodeQuality.Analyzers.Maintainability
using static MicrosoftCodeQualityAnalyzersResources;
///
- /// CA1507 Use nameof to express symbol names
+ /// CA1507:
///
public abstract class UseNameofInPlaceOfStringAnalyzer : DiagnosticAnalyzer
{
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/QualityGuidelines/AssigningSymbolAndItsMemberInSameStatement.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/QualityGuidelines/AssigningSymbolAndItsMemberInSameStatement.cs
index 5b986db100..2e6b6abcb3 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/QualityGuidelines/AssigningSymbolAndItsMemberInSameStatement.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/QualityGuidelines/AssigningSymbolAndItsMemberInSameStatement.cs
@@ -13,7 +13,7 @@ namespace Microsoft.CodeQuality.Analyzers.QualityGuidelines
using static MicrosoftCodeQualityAnalyzersResources;
///
- /// CA2246: Prevent objects from being referenced in statements where they are reassigned
+ /// CA2246:
///
#pragma warning disable RS1004 // Recommend adding language support to diagnostic analyzer - Construct not valid in VB.NET
[DiagnosticAnalyzer(LanguageNames.CSharp)]
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/QualityGuidelines/AvoidDuplicateElementInitialization.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/QualityGuidelines/AvoidDuplicateElementInitialization.cs
index 31e230b2cd..0c2a3617b9 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/QualityGuidelines/AvoidDuplicateElementInitialization.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/QualityGuidelines/AvoidDuplicateElementInitialization.cs
@@ -13,7 +13,7 @@ namespace Microsoft.CodeQuality.Analyzers.QualityGuidelines
using static MicrosoftCodeQualityAnalyzersResources;
///
- /// CA2244: Do not duplicate indexed element initializations
+ /// CA2244:
///
#pragma warning disable RS1004 // Recommend adding language support to diagnostic analyzer - Construct impossible in VB.NET
[DiagnosticAnalyzer(LanguageNames.CSharp)]
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/QualityGuidelines/AvoidInfiniteRecursion.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/QualityGuidelines/AvoidInfiniteRecursion.cs
index 630ba80349..dda557c0ea 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/QualityGuidelines/AvoidInfiniteRecursion.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/QualityGuidelines/AvoidInfiniteRecursion.cs
@@ -11,6 +11,9 @@ namespace Microsoft.CodeQuality.Analyzers.QualityGuidelines
{
using static MicrosoftCodeQualityAnalyzersResources;
+ ///
+ /// CA2011:
+ ///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
public sealed class AvoidInfiniteRecursion : DiagnosticAnalyzer
{
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/QualityGuidelines/AvoidMultipleEnumerations/AvoidMultipleEnumerations.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/QualityGuidelines/AvoidMultipleEnumerations/AvoidMultipleEnumerations.cs
index 04c4c3cd6a..8249d79550 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/QualityGuidelines/AvoidMultipleEnumerations/AvoidMultipleEnumerations.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/QualityGuidelines/AvoidMultipleEnumerations/AvoidMultipleEnumerations.cs
@@ -14,6 +14,9 @@
namespace Microsoft.CodeQuality.Analyzers.QualityGuidelines.AvoidMultipleEnumerations
{
+ ///
+ /// CA1851:
+ ///
internal abstract partial class AvoidMultipleEnumerations : DiagnosticAnalyzer
{
private const string RuleId = "CA1851";
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/QualityGuidelines/AvoidPropertySelfAssignment.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/QualityGuidelines/AvoidPropertySelfAssignment.cs
index f036e12e19..40972e9afd 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/QualityGuidelines/AvoidPropertySelfAssignment.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/QualityGuidelines/AvoidPropertySelfAssignment.cs
@@ -12,7 +12,7 @@ namespace Microsoft.CodeQuality.Analyzers.QualityGuidelines
using static MicrosoftCodeQualityAnalyzersResources;
///
- /// CA2245: Prevent properties from being assigned to themselves
+ /// CA2245:
///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/QualityGuidelines/DoNotCallOverridableMethodsInConstructors.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/QualityGuidelines/DoNotCallOverridableMethodsInConstructors.cs
index 011421cc8a..3865bb5eeb 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/QualityGuidelines/DoNotCallOverridableMethodsInConstructors.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/QualityGuidelines/DoNotCallOverridableMethodsInConstructors.cs
@@ -12,7 +12,7 @@ namespace Microsoft.CodeQuality.Analyzers.QualityGuidelines
using static MicrosoftCodeQualityAnalyzersResources;
///
- /// CA2214: Do not call overridable methods in constructors
+ /// CA2214:
///
/// Cause: The constructor of an unsealed type calls a virtual method defined in its class.
///
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/QualityGuidelines/DoNotDeclareEventFieldsAsVirtual.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/QualityGuidelines/DoNotDeclareEventFieldsAsVirtual.cs
index 58a32bf350..60dffad215 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/QualityGuidelines/DoNotDeclareEventFieldsAsVirtual.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/QualityGuidelines/DoNotDeclareEventFieldsAsVirtual.cs
@@ -10,6 +10,9 @@ namespace Microsoft.CodeQuality.Analyzers.QualityGuidelines
{
using static MicrosoftCodeQualityAnalyzersResources;
+ ///
+ /// CA1070:
+ ///
#pragma warning disable RS1004 // Recommend adding language support to diagnostic analyzer - Construct is invalid in VB.NET
[DiagnosticAnalyzer(LanguageNames.CSharp)]
#pragma warning restore RS1004 // Recommend adding language support to diagnostic analyzer
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/QualityGuidelines/DoNotInitializeUnnecessarily.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/QualityGuidelines/DoNotInitializeUnnecessarily.cs
index 57a747931e..695f202a0d 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/QualityGuidelines/DoNotInitializeUnnecessarily.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/QualityGuidelines/DoNotInitializeUnnecessarily.cs
@@ -12,7 +12,9 @@ namespace Microsoft.CodeQuality.Analyzers.QualityGuidelines
{
using static MicrosoftCodeQualityAnalyzersResources;
- /// CA1805: Do not initialize unnecessarily.
+ ///
+ /// CA1805:
+ ///
public abstract class DoNotInitializeUnnecessarilyAnalyzer : DiagnosticAnalyzer
{
internal const string RuleId = "CA1805";
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/QualityGuidelines/DoNotRaiseExceptionsInExceptionClauses.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/QualityGuidelines/DoNotRaiseExceptionsInExceptionClauses.cs
index 93ae425c64..89e57ce8d9 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/QualityGuidelines/DoNotRaiseExceptionsInExceptionClauses.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/QualityGuidelines/DoNotRaiseExceptionsInExceptionClauses.cs
@@ -13,7 +13,7 @@ namespace Microsoft.CodeQuality.Analyzers.QualityGuidelines
using static MicrosoftCodeQualityAnalyzersResources;
///
- /// CA2219: Do not raise exceptions in exception clauses
+ /// CA2219:
///
///
/// The original FxCop implementation of this rule finds violations of this rule inside
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/QualityGuidelines/MarkMembersAsStatic.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/QualityGuidelines/MarkMembersAsStatic.cs
index ea6b4018ae..02498839ba 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/QualityGuidelines/MarkMembersAsStatic.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/QualityGuidelines/MarkMembersAsStatic.cs
@@ -15,7 +15,7 @@ namespace Microsoft.CodeQuality.Analyzers.QualityGuidelines
using static MicrosoftCodeQualityAnalyzersResources;
///
- /// CA1822: Mark members as static
+ /// CA1822:
///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
public sealed class MarkMembersAsStaticAnalyzer : DiagnosticAnalyzer
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/QualityGuidelines/PreferJaggedArraysOverMultidimensional.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/QualityGuidelines/PreferJaggedArraysOverMultidimensional.cs
index 3cb183293e..ca686bd9c5 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/QualityGuidelines/PreferJaggedArraysOverMultidimensional.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/QualityGuidelines/PreferJaggedArraysOverMultidimensional.cs
@@ -12,7 +12,7 @@ namespace Microsoft.CodeQuality.Analyzers.QualityGuidelines
using static MicrosoftCodeQualityAnalyzersResources;
///
- /// CA1814: Prefer jagged arrays over multidimensional
+ /// CA1814:
///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
public sealed class PreferJaggedArraysOverMultidimensionalAnalyzer : DiagnosticAnalyzer
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/QualityGuidelines/RemoveEmptyFinalizers.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/QualityGuidelines/RemoveEmptyFinalizers.cs
index f096f2bcba..f195e9d57a 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/QualityGuidelines/RemoveEmptyFinalizers.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/QualityGuidelines/RemoveEmptyFinalizers.cs
@@ -11,6 +11,9 @@ namespace Microsoft.CodeQuality.Analyzers.QualityGuidelines
{
using static MicrosoftCodeQualityAnalyzersResources;
+ ///
+ /// CA1821:
+ ///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
public sealed class RemoveEmptyFinalizersAnalyzer : DiagnosticAnalyzer
{
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/QualityGuidelines/RethrowToPreserveStackDetails.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/QualityGuidelines/RethrowToPreserveStackDetails.cs
index 337cdde6e3..190ed881f3 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/QualityGuidelines/RethrowToPreserveStackDetails.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/QualityGuidelines/RethrowToPreserveStackDetails.cs
@@ -11,6 +11,9 @@ namespace Microsoft.CodeQuality.Analyzers.QualityGuidelines
{
using static MicrosoftCodeQualityAnalyzersResources;
+ ///
+ /// CA2200:
+ ///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
public sealed class RethrowToPreserveStackDetailsAnalyzer : DiagnosticAnalyzer
{
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/QualityGuidelines/ReviewVisibleEventHandlers.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/QualityGuidelines/ReviewVisibleEventHandlers.cs
index 3dcfb15392..b234fcbdde 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/QualityGuidelines/ReviewVisibleEventHandlers.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/QualityGuidelines/ReviewVisibleEventHandlers.cs
@@ -11,7 +11,7 @@ namespace Microsoft.CodeQuality.Analyzers.QualityGuidelines
using static MicrosoftCodeQualityAnalyzersResources;
///
- /// CA2109: Review visible event handlers
+ /// CA2109:
///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
public sealed class ReviewVisibleEventHandlersAnalyzer : DiagnosticAnalyzer
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/QualityGuidelines/SealMethodsThatSatisfyPrivateInterfaces.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/QualityGuidelines/SealMethodsThatSatisfyPrivateInterfaces.cs
index b913ca84a8..476b87e66e 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/QualityGuidelines/SealMethodsThatSatisfyPrivateInterfaces.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/QualityGuidelines/SealMethodsThatSatisfyPrivateInterfaces.cs
@@ -12,7 +12,7 @@ namespace Microsoft.CodeQuality.Analyzers.QualityGuidelines
using static MicrosoftCodeQualityAnalyzersResources;
///
- /// CA2119: Seal methods that satisfy private interfaces
+ /// CA2119:
///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
public sealed class SealMethodsThatSatisfyPrivateInterfacesAnalyzer : DiagnosticAnalyzer
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/QualityGuidelines/UseLiteralsWhereAppropriate.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/QualityGuidelines/UseLiteralsWhereAppropriate.cs
index 69f5a3514e..7a814c0a96 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/QualityGuidelines/UseLiteralsWhereAppropriate.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/QualityGuidelines/UseLiteralsWhereAppropriate.cs
@@ -13,7 +13,7 @@ namespace Microsoft.CodeQuality.Analyzers.QualityGuidelines
using static MicrosoftCodeQualityAnalyzersResources;
///
- /// CA1802: Use literals where appropriate
+ /// CA1802:
///
public abstract class UseLiteralsWhereAppropriateAnalyzer : DiagnosticAnalyzer
{
diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/QualityGuidelines/ValidateArgumentsOfPublicMethods.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/QualityGuidelines/ValidateArgumentsOfPublicMethods.cs
index 686614864a..198f3f4eb0 100644
--- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/QualityGuidelines/ValidateArgumentsOfPublicMethods.cs
+++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/QualityGuidelines/ValidateArgumentsOfPublicMethods.cs
@@ -13,6 +13,9 @@ namespace Microsoft.CodeQuality.Analyzers.QualityGuidelines
{
using static MicrosoftCodeQualityAnalyzersResources;
+ ///
+ /// CA1062:
+ ///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
public sealed class ValidateArgumentsOfPublicMethods : DiagnosticAnalyzer
{
diff --git a/src/NetAnalyzers/Core/Microsoft.NetCore.Analyzers/Data/ReviewSqlQueriesForSecurityVulnerabilities.cs b/src/NetAnalyzers/Core/Microsoft.NetCore.Analyzers/Data/ReviewSqlQueriesForSecurityVulnerabilities.cs
index 8f04ed069e..d030ac21b0 100644
--- a/src/NetAnalyzers/Core/Microsoft.NetCore.Analyzers/Data/ReviewSqlQueriesForSecurityVulnerabilities.cs
+++ b/src/NetAnalyzers/Core/Microsoft.NetCore.Analyzers/Data/ReviewSqlQueriesForSecurityVulnerabilities.cs
@@ -15,6 +15,9 @@ namespace Microsoft.NetCore.Analyzers.Data
{
using static MicrosoftNetCoreAnalyzersResources;
+ ///
+ /// CA2100:
+ ///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
public sealed class ReviewSqlQueriesForSecurityVulnerabilities : DiagnosticAnalyzer
{
diff --git a/src/NetAnalyzers/Core/Microsoft.NetCore.Analyzers/ImmutableCollections/DoNotCallToImmutableCollectionOnAnImmutableCollectionValue.cs b/src/NetAnalyzers/Core/Microsoft.NetCore.Analyzers/ImmutableCollections/DoNotCallToImmutableCollectionOnAnImmutableCollectionValue.cs
index 8acdf5107e..0af739ebc7 100644
--- a/src/NetAnalyzers/Core/Microsoft.NetCore.Analyzers/ImmutableCollections/DoNotCallToImmutableCollectionOnAnImmutableCollectionValue.cs
+++ b/src/NetAnalyzers/Core/Microsoft.NetCore.Analyzers/ImmutableCollections/DoNotCallToImmutableCollectionOnAnImmutableCollectionValue.cs
@@ -15,7 +15,7 @@ namespace Microsoft.NetCore.Analyzers.ImmutableCollections
using static MicrosoftNetCoreAnalyzersResources;
///
- /// CA2009: Do not call ToImmutableCollection on an ImmutableCollection value
+ /// CA2009:
///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
public sealed class DoNotCallToImmutableCollectionOnAnImmutableCollectionValueAnalyzer : DiagnosticAnalyzer
diff --git a/src/NetAnalyzers/Core/Microsoft.NetCore.Analyzers/InteropServices/AvoidStringBuilderPInvokeParameters.cs b/src/NetAnalyzers/Core/Microsoft.NetCore.Analyzers/InteropServices/AvoidStringBuilderPInvokeParameters.cs
index fdfad15c01..8feae163ba 100644
--- a/src/NetAnalyzers/Core/Microsoft.NetCore.Analyzers/InteropServices/AvoidStringBuilderPInvokeParameters.cs
+++ b/src/NetAnalyzers/Core/Microsoft.NetCore.Analyzers/InteropServices/AvoidStringBuilderPInvokeParameters.cs
@@ -11,7 +11,7 @@ namespace Microsoft.NetCore.Analyzers.InteropServices
using static MicrosoftNetCoreAnalyzersResources;
///
- /// CA1838: Avoid StringBuilder parameters for P/Invokes
+ /// CA1838:
///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
public sealed class AvoidStringBuilderPInvokeParametersAnalyzer : DiagnosticAnalyzer
diff --git a/src/NetAnalyzers/Core/Microsoft.NetCore.Analyzers/InteropServices/DisableRuntimeMarshalling.cs b/src/NetAnalyzers/Core/Microsoft.NetCore.Analyzers/InteropServices/DisableRuntimeMarshalling.cs
index 99010ef05c..f105702d9f 100644
--- a/src/NetAnalyzers/Core/Microsoft.NetCore.Analyzers/InteropServices/DisableRuntimeMarshalling.cs
+++ b/src/NetAnalyzers/Core/Microsoft.NetCore.Analyzers/InteropServices/DisableRuntimeMarshalling.cs
@@ -12,6 +12,10 @@ namespace Microsoft.NetCore.Analyzers.InteropServices
{
using static MicrosoftNetCoreAnalyzersResources;
+ ///
+ /// CA1420:
+ /// CA1421:
+ ///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
internal sealed partial class DisableRuntimeMarshallingAnalyzer : DiagnosticAnalyzer
{
diff --git a/src/NetAnalyzers/Core/Microsoft.NetCore.Analyzers/InteropServices/DoNotUseOutAttributeStringPInvokeParameters.cs b/src/NetAnalyzers/Core/Microsoft.NetCore.Analyzers/InteropServices/DoNotUseOutAttributeStringPInvokeParameters.cs
index 04eac77d82..4f53cbac17 100644
--- a/src/NetAnalyzers/Core/Microsoft.NetCore.Analyzers/InteropServices/DoNotUseOutAttributeStringPInvokeParameters.cs
+++ b/src/NetAnalyzers/Core/Microsoft.NetCore.Analyzers/InteropServices/DoNotUseOutAttributeStringPInvokeParameters.cs
@@ -11,7 +11,7 @@ namespace Microsoft.NetCore.Analyzers.InteropServices
using static MicrosoftNetCoreAnalyzersResources;
///
- /// CA1417: Do not use [Out] string parameters for P/Invokes
+ /// CA1417:
///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
public sealed class DoNotUseOutAttributeStringPInvokeParametersAnalyzer : DiagnosticAnalyzer
diff --git a/src/NetAnalyzers/Core/Microsoft.NetCore.Analyzers/InteropServices/DynamicInterfaceCastableImplementation.cs b/src/NetAnalyzers/Core/Microsoft.NetCore.Analyzers/InteropServices/DynamicInterfaceCastableImplementation.cs
index 326fe72ef5..ba36699443 100644
--- a/src/NetAnalyzers/Core/Microsoft.NetCore.Analyzers/InteropServices/DynamicInterfaceCastableImplementation.cs
+++ b/src/NetAnalyzers/Core/Microsoft.NetCore.Analyzers/InteropServices/DynamicInterfaceCastableImplementation.cs
@@ -10,6 +10,11 @@ namespace Microsoft.NetCore.Analyzers.InteropServices
{
using static MicrosoftNetCoreAnalyzersResources;
+ ///
+ /// CA2256:
+ /// CA2257:
+ /// CA2258:
+ ///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
internal sealed class DynamicInterfaceCastableImplementationAnalyzer : DiagnosticAnalyzer
{
diff --git a/src/NetAnalyzers/Core/Microsoft.NetCore.Analyzers/InteropServices/PInvokeDiagnosticAnalyzer.cs b/src/NetAnalyzers/Core/Microsoft.NetCore.Analyzers/InteropServices/PInvokeDiagnosticAnalyzer.cs
index ff3f2c5dda..b0147f4e1a 100644
--- a/src/NetAnalyzers/Core/Microsoft.NetCore.Analyzers/InteropServices/PInvokeDiagnosticAnalyzer.cs
+++ b/src/NetAnalyzers/Core/Microsoft.NetCore.Analyzers/InteropServices/PInvokeDiagnosticAnalyzer.cs
@@ -12,6 +12,10 @@ namespace Microsoft.NetCore.Analyzers.InteropServices
{
using static MicrosoftNetCoreAnalyzersResources;
+ ///
+ /// CA1401:
+ /// CA2101:
+ ///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
public sealed class PInvokeDiagnosticAnalyzer : DiagnosticAnalyzer
{
diff --git a/src/NetAnalyzers/Core/Microsoft.NetCore.Analyzers/InteropServices/PlatformCompatibilityAnalyzer.OperationVisitor.cs b/src/NetAnalyzers/Core/Microsoft.NetCore.Analyzers/InteropServices/PlatformCompatibilityAnalyzer.OperationVisitor.cs
index 3474e83270..492d720e4d 100644
--- a/src/NetAnalyzers/Core/Microsoft.NetCore.Analyzers/InteropServices/PlatformCompatibilityAnalyzer.OperationVisitor.cs
+++ b/src/NetAnalyzers/Core/Microsoft.NetCore.Analyzers/InteropServices/PlatformCompatibilityAnalyzer.OperationVisitor.cs
@@ -32,12 +32,19 @@ public OperationVisitor(
_relatedPlatforms = relatedPlatforms;
}
- internal bool TryParseGuardAttributes(ISymbol symbol, ref GlobalFlowStateAnalysisValueSet value)
+ ///
+ /// If the provided annotated with any guard attribute update the accordingly.
+ ///
+ /// Symbol for which the attributes will be examined.
+ /// Resulting flow analysis value.
+ /// Arguments passed to the method symbol.
+ /// True if any guard attribute found and changed accordingly, false otherwise
+ internal bool TryParseGuardAttributes(ISymbol symbol, ref GlobalFlowStateAnalysisValueSet value, ImmutableArray visitedArguments)
{
var attributes = symbol.GetAttributes();
if (symbol.GetMemberType()!.SpecialType != SpecialType.System_Boolean ||
- !HasAnyGuardAttribute(attributes, out var guardAttributes))
+ !HasAnyGuardAttribute(attributes, visitedArguments, out var guardAttributes))
{
return false;
}
@@ -56,12 +63,17 @@ internal bool TryParseGuardAttributes(ISymbol symbol, ref GlobalFlowStateAnalysi
return true;
}
- value = GlobalFlowStateAnalysisValueSet.Unknown;
-
return false;
}
- private static bool HasAnyGuardAttribute(ImmutableArray attributes, [NotNullWhen(true)] out SmallDictionary? mappedAttributes)
+ ///
+ /// Checks if there is any guard attribute within , parse found attributes into platform to version map
+ ///
+ /// Attributes to check
+ /// If the symbol is method symbol provide its arguments
+ /// Guard attributes parsed into platform to version map
+ /// True if there were any guard attributes found and parsed successfully, false otherwise
+ private static bool HasAnyGuardAttribute(ImmutableArray attributes, ImmutableArray methodArguments, [NotNullWhen(true)] out SmallDictionary? mappedAttributes)
{
mappedAttributes = null;
@@ -70,6 +82,12 @@ private static bool HasAnyGuardAttribute(ImmutableArray attribute
if (attribute.AttributeClass.Name is SupportedOSPlatformGuardAttribute or UnsupportedOSPlatformGuardAttribute &&
TryParsePlatformNameAndVersion(attribute, out var platformName, out var version))
{
+ if (version == EmptyVersion && !methodArguments.IsEmpty &&
+ TryDecodeOSVersion(methodArguments, null, out var apiVersion))
+ {
+ version = apiVersion;
+ }
+
mappedAttributes ??= new(StringComparer.OrdinalIgnoreCase);
if (!mappedAttributes.TryGetValue(platformName, out var versions))
{
@@ -95,6 +113,12 @@ private static bool HasAnyGuardAttribute(ImmutableArray attribute
return mappedAttributes != null;
}
+ ///
+ /// Convert each platform and versions pair from map into s and add into array
+ ///
+ /// Map of platforms to versions populated from guard attributes
+ /// Converted array of s
+ /// True if any added into the , false otherwise
public bool TryDecodeGuardAttributes(SmallDictionary mappedAttributes, ArrayBuilder infosBuilder)
{
foreach (var (name, versions) in mappedAttributes)
@@ -183,12 +207,10 @@ public override GlobalFlowStateAnalysisValueSet VisitInvocation_NonLambdaOrDeleg
return value;
}
-
- return GlobalFlowStateAnalysisValueSet.Unknown;
}
- else if (TryParseGuardAttributes(method, ref value))
+ else // Not a known guard method, check if annotated with guard attributes
{
- return value;
+ TryParseGuardAttributes(method, ref value, visitedArguments);
}
return value;
@@ -232,7 +254,7 @@ public override GlobalFlowStateAnalysisValueSet VisitFieldReference(IFieldRefere
{
var value = base.VisitFieldReference(operation, argument);
- if (TryParseGuardAttributes(operation.Field, ref value))
+ if (TryParseGuardAttributes(operation.Field, ref value, ImmutableArray.Empty))
{
return value;
}
@@ -244,7 +266,7 @@ public override GlobalFlowStateAnalysisValueSet VisitPropertyReference(IProperty
{
var value = base.VisitPropertyReference(operation, argument);
- if (TryParseGuardAttributes(operation.Property, ref value))
+ if (TryParseGuardAttributes(operation.Property, ref value, ImmutableArray.Empty))
{
return value;
}
diff --git a/src/NetAnalyzers/Core/Microsoft.NetCore.Analyzers/InteropServices/PlatformCompatibilityAnalyzer.Value.cs b/src/NetAnalyzers/Core/Microsoft.NetCore.Analyzers/InteropServices/PlatformCompatibilityAnalyzer.Value.cs
index b5224975aa..3af28b5fc2 100644
--- a/src/NetAnalyzers/Core/Microsoft.NetCore.Analyzers/InteropServices/PlatformCompatibilityAnalyzer.Value.cs
+++ b/src/NetAnalyzers/Core/Microsoft.NetCore.Analyzers/InteropServices/PlatformCompatibilityAnalyzer.Value.cs
@@ -145,71 +145,6 @@ private static bool TryDecodeRuntimeInformationIsOSPlatform(
return false;
}
- private static bool TryDecodeOSVersion(
- ImmutableArray arguments,
- ValueContentAnalysisResult? valueContentAnalysisResult,
- [NotNullWhen(returnValue: true)] out Version? osVersion,
- int skip = 0)
- {
-
- using var versionBuilder = ArrayBuilder.GetInstance(4, fillWithValue: 0);
- var index = 0;
-
- foreach (var argument in arguments.GetArgumentsInParameterOrder().Skip(skip))
- {
- if (!TryDecodeOSVersionPart(argument, valueContentAnalysisResult, out var osVersionPart))
- {
- osVersion = null;
- return false;
- }
-
- versionBuilder[index++] = osVersionPart;
- }
-
- osVersion = CreateVersion(versionBuilder);
- return true;
-
- static bool TryDecodeOSVersionPart(IArgumentOperation argument, ValueContentAnalysisResult? valueContentAnalysisResult, out int osVersionPart)
- {
- if (argument.Value.ConstantValue.HasValue &&
- argument.Value.ConstantValue.Value is int versionPart)
- {
- osVersionPart = versionPart;
- return true;
- }
-
- if (valueContentAnalysisResult != null)
- {
- var valueContentValue = valueContentAnalysisResult[argument.Value];
- if (valueContentValue.IsLiteralState &&
- valueContentValue.LiteralValues.Count == 1 &&
- valueContentValue.LiteralValues.Single() is int part)
- {
- osVersionPart = part;
- return true;
- }
- }
-
- osVersionPart = default;
- return false;
- }
-
- static Version CreateVersion(ArrayBuilder versionBuilder)
- {
- if (versionBuilder[3] == 0)
- {
- if (versionBuilder[2] == 0)
- {
- return new Version(versionBuilder[0], versionBuilder[1]);
- }
-
- return new Version(versionBuilder[0], versionBuilder[1], versionBuilder[2]);
- }
-
- return new Version(versionBuilder[0], versionBuilder[1], versionBuilder[2], versionBuilder[3]);
- }
- }
-
public override string ToString()
{
var result = $"{PlatformName};{Version}";
@@ -250,5 +185,63 @@ bool IEquatable.Equals(IAbstractAnalysisValue other)
return !(left == right);
}
}
+
+ private static bool TryDecodeOSVersion(
+ ImmutableArray arguments,
+ ValueContentAnalysisResult? valueContentAnalysisResult,
+ [NotNullWhen(returnValue: true)] out Version? osVersion,
+ int skip = 0)
+ {
+
+ using var versionBuilder = ArrayBuilder.GetInstance(4, fillWithValue: 0);
+ var index = 0;
+
+ foreach (var argument in arguments.GetArgumentsInParameterOrder().Skip(skip))
+ {
+ if (!TryDecodeOSVersionPart(argument, valueContentAnalysisResult, out var osVersionPart))
+ {
+ osVersion = null;
+ return false;
+ }
+
+ versionBuilder[index++] = osVersionPart;
+ }
+
+ osVersion = CreateVersion(versionBuilder);
+ return true;
+
+ static bool TryDecodeOSVersionPart(IArgumentOperation argument, ValueContentAnalysisResult? valueContentAnalysisResult, out int osVersionPart)
+ {
+ if (argument.Value.ConstantValue.HasValue &&
+ argument.Value.ConstantValue.Value is int versionPart)
+ {
+ osVersionPart = versionPart;
+ return true;
+ }
+
+ if (valueContentAnalysisResult != null)
+ {
+ var valueContentValue = valueContentAnalysisResult[argument.Value];
+ if (valueContentValue.IsLiteralState &&
+ valueContentValue.LiteralValues.Count == 1 &&
+ valueContentValue.LiteralValues.Single() is int part)
+ {
+ osVersionPart = part;
+ return true;
+ }
+ }
+
+ osVersionPart = default;
+ return false;
+ }
+
+ static Version CreateVersion(ArrayBuilder versionBuilder) => versionBuilder switch
+ {
+ [int major, int minor, 0, 0] => new Version(major, minor),
+ [int major, int minor, int build, 0] => new Version(major, minor, build),
+ [int major, int minor, int build, int revision] => new Version(major, minor, build, revision),
+ _ => EmptyVersion
+ };
+ }
}
}
\ No newline at end of file
diff --git a/src/NetAnalyzers/Core/Microsoft.NetCore.Analyzers/InteropServices/PlatformCompatibilityAnalyzer.cs b/src/NetAnalyzers/Core/Microsoft.NetCore.Analyzers/InteropServices/PlatformCompatibilityAnalyzer.cs
index dda807de25..6086108e20 100644
--- a/src/NetAnalyzers/Core/Microsoft.NetCore.Analyzers/InteropServices/PlatformCompatibilityAnalyzer.cs
+++ b/src/NetAnalyzers/Core/Microsoft.NetCore.Analyzers/InteropServices/PlatformCompatibilityAnalyzer.cs
@@ -23,7 +23,8 @@ namespace Microsoft.NetCore.Analyzers.InteropServices
using static MicrosoftNetCoreAnalyzersResources;
///
- /// CA1416: Analyzer that informs developers when they use platform-specific APIs from call sites where the API might not be available
+ /// CA1416:
+ /// CA1422:
///
/// It finds usage of platform-specific or unsupported APIs and diagnoses if the
/// API is guarded by platform check or if it is annotated with corresponding platform specific attribute.
diff --git a/src/NetAnalyzers/Core/Microsoft.NetCore.Analyzers/InteropServices/ProvidePublicParameterlessSafeHandleConstructor.cs b/src/NetAnalyzers/Core/Microsoft.NetCore.Analyzers/InteropServices/ProvidePublicParameterlessSafeHandleConstructor.cs
index a7961d4114..5c9c2b77a9 100644
--- a/src/NetAnalyzers/Core/Microsoft.NetCore.Analyzers/InteropServices/ProvidePublicParameterlessSafeHandleConstructor.cs
+++ b/src/NetAnalyzers/Core/Microsoft.NetCore.Analyzers/InteropServices/ProvidePublicParameterlessSafeHandleConstructor.cs
@@ -10,6 +10,9 @@ namespace Microsoft.NetCore.Analyzers.InteropServices
{
using static MicrosoftNetCoreAnalyzersResources;
+ ///
+ /// CA1419:
+ ///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
public sealed class ProvidePublicParameterlessSafeHandleConstructorAnalyzer : DiagnosticAnalyzer
{
diff --git a/src/NetAnalyzers/Core/Microsoft.NetCore.Analyzers/InteropServices/UseValidPlatformString.cs b/src/NetAnalyzers/Core/Microsoft.NetCore.Analyzers/InteropServices/UseValidPlatformString.cs
index aedbf1b409..129704cf8a 100644
--- a/src/NetAnalyzers/Core/Microsoft.NetCore.Analyzers/InteropServices/UseValidPlatformString.cs
+++ b/src/NetAnalyzers/Core/Microsoft.NetCore.Analyzers/InteropServices/UseValidPlatformString.cs
@@ -15,6 +15,9 @@ namespace Microsoft.NetCore.Analyzers.InteropServices
{
using static MicrosoftNetCoreAnalyzersResources;
+ ///
+ /// CA1418:
+ ///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
public sealed class UseValidPlatformString : DiagnosticAnalyzer
{
diff --git a/src/NetAnalyzers/Core/Microsoft.NetCore.Analyzers/MicrosoftNetCoreAnalyzersResources.resx b/src/NetAnalyzers/Core/Microsoft.NetCore.Analyzers/MicrosoftNetCoreAnalyzersResources.resx
index 53c4f3dff1..15bc6ced94 100644
--- a/src/NetAnalyzers/Core/Microsoft.NetCore.Analyzers/MicrosoftNetCoreAnalyzersResources.resx
+++ b/src/NetAnalyzers/Core/Microsoft.NetCore.Analyzers/MicrosoftNetCoreAnalyzersResources.resx
@@ -1864,6 +1864,42 @@
'{0}' uses the preview type '{1}' and needs to opt into preview features. See {2} for more information.
+
+ Incorrect usage of ConstantExpected attribute
+
+
+ ConstantExpected attribute is not applied correctly on the parameter.
+
+
+ A constant is expected for the parameter
+
+
+ The parameter expects a constant for optimal performance.
+
+
+ The '{0}' type is not supported for ConstantExpected attribute
+
+
+ The '{0}' value is not compatible with parameter type of '{1}'
+
+
+ The '{0}' value does not fit within the parameter value bounds of '{1}' to '{2}'
+
+
+ The Min and Max values are inverted
+
+
+ The constant does not fit within the value bounds of '{0}' to '{1}'
+
+
+ The constant is not of the same '{0}' type as the parameter
+
+
+ The argument should be a constant for optimal performance
+
+
+ The ConstantExpected attribute is required for the parameter due to the parent method annotation
+
Specify a culture or use an invariant version
diff --git a/src/NetAnalyzers/Core/Microsoft.NetCore.Analyzers/Performance/ConstantExpectedAnalyzer.UnmanagedHelper.cs b/src/NetAnalyzers/Core/Microsoft.NetCore.Analyzers/Performance/ConstantExpectedAnalyzer.UnmanagedHelper.cs
new file mode 100644
index 0000000000..5060578fd6
--- /dev/null
+++ b/src/NetAnalyzers/Core/Microsoft.NetCore.Analyzers/Performance/ConstantExpectedAnalyzer.UnmanagedHelper.cs
@@ -0,0 +1,340 @@
+// Copyright (c) Microsoft. All Rights Reserved. Licensed under the MIT license. See License.txt in the project root for license information.
+
+using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Diagnostics.CodeAnalysis;
+using Microsoft.CodeAnalysis;
+using Microsoft.CodeAnalysis.Operations;
+
+namespace Microsoft.NetCore.Analyzers.Performance
+{
+ public abstract partial class ConstantExpectedAnalyzer
+ {
+ private sealed class UnmanagedHelper where T : unmanaged
+ {
+ private static readonly ConstantExpectedParameterFactory? _instance;
+ private static ConstantExpectedParameterFactory Instance => _instance ?? throw new InvalidOperationException("unsupported type");
+
+ static UnmanagedHelper()
+ {
+ if (typeof(T) == typeof(long))
+ {
+ var helper = new UnmanagedHelper.TransformHelper(TryTransformInt64);
+ _instance = new ConstantExpectedParameterFactory((TransformHelper)(object)helper);
+ }
+ else if (typeof(T) == typeof(ulong))
+ {
+ var helper = new UnmanagedHelper.TransformHelper(TryTransformUInt64);
+ _instance = new ConstantExpectedParameterFactory((TransformHelper)(object)helper);
+ }
+ else if (typeof(T) == typeof(float))
+ {
+ var helper = new UnmanagedHelper.TransformHelper(TryTransformSingle);
+ _instance = new ConstantExpectedParameterFactory((TransformHelper)(object)helper);
+ }
+ else if (typeof(T) == typeof(double))
+ {
+ var helper = new UnmanagedHelper.TransformHelper(TryTransformDouble);
+ _instance = new ConstantExpectedParameterFactory((TransformHelper)(object)helper);
+ }
+ else if (typeof(T) == typeof(char))
+ {
+ var helper = new UnmanagedHelper.TransformHelper(TryTransformChar);
+ _instance = new ConstantExpectedParameterFactory((TransformHelper)(object)helper);
+ }
+ else if (typeof(T) == typeof(bool))
+ {
+ var helper = new UnmanagedHelper.TransformHelper(TryTransformBoolean);
+ _instance = new ConstantExpectedParameterFactory((TransformHelper)(object)helper);
+ }
+ }
+
+ public static bool TryCreate(IParameterSymbol parameterSymbol, AttributeData attributeData, T typeMin, T typeMax, [NotNullWhen(true)] out ConstantExpectedParameter? parameter)
+ => Instance.TryCreate(parameterSymbol, attributeData, typeMin, typeMax, out parameter);
+ public static bool Validate(IParameterSymbol parameterSymbol, AttributeData attributeData, T typeMin, T typeMax, DiagnosticHelper diagnosticHelper, out ImmutableArray diagnostics)
+ => Instance.Validate(parameterSymbol, attributeData, typeMin, typeMax, diagnosticHelper, out diagnostics);
+
+ public delegate bool TryTransform(object constant, out T value, out bool isInvalid);
+ public sealed class TransformHelper
+ {
+ private readonly TryTransform _tryTransform;
+
+ public TransformHelper(TryTransform tryTransform)
+ {
+ _tryTransform = tryTransform;
+ }
+
+ public bool IsLessThan(T operand1, T operand2) => Comparer.Default.Compare(operand1, operand2) < 0;
+ public bool TryTransformMin(object constant, out T value, ref ErrorKind errorFlags)
+ {
+ if (_tryTransform(constant, out value, out bool isInvalid))
+ {
+ return true;
+ }
+
+ errorFlags |= isInvalid ? ErrorKind.MinIsIncompatible : ErrorKind.MinIsOutOfRange;
+ return false;
+ }
+
+ public bool TryTransformMax(object constant, out T value, ref ErrorKind errorFlags)
+ {
+ if (_tryTransform(constant, out value, out bool isInvalid))
+ {
+ return true;
+ }
+
+ errorFlags |= isInvalid ? ErrorKind.MaxIsIncompatible : ErrorKind.MaxIsOutOfRange;
+ return false;
+ }
+ public bool TryConvert(object val, out T value) => _tryTransform(val, out value, out _);
+ }
+
+ public sealed class ConstantExpectedParameterFactory
+ {
+ private readonly TransformHelper _helper;
+
+ public ConstantExpectedParameterFactory(TransformHelper helper)
+ {
+ _helper = helper;
+ }
+ public bool Validate(IParameterSymbol parameterSymbol, AttributeData attributeData, T typeMin, T typeMax, DiagnosticHelper diagnosticHelper, out ImmutableArray diagnostics)
+ {
+ if (!IsValidMinMax(attributeData, typeMin, typeMax, out _, out _, out ErrorKind errorFlags))
+ {
+ diagnostics = diagnosticHelper.GetError(errorFlags, parameterSymbol, attributeData.ApplicationSyntaxReference.GetSyntax(), typeMin.ToString(), typeMax.ToString());
+ return false;
+ }
+
+ diagnostics = ImmutableArray.Empty;
+ return true;
+ }
+
+ public bool TryCreate(IParameterSymbol parameterSymbol, AttributeData attributeData, T typeMin, T typeMax, [NotNullWhen(true)] out ConstantExpectedParameter? parameter)
+ {
+ if (!IsValidMinMax(attributeData, typeMin, typeMax, out T minValue, out T maxValue, out _))
+ {
+ parameter = null;
+ return false;
+ }
+
+ parameter = new UnmanagedConstantExpectedParameter(parameterSymbol, minValue, maxValue, _helper);
+ return true;
+ }
+
+ private bool IsValidMinMax(AttributeData attributeData, T typeMin, T typeMax, out T minValue, out T maxValue, out ErrorKind errorFlags)
+ {
+ minValue = typeMin;
+ maxValue = typeMax;
+ var ac = AttributeConstant.Get(attributeData);
+ errorFlags = ErrorKind.None;
+ if (ac.Min is not null && _helper.TryTransformMin(ac.Min, out minValue, ref errorFlags))
+ {
+ if (_helper.IsLessThan(minValue, typeMin) || _helper.IsLessThan(typeMax, minValue))
+ {
+ errorFlags |= ErrorKind.MinIsOutOfRange;
+ }
+ }
+
+ if (ac.Max is not null && _helper.TryTransformMax(ac.Max, out maxValue, ref errorFlags))
+ {
+ if (_helper.IsLessThan(maxValue, typeMin) || _helper.IsLessThan(typeMax, maxValue))
+ {
+ errorFlags |= ErrorKind.MaxIsOutOfRange;
+ }
+ }
+
+ if (errorFlags != ErrorKind.None)
+ {
+ return false;
+ }
+
+ if (_helper.IsLessThan(maxValue, minValue))
+ {
+ errorFlags = ErrorKind.MinMaxInverted;
+ return false;
+ }
+ return true;
+ }
+ }
+
+ public sealed class UnmanagedConstantExpectedParameter : ConstantExpectedParameter
+ {
+ private readonly TransformHelper _helper;
+ public UnmanagedConstantExpectedParameter(IParameterSymbol parameter, T min, T max, TransformHelper helper) : base(parameter)
+ {
+ Min = min;
+ Max = max;
+ _helper = helper;
+ }
+
+ public T Min { get; }
+ public T Max { get; }
+
+ public override bool ValidateParameterIsWithinRange(ConstantExpectedParameter subsetCandidate, IArgumentOperation argument, [NotNullWhen(false)] out Diagnostic? validationDiagnostics)
+ {
+ if (Parameter.Type.SpecialType != subsetCandidate.Parameter.Type.SpecialType ||
+ subsetCandidate is not UnmanagedConstantExpectedParameter subsetCandidateTParameter)
+ {
+ validationDiagnostics = CreateConstantInvalidConstantRuleDiagnostic(argument);
+ return false;
+ }
+
+ if (!_helper.IsLessThan(subsetCandidateTParameter.Min, Min) && !_helper.IsLessThan(Max, subsetCandidateTParameter.Max))
+ {
+ //within range
+ validationDiagnostics = null;
+ return true;
+ }
+ validationDiagnostics = CreateConstantOutOfBoundsRuleDiagnostic(argument, Min.ToString(), Max.ToString());
+ return false;
+ }
+
+ public override bool ValidateValue(IArgumentOperation argument, Optional