Skip to content

Commit 787e76e

Browse files
committed
track alias expansion
1 parent baa36dc commit 787e76e

File tree

6 files changed

+42
-9
lines changed

6 files changed

+42
-9
lines changed

lib/elixir_sense/core/compiler.ex

+5-3
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,10 @@ defmodule ElixirSense.Core.Compiler do
8080
acc
8181
|> State.add_call_to_line({name, nil, nil}, meta, :struct_expansion)
8282

83-
# TODO: handle :alias_expansion
83+
{:alias_expansion, meta, as, alias} ->
84+
acc
85+
|> State.add_call_to_line({as, nil, nil}, meta, :alias_expansion_as)
86+
|> State.add_call_to_line({alias, nil, nil}, meta, :alias_expansion)
8487

8588
_ ->
8689
Logger.warning("Unhandled trace event: #{inspect(event)}")
@@ -2830,8 +2833,7 @@ defmodule ElixirSense.Core.Compiler do
28302833
end
28312834

28322835
defp expand_aliases({:__aliases__, meta, [head | tail] = list}, state, env, report) do
2833-
# TODO pass true to track alias_expansion?
2834-
case NormalizedMacroEnv.expand_alias(env, meta, list, trace: false) do
2836+
case NormalizedMacroEnv.expand_alias(env, meta, list, trace: true) do
28352837
{:alias, alias} ->
28362838
state =
28372839
if report do

lib/elixir_sense/core/compiler/macro.ex

+1-2
Original file line numberDiff line numberDiff line change
@@ -83,8 +83,7 @@ defmodule ElixirSense.Core.Compiler.Macro do
8383
end
8484

8585
defp do_expand_once({:__aliases__, meta, [head | tail] = list} = alias, env) do
86-
# TODO pass true to track alias_expansion?
87-
case NormalizedMacroEnv.expand_alias(env, meta, list, trace: false) do
86+
case NormalizedMacroEnv.expand_alias(env, meta, list, trace: true) do
8887
{:alias, alias} ->
8988
:elixir_env.trace({:alias_reference, meta, alias}, env)
9089
{alias, true}

lib/elixir_sense/core/compiler/quote.ex

+1-2
Original file line numberDiff line numberDiff line change
@@ -204,9 +204,8 @@ defmodule ElixirSense.Core.Compiler.Quote do
204204
state
205205
)
206206
when is_atom(h) and h != Elixir and is_list(meta) do
207-
# TODO pass true to track alias_expansion?
208207
annotation =
209-
case NormalizedMacroEnv.expand_alias(e, meta, list, trace: false) do
208+
case NormalizedMacroEnv.expand_alias(e, meta, list, trace: true) do
210209
{:alias, atom} ->
211210
atom
212211

lib/elixir_sense/core/compiler/typespec.ex

+1-2
Original file line numberDiff line numberDiff line change
@@ -638,8 +638,7 @@ defmodule ElixirSense.Core.Compiler.Typespec do
638638
# This is a modified backport of Macro.expand/2 because we want to expand
639639
# aliases but we don't them to become compile-time references.
640640
defp expand_remote({:__aliases__, meta, [head | tail] = list} = alias, env) do
641-
# TODO pass true to track alias_expansion?
642-
case NormalizedMacroEnv.expand_alias(env, meta, list, trace: false) do
641+
case NormalizedMacroEnv.expand_alias(env, meta, list, trace: true) do
643642
{:alias, alias} ->
644643
alias
645644

test/elixir_sense/core/metadata_builder_test.exs

+14
Original file line numberDiff line numberDiff line change
@@ -8523,6 +8523,20 @@ defmodule ElixirSense.Core.MetadataBuilderTest do
85238523
mod: Kernel,
85248524
arity: 2
85258525
},
8526+
%ElixirSense.Core.State.CallInfo{
8527+
arity: nil,
8528+
position: {3, 17},
8529+
mod: ElixirSense.Core.MetadataBuilderTest.QuotedCalls,
8530+
func: nil,
8531+
kind: :alias_expansion
8532+
},
8533+
%ElixirSense.Core.State.CallInfo{
8534+
arity: nil,
8535+
position: {3, 17},
8536+
mod: Q,
8537+
func: nil,
8538+
kind: :alias_expansion_as
8539+
},
85268540
%ElixirSense.Core.State.CallInfo{
85278541
func: :foo,
85288542
kind: :remote_macro,

test/support/references_tracer.ex

+20
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,26 @@ defmodule ElixirSense.Core.References.Tracer do
127127
:ok
128128
end
129129

130+
def trace({:alias_expansion, meta, as, alias}, %Macro.Env{} = env) do
131+
register_call(%{
132+
callee: {as, nil, nil},
133+
file: env.file |> Path.relative_to_cwd(),
134+
line: meta[:line],
135+
column: meta[:column],
136+
kind: :alias_expansion_as
137+
})
138+
139+
register_call(%{
140+
callee: {alias, nil, nil},
141+
file: env.file |> Path.relative_to_cwd(),
142+
line: meta[:line],
143+
column: meta[:column],
144+
kind: :alias_expansion
145+
})
146+
147+
:ok
148+
end
149+
130150
def trace(_trace, _env) do
131151
:ok
132152
end

0 commit comments

Comments
 (0)