@@ -268,9 +268,39 @@ defmodule Mix.Task.Compiler do
268268    end ) 
269269  end 
270270
271-   # Normalize the compiler result to a diagnostic tuple. 
272-   @ doc  false 
273-   def  normalize ( result ,  name )  do 
271+   @ doc  """ 
272+   Runs the given list of compilers with the given arguments. 
273+ 
274+   It returns a `{status, diagnostics}` tuple. If a compiler 
275+   errors, following compilers do not run. 
276+   """ 
277+   @ doc  since:  "1.19.0" 
278+   def  run ( compilers ,  args )  do 
279+     run ( compilers ,  args ,  :noop ,  [ ] ) 
280+   end 
281+ 
282+   defp  run ( [ ] ,  _ ,  status ,  diagnostics )  do 
283+     { status ,  diagnostics } 
284+   end 
285+ 
286+   defp  run ( [ compiler  |  rest ] ,  args ,  status ,  diagnostics )  do 
287+     { new_status ,  new_diagnostics }  =  run_compiler ( compiler ,  args ) 
288+     diagnostics  =  diagnostics  ++  new_diagnostics 
289+ 
290+     case  new_status  do 
291+       :error  ->  { :error ,  diagnostics } 
292+       :ok  ->  run ( rest ,  args ,  :ok ,  diagnostics ) 
293+       :noop  ->  run ( rest ,  args ,  status ,  diagnostics ) 
294+     end 
295+   end 
296+ 
297+   defp  run_compiler ( compiler ,  args )  do 
298+     result  =  normalize ( Mix.Task . run ( "compile.#{ compiler }  " ,  args ) ,  compiler ) 
299+     Enum . reduce ( Mix.ProjectStack . pop_after_compiler ( compiler ) ,  result ,  &  & 1 . ( & 2 ) ) 
300+   end 
301+ 
302+   # Normalize the compiler result to a diagnostic tuple 
303+   defp  normalize ( result ,  name )  do 
274304    case  result  do 
275305      { status ,  diagnostics }  when  status  in  [ :ok ,  :noop ,  :error ]  and  is_list ( diagnostics )  -> 
276306        { status ,  diagnostics } 
@@ -328,10 +358,10 @@ defmodule Mix.Task.Compiler do
328358  re-enables `"compile"` and `"compile.all"`. 
329359  """ 
330360  @ doc  since:  "1.19.0" 
331-   @ spec  reenable ( compilers:   compilers )  ::  :ok  when  compilers:  :all  |  [ atom ( ) ] 
332-   def  reenable ( opts  \\  [ ] )  do 
361+   @ spec  reenable ( compilers )  ::  :ok  when  compilers:  :all  |  [ atom ( ) ] 
362+   def  reenable ( compilers  \\  :all )  do 
333363    compilers  = 
334-       case  Keyword . get ( opts ,   : compilers,   :all )  do 
364+       case  compilers  do 
335365        :all  ->  Mix.Task.Compiler . compilers ( ) 
336366        list  when  is_list ( list )  ->  list 
337367      end 
0 commit comments