Skip to content

Commit 01a88e7

Browse files
committed
Simplify token pruning, closes #14139
1 parent 4def31f commit 01a88e7

File tree

1 file changed

+58
-61
lines changed

1 file changed

+58
-61
lines changed

Diff for: lib/elixir/src/elixir_tokenizer.erl

+58-61
Original file line numberDiff line numberDiff line change
@@ -1763,84 +1763,81 @@ add_cursor(_Line, Column, noprune, Terminators, Tokens) ->
17631763
{Column, Terminators, Tokens};
17641764
add_cursor(Line, Column, prune_and_cursor, Terminators, Tokens) ->
17651765
PrePrunedTokens = prune_identifier(Tokens),
1766-
{PrunedTokens, PrunedTerminators} = prune_tokens(PrePrunedTokens, [], Terminators),
1766+
PrunedTokens = prune_tokens(PrePrunedTokens, []),
17671767
CursorTokens = [
17681768
{')', {Line, Column + 11, nil}},
17691769
{'(', {Line, Column + 10, nil}},
17701770
{paren_identifier, {Line, Column, nil}, '__cursor__'}
17711771
| PrunedTokens
17721772
],
1773-
{Column + 12, PrunedTerminators, CursorTokens}.
1773+
{Column + 12, Terminators, CursorTokens}.
17741774

17751775
prune_identifier([{identifier, _, _} | Tokens]) -> Tokens;
17761776
prune_identifier(Tokens) -> Tokens.
17771777

