Skip to content

Commit cb7ae43

Browse files
committed
move to top
1 parent 584ad16 commit cb7ae43

File tree

1 file changed

+51
-51
lines changed
  • lib/elixir_sense/core/normalized/macro

1 file changed

+51
-51
lines changed

lib/elixir_sense/core/normalized/macro/env.ex

+51-51
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,54 @@
11
defmodule ElixirSense.Core.Normalized.Macro.Env do
2+
def expand_import(env, meta, name, arity, opts \\ [])
3+
when is_list(meta) and is_atom(name) and is_integer(arity) and is_list(opts) do
4+
local_for_callback =
5+
Keyword.get(opts, :local_for_callback, fn meta, name, arity, kinds, e ->
6+
if Version.match?(System.version(), ">= 1.14.0-dev") do
7+
:elixir_def.local_for(meta, name, arity, kinds, e)
8+
else
9+
:elixir_def.local_for(e.module, name, arity, kinds)
10+
end
11+
end)
12+
13+
case Macro.special_form?(name, arity) do
14+
true ->
15+
{:error, :not_found}
16+
17+
false ->
18+
allow_locals = Keyword.get(opts, :allow_locals, true)
19+
trace = Keyword.get(opts, :trace, true)
20+
# module = env.module
21+
22+
# elixir version passes module.__info__(:macros) as extra, we do not need that
23+
# instead we override local_for_callback
24+
extra = []
25+
# case allow_locals and function_exported?(module, :__info__, 1) do
26+
# true -> [{module, module.__info__(:macros)}]
27+
# false -> []
28+
# end
29+
30+
case __MODULE__.Dispatch.expand_import(
31+
meta,
32+
name,
33+
arity,
34+
env,
35+
extra,
36+
allow_locals,
37+
trace,
38+
local_for_callback
39+
) do
40+
{:macro, receiver, expander} ->
41+
{:macro, receiver, wrap_expansion(receiver, expander, meta, name, arity, env, opts)}
42+
43+
{:function, receiver, name} ->
44+
{:function, receiver, name}
45+
46+
error ->
47+
{:error, error}
48+
end
49+
end
50+
end
51+
252
defp wrap_expansion(receiver, expander, _meta, _name, _arity, env, _opts) do
353
fn expansion_meta, args ->
454
quoted = expander.(args, env)
@@ -15,64 +65,14 @@ defmodule ElixirSense.Core.Normalized.Macro.Env do
1565
end
1666
end
1767
end
18-
68+
1969
if Version.match?(System.version(), ">= 1.17.0-dev") do
2070
# defdelegate expand_import(env, meta, fun, arity, opts), to: Macro.Env
2171
defdelegate expand_require(env, meta, module, fun, arity, opts), to: Macro.Env
2272
defdelegate expand_alias(env, meta, list, opts), to: Macro.Env
2373
defdelegate define_alias(env, meta, arg, opts), to: Macro.Env
2474
defdelegate define_require(env, meta, arg, opts), to: Macro.Env
2575
defdelegate define_import(env, meta, arg, opts), to: Macro.Env
26-
27-
def expand_import(env, meta, name, arity, opts \\ [])
28-
when is_list(meta) and is_atom(name) and is_integer(arity) and is_list(opts) do
29-
local_for_callback =
30-
Keyword.get(opts, :local_for_callback, fn meta, name, arity, kinds, e ->
31-
if Version.match?(System.version(), ">= 1.14.0-dev") do
32-
:elixir_def.local_for(meta, name, arity, kinds, e)
33-
else
34-
:elixir_def.local_for(e.module, name, arity, kinds)
35-
end
36-
end)
37-
38-
case Macro.special_form?(name, arity) do
39-
true ->
40-
{:error, :not_found}
41-
42-
false ->
43-
allow_locals = Keyword.get(opts, :allow_locals, true)
44-
trace = Keyword.get(opts, :trace, true)
45-
# module = env.module
46-
47-
# elixir version passes module.__info__(:macros) as extra, we do not need that
48-
# instead we override local_for_callback
49-
extra = []
50-
# case allow_locals and function_exported?(module, :__info__, 1) do
51-
# true -> [{module, module.__info__(:macros)}]
52-
# false -> []
53-
# end
54-
55-
case __MODULE__.Dispatch.expand_import(
56-
meta,
57-
name,
58-
arity,
59-
env,
60-
extra,
61-
allow_locals,
62-
trace,
63-
local_for_callback
64-
) do
65-
{:macro, receiver, expander} ->
66-
{:macro, receiver, wrap_expansion(receiver, expander, meta, name, arity, env, opts)}
67-
68-
{:function, receiver, name} ->
69-
{:function, receiver, name}
70-
71-
error ->
72-
{:error, error}
73-
end
74-
end
75-
end
7676
else
7777
def fake_expand_callback(_meta, _args) do
7878
{:__block__, [], []}

0 commit comments

Comments
 (0)