33
44namespace StyleCop . Analyzers . LayoutRules
55{
6+ using System ;
67 using System . Collections . Generic ;
78 using System . Collections . Immutable ;
89 using System . Linq ;
@@ -11,6 +12,7 @@ namespace StyleCop.Analyzers.LayoutRules
1112 using Microsoft . CodeAnalysis . CSharp . Syntax ;
1213 using Microsoft . CodeAnalysis . Diagnostics ;
1314 using StyleCop . Analyzers . Helpers ;
15+ using StyleCop . Analyzers . Settings . ObjectModel ;
1416
1517 /// <summary>
1618 /// The opening and closing braces for a C# statement have been omitted.
@@ -67,6 +69,9 @@ internal class SA1503BracesMustNotBeOmitted : DiagnosticAnalyzer
6769 private static readonly DiagnosticDescriptor Descriptor =
6870 new DiagnosticDescriptor ( DiagnosticId , Title , MessageFormat , AnalyzerCategory . LayoutRules , DiagnosticSeverity . Warning , AnalyzerConstants . EnabledByDefault , Description , HelpLink ) ;
6971
72+ private static readonly Action < SyntaxNodeAnalysisContext > IfStatementAction = HandleIfStatement ;
73+ private static readonly Action < SyntaxNodeAnalysisContext , StyleCopSettings > UsingStatementAction = HandleUsingStatement ;
74+
7075 /// <inheritdoc/>
7176 public override ImmutableArray < DiagnosticDescriptor > SupportedDiagnostics { get ; } =
7277 ImmutableArray . Create ( Descriptor ) ;
@@ -77,13 +82,13 @@ public override void Initialize(AnalysisContext context)
7782 context . ConfigureGeneratedCodeAnalysis ( GeneratedCodeAnalysisFlags . None ) ;
7883 context . EnableConcurrentExecution ( ) ;
7984
80- context . RegisterSyntaxNodeAction ( HandleIfStatement , SyntaxKind . IfStatement ) ;
85+ context . RegisterSyntaxNodeAction ( IfStatementAction , SyntaxKind . IfStatement ) ;
8186 context . RegisterSyntaxNodeAction ( ctx => CheckChildStatement ( ctx , ( ( DoStatementSyntax ) ctx . Node ) . Statement ) , SyntaxKind . DoStatement ) ;
8287 context . RegisterSyntaxNodeAction ( ctx => CheckChildStatement ( ctx , ( ( WhileStatementSyntax ) ctx . Node ) . Statement ) , SyntaxKind . WhileStatement ) ;
8388 context . RegisterSyntaxNodeAction ( ctx => CheckChildStatement ( ctx , ( ( ForStatementSyntax ) ctx . Node ) . Statement ) , SyntaxKind . ForStatement ) ;
8489 context . RegisterSyntaxNodeAction ( ctx => CheckChildStatement ( ctx , ( ( ForEachStatementSyntax ) ctx . Node ) . Statement ) , SyntaxKind . ForEachStatement ) ;
8590 context . RegisterSyntaxNodeAction ( ctx => CheckChildStatement ( ctx , ( ( FixedStatementSyntax ) ctx . Node ) . Statement ) , SyntaxKind . FixedStatement ) ;
86- context . RegisterSyntaxNodeAction ( ctx => CheckChildStatement ( ctx , ( ( UsingStatementSyntax ) ctx . Node ) . Statement ) , SyntaxKind . UsingStatement ) ;
91+ context . RegisterSyntaxNodeAction ( UsingStatementAction , SyntaxKind . UsingStatement ) ;
8792 context . RegisterSyntaxNodeAction ( ctx => CheckChildStatement ( ctx , ( ( LockStatementSyntax ) ctx . Node ) . Statement ) , SyntaxKind . LockStatement ) ;
8893 }
8994
@@ -121,6 +126,17 @@ private static void HandleIfStatement(SyntaxNodeAnalysisContext context)
121126 }
122127 }
123128
129+ private static void HandleUsingStatement ( SyntaxNodeAnalysisContext context , StyleCopSettings settings )
130+ {
131+ var usingStatement = ( UsingStatementSyntax ) context . Node ;
132+ if ( settings . LayoutRules . AllowConsecutiveUsings && usingStatement . Statement . IsKind ( SyntaxKind . UsingStatement ) )
133+ {
134+ return ;
135+ }
136+
137+ CheckChildStatement ( context , usingStatement . Statement ) ;
138+ }
139+
124140 private static void CheckChildStatement ( SyntaxNodeAnalysisContext context , StatementSyntax childStatement )
125141 {
126142 if ( childStatement is BlockSyntax )
0 commit comments