@@ -30,7 +30,7 @@ defmodule Dx.Defd.NonDx do
3030 { ast , state } = Compiler . normalize ( ast , state )
3131
3232 if orig_state . warn_non_dx? and not state . called_non_dx? do
33- warn ( meta , state , """
33+ Compiler . warn ( meta , state , """
3434 No function was called that is not defined with defd.
3535
3636 Please remove the call to non_dx/1.
@@ -42,19 +42,11 @@ defmodule Dx.Defd.NonDx do
4242 end
4343
4444 # &local_fun/2
45- def normalize ( { :& , meta , [ { :/ , [ ] , [ { fun_name , _meta2 , nil } , arity ] } ] } , state ) do
45+ def normalize ( { :& , meta , [ { :/ , [ ] , [ { fun_name , _meta2 , nil } , arity ] } ] } = ast , state ) do
4646 args = Macro . generate_arguments ( arity , __MODULE__ )
4747 line = meta [ :line ] || state . line
4848
49- if state . warn_non_dx? do
50- warn ( meta , state , """
51- #{ fun_name } /#{ arity } is not defined with defd.
52-
53- Either define it using defd (preferred) or wrap the call in the non_dx/1 function:
54-
55- non_dx(...(&#{ fun_name } /#{ arity } ))
56- """ )
57- end
49+ maybe_warn_non_dx ( meta , state , "#{ fun_name } /#{ arity } " , Macro . to_string ( ast ) )
5850
5951 quote line: line do
6052 { :ok ,
@@ -67,21 +59,18 @@ defmodule Dx.Defd.NonDx do
6759
6860 # &Mod.fun/3
6961 def normalize (
70- { :& , meta , [ { :/ , [ ] , [ { { :. , _meta2 , [ module , fun_name ] } , _meta3 , [ ] } , arity ] } ] } ,
62+ { :& , meta , [ { :/ , [ ] , [ { { :. , _meta2 , [ module , fun_name ] } , _meta3 , [ ] } , arity ] } ] } = ast ,
7163 state
7264 ) do
7365 args = Macro . generate_arguments ( arity , __MODULE__ )
7466 line = meta [ :line ] || state . line
7567
76- if state . warn_non_dx? do
77- warn ( meta , state , """
78- #{ fun_name } /#{ arity } is not defined with defd.
79-
80- Either define it using defd (preferred) or wrap the call in the non_dx/1 function:
81-
82- non_dx(...(&#{ module } .#{ fun_name } /#{ arity } ))
83- """ )
84- end
68+ maybe_warn_non_dx (
69+ meta ,
70+ state ,
71+ "#{ inspect ( module ) } .#{ fun_name } /#{ arity } " ,
72+ Macro . to_string ( ast )
73+ )
8574
8675 quote line: line do
8776 { :ok ,
@@ -99,15 +88,7 @@ defmodule Dx.Defd.NonDx do
9988
10089 cond do
10190 Util . has_function? ( state . module , fun_name , arity ) ->
102- if state . warn_non_dx? do
103- warn ( meta , state , """
104- #{ fun_name } /#{ arity } is not defined with defd.
105-
106- Either define it using defd (preferred) or wrap the call in the non_dx/1 function:
107-
108- non_dx(#{ fun_name } (...))
109- """ )
110- end
91+ maybe_warn_non_dx ( meta , state , "#{ fun_name } /#{ arity } " , "#{ fun_name } (...)" )
11192
11293 { ast , state } =
11394 normalize_external_call_args ( args , state , fn args ->
@@ -135,15 +116,12 @@ defmodule Dx.Defd.NonDx do
135116 |> Ast . ok ( )
136117
137118 Util . has_function? ( module , fun_name , arity ) ->
138- if state . warn_non_dx? do
139- warn ( meta2 , state , """
140- #{ inspect ( module ) } .#{ fun_name } /#{ arity } is not defined with defd.
141-
142- Either define it using defd (preferred) or wrap the call in the non_dx/1 function:
143-
144- non_dx(#{ inspect ( module ) } .#{ fun_name } (...))
145- """ )
146- end
119+ maybe_warn_non_dx (
120+ meta2 ,
121+ state ,
122+ "#{ inspect ( module ) } .#{ fun_name } /#{ arity } " ,
123+ "#{ inspect ( module ) } .#{ fun_name } /#{ arity } (...)"
124+ )
147125
148126 { ast , state } =
149127 normalize_external_call_args ( args , state , fn args ->
@@ -270,10 +248,16 @@ defmodule Dx.Defd.NonDx do
270248 @ compile { :inline , with_state: 2 }
271249 defp with_state ( ast , state ) , do: { ast , state }
272250
273- def warn ( meta , state , message ) do
274- line = meta [ :line ] || state . line
275- { name , arity } = state . function
276- entry = { state . module , name , arity , [ file: String . to_charlist ( state . file ) , line: line ] }
277- IO . warn ( message , [ entry ] )
251+ # Helper to emit a warning for non-defd functions
252+ defp maybe_warn_non_dx ( meta , state , mod_str , wrap_str ) do
253+ if state . warn_non_dx? do
254+ Compiler . warn ( meta , state , """
255+ #{ mod_str } is not defined with defd.
256+
257+ Either define it using defd (preferred) or wrap the call in the non_dx/1 function:
258+
259+ non_dx(#{ wrap_str } )
260+ """ )
261+ end
278262 end
279263end
0 commit comments