@@ -11,6 +11,7 @@ namespace StyleCop.Analyzers.MaintainabilityRules
1111 using Microsoft . CodeAnalysis . CSharp . Syntax ;
1212 using Microsoft . CodeAnalysis . Diagnostics ;
1313 using StyleCop . Analyzers . Helpers ;
14+ using StyleCop . Analyzers . Lightup ;
1415
1516 /// <summary>
1617 /// A multi-line initializer should use a comma on the last item.
@@ -59,6 +60,7 @@ internal class SA1413UseTrailingCommasInMultiLineInitializers : DiagnosticAnalyz
5960 private static readonly Action < SyntaxNodeAnalysisContext > HandleObjectInitializerAction = HandleObjectInitializer ;
6061 private static readonly Action < SyntaxNodeAnalysisContext > HandleAnonymousObjectInitializerAction = HandleAnonymousObjectInitializer ;
6162 private static readonly Action < SyntaxNodeAnalysisContext > HandleEnumDeclarationAction = HandleEnumDeclaration ;
63+ private static readonly Action < SyntaxNodeAnalysisContext > HandleSwitchExpressionAction = HandleSwitchExpression ;
6264
6365 private static readonly ImmutableArray < SyntaxKind > ObjectInitializerKinds =
6466 ImmutableArray . Create ( SyntaxKind . ObjectInitializerExpression , SyntaxKind . ArrayInitializerExpression , SyntaxKind . CollectionInitializerExpression ) ;
@@ -76,6 +78,7 @@ public override void Initialize(AnalysisContext context)
7678 context . RegisterSyntaxNodeAction ( HandleObjectInitializerAction , ObjectInitializerKinds ) ;
7779 context . RegisterSyntaxNodeAction ( HandleAnonymousObjectInitializerAction , SyntaxKind . AnonymousObjectCreationExpression ) ;
7880 context . RegisterSyntaxNodeAction ( HandleEnumDeclarationAction , SyntaxKind . EnumDeclaration ) ;
81+ context . RegisterSyntaxNodeAction ( HandleSwitchExpressionAction , SyntaxKindEx . SwitchExpression ) ;
7982 }
8083
8184 private static void HandleEnumDeclaration ( SyntaxNodeAnalysisContext context )
@@ -120,5 +123,19 @@ private static void HandleAnonymousObjectInitializer(SyntaxNodeAnalysisContext c
120123 context . ReportDiagnostic ( Diagnostic . Create ( Descriptor , initializer . Initializers . Last ( ) . GetLocation ( ) ) ) ;
121124 }
122125 }
126+
127+ private static void HandleSwitchExpression ( SyntaxNodeAnalysisContext context )
128+ {
129+ var switchExpression = ( SwitchExpressionSyntaxWrapper ) context . Node ;
130+ if ( switchExpression . SyntaxNode == null || ! switchExpression . SyntaxNode . SpansMultipleLines ( ) )
131+ {
132+ return ;
133+ }
134+
135+ if ( switchExpression . Arms . SeparatorCount < switchExpression . Arms . Count )
136+ {
137+ context . ReportDiagnostic ( Diagnostic . Create ( Descriptor , switchExpression . Arms . Last ( ) . SyntaxNode . GetLocation ( ) ) ) ;
138+ }
139+ }
123140 }
124141}
0 commit comments