Skip to content

Commit d138487

Browse files
committed
Store delimiter in dot token instead
1 parent c0ed20e commit d138487

File tree

3 files changed

+18
-17
lines changed

3 files changed

+18
-17
lines changed

lib/elixir/src/elixir_parser.yrl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -892,8 +892,8 @@ build_dot(Dot, Left, {_, Location, _} = Right) ->
892892
Meta = meta_from_token(Dot),
893893
IdentifierMeta0 = meta_from_location(Location),
894894
IdentifierMeta1 =
895-
case Location of
896-
{_Line, _Column, {_Unencoded, Delimiter}} when Delimiter =/= nil ->
895+
case Dot of
896+
{'.', {_Line, _Column, Delimiter}} when Delimiter =/= nil ->
897897
delimiter(<<Delimiter>>) ++ IdentifierMeta0;
898898
_ ->
899899
IdentifierMeta0

lib/elixir/src/elixir_tokenizer.erl

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -540,7 +540,7 @@ tokenize([$: | String] = Original, Line, Column, Scope, Tokens) ->
540540
{_Kind, Unencoded, Atom, Rest, Length, Ascii, _Special} ->
541541
NewScope = maybe_warn_for_ambiguous_bang_before_equals(atom, Unencoded, Rest, Line, Column, Scope),
542542
TrackedScope = track_ascii(Ascii, NewScope),
543-
Token = {atom, {Line, Column, {Unencoded, nil}}, Atom},
543+
Token = {atom, {Line, Column, Unencoded}, Atom},
544544
tokenize(Rest, Line, Column + 1 + Length, TrackedScope, [Token | Tokens]);
545545
empty when Scope#elixir_tokenizer.cursor_completion == false ->
546546
unexpected_token(Original, Line, Column, Scope, Tokens);
@@ -651,7 +651,7 @@ tokenize(String, Line, Column, OriginalScope, Tokens) ->
651651

652652
case Rest of
653653
[$: | T] when ?is_space(hd(T)) ->
654-
Token = {kw_identifier, {Line, Column, {Unencoded, nil}}, Atom},
654+
Token = {kw_identifier, {Line, Column, Unencoded}, Atom},
655655
tokenize(T, Line, Column + Length + 1, Scope, [Token | Tokens]);
656656

657657
[$: | T] when hd(T) =/= $: ->
@@ -671,7 +671,7 @@ tokenize(String, Line, Column, OriginalScope, Tokens) ->
671671

672672
_ when Kind == identifier ->
673673
NewScope = maybe_warn_for_ambiguous_bang_before_equals(identifier, Unencoded, Rest, Line, Column, Scope),
674-
Token = check_call_identifier(Line, Column, Unencoded, nil, Atom, Rest),
674+
Token = check_call_identifier(Line, Column, Unencoded, Atom, Rest),
675675
tokenize(Rest, Line, Column + Length, NewScope, [Token | Tokens]);
676676

677677
_ ->
@@ -918,8 +918,9 @@ handle_dot([$., H | T] = Original, Line, Column, DotInfo, Scope, Tokens) when ?i
918918

919919
case unsafe_to_atom(UnescapedPart, Line, Column, NewScope) of
920920
{ok, Atom} ->
921-
Token = check_call_identifier(Line, Column, Part, $", Atom, Rest),
922-
TokensSoFar = add_token_with_eol({'.', DotInfo}, Tokens),
921+
Token = check_call_identifier(Line, Column, Part, Atom, Rest),
922+
DotInfo1 = setelement(3, DotInfo, $"),
923+
TokensSoFar = add_token_with_eol({'.', DotInfo1}, Tokens),
923924
tokenize(Rest, NewLine, NewColumn, NewScope, [Token | TokensSoFar]);
924925

925926
{error, Reason} ->
@@ -937,7 +938,7 @@ handle_dot([$. | Rest], Line, Column, DotInfo, Scope, Tokens) ->
937938
tokenize(Rest, Line, Column, Scope, TokensSoFar).
938939

939940
handle_call_identifier(Rest, Line, Column, DotInfo, Length, UnencodedOp, Scope, Tokens) ->
940-
Token = check_call_identifier(Line, Column, UnencodedOp, nil, list_to_atom(UnencodedOp), Rest),
941+
Token = check_call_identifier(Line, Column, UnencodedOp, list_to_atom(UnencodedOp), Rest),
941942
TokensSoFar = add_token_with_eol({'.', DotInfo}, Tokens),
942943
tokenize(Rest, Line, Column + Length, Scope, [Token | TokensSoFar]).
943944

@@ -1324,18 +1325,18 @@ tokenize_alias(Rest, Line, Column, Unencoded, Atom, Length, Ascii, Special, Scop
13241325
error(Reason, Unencoded ++ Rest, Scope, Tokens);
13251326

13261327
true ->
1327-
AliasesToken = {alias, {Line, Column, {Unencoded, nil}}, Atom},
1328+
AliasesToken = {alias, {Line, Column, Unencoded}, Atom},
13281329
tokenize(Rest, Line, Column + Length, Scope, [AliasesToken | Tokens])
13291330
end.
13301331

13311332
%% Check if it is a call identifier (paren | bracket | do)
13321333

1333-
check_call_identifier(Line, Column, Unencoded, Delimiter, Atom, [$( | _]) ->
1334-
{paren_identifier, {Line, Column, {Unencoded, Delimiter}}, Atom};
1335-
check_call_identifier(Line, Column, Unencoded, Delimiter, Atom, [$[ | _]) ->
1336-
{bracket_identifier, {Line, Column, {Unencoded, Delimiter}}, Atom};
1337-
check_call_identifier(Line, Column, Unencoded, Delimiter, Atom, _Rest) ->
1338-
{identifier, {Line, Column, {Unencoded, Delimiter}}, Atom}.
1334+
check_call_identifier(Line, Column, Unencoded, Atom, [$( | _]) ->
1335+
{paren_identifier, {Line, Column, Unencoded}, Atom};
1336+
check_call_identifier(Line, Column, Unencoded, Atom, [$[ | _]) ->
1337+
{bracket_identifier, {Line, Column, Unencoded}, Atom};
1338+
check_call_identifier(Line, Column, Unencoded, Atom, _Rest) ->
1339+
{identifier, {Line, Column, Unencoded}, Atom}.
13391340

13401341
add_token_with_eol({unary_op, _, _} = Left, T) -> [Left | T];
13411342
add_token_with_eol(Left, [{eol, _} | T]) -> [Left | T];

lib/elixir/unicode/security.ex

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ defmodule String.Tokenizer.Security do
4040
]
4141

4242
defp check_token_for_confusability(
43-
{kind, {_line, _column, {[_ | _] = name, _delimiter}} = info, _},
43+
{kind, {_line, _column, [_ | _] = name} = info, _},
4444
skeletons
4545
)
4646
when kind in @identifiers do
@@ -50,7 +50,7 @@ defmodule String.Tokenizer.Security do
5050
{_, _, ^name} ->
5151
{:ok, skeletons}
5252

53-
{line, _, {previous_name, _delimiter}} when name != previous_name ->
53+
{line, _, previous_name} when name != previous_name ->
5454
{:warn,
5555
"confusable identifier: '#{name}' looks like '#{previous_name}' on line #{line}, " <>
5656
"but they are written using different characters" <> dir_compare(name, previous_name)}

0 commit comments

Comments
 (0)