17781778
%%% Any terminator needs to be closed
1779-
prune_tokens([{'end', _} | Tokens], Opener, Terminators) ->
1780-
prune_tokens(Tokens, ['end' | Opener], Terminators);
1781-
prune_tokens([{')', _} | Tokens], Opener, Terminators) ->
1782-
prune_tokens(Tokens, [')' | Opener], Terminators);
1783-
prune_tokens([{']', _} | Tokens], Opener, Terminators) ->
1784-
prune_tokens(Tokens, [']' | Opener], Terminators);
1785-
prune_tokens([{'}', _} | Tokens], Opener, Terminators) ->
1786-
prune_tokens(Tokens, ['}' | Opener], Terminators);
1787-
prune_tokens([{'>>', _} | Tokens], Opener, Terminators) ->
1788-
prune_tokens(Tokens, ['>>' | Opener], Terminators);
1779+
prune_tokens([{'end', _} | Tokens], Opener) ->
1780+
prune_tokens(Tokens, ['end' | Opener]);
1781+
prune_tokens([{')', _} | Tokens], Opener) ->
1782+
prune_tokens(Tokens, [')' | Opener]);
1783+
prune_tokens([{']', _} | Tokens], Opener) ->
1784+
prune_tokens(Tokens, [']' | Opener]);
1785+
prune_tokens([{'}', _} | Tokens], Opener) ->
1786+
prune_tokens(Tokens, ['}' | Opener]);
1787+
prune_tokens([{'>>', _} | Tokens], Opener) ->
1788+
prune_tokens(Tokens, ['>>' | Opener]);
17891789
%%% Close opened terminators
1790-
prune_tokens([{'fn', _} | Tokens], ['end' | Opener], Terminators) ->
1791-
prune_tokens(Tokens, Opener, Terminators);
1792-
prune_tokens([{'do', _} | Tokens], ['end' | Opener], Terminators) ->
1793-
prune_tokens(Tokens, Opener, Terminators);
1794-
prune_tokens([{'(', _} | Tokens], [')' | Opener], Terminators) ->
1795-
prune_tokens(Tokens, Opener, Terminators);
1796-
prune_tokens([{'[', _} | Tokens], [']' | Opener], Terminators) ->
1797-
prune_tokens(Tokens, Opener, Terminators);
1798-
prune_tokens([{'{', _} | Tokens], ['}' | Opener], Terminators) ->
1799-
prune_tokens(Tokens, Opener, Terminators);
1800-
prune_tokens([{'<<', _} | Tokens], ['>>' | Opener], Terminators) ->
1801-
prune_tokens(Tokens, Opener, Terminators);
1802-
%%% Handle anonymous functions
1803-
prune_tokens([{'(', _}, {capture_op, _, _} | Tokens], [], [{'(', _, _} | Terminators]) ->
1804-
prune_tokens(Tokens, [], Terminators);
1790+
prune_tokens([{'fn', _} | Tokens], ['end' | Opener]) ->
1791+
prune_tokens(Tokens, Opener);
1792+
prune_tokens([{'do', _} | Tokens], ['end' | Opener]) ->
1793+
prune_tokens(Tokens, Opener);
1794+
prune_tokens([{'(', _} | Tokens], [')' | Opener]) ->
1795+
prune_tokens(Tokens, Opener);
1796+
prune_tokens([{'[', _} | Tokens], [']' | Opener]) ->
1797+
prune_tokens(Tokens, Opener);
1798+
prune_tokens([{'{', _} | Tokens], ['}' | Opener]) ->
1799+
prune_tokens(Tokens, Opener);
1800+
prune_tokens([{'<<', _} | Tokens], ['>>' | Opener]) ->
1801+
prune_tokens(Tokens, Opener);
18051802
%%% or it is time to stop...
1806-
prune_tokens([{';', _} | _] = Tokens, [], Terminators) ->
1807-
{Tokens, Terminators};
1808-
prune_tokens([{'eol', _} | _] = Tokens, [], Terminators) ->
1809-
{Tokens, Terminators};
1810-
prune_tokens([{',', _} | _] = Tokens, [], Terminators) ->
1811-
{Tokens, Terminators};
1812-
prune_tokens([{'fn', _} | _] = Tokens, [], Terminators) ->
1813-
{Tokens, Terminators};
1814-
prune_tokens([{'do', _} | _] = Tokens, [], Terminators) ->
1815-
{Tokens, Terminators};
1816-
prune_tokens([{'(', _} | _] = Tokens, [], Terminators) ->
1817-
{Tokens, Terminators};
1818-
prune_tokens([{'[', _} | _] = Tokens, [], Terminators) ->
1819-
{Tokens, Terminators};
1820-
prune_tokens([{'{', _} | _] = Tokens, [], Terminators) ->
1821-
{Tokens, Terminators};
1822-
prune_tokens([{'<<', _} | _] = Tokens, [], Terminators) ->
1823-
{Tokens, Terminators};
1824-
prune_tokens([{identifier, _, _} | _] = Tokens, [], Terminators) ->
1825-
{Tokens, Terminators};
1826-
prune_tokens([{block_identifier, _, _} | _] = Tokens, [], Terminators) ->
1827-
{Tokens, Terminators};
1828-
prune_tokens([{kw_identifier, _, _} | _] = Tokens, [], Terminators) ->
1829-
{Tokens, Terminators};
1830-
prune_tokens([{kw_identifier_safe, _, _} | _] = Tokens, [], Terminators) ->
1831-
{Tokens, Terminators};
1832-
prune_tokens([{kw_identifier_unsafe, _, _} | _] = Tokens, [], Terminators) ->
1833-
{Tokens, Terminators};
1834-
prune_tokens([{OpType, _, _} | _] = Tokens, [], Terminators)
1803+
prune_tokens([{';', _} | _] = Tokens, []) ->
1804+
Tokens;
1805+
prune_tokens([{'eol', _} | _] = Tokens, []) ->
1806+
Tokens;
1807+
prune_tokens([{',', _} | _] = Tokens, []) ->
1808+
Tokens;
1809+
prune_tokens([{'fn', _} | _] = Tokens, []) ->
1810+
Tokens;
1811+
prune_tokens([{'do', _} | _] = Tokens, []) ->
1812+
Tokens;
1813+
prune_tokens([{'(', _} | _] = Tokens, []) ->
1814+
Tokens;
1815+
prune_tokens([{'[', _} | _] = Tokens, []) ->
1816+
Tokens;
1817+
prune_tokens([{'{', _} | _] = Tokens, []) ->
1818+
Tokens;
1819+
prune_tokens([{'<<', _} | _] = Tokens, []) ->
1820+
Tokens;
1821+
prune_tokens([{identifier, _, _} | _] = Tokens, []) ->
1822+
Tokens;
1823+
prune_tokens([{block_identifier, _, _} | _] = Tokens, []) ->
1824+
Tokens;
1825+
prune_tokens([{kw_identifier, _, _} | _] = Tokens, []) ->
1826+
Tokens;
1827+
prune_tokens([{kw_identifier_safe, _, _} | _] = Tokens, []) ->
1828+
Tokens;
1829+
prune_tokens([{kw_identifier_unsafe, _, _} | _] = Tokens, []) ->
1830+
Tokens;
1831+
prune_tokens([{OpType, _, _} | _] = Tokens, [])
18351832
when OpType =:= comp_op; OpType =:= at_op; OpType =:= unary_op; OpType =:= and_op;
18361833
OpType =:= or_op; OpType =:= arrow_op; OpType =:= match_op; OpType =:= in_op;
18371834
OpType =:= in_match_op; OpType =:= type_op; OpType =:= dual_op; OpType =:= mult_op;
18381835
OpType =:= power_op; OpType =:= concat_op; OpType =:= range_op; OpType =:= xor_op;
18391836
OpType =:= pipe_op; OpType =:= stab_op; OpType =:= when_op; OpType =:= assoc_op;
18401837
OpType =:= rel_op; OpType =:= ternary_op; OpType =:= capture_op; OpType =:= ellipsis_op ->
1841-
{Tokens, Terminators};
1838+
Tokens;
18421839
%%% or we traverse until the end.
1843-
prune_tokens([_ | Tokens], Opener, Terminators) ->
1844-
prune_tokens(Tokens, Opener, Terminators);
1845-
prune_tokens([], [], Terminators) ->
1846-
{[], Terminators}.
1840+
prune_tokens([_ | Tokens], Opener) ->
1841+
prune_tokens(Tokens, Opener);
1842+
prune_tokens([], _Opener) ->
1843+
[].

0 commit comments

Comments
 (0)