Skip to content

Commit 4104bfc

Browse files
committed
Include module attribute line and name on tracing, closes #13762
1 parent 7a634a2 commit 4104bfc

File tree

2 files changed

+22
-8
lines changed

2 files changed

+22
-8
lines changed

lib/elixir/lib/module.ex

+11-8
Original file line numberDiff line numberDiff line change
@@ -1677,11 +1677,11 @@ defmodule Module do
16771677

16781678
case :ets.lookup(set, key) do
16791679
[{_, _, :accumulate, traces}] ->
1680-
trace_attribute(true, module, traces, set, key, [])
1680+
trace_attribute(true, module, traces, set, key, nil, [])
16811681
reverse_values(:ets.take(bag, {:accumulate, key}), [])
16821682

16831683
[{_, value, _, traces}] ->
1684-
trace_attribute(module, traces)
1684+
trace_attribute(module, key, nil, traces)
16851685
:ets.delete(set, key)
16861686
value
16871687

@@ -1998,15 +1998,15 @@ defmodule Module do
19981998
default
19991999

20002000
[{_, _, :accumulate, traces}] ->
2001-
trace_attribute(trace?, module, traces, set, key, [])
2001+
trace_attribute(trace?, module, traces, set, key, caller_line, [])
20022002
lookup_accumulate_attribute(bag, key, default, last_accumulated?)
20032003

20042004
[{_, value, warn_line, traces}] when is_integer(warn_line) ->
2005-
trace_attribute(trace?, module, traces, set, key, [{3, :used}])
2005+
trace_attribute(trace?, module, traces, set, key, caller_line, [{3, :used}])
20062006
value
20072007

20082008
[{_, value, _, traces}] ->
2009-
trace_attribute(trace?, module, traces, set, key, [])
2009+
trace_attribute(trace?, module, traces, set, key, caller_line, [])
20102010
value
20112011

20122012
[] when is_integer(caller_line) ->
@@ -2034,12 +2034,15 @@ defmodule Module do
20342034
end
20352035
end
20362036

2037-
defp trace_attribute(module, traces) do
2037+
defp trace_attribute(module, key, caller_line, traces) do
20382038
:lists.foreach(
20392039
fn {line, lexical_tracker, tracers, aliases} ->
2040+
line = caller_line || line
2041+
20402042
env = %{
20412043
Macro.Env.__struct__()
20422044
| line: line,
2045+
file: "@#{key}",
20432046
lexical_tracker: lexical_tracker,
20442047
module: module,
20452048
tracers: tracers
@@ -2056,10 +2059,10 @@ defmodule Module do
20562059
)
20572060
end
20582061

2059-
defp trace_attribute(trace?, module, traces, set, key, updates) do
2062+
defp trace_attribute(trace?, module, traces, set, key, caller_line, updates) do
20602063
updates =
20612064
if trace? and traces != [] do
2062-
trace_attribute(module, traces)
2065+
trace_attribute(module, key, caller_line, traces)
20632066
updates ++ [{4, []}]
20642067
else
20652068
updates

lib/elixir/test/elixir/kernel/tracers_test.exs

+11
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,17 @@ defmodule Kernel.TracersTest do
224224
:code.delete(Sample)
225225
end
226226

227+
test "traces module attribute expansion" do
228+
compile_string("""
229+
defmodule TracersModuleAttribute do
230+
@module URI
231+
@module
232+
end
233+
""")
234+
235+
assert_received {{:alias_reference, [line: 3], URI}, %{file: "@module"}}
236+
end
237+
227238
test "traces string interpolation" do
228239
compile_string("""
229240
arg = 1 + 2

0 commit comments

Comments
 (0)