diff --git a/apps/remote_control/lib/lexical/remote_control/analyzer/aliases.ex b/apps/remote_control/lib/lexical/remote_control/analyzer/aliases.ex index 90ac56c22..aacace5cb 100644 --- a/apps/remote_control/lib/lexical/remote_control/analyzer/aliases.ex +++ b/apps/remote_control/lib/lexical/remote_control/analyzer/aliases.ex @@ -28,21 +28,17 @@ defmodule Lexical.RemoteControl.Analyzer.Aliases do aliases = Scope.alias_map(scope, line) case module do - [{:__MODULE__, _, _} | suffix] -> - current_module = - aliases - |> Map.get(:__MODULE__) - |> Alias.to_module() + # unquote(__MODULE__).SubModule + [{:unquote, _, [{:__MODULE__, _, _}]} | suffix] -> + resolve_current_module(aliases, suffix) - Module.concat([current_module | suffix]) + [{:__MODULE__, _, _} | suffix] -> + resolve_current_module(aliases, suffix) [prefix | suffix] -> case aliases do %{^prefix => _} -> - current_module = - aliases - |> Map.get(prefix) - |> Alias.to_module() + current_module = resolve_alias(aliases, prefix, suffix) Module.concat([current_module | suffix]) @@ -51,4 +47,17 @@ defmodule Lexical.RemoteControl.Analyzer.Aliases do end end end + + defp resolve_current_module(aliases, suffix) do + resolve_alias(aliases, :__MODULE__, suffix) + end + + defp resolve_alias(aliases, prefix, suffix) do + current_module = + aliases + |> Map.get(prefix) + |> Alias.to_module() + + Module.concat([current_module | suffix]) + end end diff --git a/apps/remote_control/test/lexical/remote_control/analyzer/imports_test.exs b/apps/remote_control/test/lexical/remote_control/analyzer/imports_test.exs index 0c1eb45d3..ef4d16801 100644 --- a/apps/remote_control/test/lexical/remote_control/analyzer/imports_test.exs +++ b/apps/remote_control/test/lexical/remote_control/analyzer/imports_test.exs @@ -443,5 +443,22 @@ defmodule Lexical.Ast.Analysis.ImportsTest do refute_imported(imports, Enum) end + + test "imports to the current module work in a quote block" do + imports = + ~q[ + defmodule Parent do + defmacro __using__(_) do + quote do + import unquote(__MODULE__).Child.ImportedModule + | + end + end + end + ] + |> imports_at_cursor() + + assert_imported(imports, Parent.Child.ImportedModule) + end end end