@@ 1767-1808 (lines=42) @@ | ||
1764 | return (-1, stack) |
|
1765 | ||
1766 | ||
1767 | def CloseExpression(clean_lines, linenum, pos): |
|
1768 | """If input points to ( or { or [ or <, finds the position that closes it. |
|
1769 | ||
1770 | If lines[linenum][pos] points to a '(' or '{' or '[' or '<', finds the |
|
1771 | linenum/pos that correspond to the closing of the expression. |
|
1772 | ||
1773 | TODO(unknown): cpplint spends a fair bit of time matching parentheses. |
|
1774 | Ideally we would want to index all opening and closing parentheses once |
|
1775 | and have CloseExpression be just a simple lookup, but due to preprocessor |
|
1776 | tricks, this is not so easy. |
|
1777 | ||
1778 | Args: |
|
1779 | clean_lines: A CleansedLines instance containing the file. |
|
1780 | linenum: The number of the line to check. |
|
1781 | pos: A position on the line. |
|
1782 | ||
1783 | Returns: |
|
1784 | A tuple (line, linenum, pos) pointer *past* the closing brace, or |
|
1785 | (line, len(lines), -1) if we never find a close. Note we ignore |
|
1786 | strings and comments when matching; and the line we return is the |
|
1787 | 'cleansed' line at linenum. |
|
1788 | """ |
|
1789 | ||
1790 | line = clean_lines.elided[linenum] |
|
1791 | if (line[pos] not in '({[<') or Match(r'<[<=]', line[pos:]): |
|
1792 | return (line, clean_lines.NumLines(), -1) |
|
1793 | ||
1794 | # Check first line |
|
1795 | (end_pos, stack) = FindEndOfExpressionInLine(line, pos, []) |
|
1796 | if end_pos > -1: |
|
1797 | return (line, linenum, end_pos) |
|
1798 | ||
1799 | # Continue scanning forward |
|
1800 | while stack and linenum < clean_lines.NumLines() - 1: |
|
1801 | linenum += 1 |
|
1802 | line = clean_lines.elided[linenum] |
|
1803 | (end_pos, stack) = FindEndOfExpressionInLine(line, 0, stack) |
|
1804 | if end_pos > -1: |
|
1805 | return (line, linenum, end_pos) |
|
1806 | ||
1807 | # Did not find end of expression before end of file, give up |
|
1808 | return (line, clean_lines.NumLines(), -1) |
|
1809 | ||
1810 | ||
1811 | def FindStartOfExpressionInLine(line, endpos, stack): |
@@ 1767-1808 (lines=42) @@ | ||
1764 | return (-1, stack) |
|
1765 | ||
1766 | ||
1767 | def CloseExpression(clean_lines, linenum, pos): |
|
1768 | """If input points to ( or { or [ or <, finds the position that closes it. |
|
1769 | ||
1770 | If lines[linenum][pos] points to a '(' or '{' or '[' or '<', finds the |
|
1771 | linenum/pos that correspond to the closing of the expression. |
|
1772 | ||
1773 | TODO(unknown): cpplint spends a fair bit of time matching parentheses. |
|
1774 | Ideally we would want to index all opening and closing parentheses once |
|
1775 | and have CloseExpression be just a simple lookup, but due to preprocessor |
|
1776 | tricks, this is not so easy. |
|
1777 | ||
1778 | Args: |
|
1779 | clean_lines: A CleansedLines instance containing the file. |
|
1780 | linenum: The number of the line to check. |
|
1781 | pos: A position on the line. |
|
1782 | ||
1783 | Returns: |
|
1784 | A tuple (line, linenum, pos) pointer *past* the closing brace, or |
|
1785 | (line, len(lines), -1) if we never find a close. Note we ignore |
|
1786 | strings and comments when matching; and the line we return is the |
|
1787 | 'cleansed' line at linenum. |
|
1788 | """ |
|
1789 | ||
1790 | line = clean_lines.elided[linenum] |
|
1791 | if (line[pos] not in '({[<') or Match(r'<[<=]', line[pos:]): |
|
1792 | return (line, clean_lines.NumLines(), -1) |
|
1793 | ||
1794 | # Check first line |
|
1795 | (end_pos, stack) = FindEndOfExpressionInLine(line, pos, []) |
|
1796 | if end_pos > -1: |
|
1797 | return (line, linenum, end_pos) |
|
1798 | ||
1799 | # Continue scanning forward |
|
1800 | while stack and linenum < clean_lines.NumLines() - 1: |
|
1801 | linenum += 1 |
|
1802 | line = clean_lines.elided[linenum] |
|
1803 | (end_pos, stack) = FindEndOfExpressionInLine(line, 0, stack) |
|
1804 | if end_pos > -1: |
|
1805 | return (line, linenum, end_pos) |
|
1806 | ||
1807 | # Did not find end of expression before end of file, give up |
|
1808 | return (line, clean_lines.NumLines(), -1) |
|
1809 | ||
1810 | ||
1811 | def FindStartOfExpressionInLine(line, endpos, stack): |