@@ -344,30 +344,40 @@ private DiagnosticRecord GetViolationsForUncuddledBranches(
344
344
int openBracePos ,
345
345
string fileName )
346
346
{
347
- var expectedNewLinePos = closeBracePos + 1 ;
348
-
349
347
// this will not work if there is a comment in between any tokens.
350
- // find violation only if the open brace is on the same line as the branching statement.
351
- // todo handle types in catch statement
352
- if ( tokens . Length > 1 && tokens . Length > expectedNewLinePos )
348
+ var closeBraceToken = tokens [ closeBracePos ] ;
349
+ if ( tokens . Length <= closeBracePos + 2 ||
350
+ tokensToIgnore . Contains ( closeBraceToken ) )
353
351
{
354
- var closeBraceToken = tokens [ closeBracePos ] ;
355
- if ( tokens [ closeBracePos + 1 ] . Kind == TokenKind . NewLine &&
356
- IsBranchingStatementToken ( tokens [ closeBracePos + 2 ] ) &&
357
- tokens [ closeBracePos + 3 ] . Kind == TokenKind . LCurly )
358
- {
359
- return new DiagnosticRecord (
360
- GetError ( Strings . PlaceCloseBraceErrorShouldCuddleBranchStatement ) ,
361
- closeBraceToken . Extent ,
362
- GetName ( ) ,
363
- GetDiagnosticSeverity ( ) ,
364
- fileName ,
365
- null ,
366
- GetCorrectionsForUncuddledBranches ( tokens , closeBracePos , closeBracePos + 2 , fileName ) ) ;
367
- }
352
+ return null ;
368
353
}
369
354
370
- return null ;
355
+ var token1 = tokens [ closeBracePos + 1 ] ;
356
+ var token2 = tokens [ closeBracePos + 2 ] ;
357
+ var branchTokenPos = IsBranchingStatementToken ( token1 ) && ! ApartByWhitespace ( closeBraceToken , token1 ) ?
358
+ closeBracePos + 1 :
359
+ token1 . Kind == TokenKind . NewLine || IsBranchingStatementToken ( token2 ) ?
360
+ closeBracePos + 2 :
361
+ - 1 ;
362
+
363
+ return branchTokenPos == - 1 ?
364
+ null :
365
+ new DiagnosticRecord (
366
+ GetError ( Strings . PlaceCloseBraceErrorShouldCuddleBranchStatement ) ,
367
+ closeBraceToken . Extent ,
368
+ GetName ( ) ,
369
+ GetDiagnosticSeverity ( ) ,
370
+ fileName ,
371
+ null ,
372
+ GetCorrectionsForUncuddledBranches ( tokens , closeBracePos , branchTokenPos , fileName ) ) ;
373
+ }
374
+
375
+ private static bool ApartByWhitespace ( Token token1 , Token token2 )
376
+ {
377
+ var e1 = token1 . Extent ;
378
+ var e2 = token2 . Extent ;
379
+ return e1 . StartLineNumber == e2 . StartLineNumber &&
380
+ e1 . EndColumnNumber - e2 . StartColumnNumber == 1 ;
371
381
}
372
382
373
383
private List < CorrectionExtent > GetCorrectionsForUncuddledBranches (
0 commit comments