@@ -12,6 +12,7 @@ namespace StyleCop.Analyzers.NamingRules
1212 using Microsoft . CodeAnalysis . Diagnostics ;
1313 using StyleCop . Analyzers . Helpers ;
1414 using StyleCop . Analyzers . Lightup ;
15+ using StyleCop . Analyzers . Settings . ObjectModel ;
1516
1617 /// <summary>
1718 /// The name of a C# element does not begin with an upper-case letter.
@@ -29,6 +30,9 @@ namespace StyleCop.Analyzers.NamingRules
2930 /// class. A <c>NativeMethods</c> class is any class which contains a name ending in <c>NativeMethods</c>, and is
3031 /// intended as a placeholder for Win32 or COM wrappers. StyleCop will ignore this violation if the item is placed
3132 /// within a <c>NativeMethods</c> class.</para>
33+ ///
34+ /// <para>For namespace components that begin with a small letter, due to branding issues or other reasons, add the
35+ /// term to the <c>allowedNamespaceComponents</c> list.</para>
3236 /// </remarks>
3337 [ DiagnosticAnalyzer ( LanguageNames . CSharp ) ]
3438 internal class SA1300ElementMustBeginWithUpperCaseLetter : DiagnosticAnalyzer
@@ -45,7 +49,7 @@ internal class SA1300ElementMustBeginWithUpperCaseLetter : DiagnosticAnalyzer
4549 private static readonly DiagnosticDescriptor Descriptor =
4650 new DiagnosticDescriptor ( DiagnosticId , Title , MessageFormat , AnalyzerCategory . NamingRules , DiagnosticSeverity . Warning , AnalyzerConstants . EnabledByDefault , Description , HelpLink ) ;
4751
48- private static readonly Action < SyntaxNodeAnalysisContext > NamespaceDeclarationAction = HandleNamespaceDeclaration ;
52+ private static readonly Action < SyntaxNodeAnalysisContext , StyleCopSettings > NamespaceDeclarationAction = HandleNamespaceDeclaration ;
4953 private static readonly Action < SyntaxNodeAnalysisContext > ClassDeclarationAction = HandleClassDeclaration ;
5054 private static readonly Action < SyntaxNodeAnalysisContext > EnumDeclarationAction = HandleEnumDeclaration ;
5155 private static readonly Action < SyntaxNodeAnalysisContext > EnumMemberDeclarationAction = HandleEnumMemberDeclaration ;
@@ -82,13 +86,13 @@ public override void Initialize(AnalysisContext context)
8286 context . RegisterSyntaxNodeAction ( PropertyDeclarationAction , SyntaxKind . PropertyDeclaration ) ;
8387 }
8488
85- private static void HandleNamespaceDeclaration ( SyntaxNodeAnalysisContext context )
89+ private static void HandleNamespaceDeclaration ( SyntaxNodeAnalysisContext context , StyleCopSettings settings )
8690 {
8791 NameSyntax nameSyntax = ( ( NamespaceDeclarationSyntax ) context . Node ) . Name ;
88- CheckNameSyntax ( context , nameSyntax ) ;
92+ CheckNamespaceNameSyntax ( context , nameSyntax , settings ) ;
8993 }
9094
91- private static void CheckNameSyntax ( SyntaxNodeAnalysisContext context , NameSyntax nameSyntax )
95+ private static void CheckNamespaceNameSyntax ( SyntaxNodeAnalysisContext context , NameSyntax nameSyntax , StyleCopSettings settings )
9296 {
9397 if ( nameSyntax == null || nameSyntax . IsMissing )
9498 {
@@ -97,12 +101,13 @@ private static void CheckNameSyntax(SyntaxNodeAnalysisContext context, NameSynta
97101
98102 if ( nameSyntax is QualifiedNameSyntax qualifiedNameSyntax )
99103 {
100- CheckNameSyntax ( context , qualifiedNameSyntax . Left ) ;
101- CheckNameSyntax ( context , qualifiedNameSyntax . Right ) ;
104+ CheckNamespaceNameSyntax ( context , qualifiedNameSyntax . Left , settings ) ;
105+ CheckNamespaceNameSyntax ( context , qualifiedNameSyntax . Right , settings ) ;
102106 return ;
103107 }
104108
105- if ( nameSyntax is SimpleNameSyntax simpleNameSyntax )
109+ if ( nameSyntax is SimpleNameSyntax simpleNameSyntax &&
110+ ! settings . NamingRules . AllowedNamespaceComponents . Contains ( simpleNameSyntax . Identifier . ValueText ) )
106111 {
107112 CheckElementNameToken ( context , simpleNameSyntax . Identifier ) ;
108113 return ;
0 commit comments