@@ -51,6 +51,7 @@ internal class SA1300ElementMustBeginWithUpperCaseLetter : DiagnosticAnalyzer
5151
5252 private static readonly Action < SyntaxNodeAnalysisContext , StyleCopSettings > NamespaceDeclarationAction = HandleNamespaceDeclaration ;
5353 private static readonly Action < SyntaxNodeAnalysisContext > ClassDeclarationAction = HandleClassDeclaration ;
54+ private static readonly Action < SyntaxNodeAnalysisContext > RecordDeclarationAction = HandleRecordDeclaration ;
5455 private static readonly Action < SyntaxNodeAnalysisContext > EnumDeclarationAction = HandleEnumDeclaration ;
5556 private static readonly Action < SyntaxNodeAnalysisContext > EnumMemberDeclarationAction = HandleEnumMemberDeclaration ;
5657 private static readonly Action < SyntaxNodeAnalysisContext > StructDeclarationAction = HandleStructDeclaration ;
@@ -60,6 +61,7 @@ internal class SA1300ElementMustBeginWithUpperCaseLetter : DiagnosticAnalyzer
6061 private static readonly Action < SyntaxNodeAnalysisContext > MethodDeclarationAction = HandleMethodDeclaration ;
6162 private static readonly Action < SyntaxNodeAnalysisContext > LocalFunctionStatementAction = HandleLocalFunctionStatement ;
6263 private static readonly Action < SyntaxNodeAnalysisContext > PropertyDeclarationAction = HandlePropertyDeclaration ;
64+ private static readonly Action < SyntaxNodeAnalysisContext > ParameterAction = HandleParameter ;
6365
6466 /// <inheritdoc/>
6567 public override ImmutableArray < DiagnosticDescriptor > SupportedDiagnostics { get ; } =
@@ -75,6 +77,7 @@ public override void Initialize(AnalysisContext context)
7577 // Note: Fields are handled by SA1303 through SA1311
7678 context . RegisterSyntaxNodeAction ( NamespaceDeclarationAction , SyntaxKind . NamespaceDeclaration ) ;
7779 context . RegisterSyntaxNodeAction ( ClassDeclarationAction , SyntaxKind . ClassDeclaration ) ;
80+ context . RegisterSyntaxNodeAction ( RecordDeclarationAction , SyntaxKindEx . RecordDeclaration ) ;
7881 context . RegisterSyntaxNodeAction ( EnumDeclarationAction , SyntaxKind . EnumDeclaration ) ;
7982 context . RegisterSyntaxNodeAction ( EnumMemberDeclarationAction , SyntaxKind . EnumMemberDeclaration ) ;
8083 context . RegisterSyntaxNodeAction ( StructDeclarationAction , SyntaxKind . StructDeclaration ) ;
@@ -84,6 +87,7 @@ public override void Initialize(AnalysisContext context)
8487 context . RegisterSyntaxNodeAction ( MethodDeclarationAction , SyntaxKind . MethodDeclaration ) ;
8588 context . RegisterSyntaxNodeAction ( LocalFunctionStatementAction , SyntaxKindEx . LocalFunctionStatement ) ;
8689 context . RegisterSyntaxNodeAction ( PropertyDeclarationAction , SyntaxKind . PropertyDeclaration ) ;
90+ context . RegisterSyntaxNodeAction ( ParameterAction , SyntaxKind . Parameter ) ;
8791 }
8892
8993 private static void HandleNamespaceDeclaration ( SyntaxNodeAnalysisContext context , StyleCopSettings settings )
@@ -121,6 +125,11 @@ private static void HandleClassDeclaration(SyntaxNodeAnalysisContext context)
121125 CheckElementNameToken ( context , ( ( ClassDeclarationSyntax ) context . Node ) . Identifier ) ;
122126 }
123127
128+ private static void HandleRecordDeclaration ( SyntaxNodeAnalysisContext context )
129+ {
130+ CheckElementNameToken ( context , ( ( TypeDeclarationSyntax ) context . Node ) . Identifier ) ;
131+ }
132+
124133 private static void HandleEnumDeclaration ( SyntaxNodeAnalysisContext context )
125134 {
126135 CheckElementNameToken ( context , ( ( EnumDeclarationSyntax ) context . Node ) . Identifier ) ;
@@ -203,6 +212,19 @@ private static void HandlePropertyDeclaration(SyntaxNodeAnalysisContext context)
203212 CheckElementNameToken ( context , propertyDeclaration . Identifier ) ;
204213 }
205214
215+ private static void HandleParameter ( SyntaxNodeAnalysisContext context )
216+ {
217+ var parameterDeclaration = ( ParameterSyntax ) context . Node ;
218+ if ( ! parameterDeclaration . Parent . IsKind ( SyntaxKind . ParameterList )
219+ || ! parameterDeclaration . Parent . Parent . IsKind ( SyntaxKindEx . RecordDeclaration ) )
220+ {
221+ // Only positional parameters of records are treated as properties
222+ return ;
223+ }
224+
225+ CheckElementNameToken ( context , parameterDeclaration . Identifier ) ;
226+ }
227+
206228 private static void CheckElementNameToken ( SyntaxNodeAnalysisContext context , SyntaxToken identifier , bool allowUnderscoreDigit = false )
207229 {
208230 if ( identifier . IsMissing )
0 commit comments