@@ -46,6 +46,13 @@ internal class SA1000KeywordsMustBeSpacedCorrectly : DiagnosticAnalyzer
4646
4747 private static readonly Action < SyntaxTreeAnalysisContext > SyntaxTreeAction = HandleSyntaxTree ;
4848 private static readonly Action < SyntaxNodeAnalysisContext > InvocationExpressionAction = HandleInvocationExpression ;
49+ private static readonly ReportDiagnosticCallback < SyntaxTreeAnalysisContext > ReportSyntaxTreeDiagnostic =
50+ ( ref SyntaxTreeAnalysisContext context , Diagnostic diagnostic ) => context . ReportDiagnostic ( diagnostic ) ;
51+
52+ private static readonly ReportDiagnosticCallback < SyntaxNodeAnalysisContext > ReportSyntaxNodeDiagnostic =
53+ ( ref SyntaxNodeAnalysisContext context , Diagnostic diagnostic ) => context . ReportDiagnostic ( diagnostic ) ;
54+
55+ private delegate void ReportDiagnosticCallback < TContext > ( ref TContext context , Diagnostic diagnostic ) ;
4956
5057 /// <inheritdoc/>
5158 public override ImmutableArray < DiagnosticDescriptor > SupportedDiagnostics { get ; } =
@@ -93,18 +100,18 @@ private static void HandleSyntaxTree(SyntaxTreeAnalysisContext context)
93100 case SyntaxKind . WhereKeyword :
94101 case SyntaxKind . WhileKeyword :
95102 case SyntaxKind . YieldKeyword :
96- HandleRequiredSpaceToken ( context , token ) ;
103+ HandleRequiredSpaceToken ( ref context , token ) ;
97104 break ;
98105
99106 case SyntaxKind . CheckedKeyword :
100107 case SyntaxKind . UncheckedKeyword :
101108 if ( token . GetNextToken ( ) . IsKind ( SyntaxKind . OpenBraceToken ) )
102109 {
103- HandleRequiredSpaceToken ( context , token ) ;
110+ HandleRequiredSpaceToken ( ref context , token ) ;
104111 }
105112 else
106113 {
107- HandleDisallowedSpaceToken ( context , token ) ;
114+ HandleDisallowedSpaceToken ( ref context , token ) ;
108115 }
109116
110117 break ;
@@ -113,19 +120,19 @@ private static void HandleSyntaxTree(SyntaxTreeAnalysisContext context)
113120 case SyntaxKind . NameOfKeyword :
114121 case SyntaxKind . SizeOfKeyword :
115122 case SyntaxKind . TypeOfKeyword :
116- HandleDisallowedSpaceToken ( context , token ) ;
123+ HandleDisallowedSpaceToken ( ref context , token ) ;
117124 break ;
118125
119126 case SyntaxKind . NewKeyword :
120- HandleNewKeywordToken ( context , token ) ;
127+ HandleNewKeywordToken ( ref context , token ) ;
121128 break ;
122129
123130 case SyntaxKind . ReturnKeyword :
124- HandleReturnKeywordToken ( context , token ) ;
131+ HandleReturnKeywordToken ( ref context , token ) ;
125132 break ;
126133
127134 case SyntaxKind . ThrowKeyword :
128- HandleThrowKeywordToken ( context , token ) ;
135+ HandleThrowKeywordToken ( ref context , token ) ;
129136 break ;
130137
131138 default :
@@ -157,11 +164,14 @@ private static void HandleInvocationExpression(SyntaxNodeAnalysisContext context
157164 if ( constantValue . HasValue && ! string . IsNullOrEmpty ( constantValue . Value as string ) )
158165 {
159166 // this is a nameof expression
160- HandleDisallowedSpaceToken ( context , identifierNameSyntax . Identifier ) ;
167+ HandleDisallowedSpaceToken ( ref context , identifierNameSyntax . Identifier ) ;
161168 }
162169 }
163170
164- private static void HandleRequiredSpaceToken ( SyntaxTreeAnalysisContext context , SyntaxToken token )
171+ private static void HandleRequiredSpaceToken ( ref SyntaxTreeAnalysisContext context , SyntaxToken token )
172+ => HandleRequiredSpaceToken ( ReportSyntaxTreeDiagnostic , ref context , token ) ;
173+
174+ private static void HandleRequiredSpaceToken < TContext > ( ReportDiagnosticCallback < TContext > reportDiagnostic , ref TContext context , SyntaxToken token )
165175 {
166176 if ( token . IsMissing )
167177 {
@@ -181,25 +191,16 @@ private static void HandleRequiredSpaceToken(SyntaxTreeAnalysisContext context,
181191 }
182192 }
183193
184- context . ReportDiagnostic ( Diagnostic . Create ( Descriptor , token . GetLocation ( ) , TokenSpacingProperties . InsertFollowing , token . Text , string . Empty ) ) ;
194+ reportDiagnostic ( ref context , Diagnostic . Create ( Descriptor , token . GetLocation ( ) , TokenSpacingProperties . InsertFollowing , token . Text , string . Empty ) ) ;
185195 }
186196
187- private static void HandleDisallowedSpaceToken ( SyntaxTreeAnalysisContext context , SyntaxToken token )
188- {
189- if ( token . IsMissing || ! token . HasTrailingTrivia )
190- {
191- return ;
192- }
193-
194- if ( ! token . TrailingTrivia . First ( ) . IsKind ( SyntaxKind . WhitespaceTrivia ) )
195- {
196- return ;
197- }
197+ private static void HandleDisallowedSpaceToken ( ref SyntaxTreeAnalysisContext context , SyntaxToken token )
198+ => HandleDisallowedSpaceToken ( ReportSyntaxTreeDiagnostic , ref context , token ) ;
198199
199- context . ReportDiagnostic ( Diagnostic . Create ( Descriptor , token . GetLocation ( ) , TokenSpacingProperties . RemoveFollowing , token . Text , " not" ) ) ;
200- }
200+ private static void HandleDisallowedSpaceToken ( ref SyntaxNodeAnalysisContext context , SyntaxToken token )
201+ => HandleDisallowedSpaceToken ( ReportSyntaxNodeDiagnostic , ref context , token ) ;
201202
202- private static void HandleDisallowedSpaceToken ( SyntaxNodeAnalysisContext context , SyntaxToken token )
203+ private static void HandleDisallowedSpaceToken < TContext > ( ReportDiagnosticCallback < TContext > reportDiagnostic , ref TContext context , SyntaxToken token )
203204 {
204205 if ( token . IsMissing || ! token . HasTrailingTrivia )
205206 {
@@ -211,10 +212,10 @@ private static void HandleDisallowedSpaceToken(SyntaxNodeAnalysisContext context
211212 return ;
212213 }
213214
214- context . ReportDiagnostic ( Diagnostic . Create ( Descriptor , token . GetLocation ( ) , TokenSpacingProperties . RemoveFollowing , token . Text , " not" ) ) ;
215+ reportDiagnostic ( ref context , Diagnostic . Create ( Descriptor , token . GetLocation ( ) , TokenSpacingProperties . RemoveFollowing , token . Text , " not" ) ) ;
215216 }
216217
217- private static void HandleNewKeywordToken ( SyntaxTreeAnalysisContext context , SyntaxToken token )
218+ private static void HandleNewKeywordToken ( ref SyntaxTreeAnalysisContext context , SyntaxToken token )
218219 {
219220 if ( token . IsMissing )
220221 {
@@ -231,15 +232,15 @@ private static void HandleNewKeywordToken(SyntaxTreeAnalysisContext context, Syn
231232 return ;
232233 }
233234
234- HandleDisallowedSpaceToken ( context , token ) ;
235+ HandleDisallowedSpaceToken ( ref context , token ) ;
235236 return ;
236237 }
237238
238239 // otherwise treat as required
239- HandleRequiredSpaceToken ( context , token ) ;
240+ HandleRequiredSpaceToken ( ref context , token ) ;
240241 }
241242
242- private static void HandleReturnKeywordToken ( SyntaxTreeAnalysisContext context , SyntaxToken token )
243+ private static void HandleReturnKeywordToken ( ref SyntaxTreeAnalysisContext context , SyntaxToken token )
243244 {
244245 if ( token . IsMissing )
245246 {
@@ -253,15 +254,15 @@ private static void HandleReturnKeywordToken(SyntaxTreeAnalysisContext context,
253254 SyntaxToken nextToken = token . GetNextToken ( ) ;
254255 if ( nextToken . IsKind ( SyntaxKind . SemicolonToken ) || nextToken . IsKind ( SyntaxKind . ColonToken ) )
255256 {
256- HandleDisallowedSpaceToken ( context , token ) ;
257+ HandleDisallowedSpaceToken ( ref context , token ) ;
257258 return ;
258259 }
259260
260261 // otherwise treat as required
261- HandleRequiredSpaceToken ( context , token ) ;
262+ HandleRequiredSpaceToken ( ref context , token ) ;
262263 }
263264
264- private static void HandleThrowKeywordToken ( SyntaxTreeAnalysisContext context , SyntaxToken token )
265+ private static void HandleThrowKeywordToken ( ref SyntaxTreeAnalysisContext context , SyntaxToken token )
265266 {
266267 if ( token . IsMissing )
267268 {
@@ -274,12 +275,12 @@ private static void HandleThrowKeywordToken(SyntaxTreeAnalysisContext context, S
274275 SyntaxToken nextToken = token . GetNextToken ( ) ;
275276 if ( nextToken . IsKind ( SyntaxKind . SemicolonToken ) )
276277 {
277- HandleDisallowedSpaceToken ( context , token ) ;
278+ HandleDisallowedSpaceToken ( ref context , token ) ;
278279 return ;
279280 }
280281
281282 // otherwise treat as required
282- HandleRequiredSpaceToken ( context , token ) ;
283+ HandleRequiredSpaceToken ( ref context , token ) ;
283284 }
284285 }
285286}
0 commit comments