private static IndexToken ScanForMatchingBrace(IndexTokenNode tokenNode)
        {
            TokenType matchingType = tokenNode.IndexToken.Token.Type.MatchingBraceType();
            IndexTokenNode candidateToken = tokenNode;
            bool matchForward = tokenNode.IndexToken.Token.Type.IsBraceStart();
            int braceCounter = 0;

            while (candidateToken != null)
            {
                if (candidateToken.IndexToken.Token.Type == matchingType) braceCounter--;
                if (candidateToken.IndexToken.Token.Type == tokenNode.IndexToken.Token.Type) braceCounter++;
                if (braceCounter == 0) return candidateToken.IndexToken;
                candidateToken = matchForward ? candidateToken.Next() : candidateToken.Previous();
            }

            return null;
        }
 private static MatchingBracePair FindMatchingBracePair(IndexTokenNode tokenNode)
 {
     IndexToken matchingBrace = ScanForMatchingBrace(tokenNode);
     if (matchingBrace == null) return new MatchingBracePair(tokenNode.IndexToken, null);
     return new MatchingBracePair(tokenNode.IndexToken, matchingBrace);
 }