@@ -344,30 +344,40 @@ private DiagnosticRecord GetViolationsForUncuddledBranches(
344344 int openBracePos ,
345345 string fileName )
346346 {
347- var expectedNewLinePos = closeBracePos + 1 ;
348-
349347 // 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 ) )
353351 {
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 ;
368353 }
369354
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 ;
371381 }
372382
373383 private List < CorrectionExtent > GetCorrectionsForUncuddledBranches (
0 commit comments