Skip to content

Include from_brackets metadata in all cases #13317

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Feb 5, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions lib/elixir/src/elixir_parser.yrl
Original file line number Diff line number Diff line change
Expand Up @@ -292,13 +292,13 @@ bracket_arg -> open_bracket container_expr close_bracket : build_access_arg('$1'
bracket_arg -> open_bracket container_expr ',' close_bracket : build_access_arg('$1', '$2', '$4').
bracket_arg -> open_bracket container_expr ',' container_args close_bracket : error_too_many_access_syntax('$3').

bracket_expr -> dot_bracket_identifier bracket_arg : build_access(build_no_parens('$1', nil), '$2').
bracket_expr -> dot_bracket_identifier bracket_arg : build_access(build_no_parens('$1', nil), meta_with_from_brackets('$2')).
bracket_expr -> access_expr bracket_arg : build_access('$1', meta_with_from_brackets('$2')).

bracket_at_expr -> at_op_eol dot_bracket_identifier bracket_arg :
build_access(build_unary_op('$1', build_no_parens('$2', nil)), '$3').
build_access(build_unary_op('$1', build_no_parens('$2', nil)), meta_with_from_brackets('$3')).
bracket_at_expr -> at_op_eol access_expr bracket_arg :
build_access(build_unary_op('$1', '$2'), '$3').
build_access(build_unary_op('$1', '$2'), meta_with_from_brackets('$3')).

%% Blocks

Expand Down
29 changes: 29 additions & 0 deletions lib/elixir/test/elixir/kernel/tracers_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -217,6 +217,35 @@ defmodule Kernel.TracersTest do
assert meta[:from_interpolation]
end

test "traces bracket access" do
compile_string("""
foo = %{bar: 3}
foo[:bar]
""")

assert_receive {{:remote_function, meta, Access, :get, 2}, _env}
assert meta[:from_brackets]

compile_string("""
defmodule Foo do
@foo %{bar: 3}
def a() do
@foo[:bar]
end
end
""")

assert_receive {{:remote_function, meta, Access, :get, 2}, _env}
assert meta[:from_brackets]

compile_string("""
%{bar: 3}[:bar]
""")

assert_receive {{:remote_function, meta, Access, :get, 2}, _env}
assert meta[:from_brackets]
end

"""
# Make sure this module is compiled with column information
defmodule MacroWithColumn do
Expand Down