Skip to content

Commit b339deb

Browse files
committed
Simplify token pruning, closes #14139
1 parent a1c1888 commit b339deb

File tree

1 file changed

+58
-61
lines changed

1 file changed

+58
-61
lines changed

lib/elixir/src/elixir_tokenizer.erl

Lines changed: 58 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -1779,84 +1779,81 @@ add_cursor(_Line, Column, noprune, Terminators, Tokens) ->
17791779
{Column, Terminators, Tokens};
17801780
add_cursor(Line, Column, prune_and_cursor, Terminators, Tokens) ->
17811781
PrePrunedTokens = prune_identifier(Tokens),
1782-
{PrunedTokens, PrunedTerminators} = prune_tokens(PrePrunedTokens, [], Terminators),
1782+
PrunedTokens = prune_tokens(PrePrunedTokens, []),
17831783
CursorTokens = [
17841784
{')', {Line, Column + 11, nil}},
17851785
{'(', {Line, Column + 10, nil}},
17861786
{paren_identifier, {Line, Column, nil}, '__cursor__'}
17871787
| PrunedTokens
17881788
],
1789-
{Column + 12, PrunedTerminators, CursorTokens}.
1789+
{Column + 12, Terminators, CursorTokens}.
17901790

17911791
prune_identifier([{identifier, _, _} | Tokens]) -> Tokens;
17921792
prune_identifier(Tokens) -> Tokens.
17931793

