Skip to content

Commit ef002e2

Browse files
committed
Properly track imported function calls in tracer
Closes #13878.
1 parent f89c507 commit ef002e2

File tree

2 files changed

+53
-1
lines changed

2 files changed

+53
-1
lines changed

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

+3-1
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,9 @@ do_expand_import(Result, Meta, Name, Arity, Module, E, Trace) ->
204204
{import, Receiver} ->
205205
case expand_require(true, Meta, Receiver, Name, Arity, E, Trace) of
206206
{macro, _, _} = Response -> Response;
207-
error -> {function, Receiver, Name}
207+
error ->
208+
Trace andalso elixir_env:trace({remote_function, Meta, Receiver, Name, Arity}, E),
209+
{function, Receiver, Name}
208210
end;
209211
false when Module == ?kernel ->
210212
case elixir_rewrite:inline(Module, Name, Arity) of

Diff for: lib/elixir/test/elixir/kernel/lexical_tracker_test.exs

+50
Original file line numberDiff line numberDiff line change
@@ -517,5 +517,55 @@ defmodule Kernel.LexicalTrackerTest do
517517
refute URI in exports
518518
refute URI in runtime
519519
end
520+
521+
test "imported functions from quote adds dependencies" do
522+
{{compile, exports, runtime, _}, _binding} =
523+
Code.eval_string("""
524+
defmodule Kernel.LexicalTrackerTest.QuotedFun do
525+
import URI
526+
527+
defmacro parse_root() do
528+
quote do
529+
parse("/")
530+
end
531+
end
532+
end
533+
534+
defmodule Kernel.LexicalTrackerTest.UsingQuotedFun do
535+
require Kernel.LexicalTrackerTest.QuotedFun, as: QF
536+
QF.parse_root()
537+
Kernel.LexicalTracker.references(__ENV__.lexical_tracker)
538+
end |> elem(3)
539+
""")
540+
541+
assert URI in compile
542+
refute URI in exports
543+
refute URI in runtime
544+
end
545+
546+
test "imported macro from quote adds dependencies" do
547+
{{compile, exports, runtime, _}, _binding} =
548+
Code.eval_string("""
549+
defmodule Kernel.LexicalTrackerTest.QuotedMacro do
550+
import Config
551+
552+
defmacro config_env() do
553+
quote do
554+
config_env()
555+
end
556+
end
557+
end
558+
559+
defmodule Kernel.LexicalTrackerTest.UsingQuotedMacro do
560+
require Kernel.LexicalTrackerTest.QuotedMacro, as: QM
561+
def fun(), do: QM.config_env()
562+
Kernel.LexicalTracker.references(__ENV__.lexical_tracker)
563+
end |> elem(3)
564+
""")
565+
566+
assert Config in compile
567+
refute Config in exports
568+
refute Config in runtime
569+
end
520570
end
521571
end

0 commit comments

Comments
 (0)