11defmodule 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