diff --git a/StyleCop.Analyzers/StyleCop.Analyzers/AnalyzerExtensions.cs b/StyleCop.Analyzers/StyleCop.Analyzers/AnalyzerExtensions.cs index dd71c00f8..af5e92af3 100644 --- a/StyleCop.Analyzers/StyleCop.Analyzers/AnalyzerExtensions.cs +++ b/StyleCop.Analyzers/StyleCop.Analyzers/AnalyzerExtensions.cs @@ -5,6 +5,7 @@ namespace StyleCop.Analyzers { using System; using System.Collections.Concurrent; + using System.Collections.Immutable; using System.Threading; using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.Diagnostics; @@ -86,6 +87,25 @@ public static ConcurrentDictionary GetOrCreateGeneratedDocumen return headerCache.Item2; } + /// + /// Register an action to be executed at completion of semantic analysis of a with an + /// appropriate kind. A syntax node action can report diagnostics about a , and can also + /// collect state information to be used by other syntax node actions or code block end actions. + /// + /// This method honors exclusions. + /// Action will be executed only if the kind of a matches + /// . + /// Action to be executed at completion of semantic analysis of a + /// . + /// The kind of syntax that should be analyzed. + /// Enum type giving the syntax node kinds of the source language for which + /// the action applies. + public static void RegisterSyntaxNodeActionHonorExclusions(this CompilationStartAnalysisContext context, Action action, TLanguageKindEnum syntaxKind) + where TLanguageKindEnum : struct + { + context.RegisterSyntaxNodeActionHonorExclusions(action, LanguageKindArrays.GetOrCreateArray(syntaxKind)); + } + /// /// Register an action to be executed at completion of semantic analysis of a with an /// appropriate kind. A syntax node action can report diagnostics about a , and can also @@ -99,7 +119,7 @@ public static ConcurrentDictionary GetOrCreateGeneratedDocumen /// The kinds of syntax that should be analyzed. /// Enum type giving the syntax node kinds of the source language for which /// the action applies. - public static void RegisterSyntaxNodeActionHonorExclusions(this CompilationStartAnalysisContext context, Action action, params TLanguageKindEnum[] syntaxKinds) + public static void RegisterSyntaxNodeActionHonorExclusions(this CompilationStartAnalysisContext context, Action action, ImmutableArray syntaxKinds) where TLanguageKindEnum : struct { Compilation compilation = context.Compilation; @@ -121,5 +141,24 @@ public static void RegisterSyntaxNodeActionHonorExclusions(th }, syntaxKinds); } + + private static class LanguageKindArrays + where TLanguageKindEnum : struct + { + private static readonly ConcurrentDictionary> Arrays = + new ConcurrentDictionary>(); + + private static readonly Func> CreateValueFactory = CreateValue; + + public static ImmutableArray GetOrCreateArray(TLanguageKindEnum syntaxKind) + { + return Arrays.GetOrAdd(syntaxKind, CreateValueFactory); + } + + private static ImmutableArray CreateValue(TLanguageKindEnum syntaxKind) + { + return ImmutableArray.Create(syntaxKind); + } + } } } diff --git a/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/ElementDocumentationSummaryBase.cs b/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/ElementDocumentationSummaryBase.cs index 94f2a0bba..c21459f26 100644 --- a/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/ElementDocumentationSummaryBase.cs +++ b/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/ElementDocumentationSummaryBase.cs @@ -4,6 +4,7 @@ namespace StyleCop.Analyzers.DocumentationRules { using System; + using System.Collections.Immutable; using System.Linq; using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.CSharp; @@ -16,11 +17,35 @@ namespace StyleCop.Analyzers.DocumentationRules /// internal abstract class ElementDocumentationSummaryBase : DiagnosticAnalyzer { + private static readonly ImmutableArray BaseTypeDeclarationKinds = + ImmutableArray.Create(SyntaxKind.ClassDeclaration, SyntaxKind.StructDeclaration, SyntaxKind.InterfaceDeclaration, SyntaxKind.EnumDeclaration); + + private static readonly ImmutableArray BaseFieldDeclarationKinds = + ImmutableArray.Create(SyntaxKind.FieldDeclaration, SyntaxKind.EventFieldDeclaration); + private readonly Action compilationStartAction; + private readonly Action typeDeclarationAction; + private readonly Action methodDeclarationAction; + private readonly Action constructorDeclarationAction; + private readonly Action destructorDeclarationAction; + private readonly Action propertyDeclarationAction; + private readonly Action indexerDeclarationAction; + private readonly Action fieldDeclarationAction; + private readonly Action delegateDeclarationAction; + private readonly Action eventDeclarationAction; protected ElementDocumentationSummaryBase() { this.compilationStartAction = this.HandleCompilationStart; + this.typeDeclarationAction = this.HandleTypeDeclaration; + this.methodDeclarationAction = this.HandleMethodDeclaration; + this.constructorDeclarationAction = this.HandleConstructorDeclaration; + this.destructorDeclarationAction = this.HandleDestructorDeclaration; + this.propertyDeclarationAction = this.HandlePropertyDeclaration; + this.indexerDeclarationAction = this.HandleIndexerDeclaration; + this.fieldDeclarationAction = this.HandleFieldDeclaration; + this.delegateDeclarationAction = this.HandleDelegateDeclaration; + this.eventDeclarationAction = this.HandleEventDeclaration; } /// @@ -40,19 +65,15 @@ public override void Initialize(AnalysisContext context) private void HandleCompilationStart(CompilationStartAnalysisContext context) { - context.RegisterSyntaxNodeActionHonorExclusions(this.HandleTypeDeclaration, SyntaxKind.ClassDeclaration); - context.RegisterSyntaxNodeActionHonorExclusions(this.HandleTypeDeclaration, SyntaxKind.StructDeclaration); - context.RegisterSyntaxNodeActionHonorExclusions(this.HandleTypeDeclaration, SyntaxKind.InterfaceDeclaration); - context.RegisterSyntaxNodeActionHonorExclusions(this.HandleTypeDeclaration, SyntaxKind.EnumDeclaration); - context.RegisterSyntaxNodeActionHonorExclusions(this.HandleMethodDeclaration, SyntaxKind.MethodDeclaration); - context.RegisterSyntaxNodeActionHonorExclusions(this.HandleConstructorDeclaration, SyntaxKind.ConstructorDeclaration); - context.RegisterSyntaxNodeActionHonorExclusions(this.HandleDestructorDeclaration, SyntaxKind.DestructorDeclaration); - context.RegisterSyntaxNodeActionHonorExclusions(this.HandlePropertyDeclaration, SyntaxKind.PropertyDeclaration); - context.RegisterSyntaxNodeActionHonorExclusions(this.HandleIndexerDeclaration, SyntaxKind.IndexerDeclaration); - context.RegisterSyntaxNodeActionHonorExclusions(this.HandleFieldDeclaration, SyntaxKind.FieldDeclaration); - context.RegisterSyntaxNodeActionHonorExclusions(this.HandleDelegateDeclaration, SyntaxKind.DelegateDeclaration); - context.RegisterSyntaxNodeActionHonorExclusions(this.HandleEventDeclaration, SyntaxKind.EventDeclaration); - context.RegisterSyntaxNodeActionHonorExclusions(this.HandleFieldDeclaration, SyntaxKind.EventFieldDeclaration); + context.RegisterSyntaxNodeActionHonorExclusions(this.typeDeclarationAction, BaseTypeDeclarationKinds); + context.RegisterSyntaxNodeActionHonorExclusions(this.methodDeclarationAction, SyntaxKind.MethodDeclaration); + context.RegisterSyntaxNodeActionHonorExclusions(this.constructorDeclarationAction, SyntaxKind.ConstructorDeclaration); + context.RegisterSyntaxNodeActionHonorExclusions(this.destructorDeclarationAction, SyntaxKind.DestructorDeclaration); + context.RegisterSyntaxNodeActionHonorExclusions(this.propertyDeclarationAction, SyntaxKind.PropertyDeclaration); + context.RegisterSyntaxNodeActionHonorExclusions(this.indexerDeclarationAction, SyntaxKind.IndexerDeclaration); + context.RegisterSyntaxNodeActionHonorExclusions(this.fieldDeclarationAction, BaseFieldDeclarationKinds); + context.RegisterSyntaxNodeActionHonorExclusions(this.delegateDeclarationAction, SyntaxKind.DelegateDeclaration); + context.RegisterSyntaxNodeActionHonorExclusions(this.eventDeclarationAction, SyntaxKind.EventDeclaration); } private void HandleTypeDeclaration(SyntaxNodeAnalysisContext context) diff --git a/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/PartialElementDocumentationSummaryBase.cs b/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/PartialElementDocumentationSummaryBase.cs index 460ac2314..f375033e9 100644 --- a/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/PartialElementDocumentationSummaryBase.cs +++ b/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/PartialElementDocumentationSummaryBase.cs @@ -4,6 +4,7 @@ namespace StyleCop.Analyzers.DocumentationRules { using System; + using System.Collections.Immutable; using System.Linq; using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.CSharp; @@ -17,11 +18,18 @@ namespace StyleCop.Analyzers.DocumentationRules /// internal abstract class PartialElementDocumentationSummaryBase : DiagnosticAnalyzer { + private static readonly ImmutableArray BaseTypeDeclarationKinds = + ImmutableArray.Create(SyntaxKind.ClassDeclaration, SyntaxKind.StructDeclaration, SyntaxKind.InterfaceDeclaration); + private readonly Action compilationStartAction; + private readonly Action baseTypeDeclarationAction; + private readonly Action methodDeclarationAction; protected PartialElementDocumentationSummaryBase() { this.compilationStartAction = this.HandleCompilationStart; + this.baseTypeDeclarationAction = this.HandleBaseTypeDeclaration; + this.methodDeclarationAction = this.HandleMethodDeclaration; } /// @@ -41,13 +49,11 @@ public override void Initialize(AnalysisContext context) private void HandleCompilationStart(CompilationStartAnalysisContext context) { - context.RegisterSyntaxNodeActionHonorExclusions(this.HandleTypeDeclaration, SyntaxKind.ClassDeclaration); - context.RegisterSyntaxNodeActionHonorExclusions(this.HandleTypeDeclaration, SyntaxKind.StructDeclaration); - context.RegisterSyntaxNodeActionHonorExclusions(this.HandleTypeDeclaration, SyntaxKind.InterfaceDeclaration); - context.RegisterSyntaxNodeActionHonorExclusions(this.HandleMethodDeclaration, SyntaxKind.MethodDeclaration); + context.RegisterSyntaxNodeActionHonorExclusions(this.baseTypeDeclarationAction, BaseTypeDeclarationKinds); + context.RegisterSyntaxNodeActionHonorExclusions(this.methodDeclarationAction, SyntaxKind.MethodDeclaration); } - private void HandleTypeDeclaration(SyntaxNodeAnalysisContext context) + private void HandleBaseTypeDeclaration(SyntaxNodeAnalysisContext context) { var node = (BaseTypeDeclarationSyntax)context.Node; if (node.Identifier.IsMissing) diff --git a/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/PropertyDocumentationSummaryBase.cs b/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/PropertyDocumentationSummaryBase.cs index 72f0de833..378277fd2 100644 --- a/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/PropertyDocumentationSummaryBase.cs +++ b/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/PropertyDocumentationSummaryBase.cs @@ -16,10 +16,12 @@ namespace StyleCop.Analyzers.DocumentationRules internal abstract class PropertyDocumentationSummaryBase : DiagnosticAnalyzer { private readonly Action compilationStartAction; + private readonly Action propertyDeclarationAction; protected PropertyDocumentationSummaryBase() { this.compilationStartAction = this.HandleCompilationStart; + this.propertyDeclarationAction = this.HandlePropertyDeclaration; } /// @@ -39,7 +41,7 @@ public override void Initialize(AnalysisContext context) private void HandleCompilationStart(CompilationStartAnalysisContext context) { - context.RegisterSyntaxNodeActionHonorExclusions(this.HandlePropertyDeclaration, SyntaxKind.PropertyDeclaration); + context.RegisterSyntaxNodeActionHonorExclusions(this.propertyDeclarationAction, SyntaxKind.PropertyDeclaration); } private void HandlePropertyDeclaration(SyntaxNodeAnalysisContext context) diff --git a/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1600ElementsMustBeDocumented.cs b/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1600ElementsMustBeDocumented.cs index 3fb60efdf..38ce8dd07 100644 --- a/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1600ElementsMustBeDocumented.cs +++ b/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1600ElementsMustBeDocumented.cs @@ -41,6 +41,9 @@ internal class SA1600ElementsMustBeDocumented : DiagnosticAnalyzer private static readonly DiagnosticDescriptor Descriptor = new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.DocumentationRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink); + private static readonly ImmutableArray BaseTypeDeclarationKinds = + ImmutableArray.Create(SyntaxKind.ClassDeclaration, SyntaxKind.StructDeclaration, SyntaxKind.InterfaceDeclaration, SyntaxKind.EnumDeclaration); + private static readonly Action CompilationStartAction = HandleCompilationStart; /// @@ -56,10 +59,7 @@ public override void Initialize(AnalysisContext context) private static void HandleCompilationStart(CompilationStartAnalysisContext context) { Analyzer analyzer = new Analyzer(context.Options); - context.RegisterSyntaxNodeActionHonorExclusions(analyzer.HandleTypeDeclaration, SyntaxKind.ClassDeclaration); - context.RegisterSyntaxNodeActionHonorExclusions(analyzer.HandleTypeDeclaration, SyntaxKind.StructDeclaration); - context.RegisterSyntaxNodeActionHonorExclusions(analyzer.HandleTypeDeclaration, SyntaxKind.InterfaceDeclaration); - context.RegisterSyntaxNodeActionHonorExclusions(analyzer.HandleTypeDeclaration, SyntaxKind.EnumDeclaration); + context.RegisterSyntaxNodeActionHonorExclusions(analyzer.HandleBaseTypeDeclaration, BaseTypeDeclarationKinds); context.RegisterSyntaxNodeActionHonorExclusions(analyzer.HandleMethodDeclaration, SyntaxKind.MethodDeclaration); context.RegisterSyntaxNodeActionHonorExclusions(analyzer.HandleConstructorDeclaration, SyntaxKind.ConstructorDeclaration); context.RegisterSyntaxNodeActionHonorExclusions(analyzer.HandleDestructorDeclaration, SyntaxKind.DestructorDeclaration); @@ -81,7 +81,7 @@ public Analyzer(AnalyzerOptions options) this.documentationSettings = settings.DocumentationRules; } - public void HandleTypeDeclaration(SyntaxNodeAnalysisContext context) + public void HandleBaseTypeDeclaration(SyntaxNodeAnalysisContext context) { if (context.GetDocumentationMode() != DocumentationMode.Diagnose) { diff --git a/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1601PartialElementsMustBeDocumented.cs b/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1601PartialElementsMustBeDocumented.cs index 2b4f71fe5..625d9c256 100644 --- a/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1601PartialElementsMustBeDocumented.cs +++ b/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1601PartialElementsMustBeDocumented.cs @@ -82,6 +82,9 @@ internal class SA1601PartialElementsMustBeDocumented : DiagnosticAnalyzer private static readonly DiagnosticDescriptor Descriptor = new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.DocumentationRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink); + private static readonly ImmutableArray BaseTypeDeclarationKinds = + ImmutableArray.Create(SyntaxKind.ClassDeclaration, SyntaxKind.StructDeclaration, SyntaxKind.InterfaceDeclaration); + private static readonly Action CompilationStartAction = HandleCompilationStart; /// @@ -97,9 +100,7 @@ public override void Initialize(AnalysisContext context) private static void HandleCompilationStart(CompilationStartAnalysisContext context) { Analyzer analyzer = new Analyzer(context.Options); - context.RegisterSyntaxNodeActionHonorExclusions(analyzer.HandleTypeDeclaration, SyntaxKind.ClassDeclaration); - context.RegisterSyntaxNodeActionHonorExclusions(analyzer.HandleTypeDeclaration, SyntaxKind.InterfaceDeclaration); - context.RegisterSyntaxNodeActionHonorExclusions(analyzer.HandleTypeDeclaration, SyntaxKind.StructDeclaration); + context.RegisterSyntaxNodeActionHonorExclusions(analyzer.HandleBaseTypeDeclaration, BaseTypeDeclarationKinds); context.RegisterSyntaxNodeActionHonorExclusions(analyzer.HandleMethodDeclaration, SyntaxKind.MethodDeclaration); } @@ -113,7 +114,7 @@ public Analyzer(AnalyzerOptions options) this.documentationSettings = settings.DocumentationRules; } - public void HandleTypeDeclaration(SyntaxNodeAnalysisContext context) + public void HandleBaseTypeDeclaration(SyntaxNodeAnalysisContext context) { if (context.GetDocumentationMode() != DocumentationMode.Diagnose) { diff --git a/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1608ElementDocumentationMustNotHaveDefaultSummary.cs b/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1608ElementDocumentationMustNotHaveDefaultSummary.cs index ccf57c055..449146895 100644 --- a/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1608ElementDocumentationMustNotHaveDefaultSummary.cs +++ b/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1608ElementDocumentationMustNotHaveDefaultSummary.cs @@ -47,7 +47,11 @@ internal class SA1608ElementDocumentationMustNotHaveDefaultSummary : DiagnosticA private static readonly DiagnosticDescriptor Descriptor = new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.DocumentationRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink); + private static readonly ImmutableArray DocumentationCommentKinds = + ImmutableArray.Create(SyntaxKind.SingleLineDocumentationCommentTrivia, SyntaxKind.MultiLineDocumentationCommentTrivia); + private static readonly Action CompilationStartAction = HandleCompilationStart; + private static readonly Action DocumentationAction = HandleDocumentation; /// public override ImmutableArray SupportedDiagnostics { get; } = @@ -61,7 +65,7 @@ public override void Initialize(AnalysisContext context) private static void HandleCompilationStart(CompilationStartAnalysisContext context) { - context.RegisterSyntaxNodeActionHonorExclusions(HandleDocumentation, SyntaxKind.SingleLineDocumentationCommentTrivia, SyntaxKind.MultiLineDocumentationCommentTrivia); + context.RegisterSyntaxNodeActionHonorExclusions(DocumentationAction, DocumentationCommentKinds); } private static void HandleDocumentation(SyntaxNodeAnalysisContext context) diff --git a/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1611ElementParametersMustBeDocumented.cs b/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1611ElementParametersMustBeDocumented.cs index 9fee384c9..7585bce26 100644 --- a/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1611ElementParametersMustBeDocumented.cs +++ b/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1611ElementParametersMustBeDocumented.cs @@ -42,7 +42,11 @@ internal class SA1611ElementParametersMustBeDocumented : DiagnosticAnalyzer private static readonly DiagnosticDescriptor Descriptor = new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.DocumentationRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink); + private static readonly ImmutableArray HandledSyntaxKinds = + ImmutableArray.Create(SyntaxKind.MethodDeclaration, SyntaxKind.ConstructorDeclaration, SyntaxKind.DelegateDeclaration, SyntaxKind.IndexerDeclaration); + private static readonly Action CompilationStartAction = HandleCompilationStart; + private static readonly Action SyntaxNodeAction = HandleSyntaxNode; /// public override ImmutableArray SupportedDiagnostics { get; } = @@ -56,10 +60,7 @@ public override void Initialize(AnalysisContext context) private static void HandleCompilationStart(CompilationStartAnalysisContext context) { - context.RegisterSyntaxNodeActionHonorExclusions(HandleSyntaxNode, SyntaxKind.MethodDeclaration); - context.RegisterSyntaxNodeActionHonorExclusions(HandleSyntaxNode, SyntaxKind.ConstructorDeclaration); - context.RegisterSyntaxNodeActionHonorExclusions(HandleSyntaxNode, SyntaxKind.DelegateDeclaration); - context.RegisterSyntaxNodeActionHonorExclusions(HandleSyntaxNode, SyntaxKind.IndexerDeclaration); + context.RegisterSyntaxNodeActionHonorExclusions(SyntaxNodeAction, HandledSyntaxKinds); } private static void HandleSyntaxNode(SyntaxNodeAnalysisContext context) diff --git a/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1612ElementParameterDocumentationMustMatchElementParameters.cs b/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1612ElementParameterDocumentationMustMatchElementParameters.cs index 935bf6f55..479a2f8c8 100644 --- a/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1612ElementParameterDocumentationMustMatchElementParameters.cs +++ b/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1612ElementParameterDocumentationMustMatchElementParameters.cs @@ -49,6 +49,7 @@ internal class SA1612ElementParameterDocumentationMustMatchElementParameters : D new DiagnosticDescriptor(DiagnosticId, Title, ParamWrongOrderMessageFormat, AnalyzerCategory.DocumentationRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink); private static readonly Action CompilationStartAction = HandleCompilationStart; + private static readonly Action DocumentationTriviaAction = HandleDocumentationTrivia; /// public override ImmutableArray SupportedDiagnostics { get; } = @@ -62,7 +63,7 @@ public override void Initialize(AnalysisContext context) private static void HandleCompilationStart(CompilationStartAnalysisContext context) { - context.RegisterSyntaxNodeActionHonorExclusions(HandleDocumentationTrivia, SyntaxKind.SingleLineDocumentationCommentTrivia); + context.RegisterSyntaxNodeActionHonorExclusions(DocumentationTriviaAction, SyntaxKind.SingleLineDocumentationCommentTrivia); } private static void HandleDocumentationTrivia(SyntaxNodeAnalysisContext context) diff --git a/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1613ElementParameterDocumentationMustDeclareParameterName.cs b/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1613ElementParameterDocumentationMustDeclareParameterName.cs index 88c9b3567..227778e0c 100644 --- a/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1613ElementParameterDocumentationMustDeclareParameterName.cs +++ b/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1613ElementParameterDocumentationMustDeclareParameterName.cs @@ -42,6 +42,8 @@ internal class SA1613ElementParameterDocumentationMustDeclareParameterName : Dia new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.DocumentationRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink); private static readonly Action CompilationStartAction = HandleCompilationStart; + private static readonly Action XmlElementAction = HandleXmlElement; + private static readonly Action XmlEmptyElementAction = HandleXmlEmptyElement; /// public override ImmutableArray SupportedDiagnostics { get; } = @@ -55,8 +57,8 @@ public override void Initialize(AnalysisContext context) private static void HandleCompilationStart(CompilationStartAnalysisContext context) { - context.RegisterSyntaxNodeActionHonorExclusions(HandleXmlElement, SyntaxKind.XmlElement); - context.RegisterSyntaxNodeActionHonorExclusions(HandleXmlEmptyElement, SyntaxKind.XmlEmptyElement); + context.RegisterSyntaxNodeActionHonorExclusions(XmlElementAction, SyntaxKind.XmlElement); + context.RegisterSyntaxNodeActionHonorExclusions(XmlEmptyElementAction, SyntaxKind.XmlEmptyElement); } private static void HandleXmlElement(SyntaxNodeAnalysisContext context) diff --git a/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1614ElementParameterDocumentationMustHaveText.cs b/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1614ElementParameterDocumentationMustHaveText.cs index fc8424d53..d69637842 100644 --- a/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1614ElementParameterDocumentationMustHaveText.cs +++ b/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1614ElementParameterDocumentationMustHaveText.cs @@ -42,6 +42,8 @@ internal class SA1614ElementParameterDocumentationMustHaveText : DiagnosticAnaly new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.DocumentationRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink); private static readonly Action CompilationStartAction = HandleCompilationStart; + private static readonly Action XmlElementAction = HandleXmlElement; + private static readonly Action XmlEmptyElementAction = HandleXmlEmptyElement; /// public override ImmutableArray SupportedDiagnostics { get; } = @@ -55,8 +57,8 @@ public override void Initialize(AnalysisContext context) private static void HandleCompilationStart(CompilationStartAnalysisContext context) { - context.RegisterSyntaxNodeActionHonorExclusions(HandleXmlElement, SyntaxKind.XmlElement); - context.RegisterSyntaxNodeActionHonorExclusions(HandleXmlEmptyElement, SyntaxKind.XmlEmptyElement); + context.RegisterSyntaxNodeActionHonorExclusions(XmlElementAction, SyntaxKind.XmlElement); + context.RegisterSyntaxNodeActionHonorExclusions(XmlEmptyElementAction, SyntaxKind.XmlEmptyElement); } private static void HandleXmlElement(SyntaxNodeAnalysisContext context) diff --git a/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1615ElementReturnValueMustBeDocumented.cs b/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1615ElementReturnValueMustBeDocumented.cs index 30819b452..1fe9e908c 100644 --- a/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1615ElementReturnValueMustBeDocumented.cs +++ b/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1615ElementReturnValueMustBeDocumented.cs @@ -40,6 +40,8 @@ internal class SA1615ElementReturnValueMustBeDocumented : DiagnosticAnalyzer new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.DocumentationRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink); private static readonly Action CompilationStartAction = HandleCompilationStart; + private static readonly Action MethodDeclarationAction = HandleMethodDeclaration; + private static readonly Action DelegateDeclarationAction = HandleDelegateDeclaration; /// public override ImmutableArray SupportedDiagnostics { get; } = @@ -53,8 +55,8 @@ public override void Initialize(AnalysisContext context) private static void HandleCompilationStart(CompilationStartAnalysisContext context) { - context.RegisterSyntaxNodeActionHonorExclusions(HandleMethodDeclaration, SyntaxKind.MethodDeclaration); - context.RegisterSyntaxNodeActionHonorExclusions(HandleDelegateDeclaration, SyntaxKind.DelegateDeclaration); + context.RegisterSyntaxNodeActionHonorExclusions(MethodDeclarationAction, SyntaxKind.MethodDeclaration); + context.RegisterSyntaxNodeActionHonorExclusions(DelegateDeclarationAction, SyntaxKind.DelegateDeclaration); } private static void HandleMethodDeclaration(SyntaxNodeAnalysisContext context) diff --git a/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1616ElementReturnValueDocumentationMustHaveText.cs b/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1616ElementReturnValueDocumentationMustHaveText.cs index 825fc47e6..f0c5669ee 100644 --- a/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1616ElementReturnValueDocumentationMustHaveText.cs +++ b/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1616ElementReturnValueDocumentationMustHaveText.cs @@ -41,6 +41,8 @@ internal class SA1616ElementReturnValueDocumentationMustHaveText : DiagnosticAna new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.DocumentationRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink); private static readonly Action CompilationStartAction = HandleCompilationStart; + private static readonly Action XmlElementAction = HandleXmlElement; + private static readonly Action XmlEmptyElementAction = HandleXmlEmptyElement; /// public override ImmutableArray SupportedDiagnostics { get; } = @@ -54,8 +56,8 @@ public override void Initialize(AnalysisContext context) private static void HandleCompilationStart(CompilationStartAnalysisContext context) { - context.RegisterSyntaxNodeActionHonorExclusions(HandleXmlElement, SyntaxKind.XmlElement); - context.RegisterSyntaxNodeActionHonorExclusions(HandleXmlEmptyElement, SyntaxKind.XmlEmptyElement); + context.RegisterSyntaxNodeActionHonorExclusions(XmlElementAction, SyntaxKind.XmlElement); + context.RegisterSyntaxNodeActionHonorExclusions(XmlEmptyElementAction, SyntaxKind.XmlEmptyElement); } private static void HandleXmlElement(SyntaxNodeAnalysisContext context) diff --git a/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1617VoidReturnValueMustNotBeDocumented.cs b/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1617VoidReturnValueMustNotBeDocumented.cs index d2fefa295..f22773197 100644 --- a/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1617VoidReturnValueMustNotBeDocumented.cs +++ b/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1617VoidReturnValueMustNotBeDocumented.cs @@ -41,6 +41,8 @@ internal class SA1617VoidReturnValueMustNotBeDocumented : DiagnosticAnalyzer new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.DocumentationRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink); private static readonly Action CompilationStartAction = HandleCompilationStart; + private static readonly Action MethodDeclarationAction = HandleMethodDeclaration; + private static readonly Action DelegateDeclarationAction = HandleDelegateDeclaration; /// public override ImmutableArray SupportedDiagnostics { get; } = @@ -54,8 +56,8 @@ public override void Initialize(AnalysisContext context) private static void HandleCompilationStart(CompilationStartAnalysisContext context) { - context.RegisterSyntaxNodeActionHonorExclusions(HandleMethodDeclaration, SyntaxKind.MethodDeclaration); - context.RegisterSyntaxNodeActionHonorExclusions(HandleDelegateDeclaration, SyntaxKind.DelegateDeclaration); + context.RegisterSyntaxNodeActionHonorExclusions(MethodDeclarationAction, SyntaxKind.MethodDeclaration); + context.RegisterSyntaxNodeActionHonorExclusions(DelegateDeclarationAction, SyntaxKind.DelegateDeclaration); } private static void HandleMethodDeclaration(SyntaxNodeAnalysisContext context) diff --git a/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1618GenericTypeParametersMustBeDocumented.cs b/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1618GenericTypeParametersMustBeDocumented.cs index 8f2d76246..1aad29d71 100644 --- a/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1618GenericTypeParametersMustBeDocumented.cs +++ b/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1618GenericTypeParametersMustBeDocumented.cs @@ -40,7 +40,13 @@ internal class SA1618GenericTypeParametersMustBeDocumented : DiagnosticAnalyzer private static readonly DiagnosticDescriptor Descriptor = new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.DocumentationRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink); + private static readonly ImmutableArray TypeDeclarationKinds = + ImmutableArray.Create(SyntaxKind.ClassDeclaration, SyntaxKind.StructDeclaration, SyntaxKind.InterfaceDeclaration); + private static readonly Action CompilationStartAction = HandleCompilationStart; + private static readonly Action TypeDeclarationAction = HandleTypeDeclaration; + private static readonly Action MethodDeclarationAction = HandleMethodDeclaration; + private static readonly Action DelegateDeclarationAction = HandleDelegateDeclaration; /// public override ImmutableArray SupportedDiagnostics { get; } = @@ -54,10 +60,9 @@ public override void Initialize(AnalysisContext context) private static void HandleCompilationStart(CompilationStartAnalysisContext context) { - context.RegisterSyntaxNodeActionHonorExclusions(HandleTypeDeclaration, SyntaxKind.ClassDeclaration, SyntaxKind.StructDeclaration, SyntaxKind.InterfaceDeclaration); - - context.RegisterSyntaxNodeActionHonorExclusions(HandleMethodDeclaration, SyntaxKind.MethodDeclaration); - context.RegisterSyntaxNodeActionHonorExclusions(HandleDelegateDeclaration, SyntaxKind.DelegateDeclaration); + context.RegisterSyntaxNodeActionHonorExclusions(TypeDeclarationAction, TypeDeclarationKinds); + context.RegisterSyntaxNodeActionHonorExclusions(MethodDeclarationAction, SyntaxKind.MethodDeclaration); + context.RegisterSyntaxNodeActionHonorExclusions(DelegateDeclarationAction, SyntaxKind.DelegateDeclaration); } private static void HandleTypeDeclaration(SyntaxNodeAnalysisContext context) diff --git a/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1619GenericTypeParametersMustBeDocumentedPartialClass.cs b/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1619GenericTypeParametersMustBeDocumentedPartialClass.cs index 75f9dc2db..30f1cf246 100644 --- a/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1619GenericTypeParametersMustBeDocumentedPartialClass.cs +++ b/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1619GenericTypeParametersMustBeDocumentedPartialClass.cs @@ -90,7 +90,11 @@ internal class SA1619GenericTypeParametersMustBeDocumentedPartialClass : Diagnos private static readonly DiagnosticDescriptor Descriptor = new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.DocumentationRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink); + private static readonly ImmutableArray TypeDeclarationKinds = + ImmutableArray.Create(SyntaxKind.ClassDeclaration, SyntaxKind.StructDeclaration, SyntaxKind.InterfaceDeclaration); + private static readonly Action CompilationStartAction = HandleCompilationStart; + private static readonly Action TypeDeclarationAction = HandleTypeDeclaration; /// public override ImmutableArray SupportedDiagnostics { get; } = @@ -104,7 +108,7 @@ public override void Initialize(AnalysisContext context) private static void HandleCompilationStart(CompilationStartAnalysisContext context) { - context.RegisterSyntaxNodeActionHonorExclusions(HandleTypeDeclaration, SyntaxKind.ClassDeclaration, SyntaxKind.StructDeclaration, SyntaxKind.InterfaceDeclaration); + context.RegisterSyntaxNodeActionHonorExclusions(TypeDeclarationAction, TypeDeclarationKinds); } private static void HandleTypeDeclaration(SyntaxNodeAnalysisContext context) diff --git a/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1620GenericTypeParameterDocumentationMustMatchTypeParameters.cs b/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1620GenericTypeParameterDocumentationMustMatchTypeParameters.cs index 1892e2a62..6a901d5ed 100644 --- a/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1620GenericTypeParameterDocumentationMustMatchTypeParameters.cs +++ b/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1620GenericTypeParameterDocumentationMustMatchTypeParameters.cs @@ -50,6 +50,7 @@ internal class SA1620GenericTypeParameterDocumentationMustMatchTypeParameters : new DiagnosticDescriptor(DiagnosticId, Title, TypeParamWrongOrderMessageFormat, AnalyzerCategory.DocumentationRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink); private static readonly Action CompilationStartAction = HandleCompilationStart; + private static readonly Action DocumentationTriviaAction = HandleDocumentationTrivia; /// public override ImmutableArray SupportedDiagnostics { get; } = @@ -63,7 +64,7 @@ public override void Initialize(AnalysisContext context) private static void HandleCompilationStart(CompilationStartAnalysisContext context) { - context.RegisterSyntaxNodeActionHonorExclusions(HandleDocumentationTrivia, SyntaxKind.SingleLineDocumentationCommentTrivia); + context.RegisterSyntaxNodeActionHonorExclusions(DocumentationTriviaAction, SyntaxKind.SingleLineDocumentationCommentTrivia); } private static void HandleDocumentationTrivia(SyntaxNodeAnalysisContext context) diff --git a/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1621GenericTypeParameterDocumentationMustDeclareParameterName.cs b/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1621GenericTypeParameterDocumentationMustDeclareParameterName.cs index 7e63e6c98..4d5e9ebd2 100644 --- a/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1621GenericTypeParameterDocumentationMustDeclareParameterName.cs +++ b/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1621GenericTypeParameterDocumentationMustDeclareParameterName.cs @@ -42,6 +42,8 @@ internal class SA1621GenericTypeParameterDocumentationMustDeclareParameterName : new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.DocumentationRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink); private static readonly Action CompilationStartAction = HandleCompilationStart; + private static readonly Action XmlElementAction = HandleXmlElement; + private static readonly Action XmlEmptyElementAction = HandleXmlEmptyElement; /// public override ImmutableArray SupportedDiagnostics { get; } = @@ -55,8 +57,8 @@ public override void Initialize(AnalysisContext context) private static void HandleCompilationStart(CompilationStartAnalysisContext context) { - context.RegisterSyntaxNodeActionHonorExclusions(HandleXmlElement, SyntaxKind.XmlElement); - context.RegisterSyntaxNodeActionHonorExclusions(HandleXmlEmptyElement, SyntaxKind.XmlEmptyElement); + context.RegisterSyntaxNodeActionHonorExclusions(XmlElementAction, SyntaxKind.XmlElement); + context.RegisterSyntaxNodeActionHonorExclusions(XmlEmptyElementAction, SyntaxKind.XmlEmptyElement); } private static void HandleXmlElement(SyntaxNodeAnalysisContext context) diff --git a/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1622GenericTypeParameterDocumentationMustHaveText.cs b/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1622GenericTypeParameterDocumentationMustHaveText.cs index fa99d99b8..617191de4 100644 --- a/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1622GenericTypeParameterDocumentationMustHaveText.cs +++ b/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1622GenericTypeParameterDocumentationMustHaveText.cs @@ -41,6 +41,8 @@ internal class SA1622GenericTypeParameterDocumentationMustHaveText : DiagnosticA new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.DocumentationRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink); private static readonly Action CompilationStartAction = HandleCompilationStart; + private static readonly Action XmlElementAction = HandleXmlElement; + private static readonly Action XmlEmptyElementAction = HandleXmlEmptyElement; /// public override ImmutableArray SupportedDiagnostics { get; } = @@ -54,8 +56,8 @@ public override void Initialize(AnalysisContext context) private static void HandleCompilationStart(CompilationStartAnalysisContext context) { - context.RegisterSyntaxNodeActionHonorExclusions(HandleXmlElement, SyntaxKind.XmlElement); - context.RegisterSyntaxNodeActionHonorExclusions(HandleXmlEmptyElement, SyntaxKind.XmlEmptyElement); + context.RegisterSyntaxNodeActionHonorExclusions(XmlElementAction, SyntaxKind.XmlElement); + context.RegisterSyntaxNodeActionHonorExclusions(XmlEmptyElementAction, SyntaxKind.XmlEmptyElement); } private static void HandleXmlElement(SyntaxNodeAnalysisContext context) diff --git a/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1626SingleLineCommentsMustNotUseDocumentationStyleSlashes.cs b/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1626SingleLineCommentsMustNotUseDocumentationStyleSlashes.cs index 4a2c99f34..f048923e8 100644 --- a/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1626SingleLineCommentsMustNotUseDocumentationStyleSlashes.cs +++ b/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1626SingleLineCommentsMustNotUseDocumentationStyleSlashes.cs @@ -62,6 +62,7 @@ internal class SA1626SingleLineCommentsMustNotUseDocumentationStyleSlashes : Dia new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.DocumentationRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink); private static readonly Action CompilationStartAction = HandleCompilationStart; + private static readonly Action SingleLineDocumentationTriviaAction = HandleSingleLineDocumentationTrivia; /// public override ImmutableArray SupportedDiagnostics { get; } = @@ -75,7 +76,7 @@ public override void Initialize(AnalysisContext context) private static void HandleCompilationStart(CompilationStartAnalysisContext context) { - context.RegisterSyntaxNodeActionHonorExclusions(HandleSingleLineDocumentationTrivia, SyntaxKind.SingleLineDocumentationCommentTrivia); + context.RegisterSyntaxNodeActionHonorExclusions(SingleLineDocumentationTriviaAction, SyntaxKind.SingleLineDocumentationCommentTrivia); } private static void HandleSingleLineDocumentationTrivia(SyntaxNodeAnalysisContext context) diff --git a/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1627DocumentationTextMustNotBeEmpty.cs b/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1627DocumentationTextMustNotBeEmpty.cs index e132c774a..6c75caf22 100644 --- a/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1627DocumentationTextMustNotBeEmpty.cs +++ b/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1627DocumentationTextMustNotBeEmpty.cs @@ -56,6 +56,8 @@ internal class SA1627DocumentationTextMustNotBeEmpty : DiagnosticAnalyzer new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.DocumentationRules, DiagnosticSeverity.Warning, AnalyzerConstants.DisabledNoTests, Description, HelpLink); private static readonly Action CompilationStartAction = HandleCompilationStart; + private static readonly Action XmlElementAction = HandleXmlElement; + private static readonly Action XmlEmptyElementAction = HandleXmlEmptyElement; private static readonly ImmutableArray ElementsToCheck = ImmutableArray.Create( @@ -76,8 +78,8 @@ public override void Initialize(AnalysisContext context) private static void HandleCompilationStart(CompilationStartAnalysisContext context) { - context.RegisterSyntaxNodeActionHonorExclusions(HandleXmlElement, SyntaxKind.XmlElement); - context.RegisterSyntaxNodeActionHonorExclusions(HandleXmlEmptyElement, SyntaxKind.XmlEmptyElement); + context.RegisterSyntaxNodeActionHonorExclusions(XmlElementAction, SyntaxKind.XmlElement); + context.RegisterSyntaxNodeActionHonorExclusions(XmlEmptyElementAction, SyntaxKind.XmlEmptyElement); } private static void HandleXmlElement(SyntaxNodeAnalysisContext context) diff --git a/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1642ConstructorSummaryDocumentationMustBeginWithStandardText.cs b/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1642ConstructorSummaryDocumentationMustBeginWithStandardText.cs index f2ea4fd82..854c18df1 100644 --- a/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1642ConstructorSummaryDocumentationMustBeginWithStandardText.cs +++ b/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1642ConstructorSummaryDocumentationMustBeginWithStandardText.cs @@ -108,6 +108,7 @@ internal class SA1642ConstructorSummaryDocumentationMustBeginWithStandardText : new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.DocumentationRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink); private static readonly Action CompilationStartAction = HandleCompilationStart; + private static readonly Action ConstructorDeclarationAction = HandleConstructorDeclaration; /// /// Gets the standard text which is expected to appear at the beginning of the <summary> @@ -165,7 +166,7 @@ public override void Initialize(AnalysisContext context) private static void HandleCompilationStart(CompilationStartAnalysisContext context) { - context.RegisterSyntaxNodeActionHonorExclusions(HandleConstructorDeclaration, SyntaxKind.ConstructorDeclaration); + context.RegisterSyntaxNodeActionHonorExclusions(ConstructorDeclarationAction, SyntaxKind.ConstructorDeclaration); } private static void HandleConstructorDeclaration(SyntaxNodeAnalysisContext context) diff --git a/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1643DestructorSummaryDocumentationMustBeginWithStandardText.cs b/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1643DestructorSummaryDocumentationMustBeginWithStandardText.cs index 82c24e47e..52cfd4a4c 100644 --- a/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1643DestructorSummaryDocumentationMustBeginWithStandardText.cs +++ b/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1643DestructorSummaryDocumentationMustBeginWithStandardText.cs @@ -64,6 +64,7 @@ internal class SA1643DestructorSummaryDocumentationMustBeginWithStandardText : S new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.DocumentationRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink); private static readonly Action CompilationStartAction = HandleCompilationStart; + private static readonly Action DestructorDeclarationAction = HandleDestructor; /// /// Gets the standard text which is expected to appear at the beginning of the <summary> @@ -89,7 +90,7 @@ public override void Initialize(AnalysisContext context) private static void HandleCompilationStart(CompilationStartAnalysisContext context) { - context.RegisterSyntaxNodeActionHonorExclusions(HandleDestructor, SyntaxKind.DestructorDeclaration); + context.RegisterSyntaxNodeActionHonorExclusions(DestructorDeclarationAction, SyntaxKind.DestructorDeclaration); } private static void HandleDestructor(SyntaxNodeAnalysisContext context) diff --git a/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1648InheritDocMustBeUsedWithInheritingClass.cs b/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1648InheritDocMustBeUsedWithInheritingClass.cs index b2c2c43bb..5a82a7397 100644 --- a/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1648InheritDocMustBeUsedWithInheritingClass.cs +++ b/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1648InheritDocMustBeUsedWithInheritingClass.cs @@ -37,7 +37,15 @@ internal class SA1648InheritDocMustBeUsedWithInheritingClass : DiagnosticAnalyze private static readonly DiagnosticDescriptor Descriptor = new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.DocumentationRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink); + private static readonly ImmutableArray HandledTypeLikeDeclarationKinds = + ImmutableArray.Create(SyntaxKind.ClassDeclaration, SyntaxKind.StructDeclaration, SyntaxKind.InterfaceDeclaration, SyntaxKind.EnumDeclaration, SyntaxKind.DelegateDeclaration); + + private static readonly ImmutableArray MemberDeclarationKinds = + ImmutableArray.Create(SyntaxKind.ConstructorDeclaration, SyntaxKind.EventDeclaration, SyntaxKind.MethodDeclaration, SyntaxKind.PropertyDeclaration, SyntaxKind.EventFieldDeclaration, SyntaxKind.FieldDeclaration, SyntaxKind.IndexerDeclaration); + private static readonly Action CompilationStartAction = HandleCompilationStart; + private static readonly Action BaseTypeLikeDeclarationAction = HandleBaseTypeLikeDeclaration; + private static readonly Action MemberDeclarationAction = HandleMemberDeclaration; /// public override ImmutableArray SupportedDiagnostics { get; } = @@ -51,21 +59,11 @@ public override void Initialize(AnalysisContext context) private static void HandleCompilationStart(CompilationStartAnalysisContext context) { - context.RegisterSyntaxNodeActionHonorExclusions(HandleBaseTypeDeclarationSyntax, SyntaxKind.ClassDeclaration); - context.RegisterSyntaxNodeActionHonorExclusions(HandleBaseTypeDeclarationSyntax, SyntaxKind.InterfaceDeclaration); - context.RegisterSyntaxNodeActionHonorExclusions(HandleBaseTypeDeclarationSyntax, SyntaxKind.EnumDeclaration); - context.RegisterSyntaxNodeActionHonorExclusions(HandleBaseTypeDeclarationSyntax, SyntaxKind.StructDeclaration); - context.RegisterSyntaxNodeActionHonorExclusions(HandleBaseTypeDeclarationSyntax, SyntaxKind.DelegateDeclaration); - context.RegisterSyntaxNodeActionHonorExclusions(HandleMemberSyntax, SyntaxKind.ConstructorDeclaration); - context.RegisterSyntaxNodeActionHonorExclusions(HandleMemberSyntax, SyntaxKind.EventDeclaration); - context.RegisterSyntaxNodeActionHonorExclusions(HandleMemberSyntax, SyntaxKind.MethodDeclaration); - context.RegisterSyntaxNodeActionHonorExclusions(HandleMemberSyntax, SyntaxKind.PropertyDeclaration); - context.RegisterSyntaxNodeActionHonorExclusions(HandleMemberSyntax, SyntaxKind.EventFieldDeclaration); - context.RegisterSyntaxNodeActionHonorExclusions(HandleMemberSyntax, SyntaxKind.FieldDeclaration); - context.RegisterSyntaxNodeActionHonorExclusions(HandleMemberSyntax, SyntaxKind.IndexerDeclaration); + context.RegisterSyntaxNodeActionHonorExclusions(BaseTypeLikeDeclarationAction, HandledTypeLikeDeclarationKinds); + context.RegisterSyntaxNodeActionHonorExclusions(MemberDeclarationAction, MemberDeclarationKinds); } - private static void HandleBaseTypeDeclarationSyntax(SyntaxNodeAnalysisContext context) + private static void HandleBaseTypeLikeDeclaration(SyntaxNodeAnalysisContext context) { BaseTypeDeclarationSyntax baseType = context.Node as BaseTypeDeclarationSyntax; @@ -85,9 +83,9 @@ private static void HandleBaseTypeDeclarationSyntax(SyntaxNodeAnalysisContext co } } - private static void HandleMemberSyntax(SyntaxNodeAnalysisContext context) + private static void HandleMemberDeclaration(SyntaxNodeAnalysisContext context) { - MemberDeclarationSyntax memberSyntax = context.Node as MemberDeclarationSyntax; + MemberDeclarationSyntax memberSyntax = (MemberDeclarationSyntax)context.Node; var modifiers = memberSyntax.GetModifiers(); diff --git a/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1651DoNotUsePlaceholderElements.cs b/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1651DoNotUsePlaceholderElements.cs index 8ef636e97..fc36ad874 100644 --- a/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1651DoNotUsePlaceholderElements.cs +++ b/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1651DoNotUsePlaceholderElements.cs @@ -46,6 +46,8 @@ internal class SA1651DoNotUsePlaceholderElements : DiagnosticAnalyzer new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.DocumentationRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink); private static readonly Action CompilationStartAction = HandleCompilationStart; + private static readonly Action XmlElementAction = HandleXmlElement; + private static readonly Action XmlEmptyElementAction = HandleXmlEmptyElement; /// public override ImmutableArray SupportedDiagnostics { get; } = @@ -59,8 +61,8 @@ public override void Initialize(AnalysisContext context) private static void HandleCompilationStart(CompilationStartAnalysisContext context) { - context.RegisterSyntaxNodeActionHonorExclusions(HandleXmlElement, SyntaxKind.XmlElement); - context.RegisterSyntaxNodeActionHonorExclusions(HandleXmlEmptyElement, SyntaxKind.XmlEmptyElement); + context.RegisterSyntaxNodeActionHonorExclusions(XmlElementAction, SyntaxKind.XmlElement); + context.RegisterSyntaxNodeActionHonorExclusions(XmlEmptyElementAction, SyntaxKind.XmlEmptyElement); } private static void HandleXmlElement(SyntaxNodeAnalysisContext context) diff --git a/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1652EnableXmlDocumentationOutput.cs b/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1652EnableXmlDocumentationOutput.cs index ef3f4d32b..c61c09362 100644 --- a/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1652EnableXmlDocumentationOutput.cs +++ b/StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1652EnableXmlDocumentationOutput.cs @@ -39,6 +39,7 @@ internal class SA1652EnableXmlDocumentationOutput : DiagnosticAnalyzer new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.DocumentationRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink); private static readonly Action CompilationStartAction = HandleCompilationStart; + private static readonly Action SyntaxTreeAction = HandleSyntaxTree; /// public override ImmutableArray SupportedDiagnostics { get; } = @@ -52,7 +53,7 @@ public override void Initialize(AnalysisContext context) private static void HandleCompilationStart(CompilationStartAnalysisContext context) { - context.RegisterSyntaxTreeActionHonorExclusions(HandleSyntaxTree); + context.RegisterSyntaxTreeActionHonorExclusions(SyntaxTreeAction); } private static void HandleSyntaxTree(SyntaxTreeAnalysisContext context) diff --git a/StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1500CurlyBracketsForMultiLineStatementsMustNotShareLine.cs b/StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1500CurlyBracketsForMultiLineStatementsMustNotShareLine.cs index 0354acf90..753b19129 100644 --- a/StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1500CurlyBracketsForMultiLineStatementsMustNotShareLine.cs +++ b/StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1500CurlyBracketsForMultiLineStatementsMustNotShareLine.cs @@ -70,7 +70,20 @@ internal class SA1500CurlyBracketsForMultiLineStatementsMustNotShareLine : Diagn private static readonly DiagnosticDescriptor Descriptor = new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.LayoutRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink); + private static readonly ImmutableArray BaseTypeDeclarationKinds = + ImmutableArray.Create(SyntaxKind.ClassDeclaration, SyntaxKind.StructDeclaration, SyntaxKind.InterfaceDeclaration, SyntaxKind.EnumDeclaration); + + private static readonly ImmutableArray InitializerExpressionKinds = + ImmutableArray.Create(SyntaxKind.ObjectInitializerExpression, SyntaxKind.ArrayInitializerExpression, SyntaxKind.CollectionInitializerExpression); + private static readonly Action CompilationStartAction = HandleCompilationStart; + private static readonly Action NamespaceDeclarationAction = HandleNamespaceDeclaration; + private static readonly Action BaseTypeDeclarationAction = HandleBaseTypeDeclaration; + private static readonly Action AccessorListAction = HandleAccessorList; + private static readonly Action BlockAction = HandleBlock; + private static readonly Action SwitchStatementAction = HandleSwitchStatement; + private static readonly Action InitializerExpressionAction = HandleInitializerExpression; + private static readonly Action AnonymousObjectCreationExpressionAction = HandleAnonymousObjectCreationExpression; /// public override ImmutableArray SupportedDiagnostics { get; } = @@ -84,55 +97,52 @@ public override void Initialize(AnalysisContext context) private static void HandleCompilationStart(CompilationStartAnalysisContext context) { - context.RegisterSyntaxNodeActionHonorExclusions(HandleNamespaceDeclarationSyntax, SyntaxKind.NamespaceDeclaration); - context.RegisterSyntaxNodeActionHonorExclusions(HandleBaseTypeDeclarationSyntax, SyntaxKind.ClassDeclaration); - context.RegisterSyntaxNodeActionHonorExclusions(HandleBaseTypeDeclarationSyntax, SyntaxKind.EnumDeclaration); - context.RegisterSyntaxNodeActionHonorExclusions(HandleBaseTypeDeclarationSyntax, SyntaxKind.InterfaceDeclaration); - context.RegisterSyntaxNodeActionHonorExclusions(HandleBaseTypeDeclarationSyntax, SyntaxKind.StructDeclaration); - context.RegisterSyntaxNodeActionHonorExclusions(HandleAccessorListSyntax, SyntaxKind.AccessorList); - context.RegisterSyntaxNodeActionHonorExclusions(HandleBlockSyntax, SyntaxKind.Block); - context.RegisterSyntaxNodeActionHonorExclusions(HandleSwitchStatementSyntax, SyntaxKind.SwitchStatement); - context.RegisterSyntaxNodeActionHonorExclusions(HandleInitializerExpressionSyntax, SyntaxKind.ObjectInitializerExpression, SyntaxKind.ArrayInitializerExpression, SyntaxKind.CollectionInitializerExpression); - context.RegisterSyntaxNodeActionHonorExclusions(HandleAnonymousObjectCreationExpressionSyntax, SyntaxKind.AnonymousObjectCreationExpression); + context.RegisterSyntaxNodeActionHonorExclusions(NamespaceDeclarationAction, SyntaxKind.NamespaceDeclaration); + context.RegisterSyntaxNodeActionHonorExclusions(BaseTypeDeclarationAction, BaseTypeDeclarationKinds); + context.RegisterSyntaxNodeActionHonorExclusions(AccessorListAction, SyntaxKind.AccessorList); + context.RegisterSyntaxNodeActionHonorExclusions(BlockAction, SyntaxKind.Block); + context.RegisterSyntaxNodeActionHonorExclusions(SwitchStatementAction, SyntaxKind.SwitchStatement); + context.RegisterSyntaxNodeActionHonorExclusions(InitializerExpressionAction, InitializerExpressionKinds); + context.RegisterSyntaxNodeActionHonorExclusions(AnonymousObjectCreationExpressionAction, SyntaxKind.AnonymousObjectCreationExpression); } - private static void HandleNamespaceDeclarationSyntax(SyntaxNodeAnalysisContext context) + private static void HandleNamespaceDeclaration(SyntaxNodeAnalysisContext context) { var syntax = (NamespaceDeclarationSyntax)context.Node; CheckCurlyBraces(context, syntax.OpenBraceToken, syntax.CloseBraceToken); } - private static void HandleBaseTypeDeclarationSyntax(SyntaxNodeAnalysisContext context) + private static void HandleBaseTypeDeclaration(SyntaxNodeAnalysisContext context) { var syntax = (BaseTypeDeclarationSyntax)context.Node; CheckCurlyBraces(context, syntax.OpenBraceToken, syntax.CloseBraceToken); } - private static void HandleAccessorListSyntax(SyntaxNodeAnalysisContext context) + private static void HandleAccessorList(SyntaxNodeAnalysisContext context) { var syntax = (AccessorListSyntax)context.Node; CheckCurlyBraces(context, syntax.OpenBraceToken, syntax.CloseBraceToken); } - private static void HandleBlockSyntax(SyntaxNodeAnalysisContext context) + private static void HandleBlock(SyntaxNodeAnalysisContext context) { var syntax = (BlockSyntax)context.Node; CheckCurlyBraces(context, syntax.OpenBraceToken, syntax.CloseBraceToken); } - private static void HandleSwitchStatementSyntax(SyntaxNodeAnalysisContext context) + private static void HandleSwitchStatement(SyntaxNodeAnalysisContext context) { var syntax = (SwitchStatementSyntax)context.Node; CheckCurlyBraces(context, syntax.OpenBraceToken, syntax.CloseBraceToken); } - private static void HandleInitializerExpressionSyntax(SyntaxNodeAnalysisContext context) + private static void HandleInitializerExpression(SyntaxNodeAnalysisContext context) { var syntax = (InitializerExpressionSyntax)context.Node; CheckCurlyBraces(context, syntax.OpenBraceToken, syntax.CloseBraceToken); } - private static void HandleAnonymousObjectCreationExpressionSyntax(SyntaxNodeAnalysisContext context) + private static void HandleAnonymousObjectCreationExpression(SyntaxNodeAnalysisContext context) { var syntax = (AnonymousObjectCreationExpressionSyntax)context.Node; CheckCurlyBraces(context, syntax.OpenBraceToken, syntax.CloseBraceToken); diff --git a/StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1502ElementMustNotBeOnASingleLine.cs b/StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1502ElementMustNotBeOnASingleLine.cs index ef4c5bf33..9da4ebec2 100644 --- a/StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1502ElementMustNotBeOnASingleLine.cs +++ b/StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1502ElementMustNotBeOnASingleLine.cs @@ -51,7 +51,20 @@ internal class SA1502ElementMustNotBeOnASingleLine : DiagnosticAnalyzer private static readonly DiagnosticDescriptor Descriptor = new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.LayoutRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink); + private static readonly ImmutableArray BaseTypeDeclarationKinds = + ImmutableArray.Create(SyntaxKind.ClassDeclaration, SyntaxKind.StructDeclaration, SyntaxKind.InterfaceDeclaration, SyntaxKind.EnumDeclaration); + + private static readonly ImmutableArray BasePropertyDeclarationKinds = + ImmutableArray.Create(SyntaxKind.PropertyDeclaration, SyntaxKind.EventDeclaration, SyntaxKind.IndexerDeclaration); + + private static readonly ImmutableArray BaseMethodDeclarationKinds = + ImmutableArray.Create(SyntaxKind.MethodDeclaration, SyntaxKind.ConstructorDeclaration, SyntaxKind.DestructorDeclaration); + private static readonly Action CompilationStartAction = HandleCompilationStart; + private static readonly Action BaseTypeDeclarationAction = HandleBaseTypeDeclaration; + private static readonly Action BasePropertyDeclarationAction = HandleBasePropertyDeclaration; + private static readonly Action BaseMethodDeclarationAction = HandleBaseMethodDeclaration; + private static readonly Action NamespaceDeclarationAction = HandleNamespaceDeclaration; /// public override ImmutableArray SupportedDiagnostics { get; } = @@ -65,19 +78,19 @@ public override void Initialize(AnalysisContext context) private static void HandleCompilationStart(CompilationStartAnalysisContext context) { - context.RegisterSyntaxNodeActionHonorExclusions(HandleBaseTypeDeclarations, SyntaxKind.ClassDeclaration, SyntaxKind.InterfaceDeclaration, SyntaxKind.StructDeclaration, SyntaxKind.EnumDeclaration); - context.RegisterSyntaxNodeActionHonorExclusions(HandlePropertyLikeDeclarations, SyntaxKind.PropertyDeclaration, SyntaxKind.EventDeclaration, SyntaxKind.IndexerDeclaration); - context.RegisterSyntaxNodeActionHonorExclusions(HandleMethodLikeDeclarations, SyntaxKind.MethodDeclaration, SyntaxKind.ConstructorDeclaration, SyntaxKind.DestructorDeclaration); - context.RegisterSyntaxNodeActionHonorExclusions(HandleNamespaceDeclarations, SyntaxKind.NamespaceDeclaration); + context.RegisterSyntaxNodeActionHonorExclusions(BaseTypeDeclarationAction, BaseTypeDeclarationKinds); + context.RegisterSyntaxNodeActionHonorExclusions(BasePropertyDeclarationAction, BasePropertyDeclarationKinds); + context.RegisterSyntaxNodeActionHonorExclusions(BaseMethodDeclarationAction, BaseMethodDeclarationKinds); + context.RegisterSyntaxNodeActionHonorExclusions(NamespaceDeclarationAction, SyntaxKind.NamespaceDeclaration); } - private static void HandleBaseTypeDeclarations(SyntaxNodeAnalysisContext context) + private static void HandleBaseTypeDeclaration(SyntaxNodeAnalysisContext context) { var typeDeclaration = (BaseTypeDeclarationSyntax)context.Node; CheckViolation(context, typeDeclaration.OpenBraceToken, typeDeclaration.CloseBraceToken); } - private static void HandlePropertyLikeDeclarations(SyntaxNodeAnalysisContext context) + private static void HandleBasePropertyDeclaration(SyntaxNodeAnalysisContext context) { var basePropertyDeclaration = (BasePropertyDeclarationSyntax)context.Node; @@ -92,7 +105,7 @@ private static void HandlePropertyLikeDeclarations(SyntaxNodeAnalysisContext con } } - private static void HandleMethodLikeDeclarations(SyntaxNodeAnalysisContext context) + private static void HandleBaseMethodDeclaration(SyntaxNodeAnalysisContext context) { var baseMethodDeclaration = (BaseMethodDeclarationSyntax)context.Node; @@ -103,7 +116,7 @@ private static void HandleMethodLikeDeclarations(SyntaxNodeAnalysisContext conte } } - private static void HandleNamespaceDeclarations(SyntaxNodeAnalysisContext context) + private static void HandleNamespaceDeclaration(SyntaxNodeAnalysisContext context) { var namespaceDeclaration = (NamespaceDeclarationSyntax)context.Node; CheckViolation(context, namespaceDeclaration.OpenBraceToken, namespaceDeclaration.CloseBraceToken); diff --git a/StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1504AllAccessorsMustBeSingleLineOrMultiLine.cs b/StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1504AllAccessorsMustBeSingleLineOrMultiLine.cs index eff5a88b6..701115d6c 100644 --- a/StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1504AllAccessorsMustBeSingleLineOrMultiLine.cs +++ b/StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1504AllAccessorsMustBeSingleLineOrMultiLine.cs @@ -76,6 +76,7 @@ internal class SA1504AllAccessorsMustBeSingleLineOrMultiLine : DiagnosticAnalyze new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.LayoutRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink); private static readonly Action CompilationStartAction = HandleCompilationStart; + private static readonly Action AccessorListAction = HandleAccessorList; /// public override ImmutableArray SupportedDiagnostics { get; } = @@ -89,10 +90,10 @@ public override void Initialize(AnalysisContext context) private static void HandleCompilationStart(CompilationStartAnalysisContext context) { - context.RegisterSyntaxNodeActionHonorExclusions(HandleAccessorListDeclaration, SyntaxKind.AccessorList); + context.RegisterSyntaxNodeActionHonorExclusions(AccessorListAction, SyntaxKind.AccessorList); } - private static void HandleAccessorListDeclaration(SyntaxNodeAnalysisContext context) + private static void HandleAccessorList(SyntaxNodeAnalysisContext context) { var accessorList = (AccessorListSyntax)context.Node; diff --git a/StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1505OpeningCurlyBracketsMustNotBeFollowedByBlankLine.cs b/StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1505OpeningCurlyBracketsMustNotBeFollowedByBlankLine.cs index 8d3dccfaa..95c896fad 100644 --- a/StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1505OpeningCurlyBracketsMustNotBeFollowedByBlankLine.cs +++ b/StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1505OpeningCurlyBracketsMustNotBeFollowedByBlankLine.cs @@ -54,7 +54,20 @@ internal class SA1505OpeningCurlyBracketsMustNotBeFollowedByBlankLine : Diagnost private static readonly DiagnosticDescriptor Descriptor = new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.LayoutRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink); + private static readonly ImmutableArray BaseTypeDeclarationKinds = + ImmutableArray.Create(SyntaxKind.ClassDeclaration, SyntaxKind.StructDeclaration, SyntaxKind.InterfaceDeclaration, SyntaxKind.EnumDeclaration); + + private static readonly ImmutableArray InitializerExpressionKinds = + ImmutableArray.Create(SyntaxKind.ObjectInitializerExpression, SyntaxKind.CollectionInitializerExpression, SyntaxKind.ArrayInitializerExpression, SyntaxKind.ComplexElementInitializerExpression); + private static readonly Action CompilationStartAction = HandleCompilationStart; + private static readonly Action BlockAction = HandleBlock; + private static readonly Action InitializerExpressionAction = HandleInitializerExpression; + private static readonly Action AnonymousObjectCreationExpressionAction = HandleAnonymousObjectCreationExpression; + private static readonly Action SwitchStatementAction = HandleSwitchStatement; + private static readonly Action NamespaceDeclarationAction = HandleNamespaceDeclaration; + private static readonly Action BaseTypeDeclarationAction = HandleBaseTypeDeclaration; + private static readonly Action AccessorListAction = HandleAccessorList; /// public override ImmutableArray SupportedDiagnostics { get; } = @@ -68,13 +81,13 @@ public override void Initialize(AnalysisContext context) private static void HandleCompilationStart(CompilationStartAnalysisContext context) { - context.RegisterSyntaxNodeActionHonorExclusions(HandleBlock, SyntaxKind.Block); - context.RegisterSyntaxNodeActionHonorExclusions(HandleInitializers, SyntaxKind.ObjectInitializerExpression, SyntaxKind.CollectionInitializerExpression, SyntaxKind.ArrayInitializerExpression, SyntaxKind.ComplexElementInitializerExpression); - context.RegisterSyntaxNodeActionHonorExclusions(HandleAnonymousObjectCreation, SyntaxKind.AnonymousObjectCreationExpression); - context.RegisterSyntaxNodeActionHonorExclusions(HandleSwitchStatement, SyntaxKind.SwitchStatement); - context.RegisterSyntaxNodeActionHonorExclusions(HandleNamespaceDeclaration, SyntaxKind.NamespaceDeclaration); - context.RegisterSyntaxNodeActionHonorExclusions(HandleTypeDeclaration, SyntaxKind.ClassDeclaration, SyntaxKind.StructDeclaration, SyntaxKind.InterfaceDeclaration, SyntaxKind.EnumDeclaration); - context.RegisterSyntaxNodeActionHonorExclusions(HandleAccessorList, SyntaxKind.AccessorList); + context.RegisterSyntaxNodeActionHonorExclusions(BlockAction, SyntaxKind.Block); + context.RegisterSyntaxNodeActionHonorExclusions(InitializerExpressionAction, InitializerExpressionKinds); + context.RegisterSyntaxNodeActionHonorExclusions(AnonymousObjectCreationExpressionAction, SyntaxKind.AnonymousObjectCreationExpression); + context.RegisterSyntaxNodeActionHonorExclusions(SwitchStatementAction, SyntaxKind.SwitchStatement); + context.RegisterSyntaxNodeActionHonorExclusions(NamespaceDeclarationAction, SyntaxKind.NamespaceDeclaration); + context.RegisterSyntaxNodeActionHonorExclusions(BaseTypeDeclarationAction, BaseTypeDeclarationKinds); + context.RegisterSyntaxNodeActionHonorExclusions(AccessorListAction, SyntaxKind.AccessorList); } private static void HandleBlock(SyntaxNodeAnalysisContext context) @@ -83,13 +96,13 @@ private static void HandleBlock(SyntaxNodeAnalysisContext context) AnalyzeOpenBrace(context, block.OpenBraceToken); } - private static void HandleInitializers(SyntaxNodeAnalysisContext context) + private static void HandleInitializerExpression(SyntaxNodeAnalysisContext context) { var expression = (InitializerExpressionSyntax)context.Node; AnalyzeOpenBrace(context, expression.OpenBraceToken); } - private static void HandleAnonymousObjectCreation(SyntaxNodeAnalysisContext context) + private static void HandleAnonymousObjectCreationExpression(SyntaxNodeAnalysisContext context) { var expression = (AnonymousObjectCreationExpressionSyntax)context.Node; AnalyzeOpenBrace(context, expression.OpenBraceToken); @@ -107,7 +120,7 @@ private static void HandleNamespaceDeclaration(SyntaxNodeAnalysisContext context AnalyzeOpenBrace(context, namespaceDeclaration.OpenBraceToken); } - private static void HandleTypeDeclaration(SyntaxNodeAnalysisContext context) + private static void HandleBaseTypeDeclaration(SyntaxNodeAnalysisContext context) { var typeDeclaration = (BaseTypeDeclarationSyntax)context.Node; AnalyzeOpenBrace(context, typeDeclaration.OpenBraceToken); diff --git a/StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1506ElementDocumentationHeadersMustNotBeFollowedByBlankLine.cs b/StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1506ElementDocumentationHeadersMustNotBeFollowedByBlankLine.cs index de8d129af..634dcdfe9 100644 --- a/StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1506ElementDocumentationHeadersMustNotBeFollowedByBlankLine.cs +++ b/StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1506ElementDocumentationHeadersMustNotBeFollowedByBlankLine.cs @@ -50,7 +50,24 @@ internal class SA1506ElementDocumentationHeadersMustNotBeFollowedByBlankLine : D private static readonly DiagnosticDescriptor Descriptor = new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.LayoutRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink); + private static readonly ImmutableArray HandledSyntaxKinds = + ImmutableArray.Create( + SyntaxKind.ClassDeclaration, + SyntaxKind.StructDeclaration, + SyntaxKind.InterfaceDeclaration, + SyntaxKind.EnumDeclaration, + SyntaxKind.MethodDeclaration, + SyntaxKind.ConstructorDeclaration, + SyntaxKind.DestructorDeclaration, + SyntaxKind.PropertyDeclaration, + SyntaxKind.IndexerDeclaration, + SyntaxKind.FieldDeclaration, + SyntaxKind.DelegateDeclaration, + SyntaxKind.EventDeclaration, + SyntaxKind.EventFieldDeclaration); + private static readonly Action CompilationStartAction = HandleCompilationStart; + private static readonly Action DeclarationAction = HandleDeclaration; /// public override ImmutableArray SupportedDiagnostics { get; } = @@ -64,21 +81,7 @@ public override void Initialize(AnalysisContext context) private static void HandleCompilationStart(CompilationStartAnalysisContext context) { - context.RegisterSyntaxNodeActionHonorExclusions( - HandleDeclaration, - SyntaxKind.ClassDeclaration, - SyntaxKind.StructDeclaration, - SyntaxKind.InterfaceDeclaration, - SyntaxKind.EnumDeclaration, - SyntaxKind.MethodDeclaration, - SyntaxKind.ConstructorDeclaration, - SyntaxKind.DestructorDeclaration, - SyntaxKind.PropertyDeclaration, - SyntaxKind.IndexerDeclaration, - SyntaxKind.FieldDeclaration, - SyntaxKind.DelegateDeclaration, - SyntaxKind.EventDeclaration, - SyntaxKind.EventFieldDeclaration); + context.RegisterSyntaxNodeActionHonorExclusions(DeclarationAction, HandledSyntaxKinds); } private static void HandleDeclaration(SyntaxNodeAnalysisContext context) diff --git a/StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1507CodeMustNotContainMultipleBlankLinesInARow.cs b/StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1507CodeMustNotContainMultipleBlankLinesInARow.cs index 5f5d86a4d..02d09b8a9 100644 --- a/StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1507CodeMustNotContainMultipleBlankLinesInARow.cs +++ b/StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1507CodeMustNotContainMultipleBlankLinesInARow.cs @@ -54,6 +54,7 @@ internal class SA1507CodeMustNotContainMultipleBlankLinesInARow : DiagnosticAnal new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.LayoutRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink); private static readonly Action CompilationStartAction = HandleCompilationStart; + private static readonly Action SyntaxTreeAction = HandleSyntaxTree; /// public override ImmutableArray SupportedDiagnostics { get; } = @@ -67,10 +68,10 @@ public override void Initialize(AnalysisContext context) private static void HandleCompilationStart(CompilationStartAnalysisContext context) { - context.RegisterSyntaxTreeActionHonorExclusions(HandleSyntaxTreeAnalysis); + context.RegisterSyntaxTreeActionHonorExclusions(SyntaxTreeAction); } - private static void HandleSyntaxTreeAnalysis(SyntaxTreeAnalysisContext context) + private static void HandleSyntaxTree(SyntaxTreeAnalysisContext context) { SyntaxNode root = context.Tree.GetRoot(context.CancellationToken); foreach (var token in root.DescendantTokens(descendIntoTrivia: false)) diff --git a/StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1508ClosingCurlyBracketsMustNotBePrecededByBlankLine.cs b/StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1508ClosingCurlyBracketsMustNotBePrecededByBlankLine.cs index 8715474a0..5acf26413 100644 --- a/StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1508ClosingCurlyBracketsMustNotBePrecededByBlankLine.cs +++ b/StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1508ClosingCurlyBracketsMustNotBePrecededByBlankLine.cs @@ -53,7 +53,20 @@ internal class SA1508ClosingCurlyBracketsMustNotBePrecededByBlankLine : Diagnost private static readonly DiagnosticDescriptor Descriptor = new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.LayoutRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink); + private static readonly ImmutableArray BaseTypeDeclarationKinds = + ImmutableArray.Create(SyntaxKind.ClassDeclaration, SyntaxKind.StructDeclaration, SyntaxKind.InterfaceDeclaration, SyntaxKind.EnumDeclaration); + + private static readonly ImmutableArray InitializerExpressionKinds = + ImmutableArray.Create(SyntaxKind.ObjectInitializerExpression, SyntaxKind.CollectionInitializerExpression, SyntaxKind.ArrayInitializerExpression, SyntaxKind.ComplexElementInitializerExpression); + private static readonly Action CompilationStartAction = HandleCompilationStart; + private static readonly Action BlockAction = HandleBlock; + private static readonly Action InitializerExpressionAction = HandleInitializerExpression; + private static readonly Action AnonymousObjectCreationExpressionAction = HandleAnonymousObjectCreationExpression; + private static readonly Action SwitchStatementAction = HandleSwitchStatement; + private static readonly Action NamespaceDeclarationAction = HandleNamespaceDeclaration; + private static readonly Action BaseTypeDeclarationAction = HandleBaseTypeDeclaration; + private static readonly Action AccessorListAction = HandleAccessorList; /// public override ImmutableArray SupportedDiagnostics { get; } = @@ -67,13 +80,13 @@ public override void Initialize(AnalysisContext context) private static void HandleCompilationStart(CompilationStartAnalysisContext context) { - context.RegisterSyntaxNodeActionHonorExclusions(HandleBlock, SyntaxKind.Block); - context.RegisterSyntaxNodeActionHonorExclusions(HandleInitializers, SyntaxKind.ObjectInitializerExpression, SyntaxKind.CollectionInitializerExpression, SyntaxKind.ArrayInitializerExpression, SyntaxKind.ComplexElementInitializerExpression); - context.RegisterSyntaxNodeActionHonorExclusions(HandleAnonymousObjectCreation, SyntaxKind.AnonymousObjectCreationExpression); - context.RegisterSyntaxNodeActionHonorExclusions(HandleSwitchStatement, SyntaxKind.SwitchStatement); - context.RegisterSyntaxNodeActionHonorExclusions(HandleNamespaceDeclaration, SyntaxKind.NamespaceDeclaration); - context.RegisterSyntaxNodeActionHonorExclusions(HandleTypeDeclaration, SyntaxKind.ClassDeclaration, SyntaxKind.StructDeclaration, SyntaxKind.InterfaceDeclaration, SyntaxKind.EnumDeclaration); - context.RegisterSyntaxNodeActionHonorExclusions(HandleAccessorList, SyntaxKind.AccessorList); + context.RegisterSyntaxNodeActionHonorExclusions(BlockAction, SyntaxKind.Block); + context.RegisterSyntaxNodeActionHonorExclusions(InitializerExpressionAction, InitializerExpressionKinds); + context.RegisterSyntaxNodeActionHonorExclusions(AnonymousObjectCreationExpressionAction, SyntaxKind.AnonymousObjectCreationExpression); + context.RegisterSyntaxNodeActionHonorExclusions(SwitchStatementAction, SyntaxKind.SwitchStatement); + context.RegisterSyntaxNodeActionHonorExclusions(NamespaceDeclarationAction, SyntaxKind.NamespaceDeclaration); + context.RegisterSyntaxNodeActionHonorExclusions(BaseTypeDeclarationAction, BaseTypeDeclarationKinds); + context.RegisterSyntaxNodeActionHonorExclusions(AccessorListAction, SyntaxKind.AccessorList); } private static void HandleBlock(SyntaxNodeAnalysisContext context) @@ -82,13 +95,13 @@ private static void HandleBlock(SyntaxNodeAnalysisContext context) AnalyzeCloseBrace(context, block.CloseBraceToken); } - private static void HandleInitializers(SyntaxNodeAnalysisContext context) + private static void HandleInitializerExpression(SyntaxNodeAnalysisContext context) { var expression = (InitializerExpressionSyntax)context.Node; AnalyzeCloseBrace(context, expression.CloseBraceToken); } - private static void HandleAnonymousObjectCreation(SyntaxNodeAnalysisContext context) + private static void HandleAnonymousObjectCreationExpression(SyntaxNodeAnalysisContext context) { var expression = (AnonymousObjectCreationExpressionSyntax)context.Node; AnalyzeCloseBrace(context, expression.CloseBraceToken); @@ -106,7 +119,7 @@ private static void HandleNamespaceDeclaration(SyntaxNodeAnalysisContext context AnalyzeCloseBrace(context, namespaceDeclaration.CloseBraceToken); } - private static void HandleTypeDeclaration(SyntaxNodeAnalysisContext context) + private static void HandleBaseTypeDeclaration(SyntaxNodeAnalysisContext context) { var typeDeclaration = (BaseTypeDeclarationSyntax)context.Node; AnalyzeCloseBrace(context, typeDeclaration.CloseBraceToken); diff --git a/StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1509OpeningCurlyBracketsMustNotBePrecededByBlankLine.cs b/StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1509OpeningCurlyBracketsMustNotBePrecededByBlankLine.cs index fe47ed100..372c6e6b6 100644 --- a/StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1509OpeningCurlyBracketsMustNotBePrecededByBlankLine.cs +++ b/StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1509OpeningCurlyBracketsMustNotBePrecededByBlankLine.cs @@ -54,6 +54,7 @@ internal class SA1509OpeningCurlyBracketsMustNotBePrecededByBlankLine : Diagnost new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.LayoutRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink); private static readonly Action CompilationStartAction = HandleCompilationStart; + private static readonly Action SyntaxTreeAction = HandleSyntaxTree; /// public override ImmutableArray SupportedDiagnostics { get; } = @@ -67,10 +68,10 @@ public override void Initialize(AnalysisContext context) private static void HandleCompilationStart(CompilationStartAnalysisContext context) { - context.RegisterSyntaxTreeActionHonorExclusions(AnalyzeSyntaxTree); + context.RegisterSyntaxTreeActionHonorExclusions(SyntaxTreeAction); } - private static void AnalyzeSyntaxTree(SyntaxTreeAnalysisContext context) + private static void HandleSyntaxTree(SyntaxTreeAnalysisContext context) { var syntaxRoot = context.Tree.GetRoot(context.CancellationToken); diff --git a/StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1510ChainedStatementBlocksMustNotBePrecededByBlankLine.cs b/StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1510ChainedStatementBlocksMustNotBePrecededByBlankLine.cs index 096f4c01e..db9bf54a7 100644 --- a/StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1510ChainedStatementBlocksMustNotBePrecededByBlankLine.cs +++ b/StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1510ChainedStatementBlocksMustNotBePrecededByBlankLine.cs @@ -53,6 +53,9 @@ internal class SA1510ChainedStatementBlocksMustNotBePrecededByBlankLine : Diagno new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.LayoutRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink); private static readonly Action CompilationStartAction = HandleCompilationStart; + private static readonly Action ElseStatementAction = HandleElseStatement; + private static readonly Action CatchClauseAction = HandleCatchClause; + private static readonly Action FinallyClauseAction = HandleFinallyClause; /// public override ImmutableArray SupportedDiagnostics { get; } = @@ -66,9 +69,9 @@ public override void Initialize(AnalysisContext context) private static void HandleCompilationStart(CompilationStartAnalysisContext context) { - context.RegisterSyntaxNodeActionHonorExclusions(HandleElseStatement, SyntaxKind.ElseClause); - context.RegisterSyntaxNodeActionHonorExclusions(HandleCatchClause, SyntaxKind.CatchClause); - context.RegisterSyntaxNodeActionHonorExclusions(HandleFinallyClause, SyntaxKind.FinallyClause); + context.RegisterSyntaxNodeActionHonorExclusions(ElseStatementAction, SyntaxKind.ElseClause); + context.RegisterSyntaxNodeActionHonorExclusions(CatchClauseAction, SyntaxKind.CatchClause); + context.RegisterSyntaxNodeActionHonorExclusions(FinallyClauseAction, SyntaxKind.FinallyClause); } private static void HandleElseStatement(SyntaxNodeAnalysisContext context) diff --git a/StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1511WhileDoFooterMustNotBePrecededByBlankLine.cs b/StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1511WhileDoFooterMustNotBePrecededByBlankLine.cs index 337375d32..9c97b5ab0 100644 --- a/StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1511WhileDoFooterMustNotBePrecededByBlankLine.cs +++ b/StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1511WhileDoFooterMustNotBePrecededByBlankLine.cs @@ -48,6 +48,7 @@ internal class SA1511WhileDoFooterMustNotBePrecededByBlankLine : DiagnosticAnaly new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.LayoutRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink); private static readonly Action CompilationStartAction = HandleCompilationStart; + private static readonly Action DoStatementAction = HandleDoStatement; /// public override ImmutableArray SupportedDiagnostics { get; } = @@ -61,7 +62,7 @@ public override void Initialize(AnalysisContext context) private static void HandleCompilationStart(CompilationStartAnalysisContext context) { - context.RegisterSyntaxNodeActionHonorExclusions(HandleDoStatement, SyntaxKind.DoStatement); + context.RegisterSyntaxNodeActionHonorExclusions(DoStatementAction, SyntaxKind.DoStatement); } private static void HandleDoStatement(SyntaxNodeAnalysisContext context) diff --git a/StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1513ClosingCurlyBracketMustBeFollowedByBlankLine.cs b/StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1513ClosingCurlyBracketMustBeFollowedByBlankLine.cs index b21e8e581..558974273 100644 --- a/StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1513ClosingCurlyBracketMustBeFollowedByBlankLine.cs +++ b/StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1513ClosingCurlyBracketMustBeFollowedByBlankLine.cs @@ -54,6 +54,7 @@ internal class SA1513ClosingCurlyBracketMustBeFollowedByBlankLine : DiagnosticAn new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.LayoutRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink); private static readonly Action CompilationStartAction = HandleCompilationStart; + private static readonly Action SyntaxTreeAction = HandleSyntaxTree; /// public override ImmutableArray SupportedDiagnostics { get; } = @@ -67,10 +68,10 @@ public override void Initialize(AnalysisContext context) private static void HandleCompilationStart(CompilationStartAnalysisContext context) { - context.RegisterSyntaxTreeActionHonorExclusions(HandleSyntaxTreeAction); + context.RegisterSyntaxTreeActionHonorExclusions(SyntaxTreeAction); } - private static void HandleSyntaxTreeAction(SyntaxTreeAnalysisContext context) + private static void HandleSyntaxTree(SyntaxTreeAnalysisContext context) { var syntaxRoot = context.Tree.GetRoot(context.CancellationToken); diff --git a/StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1514ElementDocumentationHeaderMustBePrecededByBlankLine.cs b/StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1514ElementDocumentationHeaderMustBePrecededByBlankLine.cs index eb35046b3..de2f164ca 100644 --- a/StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1514ElementDocumentationHeaderMustBePrecededByBlankLine.cs +++ b/StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1514ElementDocumentationHeaderMustBePrecededByBlankLine.cs @@ -74,22 +74,8 @@ internal class SA1514ElementDocumentationHeaderMustBePrecededByBlankLine : Diagn private static readonly DiagnosticDescriptor Descriptor = new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.LayoutRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink); - private static readonly Action CompilationStartAction = HandleCompilationStart; - - /// - public override ImmutableArray SupportedDiagnostics { get; } = - ImmutableArray.Create(Descriptor); - - /// - public override void Initialize(AnalysisContext context) - { - context.RegisterCompilationStartAction(CompilationStartAction); - } - - private static void HandleCompilationStart(CompilationStartAnalysisContext context) - { - context.RegisterSyntaxNodeActionHonorExclusions( - HandleDeclaration, + private static readonly ImmutableArray HandledSyntaxKinds = + ImmutableArray.Create( SyntaxKind.ClassDeclaration, SyntaxKind.StructDeclaration, SyntaxKind.InterfaceDeclaration, @@ -104,6 +90,23 @@ private static void HandleCompilationStart(CompilationStartAnalysisContext conte SyntaxKind.DelegateDeclaration, SyntaxKind.EventDeclaration, SyntaxKind.EventFieldDeclaration); + + private static readonly Action CompilationStartAction = HandleCompilationStart; + private static readonly Action DeclarationAction = HandleDeclaration; + + /// + public override ImmutableArray SupportedDiagnostics { get; } = + ImmutableArray.Create(Descriptor); + + /// + public override void Initialize(AnalysisContext context) + { + context.RegisterCompilationStartAction(CompilationStartAction); + } + + private static void HandleCompilationStart(CompilationStartAnalysisContext context) + { + context.RegisterSyntaxNodeActionHonorExclusions(DeclarationAction, HandledSyntaxKinds); } private static void HandleDeclaration(SyntaxNodeAnalysisContext context) diff --git a/StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1515SingleLineCommentMustBePrecededByBlankLine.cs b/StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1515SingleLineCommentMustBePrecededByBlankLine.cs index 70c697600..d35413bee 100644 --- a/StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1515SingleLineCommentMustBePrecededByBlankLine.cs +++ b/StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1515SingleLineCommentMustBePrecededByBlankLine.cs @@ -88,6 +88,7 @@ internal class SA1515SingleLineCommentMustBePrecededByBlankLine : DiagnosticAnal new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.LayoutRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink); private static readonly Action CompilationStartAction = HandleCompilationStart; + private static readonly Action SyntaxTreeAction = HandleSyntaxTree; /// public override ImmutableArray SupportedDiagnostics { get; } = @@ -101,10 +102,10 @@ public override void Initialize(AnalysisContext context) private static void HandleCompilationStart(CompilationStartAnalysisContext context) { - context.RegisterSyntaxTreeActionHonorExclusions(HandleSyntaxTreeAnalysis); + context.RegisterSyntaxTreeActionHonorExclusions(SyntaxTreeAction); } - private static void HandleSyntaxTreeAnalysis(SyntaxTreeAnalysisContext context) + private static void HandleSyntaxTree(SyntaxTreeAnalysisContext context) { var syntaxRoot = context.Tree.GetRoot(context.CancellationToken); diff --git a/StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1516ElementsMustBeSeparatedByBlankLine.cs b/StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1516ElementsMustBeSeparatedByBlankLine.cs index 674f15f67..ffc4f9224 100644 --- a/StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1516ElementsMustBeSeparatedByBlankLine.cs +++ b/StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1516ElementsMustBeSeparatedByBlankLine.cs @@ -70,7 +70,17 @@ internal class SA1516ElementsMustBeSeparatedByBlankLine : DiagnosticAnalyzer private static readonly DiagnosticDescriptor Descriptor = new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.LayoutRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink); + private static readonly ImmutableArray TypeDeclarationKinds = + ImmutableArray.Create(SyntaxKind.ClassDeclaration, SyntaxKind.StructDeclaration, SyntaxKind.InterfaceDeclaration); + + private static readonly ImmutableArray BasePropertyDeclarationKinds = + ImmutableArray.Create(SyntaxKind.PropertyDeclaration, SyntaxKind.EventDeclaration, SyntaxKind.IndexerDeclaration); + private static readonly Action CompilationStartAction = HandleCompilationStart; + private static readonly Action TypeDeclarationAction = HandleTypeDeclaration; + private static readonly Action CompilationUnitAction = HandleCompilationUnit; + private static readonly Action NamespaceDeclarationAction = HandleNamespaceDeclaration; + private static readonly Action BasePropertyDeclarationAction = HandleBasePropertyDeclaration; /// public override ImmutableArray SupportedDiagnostics { get; } = @@ -84,23 +94,17 @@ public override void Initialize(AnalysisContext context) private static void HandleCompilationStart(CompilationStartAnalysisContext context) { - context.RegisterSyntaxNodeActionHonorExclusions(HandleTypeDeclaration, SyntaxKind.ClassDeclaration); - context.RegisterSyntaxNodeActionHonorExclusions(HandleTypeDeclaration, SyntaxKind.StructDeclaration); - context.RegisterSyntaxNodeActionHonorExclusions(HandleTypeDeclaration, SyntaxKind.InterfaceDeclaration); - - context.RegisterSyntaxNodeActionHonorExclusions(HandleCompilationUnit, SyntaxKind.CompilationUnit); - context.RegisterSyntaxNodeActionHonorExclusions(HandleNamespaceDeclaration, SyntaxKind.NamespaceDeclaration); - - context.RegisterSyntaxNodeActionHonorExclusions(HandlePropertyDeclaration, SyntaxKind.PropertyDeclaration); - context.RegisterSyntaxNodeActionHonorExclusions(HandlePropertyDeclaration, SyntaxKind.EventDeclaration); - context.RegisterSyntaxNodeActionHonorExclusions(HandlePropertyDeclaration, SyntaxKind.IndexerDeclaration); + context.RegisterSyntaxNodeActionHonorExclusions(TypeDeclarationAction, TypeDeclarationKinds); + context.RegisterSyntaxNodeActionHonorExclusions(CompilationUnitAction, SyntaxKind.CompilationUnit); + context.RegisterSyntaxNodeActionHonorExclusions(NamespaceDeclarationAction, SyntaxKind.NamespaceDeclaration); + context.RegisterSyntaxNodeActionHonorExclusions(BasePropertyDeclarationAction, BasePropertyDeclarationKinds); } - private static void HandlePropertyDeclaration(SyntaxNodeAnalysisContext context) + private static void HandleBasePropertyDeclaration(SyntaxNodeAnalysisContext context) { - var propertyDeclaration = context.Node as BasePropertyDeclarationSyntax; + var propertyDeclaration = (BasePropertyDeclarationSyntax)context.Node; - if (propertyDeclaration?.AccessorList?.Accessors != null) + if (propertyDeclaration.AccessorList?.Accessors != null) { var accessors = propertyDeclaration.AccessorList.Accessors; diff --git a/StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1517CodeMustNotContainBlankLinesAtStartOfFile.cs b/StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1517CodeMustNotContainBlankLinesAtStartOfFile.cs index 8f8d7cbb1..7a48d072e 100644 --- a/StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1517CodeMustNotContainBlankLinesAtStartOfFile.cs +++ b/StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1517CodeMustNotContainBlankLinesAtStartOfFile.cs @@ -35,6 +35,7 @@ internal class SA1517CodeMustNotContainBlankLinesAtStartOfFile : DiagnosticAnaly new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.LayoutRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink); private static readonly Action CompilationStartAction = HandleCompilationStart; + private static readonly Action SyntaxTreeAction = HandleSyntaxTree; /// public override ImmutableArray SupportedDiagnostics { get; } = @@ -48,10 +49,10 @@ public override void Initialize(AnalysisContext context) private static void HandleCompilationStart(CompilationStartAnalysisContext context) { - context.RegisterSyntaxTreeActionHonorExclusions(HandleSyntaxTreeAnalysis); + context.RegisterSyntaxTreeActionHonorExclusions(SyntaxTreeAction); } - private static void HandleSyntaxTreeAnalysis(SyntaxTreeAnalysisContext context) + private static void HandleSyntaxTree(SyntaxTreeAnalysisContext context) { var firstToken = context.Tree.GetRoot().GetFirstToken(includeZeroWidth: true); diff --git a/StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1518CodeMustNotContainBlankLinesAtEndOfFile.cs b/StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1518CodeMustNotContainBlankLinesAtEndOfFile.cs index d39275b36..79aba45e1 100644 --- a/StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1518CodeMustNotContainBlankLinesAtEndOfFile.cs +++ b/StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1518CodeMustNotContainBlankLinesAtEndOfFile.cs @@ -34,6 +34,7 @@ internal class SA1518CodeMustNotContainBlankLinesAtEndOfFile : DiagnosticAnalyze new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.LayoutRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink); private static readonly Action CompilationStartAction = HandleCompilationStart; + private static readonly Action SyntaxTreeAction = HandleSyntaxTree; /// public override ImmutableArray SupportedDiagnostics { get; } = @@ -47,10 +48,10 @@ public override void Initialize(AnalysisContext context) private static void HandleCompilationStart(CompilationStartAnalysisContext context) { - context.RegisterSyntaxTreeActionHonorExclusions(HandleSyntaxTreeAction); + context.RegisterSyntaxTreeActionHonorExclusions(SyntaxTreeAction); } - private static void HandleSyntaxTreeAction(SyntaxTreeAnalysisContext context) + private static void HandleSyntaxTree(SyntaxTreeAnalysisContext context) { var lastToken = context.Tree.GetRoot().GetLastToken(includeZeroWidth: true); diff --git a/StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1519CurlyBracketsMustNotBeOmittedFromMultiLineChildStatement.cs b/StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1519CurlyBracketsMustNotBeOmittedFromMultiLineChildStatement.cs index 06b432b4c..5402b86c8 100644 --- a/StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1519CurlyBracketsMustNotBeOmittedFromMultiLineChildStatement.cs +++ b/StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1519CurlyBracketsMustNotBeOmittedFromMultiLineChildStatement.cs @@ -45,6 +45,11 @@ internal class SA1519CurlyBracketsMustNotBeOmittedFromMultiLineChildStatement : new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.LayoutRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink); private static readonly Action CompilationStartAction = HandleCompilationStart; + private static readonly Action IfStatementAction = HandleIfStatement; + private static readonly Action DoStatementAction = HandleDoStatement; + private static readonly Action WhileStatementAction = HandleWhileStatement; + private static readonly Action ForStatementAction = HandleForStatement; + private static readonly Action ForEachStatementAction = HandleForEachStatement; /// public override ImmutableArray SupportedDiagnostics { get; } = @@ -58,11 +63,11 @@ public override void Initialize(AnalysisContext context) private static void HandleCompilationStart(CompilationStartAnalysisContext context) { - context.RegisterSyntaxNodeActionHonorExclusions(HandleIfStatement, SyntaxKind.IfStatement); - context.RegisterSyntaxNodeActionHonorExclusions(HandleDoStatement, SyntaxKind.DoStatement); - context.RegisterSyntaxNodeActionHonorExclusions(HandleWhileStatement, SyntaxKind.WhileStatement); - context.RegisterSyntaxNodeActionHonorExclusions(HandleForStatement, SyntaxKind.ForStatement); - context.RegisterSyntaxNodeActionHonorExclusions(HandleForEachStatement, SyntaxKind.ForEachStatement); + context.RegisterSyntaxNodeActionHonorExclusions(IfStatementAction, SyntaxKind.IfStatement); + context.RegisterSyntaxNodeActionHonorExclusions(DoStatementAction, SyntaxKind.DoStatement); + context.RegisterSyntaxNodeActionHonorExclusions(WhileStatementAction, SyntaxKind.WhileStatement); + context.RegisterSyntaxNodeActionHonorExclusions(ForStatementAction, SyntaxKind.ForStatement); + context.RegisterSyntaxNodeActionHonorExclusions(ForEachStatementAction, SyntaxKind.ForEachStatement); } private static void HandleIfStatement(SyntaxNodeAnalysisContext context) diff --git a/StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1520UseCurlyBracketsConsistently.cs b/StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1520UseCurlyBracketsConsistently.cs index b5d8b7ffc..17ffad3b5 100644 --- a/StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1520UseCurlyBracketsConsistently.cs +++ b/StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1520UseCurlyBracketsConsistently.cs @@ -51,6 +51,7 @@ internal class SA1520UseCurlyBracketsConsistently : DiagnosticAnalyzer new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.LayoutRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink); private static readonly Action CompilationStartAction = HandleCompilationStart; + private static readonly Action IfStatementAction = HandleIfStatement; /// public override ImmutableArray SupportedDiagnostics { get; } = @@ -64,7 +65,7 @@ public override void Initialize(AnalysisContext context) private static void HandleCompilationStart(CompilationStartAnalysisContext context) { - context.RegisterSyntaxNodeActionHonorExclusions(HandleIfStatement, SyntaxKind.IfStatement); + context.RegisterSyntaxNodeActionHonorExclusions(IfStatementAction, SyntaxKind.IfStatement); } private static void HandleIfStatement(SyntaxNodeAnalysisContext context) diff --git a/StyleCop.Analyzers/StyleCop.Analyzers/OrderingRules/SA1202ElementsMustBeOrderedByAccess.cs b/StyleCop.Analyzers/StyleCop.Analyzers/OrderingRules/SA1202ElementsMustBeOrderedByAccess.cs index 1793206af..4ead7d16a 100644 --- a/StyleCop.Analyzers/StyleCop.Analyzers/OrderingRules/SA1202ElementsMustBeOrderedByAccess.cs +++ b/StyleCop.Analyzers/StyleCop.Analyzers/OrderingRules/SA1202ElementsMustBeOrderedByAccess.cs @@ -50,6 +50,9 @@ internal class SA1202ElementsMustBeOrderedByAccess : DiagnosticAnalyzer private static readonly DiagnosticDescriptor Descriptor = new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.OrderingRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink); + private static readonly ImmutableArray TypeDeclarationKinds = + ImmutableArray.Create(SyntaxKind.ClassDeclaration, SyntaxKind.StructDeclaration); + private static readonly Dictionary MemberNames = new Dictionary { [SyntaxKind.DelegateDeclaration] = "delegates", @@ -83,7 +86,7 @@ private static void HandleCompilationStart(CompilationStartAnalysisContext conte { context.RegisterSyntaxNodeActionHonorExclusions(HandleCompilationUnit, SyntaxKind.CompilationUnit); context.RegisterSyntaxNodeActionHonorExclusions(HandleNamespaceDeclaration, SyntaxKind.NamespaceDeclaration); - context.RegisterSyntaxNodeActionHonorExclusions(HandleTypeDeclaration, SyntaxKind.ClassDeclaration, SyntaxKind.StructDeclaration); + context.RegisterSyntaxNodeActionHonorExclusions(HandleTypeDeclaration, TypeDeclarationKinds); } private static void HandleCompilationUnit(SyntaxNodeAnalysisContext context) diff --git a/StyleCop.Analyzers/StyleCop.Analyzers/OrderingRules/SA1204StaticElementsMustAppearBeforeInstanceElements.cs b/StyleCop.Analyzers/StyleCop.Analyzers/OrderingRules/SA1204StaticElementsMustAppearBeforeInstanceElements.cs index be2d7c0bd..b8e2dd8e4 100644 --- a/StyleCop.Analyzers/StyleCop.Analyzers/OrderingRules/SA1204StaticElementsMustAppearBeforeInstanceElements.cs +++ b/StyleCop.Analyzers/StyleCop.Analyzers/OrderingRules/SA1204StaticElementsMustAppearBeforeInstanceElements.cs @@ -37,6 +37,9 @@ internal class SA1204StaticElementsMustAppearBeforeInstanceElements : Diagnostic private static readonly DiagnosticDescriptor Descriptor = new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.OrderingRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink); + private static readonly ImmutableArray TypeDeclarationKinds = + ImmutableArray.Create(SyntaxKind.ClassDeclaration, SyntaxKind.StructDeclaration); + private static readonly Action CompilationStartAction = HandleCompilationStart; private static readonly Dictionary MemberNames = new Dictionary @@ -70,7 +73,7 @@ private static void HandleCompilationStart(CompilationStartAnalysisContext conte { context.RegisterSyntaxNodeActionHonorExclusions(HandleCompilationUnit, SyntaxKind.CompilationUnit); context.RegisterSyntaxNodeActionHonorExclusions(HandleNamespaceDeclaration, SyntaxKind.NamespaceDeclaration); - context.RegisterSyntaxNodeActionHonorExclusions(HandleTypeDelcaration, SyntaxKind.ClassDeclaration, SyntaxKind.StructDeclaration); + context.RegisterSyntaxNodeActionHonorExclusions(HandleTypeDelcaration, TypeDeclarationKinds); } private static void HandleCompilationUnit(SyntaxNodeAnalysisContext context) diff --git a/StyleCop.Analyzers/StyleCop.Analyzers/OrderingRules/SA1205PartialElementsMustDeclareAccess.cs b/StyleCop.Analyzers/StyleCop.Analyzers/OrderingRules/SA1205PartialElementsMustDeclareAccess.cs index 115928972..62597c664 100644 --- a/StyleCop.Analyzers/StyleCop.Analyzers/OrderingRules/SA1205PartialElementsMustDeclareAccess.cs +++ b/StyleCop.Analyzers/StyleCop.Analyzers/OrderingRules/SA1205PartialElementsMustDeclareAccess.cs @@ -33,6 +33,9 @@ internal class SA1205PartialElementsMustDeclareAccess : DiagnosticAnalyzer private static readonly DiagnosticDescriptor Descriptor = new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.OrderingRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink); + private static readonly ImmutableArray TypeDeclarationKinds = + ImmutableArray.Create(SyntaxKind.ClassDeclaration, SyntaxKind.StructDeclaration, SyntaxKind.InterfaceDeclaration); + private static readonly Action CompilationStartAction = HandleCompilationStart; /// @@ -47,10 +50,10 @@ public override void Initialize(AnalysisContext context) private static void HandleCompilationStart(CompilationStartAnalysisContext context) { - context.RegisterSyntaxNodeActionHonorExclusions(HandleElementDeclaration, SyntaxKind.ClassDeclaration, SyntaxKind.StructDeclaration, SyntaxKind.InterfaceDeclaration); + context.RegisterSyntaxNodeActionHonorExclusions(HandleTypeDeclaration, TypeDeclarationKinds); } - private static void HandleElementDeclaration(SyntaxNodeAnalysisContext context) + private static void HandleTypeDeclaration(SyntaxNodeAnalysisContext context) { var typeDeclarationNode = (TypeDeclarationSyntax)context.Node; diff --git a/StyleCop.Analyzers/StyleCop.Analyzers/OrderingRules/SA1206DeclarationKeywordsMustFollowOrder.cs b/StyleCop.Analyzers/StyleCop.Analyzers/OrderingRules/SA1206DeclarationKeywordsMustFollowOrder.cs index e6f183e17..e6a6973e4 100644 --- a/StyleCop.Analyzers/StyleCop.Analyzers/OrderingRules/SA1206DeclarationKeywordsMustFollowOrder.cs +++ b/StyleCop.Analyzers/StyleCop.Analyzers/OrderingRules/SA1206DeclarationKeywordsMustFollowOrder.cs @@ -44,6 +44,23 @@ internal class SA1206DeclarationKeywordsMustFollowOrder : DiagnosticAnalyzer private static readonly DiagnosticDescriptor Descriptor = new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.OrderingRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink); + private static readonly ImmutableArray HandledSyntaxKinds = + ImmutableArray.Create( + SyntaxKind.ClassDeclaration, + SyntaxKind.StructDeclaration, + SyntaxKind.InterfaceDeclaration, + SyntaxKind.EnumDeclaration, + SyntaxKind.DelegateDeclaration, + SyntaxKind.FieldDeclaration, + SyntaxKind.MethodDeclaration, + SyntaxKind.PropertyDeclaration, + SyntaxKind.EventDeclaration, + SyntaxKind.EventFieldDeclaration, + SyntaxKind.IndexerDeclaration, + SyntaxKind.OperatorDeclaration, + SyntaxKind.ConversionOperatorDeclaration, + SyntaxKind.ConstructorDeclaration); + private static readonly Action CompilationStartAction = HandleCompilationStart; /// @@ -84,22 +101,7 @@ public override void Initialize(AnalysisContext context) private static void HandleCompilationStart(CompilationStartAnalysisContext context) { - context.RegisterSyntaxNodeActionHonorExclusions( - HandleDeclaration, - SyntaxKind.ClassDeclaration, - SyntaxKind.StructDeclaration, - SyntaxKind.InterfaceDeclaration, - SyntaxKind.EnumDeclaration, - SyntaxKind.DelegateDeclaration, - SyntaxKind.FieldDeclaration, - SyntaxKind.MethodDeclaration, - SyntaxKind.PropertyDeclaration, - SyntaxKind.EventDeclaration, - SyntaxKind.EventFieldDeclaration, - SyntaxKind.IndexerDeclaration, - SyntaxKind.OperatorDeclaration, - SyntaxKind.ConversionOperatorDeclaration, - SyntaxKind.ConstructorDeclaration); + context.RegisterSyntaxNodeActionHonorExclusions(HandleDeclaration, HandledSyntaxKinds); } private static void HandleDeclaration(SyntaxNodeAnalysisContext context) diff --git a/StyleCop.Analyzers/StyleCop.Analyzers/OrderingRules/SA1207ProtectedMustComeBeforeInternal.cs b/StyleCop.Analyzers/StyleCop.Analyzers/OrderingRules/SA1207ProtectedMustComeBeforeInternal.cs index 64651a341..5143ef170 100644 --- a/StyleCop.Analyzers/StyleCop.Analyzers/OrderingRules/SA1207ProtectedMustComeBeforeInternal.cs +++ b/StyleCop.Analyzers/StyleCop.Analyzers/OrderingRules/SA1207ProtectedMustComeBeforeInternal.cs @@ -36,6 +36,19 @@ internal class SA1207ProtectedMustComeBeforeInternal : DiagnosticAnalyzer private static readonly DiagnosticDescriptor Descriptor = new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.OrderingRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink); + private static readonly ImmutableArray HandledSyntaxKinds = + ImmutableArray.Create( + SyntaxKind.ClassDeclaration, + SyntaxKind.DelegateDeclaration, + SyntaxKind.EventDeclaration, + SyntaxKind.EventFieldDeclaration, + SyntaxKind.FieldDeclaration, + SyntaxKind.IndexerDeclaration, + SyntaxKind.InterfaceDeclaration, + SyntaxKind.MethodDeclaration, + SyntaxKind.PropertyDeclaration, + SyntaxKind.StructDeclaration); + private static readonly Action CompilationStartAction = HandleCompilationStart; /// @@ -50,18 +63,7 @@ public override void Initialize(AnalysisContext context) private static void HandleCompilationStart(CompilationStartAnalysisContext context) { - context.RegisterSyntaxNodeActionHonorExclusions( - HandleDeclaration, - SyntaxKind.ClassDeclaration, - SyntaxKind.DelegateDeclaration, - SyntaxKind.EventDeclaration, - SyntaxKind.EventFieldDeclaration, - SyntaxKind.FieldDeclaration, - SyntaxKind.IndexerDeclaration, - SyntaxKind.InterfaceDeclaration, - SyntaxKind.MethodDeclaration, - SyntaxKind.PropertyDeclaration, - SyntaxKind.StructDeclaration); + context.RegisterSyntaxNodeActionHonorExclusions(HandleDeclaration, HandledSyntaxKinds); } private static void HandleDeclaration(SyntaxNodeAnalysisContext context) diff --git a/StyleCop.Analyzers/StyleCop.Analyzers/OrderingRules/SA1214StaticReadonlyElementsMustAppearBeforeStaticNonReadonlyElements.cs b/StyleCop.Analyzers/StyleCop.Analyzers/OrderingRules/SA1214StaticReadonlyElementsMustAppearBeforeStaticNonReadonlyElements.cs index 9a0995485..b4d5cb593 100644 --- a/StyleCop.Analyzers/StyleCop.Analyzers/OrderingRules/SA1214StaticReadonlyElementsMustAppearBeforeStaticNonReadonlyElements.cs +++ b/StyleCop.Analyzers/StyleCop.Analyzers/OrderingRules/SA1214StaticReadonlyElementsMustAppearBeforeStaticNonReadonlyElements.cs @@ -35,6 +35,9 @@ internal class SA1214StaticReadonlyElementsMustAppearBeforeStaticNonReadonlyElem private static readonly DiagnosticDescriptor Descriptor = new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.OrderingRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink); + private static readonly ImmutableArray TypeDeclarationKinds = + ImmutableArray.Create(SyntaxKind.ClassDeclaration, SyntaxKind.StructDeclaration); + private static readonly Action CompilationStartAction = HandleCompilationStart; /// @@ -49,10 +52,10 @@ public override void Initialize(AnalysisContext context) private static void HandleCompilationStart(CompilationStartAnalysisContext context) { - context.RegisterSyntaxNodeActionHonorExclusions(AnalyzeTypeDeclaration, SyntaxKind.ClassDeclaration, SyntaxKind.StructDeclaration); + context.RegisterSyntaxNodeActionHonorExclusions(HandleTypeDeclaration, TypeDeclarationKinds); } - private static void AnalyzeTypeDeclaration(SyntaxNodeAnalysisContext context) + private static void HandleTypeDeclaration(SyntaxNodeAnalysisContext context) { var typeDeclaration = (TypeDeclarationSyntax)context.Node; diff --git a/StyleCop.Analyzers/StyleCop.Analyzers/OrderingRules/SA1215InstanceReadonlyElementsMustAppearBeforeInstanceNonReadonlyElements.cs b/StyleCop.Analyzers/StyleCop.Analyzers/OrderingRules/SA1215InstanceReadonlyElementsMustAppearBeforeInstanceNonReadonlyElements.cs index ed0abbb55..e94d136ea 100644 --- a/StyleCop.Analyzers/StyleCop.Analyzers/OrderingRules/SA1215InstanceReadonlyElementsMustAppearBeforeInstanceNonReadonlyElements.cs +++ b/StyleCop.Analyzers/StyleCop.Analyzers/OrderingRules/SA1215InstanceReadonlyElementsMustAppearBeforeInstanceNonReadonlyElements.cs @@ -34,6 +34,9 @@ internal class SA1215InstanceReadonlyElementsMustAppearBeforeInstanceNonReadonly private static readonly DiagnosticDescriptor Descriptor = new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.OrderingRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink); + private static readonly ImmutableArray TypeDeclarationKinds = + ImmutableArray.Create(SyntaxKind.ClassDeclaration, SyntaxKind.StructDeclaration); + private static readonly Action CompilationStartAction = HandleCompilationStart; /// @@ -48,7 +51,7 @@ public override void Initialize(AnalysisContext context) private static void HandleCompilationStart(CompilationStartAnalysisContext context) { - context.RegisterSyntaxNodeActionHonorExclusions(HandleTypeDeclaration, SyntaxKind.ClassDeclaration, SyntaxKind.StructDeclaration); + context.RegisterSyntaxNodeActionHonorExclusions(HandleTypeDeclaration, TypeDeclarationKinds); } private static void HandleTypeDeclaration(SyntaxNodeAnalysisContext context) diff --git a/StyleCop.Analyzers/StyleCop.Analyzers/ReadabilityRules/SA1101PrefixLocalCallsWithThis.cs b/StyleCop.Analyzers/StyleCop.Analyzers/ReadabilityRules/SA1101PrefixLocalCallsWithThis.cs index 7cf148e4a..8396acfc9 100644 --- a/StyleCop.Analyzers/StyleCop.Analyzers/ReadabilityRules/SA1101PrefixLocalCallsWithThis.cs +++ b/StyleCop.Analyzers/StyleCop.Analyzers/ReadabilityRules/SA1101PrefixLocalCallsWithThis.cs @@ -45,6 +45,9 @@ internal class SA1101PrefixLocalCallsWithThis : DiagnosticAnalyzer private static readonly DiagnosticDescriptor Descriptor = new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.ReadabilityRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink); + private static readonly ImmutableArray SimpleNameKinds = + ImmutableArray.Create(SyntaxKind.IdentifierName, SyntaxKind.GenericName); + private static readonly Action CompilationStartAction = HandleCompilationStart; /// @@ -60,7 +63,7 @@ public override void Initialize(AnalysisContext context) private static void HandleCompilationStart(CompilationStartAnalysisContext context) { context.RegisterSyntaxNodeActionHonorExclusions(HandleMemberAccessExpression, SyntaxKind.SimpleMemberAccessExpression); - context.RegisterSyntaxNodeActionHonorExclusions(HandleIdentifierName, SyntaxKind.IdentifierName, SyntaxKind.GenericName); + context.RegisterSyntaxNodeActionHonorExclusions(HandleSimpleName, SimpleNameKinds); } /// @@ -75,7 +78,7 @@ private static void HandleMemberAccessExpression(SyntaxNodeAnalysisContext conte HandleIdentifierNameImpl(context, nameExpression); } - private static void HandleIdentifierName(SyntaxNodeAnalysisContext context) + private static void HandleSimpleName(SyntaxNodeAnalysisContext context) { switch (context.Node?.Parent?.Kind() ?? SyntaxKind.None) { diff --git a/StyleCop.Analyzers/StyleCop.Analyzers/ReadabilityRules/SA1114ParameterListMustFollowDeclaration.cs b/StyleCop.Analyzers/StyleCop.Analyzers/ReadabilityRules/SA1114ParameterListMustFollowDeclaration.cs index 9544772ee..9762c703a 100644 --- a/StyleCop.Analyzers/StyleCop.Analyzers/ReadabilityRules/SA1114ParameterListMustFollowDeclaration.cs +++ b/StyleCop.Analyzers/StyleCop.Analyzers/ReadabilityRules/SA1114ParameterListMustFollowDeclaration.cs @@ -54,6 +54,9 @@ internal class SA1114ParameterListMustFollowDeclaration : DiagnosticAnalyzer private static readonly DiagnosticDescriptor Descriptor = new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.ReadabilityRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink); + private static readonly ImmutableArray BaseMethodDeclarationKinds = + ImmutableArray.Create(SyntaxKind.MethodDeclaration, SyntaxKind.ConstructorDeclaration, SyntaxKind.OperatorDeclaration, SyntaxKind.ConversionOperatorDeclaration); + private static readonly Action CompilationStartAction = HandleCompilationStart; /// @@ -68,7 +71,7 @@ public override void Initialize(AnalysisContext context) private static void HandleCompilationStart(CompilationStartAnalysisContext context) { - context.RegisterSyntaxNodeActionHonorExclusions(HandleBaseMethodDeclaration, SyntaxKind.MethodDeclaration, SyntaxKind.ConstructorDeclaration, SyntaxKind.OperatorDeclaration); + context.RegisterSyntaxNodeActionHonorExclusions(HandleBaseMethodDeclaration, BaseMethodDeclarationKinds); context.RegisterSyntaxNodeActionHonorExclusions(HandleMethodInvocation, SyntaxKind.InvocationExpression); context.RegisterSyntaxNodeActionHonorExclusions(HandleObjectCreation, SyntaxKind.ObjectCreationExpression); context.RegisterSyntaxNodeActionHonorExclusions(HandleIndexerDeclaration, SyntaxKind.IndexerDeclaration); @@ -79,13 +82,6 @@ private static void HandleCompilationStart(CompilationStartAnalysisContext conte context.RegisterSyntaxNodeActionHonorExclusions(HandleDelegateDeclaration, SyntaxKind.DelegateDeclaration); context.RegisterSyntaxNodeActionHonorExclusions(HandleAnonymousMethod, SyntaxKind.AnonymousMethodExpression); context.RegisterSyntaxNodeActionHonorExclusions(HandleLambdaExpression, SyntaxKind.ParenthesizedLambdaExpression); - context.RegisterSyntaxNodeActionHonorExclusions(HandleConversionOperatorDeclaration, SyntaxKind.ConversionOperatorDeclaration); - } - - private static void HandleConversionOperatorDeclaration(SyntaxNodeAnalysisContext context) - { - var conversionOperatorDeclaration = (ConversionOperatorDeclarationSyntax)context.Node; - AnalyzeParametersList(context, conversionOperatorDeclaration.ParameterList); } private static void HandleLambdaExpression(SyntaxNodeAnalysisContext context) diff --git a/StyleCop.Analyzers/StyleCop.Analyzers/ReadabilityRules/SA1115ParameterMustFollowComma.cs b/StyleCop.Analyzers/StyleCop.Analyzers/ReadabilityRules/SA1115ParameterMustFollowComma.cs index a3705dc4f..6db070eea 100644 --- a/StyleCop.Analyzers/StyleCop.Analyzers/ReadabilityRules/SA1115ParameterMustFollowComma.cs +++ b/StyleCop.Analyzers/StyleCop.Analyzers/ReadabilityRules/SA1115ParameterMustFollowComma.cs @@ -55,6 +55,12 @@ internal class SA1115ParameterMustFollowComma : DiagnosticAnalyzer private static readonly DiagnosticDescriptor Descriptor = new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.ReadabilityRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink); + private static readonly ImmutableArray BaseMethodDeclarationKinds = + ImmutableArray.Create(SyntaxKind.ConstructorDeclaration, SyntaxKind.MethodDeclaration, SyntaxKind.OperatorDeclaration); + + private static readonly ImmutableArray ConstructorInitializerKinds = + ImmutableArray.Create(SyntaxKind.BaseConstructorInitializer, SyntaxKind.ThisConstructorInitializer); + private static readonly Action CompilationStartAction = HandleCompilationStart; /// @@ -69,7 +75,7 @@ public override void Initialize(AnalysisContext context) private static void HandleCompilationStart(CompilationStartAnalysisContext context) { - context.RegisterSyntaxNodeActionHonorExclusions(HandleBaseMethodDeclaration, SyntaxKind.ConstructorDeclaration, SyntaxKind.MethodDeclaration, SyntaxKind.OperatorDeclaration); + context.RegisterSyntaxNodeActionHonorExclusions(HandleBaseMethodDeclaration, BaseMethodDeclarationKinds); context.RegisterSyntaxNodeActionHonorExclusions(HandleInvocation, SyntaxKind.InvocationExpression); context.RegisterSyntaxNodeActionHonorExclusions(HandleObjectCreation, SyntaxKind.ObjectCreationExpression); context.RegisterSyntaxNodeActionHonorExclusions(HandleIndexerDeclaration, SyntaxKind.IndexerDeclaration); @@ -80,7 +86,7 @@ private static void HandleCompilationStart(CompilationStartAnalysisContext conte context.RegisterSyntaxNodeActionHonorExclusions(HandleAnonymousMethod, SyntaxKind.AnonymousMethodExpression); context.RegisterSyntaxNodeActionHonorExclusions(HandleLambda, SyntaxKind.ParenthesizedLambdaExpression); context.RegisterSyntaxNodeActionHonorExclusions(HandleDelegateDeclaration, SyntaxKind.DelegateDeclaration); - context.RegisterSyntaxNodeActionHonorExclusions(HandleConstructorInitializer, SyntaxKind.BaseConstructorInitializer, SyntaxKind.ThisConstructorInitializer); + context.RegisterSyntaxNodeActionHonorExclusions(HandleConstructorInitializer, ConstructorInitializerKinds); context.RegisterSyntaxNodeActionHonorExclusions(HandleElementBinding, SyntaxKind.ElementBindingExpression); context.RegisterSyntaxNodeActionHonorExclusions(HandleImpliticElementAccess, SyntaxKind.ImplicitElementAccess); } diff --git a/StyleCop.Analyzers/StyleCop.Analyzers/ReadabilityRules/SA1116SplitParametersMustStartOnLineAfterDeclaration.cs b/StyleCop.Analyzers/StyleCop.Analyzers/ReadabilityRules/SA1116SplitParametersMustStartOnLineAfterDeclaration.cs index d22bbbe82..d5aa8296a 100644 --- a/StyleCop.Analyzers/StyleCop.Analyzers/ReadabilityRules/SA1116SplitParametersMustStartOnLineAfterDeclaration.cs +++ b/StyleCop.Analyzers/StyleCop.Analyzers/ReadabilityRules/SA1116SplitParametersMustStartOnLineAfterDeclaration.cs @@ -50,6 +50,12 @@ internal class SA1116SplitParametersMustStartOnLineAfterDeclaration : Diagnostic private static readonly DiagnosticDescriptor Descriptor = new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.ReadabilityRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink); + private static readonly ImmutableArray BaseMethodDeclarationKinds = + ImmutableArray.Create(SyntaxKind.ConstructorDeclaration, SyntaxKind.MethodDeclaration, SyntaxKind.OperatorDeclaration); + + private static readonly ImmutableArray ConstructorInitializerKinds = + ImmutableArray.Create(SyntaxKind.BaseConstructorInitializer, SyntaxKind.ThisConstructorInitializer); + private static readonly Action CompilationStartAction = HandleCompilationStart; /// @@ -64,14 +70,8 @@ public override void Initialize(AnalysisContext context) private static void HandleCompilationStart(CompilationStartAnalysisContext context) { - context.RegisterSyntaxNodeActionHonorExclusions( - HandleBaseMethodDeclaration, - new[] { SyntaxKind.ConstructorDeclaration, SyntaxKind.MethodDeclaration, SyntaxKind.OperatorDeclaration }); - - context.RegisterSyntaxNodeActionHonorExclusions( - HandleConstructorInitializer, - new[] { SyntaxKind.BaseConstructorInitializer, SyntaxKind.ThisConstructorInitializer }); - + context.RegisterSyntaxNodeActionHonorExclusions(HandleBaseMethodDeclaration, BaseMethodDeclarationKinds); + context.RegisterSyntaxNodeActionHonorExclusions(HandleConstructorInitializer, ConstructorInitializerKinds); context.RegisterSyntaxNodeActionHonorExclusions(HandleDelegateDeclaration, SyntaxKind.DelegateDeclaration); context.RegisterSyntaxNodeActionHonorExclusions(HandleIndexerDeclaration, SyntaxKind.IndexerDeclaration); context.RegisterSyntaxNodeActionHonorExclusions(HandleInvocation, SyntaxKind.InvocationExpression); diff --git a/StyleCop.Analyzers/StyleCop.Analyzers/ReadabilityRules/SA1117ParametersMustBeOnSameLineOrSeparateLines.cs b/StyleCop.Analyzers/StyleCop.Analyzers/ReadabilityRules/SA1117ParametersMustBeOnSameLineOrSeparateLines.cs index a00fee5da..67a92a54e 100644 --- a/StyleCop.Analyzers/StyleCop.Analyzers/ReadabilityRules/SA1117ParametersMustBeOnSameLineOrSeparateLines.cs +++ b/StyleCop.Analyzers/StyleCop.Analyzers/ReadabilityRules/SA1117ParametersMustBeOnSameLineOrSeparateLines.cs @@ -61,6 +61,12 @@ internal class SA1117ParametersMustBeOnSameLineOrSeparateLines : DiagnosticAnaly private static readonly DiagnosticDescriptor Descriptor = new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.ReadabilityRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink); + private static readonly ImmutableArray BaseMethodDeclarationKinds = + ImmutableArray.Create(SyntaxKind.ConstructorDeclaration, SyntaxKind.MethodDeclaration); + + private static readonly ImmutableArray ConstructorInitializerKinds = + ImmutableArray.Create(SyntaxKind.BaseConstructorInitializer, SyntaxKind.ThisConstructorInitializer); + private static readonly Action CompilationStartAction = HandleCompilationStart; /// @@ -75,14 +81,8 @@ public override void Initialize(AnalysisContext context) private static void HandleCompilationStart(CompilationStartAnalysisContext context) { - context.RegisterSyntaxNodeActionHonorExclusions( - HandleBaseMethodDeclaration, - new[] { SyntaxKind.ConstructorDeclaration, SyntaxKind.MethodDeclaration }); - - context.RegisterSyntaxNodeActionHonorExclusions( - HandleConstructorInitializer, - new[] { SyntaxKind.BaseConstructorInitializer, SyntaxKind.ThisConstructorInitializer }); - + context.RegisterSyntaxNodeActionHonorExclusions(HandleBaseMethodDeclaration, BaseMethodDeclarationKinds); + context.RegisterSyntaxNodeActionHonorExclusions(HandleConstructorInitializer, ConstructorInitializerKinds); context.RegisterSyntaxNodeActionHonorExclusions(HandleDelegateDeclaration, SyntaxKind.DelegateDeclaration); context.RegisterSyntaxNodeActionHonorExclusions(HandleIndexerDeclaration, SyntaxKind.IndexerDeclaration); context.RegisterSyntaxNodeActionHonorExclusions(HandleInvocation, SyntaxKind.InvocationExpression); diff --git a/StyleCop.Analyzers/StyleCop.Analyzers/ReadabilityRules/SA1118ParameterMustNotSpanMultipleLines.cs b/StyleCop.Analyzers/StyleCop.Analyzers/ReadabilityRules/SA1118ParameterMustNotSpanMultipleLines.cs index 12603f80f..67962a508 100644 --- a/StyleCop.Analyzers/StyleCop.Analyzers/ReadabilityRules/SA1118ParameterMustNotSpanMultipleLines.cs +++ b/StyleCop.Analyzers/StyleCop.Analyzers/ReadabilityRules/SA1118ParameterMustNotSpanMultipleLines.cs @@ -69,6 +69,9 @@ internal class SA1118ParameterMustNotSpanMultipleLines : DiagnosticAnalyzer private static readonly DiagnosticDescriptor Descriptor = new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.ReadabilityRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink); + private static readonly ImmutableArray BaseArgumentListKinds = + ImmutableArray.Create(SyntaxKind.ArgumentList, SyntaxKind.BracketedArgumentList); + private static readonly Action CompilationStartAction = HandleCompilationStart; private static readonly SyntaxKind[] ArgumentExceptionSyntaxKinds = @@ -90,7 +93,7 @@ public override void Initialize(AnalysisContext context) private static void HandleCompilationStart(CompilationStartAnalysisContext context) { - context.RegisterSyntaxNodeActionHonorExclusions(HandleArgumentList, SyntaxKind.ArgumentList, SyntaxKind.BracketedArgumentList); + context.RegisterSyntaxNodeActionHonorExclusions(HandleBaseArgumentList, BaseArgumentListKinds); context.RegisterSyntaxNodeActionHonorExclusions(HandleAttributeArgumentList, SyntaxKind.AttributeArgumentList); } @@ -108,7 +111,7 @@ private static void HandleAttributeArgumentList(SyntaxNodeAnalysisContext contex } } - private static void HandleArgumentList(SyntaxNodeAnalysisContext context) + private static void HandleBaseArgumentList(SyntaxNodeAnalysisContext context) { var argumentListSyntax = (BaseArgumentListSyntax)context.Node; diff --git a/StyleCop.Analyzers/StyleCop.Analyzers/ReadabilityRules/SA1132DoNotCombineFields.cs b/StyleCop.Analyzers/StyleCop.Analyzers/ReadabilityRules/SA1132DoNotCombineFields.cs index 6e1186d8d..bfa8566b9 100644 --- a/StyleCop.Analyzers/StyleCop.Analyzers/ReadabilityRules/SA1132DoNotCombineFields.cs +++ b/StyleCop.Analyzers/StyleCop.Analyzers/ReadabilityRules/SA1132DoNotCombineFields.cs @@ -28,6 +28,9 @@ internal class SA1132DoNotCombineFields : DiagnosticAnalyzer private static readonly DiagnosticDescriptor Descriptor = new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.ReadabilityRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink); + private static readonly ImmutableArray BaseFieldDeclarationKinds = + ImmutableArray.Create(SyntaxKind.FieldDeclaration, SyntaxKind.EventFieldDeclaration); + private static readonly Action CompilationStartAction = HandleCompilationStart; /// @@ -42,10 +45,10 @@ public override void Initialize(AnalysisContext context) private static void HandleCompilationStart(CompilationStartAnalysisContext context) { - context.RegisterSyntaxNodeActionHonorExclusions(HandleDeclaration, SyntaxKind.FieldDeclaration, SyntaxKind.EventFieldDeclaration); + context.RegisterSyntaxNodeActionHonorExclusions(HandleBaseFieldDeclaration, BaseFieldDeclarationKinds); } - private static void HandleDeclaration(SyntaxNodeAnalysisContext context) + private static void HandleBaseFieldDeclaration(SyntaxNodeAnalysisContext context) { var fieldDeclaration = (BaseFieldDeclarationSyntax)context.Node; var variables = fieldDeclaration.Declaration.Variables; diff --git a/StyleCop.Analyzers/StyleCop.Analyzers/SpacingRules/SA1003SymbolsMustBeSpacedCorrectly.cs b/StyleCop.Analyzers/StyleCop.Analyzers/SpacingRules/SA1003SymbolsMustBeSpacedCorrectly.cs index c961472f9..72160a3cd 100644 --- a/StyleCop.Analyzers/StyleCop.Analyzers/SpacingRules/SA1003SymbolsMustBeSpacedCorrectly.cs +++ b/StyleCop.Analyzers/StyleCop.Analyzers/SpacingRules/SA1003SymbolsMustBeSpacedCorrectly.cs @@ -68,6 +68,61 @@ internal class SA1003SymbolsMustBeSpacedCorrectly : DiagnosticAnalyzer private const string Description = "The spacing around an operator symbol is incorrect, within a C# code file."; private const string HelpLink = "https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1003.md"; + private static readonly ImmutableArray BinaryExpressionKinds = + ImmutableArray.Create( + SyntaxKind.CoalesceExpression, + SyntaxKind.IsExpression, + SyntaxKind.AsExpression, + SyntaxKind.BitwiseOrExpression, + SyntaxKind.ExclusiveOrExpression, + SyntaxKind.BitwiseAndExpression, + SyntaxKind.EqualsExpression, + SyntaxKind.NotEqualsExpression, + SyntaxKind.LessThanExpression, + SyntaxKind.LessThanOrEqualExpression, + SyntaxKind.GreaterThanExpression, + SyntaxKind.GreaterThanOrEqualExpression, + SyntaxKind.LeftShiftExpression, + SyntaxKind.RightShiftExpression, + SyntaxKind.AddExpression, + SyntaxKind.SubtractExpression, + SyntaxKind.MultiplyExpression, + SyntaxKind.DivideExpression, + SyntaxKind.ModuloExpression, + SyntaxKind.LogicalAndExpression, + SyntaxKind.LogicalOrExpression); + + private static readonly ImmutableArray PrefixUnaryExpressionKinds = + ImmutableArray.Create( + SyntaxKind.UnaryPlusExpression, + SyntaxKind.UnaryMinusExpression, + SyntaxKind.BitwiseNotExpression, + SyntaxKind.LogicalNotExpression, + SyntaxKind.PreIncrementExpression, + SyntaxKind.PreDecrementExpression, + SyntaxKind.AddressOfExpression, + SyntaxKind.PointerIndirectionExpression); + + private static readonly ImmutableArray PostfixUnaryExpressionKinds = + ImmutableArray.Create(SyntaxKind.PostIncrementExpression, SyntaxKind.PostDecrementExpression); + + private static readonly ImmutableArray AssignmentExpressionKinds = + ImmutableArray.Create( + SyntaxKind.OrAssignmentExpression, + SyntaxKind.AndAssignmentExpression, + SyntaxKind.ExclusiveOrAssignmentExpression, + SyntaxKind.LeftShiftAssignmentExpression, + SyntaxKind.RightShiftAssignmentExpression, + SyntaxKind.AddAssignmentExpression, + SyntaxKind.SubtractAssignmentExpression, + SyntaxKind.MultiplyAssignmentExpression, + SyntaxKind.DivideAssignmentExpression, + SyntaxKind.ModuloAssignmentExpression, + SyntaxKind.SimpleAssignmentExpression); + + private static readonly ImmutableArray LambdaExpressionKinds = + ImmutableArray.Create(SyntaxKind.ParenthesizedLambdaExpression, SyntaxKind.SimpleLambdaExpression); + private static readonly Action CompilationStartAction = HandleCompilationStart; /// @@ -139,13 +194,13 @@ private static void HandleCompilationStart(CompilationStartAnalysisContext conte context.RegisterSyntaxNodeActionHonorExclusions(HandleConstructorDeclaration, SyntaxKind.ConstructorDeclaration); context.RegisterSyntaxNodeActionHonorExclusions(HandleConditionalExpression, SyntaxKind.ConditionalExpression); context.RegisterSyntaxNodeActionHonorExclusions(HandleTypeParameterConstraint, SyntaxKind.TypeParameterConstraintClause); - context.RegisterSyntaxNodeActionHonorExclusions(HandleBinaryExpression, SyntaxKind.CoalesceExpression, SyntaxKind.IsExpression, SyntaxKind.AsExpression, SyntaxKind.BitwiseOrExpression, SyntaxKind.ExclusiveOrExpression, SyntaxKind.BitwiseAndExpression, SyntaxKind.EqualsExpression, SyntaxKind.NotEqualsExpression, SyntaxKind.LessThanExpression, SyntaxKind.LessThanOrEqualExpression, SyntaxKind.GreaterThanExpression, SyntaxKind.GreaterThanOrEqualExpression, SyntaxKind.LeftShiftExpression, SyntaxKind.RightShiftExpression, SyntaxKind.AddExpression, SyntaxKind.SubtractExpression, SyntaxKind.MultiplyExpression, SyntaxKind.DivideExpression, SyntaxKind.ModuloExpression, SyntaxKind.LogicalAndExpression, SyntaxKind.LogicalOrExpression); - context.RegisterSyntaxNodeActionHonorExclusions(HandlePrefixUnaryExpression, SyntaxKind.UnaryPlusExpression, SyntaxKind.UnaryMinusExpression, SyntaxKind.BitwiseNotExpression, SyntaxKind.LogicalNotExpression, SyntaxKind.PreIncrementExpression, SyntaxKind.PreDecrementExpression, SyntaxKind.AddressOfExpression, SyntaxKind.PointerIndirectionExpression); - context.RegisterSyntaxNodeActionHonorExclusions(HandlePostfixUnaryExpression, SyntaxKind.PostIncrementExpression, SyntaxKind.PostDecrementExpression); - context.RegisterSyntaxNodeActionHonorExclusions(HandleAssignmentExpression, SyntaxKind.OrAssignmentExpression, SyntaxKind.AndAssignmentExpression, SyntaxKind.ExclusiveOrAssignmentExpression, SyntaxKind.LeftShiftAssignmentExpression, SyntaxKind.RightShiftAssignmentExpression, SyntaxKind.AddAssignmentExpression, SyntaxKind.SubtractAssignmentExpression, SyntaxKind.MultiplyAssignmentExpression, SyntaxKind.DivideAssignmentExpression, SyntaxKind.ModuloAssignmentExpression, SyntaxKind.SimpleAssignmentExpression); + context.RegisterSyntaxNodeActionHonorExclusions(HandleBinaryExpression, BinaryExpressionKinds); + context.RegisterSyntaxNodeActionHonorExclusions(HandlePrefixUnaryExpression, PrefixUnaryExpressionKinds); + context.RegisterSyntaxNodeActionHonorExclusions(HandlePostfixUnaryExpression, PostfixUnaryExpressionKinds); + context.RegisterSyntaxNodeActionHonorExclusions(HandleAssignmentExpression, AssignmentExpressionKinds); context.RegisterSyntaxNodeActionHonorExclusions(HandleCastExpression, SyntaxKind.CastExpression); context.RegisterSyntaxNodeActionHonorExclusions(HandleEqualsValueClause, SyntaxKind.EqualsValueClause); - context.RegisterSyntaxNodeActionHonorExclusions(HandleLambdaExpression, SyntaxKind.ParenthesizedLambdaExpression, SyntaxKind.SimpleLambdaExpression); + context.RegisterSyntaxNodeActionHonorExclusions(HandleLambdaExpression, LambdaExpressionKinds); } private static void HandleConstructorDeclaration(SyntaxNodeAnalysisContext context)