17941794
%%% Any terminator needs to be closed
1795-
prune_tokens([{'end', _} | Tokens], Opener, Terminators) ->
1796-
prune_tokens(Tokens, ['end' | 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-
prune_tokens(Tokens, ['}' | Opener], Terminators);
1803-
prune_tokens([{'>>', _} | Tokens], Opener, Terminators) ->
1804-
prune_tokens(Tokens, ['>>' | Opener], Terminators);
1795+
prune_tokens([{'end', _} | Tokens], Opener) ->
1796+
prune_tokens(Tokens, ['end' | 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) ->
1802+
prune_tokens(Tokens, ['}' | Opener]);
1803+
prune_tokens([{'>>', _} | Tokens], Opener) ->
1804+
prune_tokens(Tokens, ['>>' | Opener]);
18051805
%%% Close opened terminators
1806-
prune_tokens([{'fn', _} | Tokens], ['end' | Opener], Terminators) ->
1807-
prune_tokens(Tokens, Opener, Terminators);
1808-
prune_tokens([{'do', _} | Tokens], ['end' | Opener], Terminators) ->
1809-
prune_tokens(Tokens, Opener, Terminators);
1810-
prune_tokens([{'(', _} | Tokens], [')' | Opener], Terminators) ->
1811-
prune_tokens(Tokens, Opener, Terminators);
1812-
prune_tokens([{'[', _} | Tokens], [']' | Opener], Terminators) ->
1813-
prune_tokens(Tokens, Opener, Terminators);
1814-
prune_tokens([{'{', _} | Tokens], ['}' | Opener], Terminators) ->
1815-
prune_tokens(Tokens, Opener, Terminators);
1816-
prune_tokens([{'<<', _} | Tokens], ['>>' | Opener], Terminators) ->
1817-
prune_tokens(Tokens, Opener, Terminators);
1818-
%%% Handle anonymous functions
1819-
prune_tokens([{'(', _}, {capture_op, _, _} | Tokens], [], [{'(', _, _} | Terminators]) ->
1820-
prune_tokens(Tokens, [], Terminators);
1806+
prune_tokens([{'fn', _} | Tokens], ['end' | Opener]) ->
1807+
prune_tokens(Tokens, Opener);
1808+
prune_tokens([{'do', _} | Tokens], ['end' | Opener]) ->
1809+
prune_tokens(Tokens, Opener);
1810+
prune_tokens([{'(', _} | Tokens], [')' | Opener]) ->
1811+
prune_tokens(Tokens, Opener);
1812+
prune_tokens([{'[', _} | Tokens], [']' | Opener]) ->
1813+
prune_tokens(Tokens, Opener);
1814+
prune_tokens([{'{', _} | Tokens], ['}' | Opener]) ->
1815+
prune_tokens(Tokens, Opener);
1816+
prune_tokens([{'<<', _} | Tokens], ['>>' | Opener]) ->
1817+
prune_tokens(Tokens, Opener);
18211818
%%% or it is time to stop...
1822-
prune_tokens([{';', _} | _] = Tokens, [], Terminators) ->
1823-
{Tokens, Terminators};
1824-
prune_tokens([{'eol', _} | _] = Tokens, [], Terminators) ->
1825-
{Tokens, Terminators};
1826-
prune_tokens([{',', _} | _] = Tokens, [], Terminators) ->
1827-
{Tokens, Terminators};
1828-
prune_tokens([{'fn', _} | _] = Tokens, [], Terminators) ->
1829-
{Tokens, Terminators};
1830-
prune_tokens([{'do', _} | _] = Tokens, [], Terminators) ->
1831-
{Tokens, Terminators};
1832-
prune_tokens([{'(', _} | _] = Tokens, [], Terminators) ->
1833-
{Tokens, Terminators};
1834-
prune_tokens([{'[', _} | _] = Tokens, [], Terminators) ->
1835-
{Tokens, Terminators};
1836-
prune_tokens([{'{', _} | _] = Tokens, [], Terminators) ->
1837-
{Tokens, Terminators};
1838-
prune_tokens([{'<<', _} | _] = Tokens, [], Terminators) ->
1839-
{Tokens, Terminators};
1840-
prune_tokens([{identifier, _, _} | _] = Tokens, [], Terminators) ->
1841-
{Tokens, Terminators};
1842-
prune_tokens([{block_identifier, _, _} | _] = Tokens, [], Terminators) ->
1843-
{Tokens, Terminators};
1844-
prune_tokens([{kw_identifier, _, _} | _] = Tokens, [], Terminators) ->
1845-
{Tokens, Terminators};
1846-
prune_tokens([{kw_identifier_safe, _, _} | _] = Tokens, [], Terminators) ->
1847-
{Tokens, Terminators};
1848-
prune_tokens([{kw_identifier_unsafe, _, _} | _] = Tokens, [], Terminators) ->
1849-
{Tokens, Terminators};
1850-
prune_tokens([{OpType, _, _} | _] = Tokens, [], Terminators)
1819+
prune_tokens([{';', _} | _] = Tokens, []) ->
1820+
Tokens;
1821+
prune_tokens([{'eol', _} | _] = Tokens, []) ->
1822+
Tokens;
1823+
prune_tokens([{',', _} | _] = Tokens, []) ->
1824+
Tokens;
1825+
prune_tokens([{'fn', _} | _] = Tokens, []) ->
1826+
Tokens;
1827+
prune_tokens([{'do', _} | _] = Tokens, []) ->
1828+
Tokens;
1829+
prune_tokens([{'(', _} | _] = Tokens, []) ->
1830+
Tokens;
1831+
prune_tokens([{'[', _} | _] = Tokens, []) ->
1832+
Tokens;
1833+
prune_tokens([{'{', _} | _] = Tokens, []) ->
1834+
Tokens;
1835+
prune_tokens([{'<<', _} | _] = Tokens, []) ->
1836+
Tokens;
1837+
prune_tokens([{identifier, _, _} | _] = Tokens, []) ->
1838+
Tokens;
1839+
prune_tokens([{block_identifier, _, _} | _] = Tokens, []) ->
1840+
Tokens;
1841+
prune_tokens([{kw_identifier, _, _} | _] = Tokens, []) ->
1842+
Tokens;
1843+
prune_tokens([{kw_identifier_safe, _, _} | _] = Tokens, []) ->
1844+
Tokens;
1845+
prune_tokens([{kw_identifier_unsafe, _, _} | _] = Tokens, []) ->
1846+
Tokens;
1847+
prune_tokens([{OpType, _, _} | _] = Tokens, [])
18511848
when OpType =:= comp_op; OpType =:= at_op; OpType =:= unary_op; OpType =:= and_op;
18521849
OpType =:= or_op; OpType =:= arrow_op; OpType =:= match_op; OpType =:= in_op;
18531850
OpType =:= in_match_op; OpType =:= type_op; OpType =:= dual_op; OpType =:= mult_op;
18541851
OpType =:= power_op; OpType =:= concat_op; OpType =:= range_op; OpType =:= xor_op;
18551852
OpType =:= pipe_op; OpType =:= stab_op; OpType =:= when_op; OpType =:= assoc_op;
18561853
OpType =:= rel_op; OpType =:= ternary_op; OpType =:= capture_op; OpType =:= ellipsis_op ->
1857-
{Tokens, Terminators};
1854+
Tokens;
18581855
%%% or we traverse until the end.
1859-
prune_tokens([_ | Tokens], Opener, Terminators) ->
1860-
prune_tokens(Tokens, Opener, Terminators);
1861-
prune_tokens([], [], Terminators) ->
1862-
{[], Terminators}.
1856+
prune_tokens([_ | Tokens], Opener) ->
1857+
prune_tokens(Tokens, Opener);
1858+
prune_tokens([], _Opener) ->
1859+
[].

0 commit comments

Comments
 (0)