@@ -339,21 +339,46 @@ defmodule Kernel.CLI do
339339 defp process_command ( { :compile , patterns } , config ) do
340340 :filelib . ensure_dir ( :filename . join ( config . output , "." ) )
341341
342- files = Enum . map patterns , & Path . wildcard ( & 1 )
343- files = Enum . uniq ( Enum . concat ( files ) )
344- files = Enum . filter files , & :filelib . is_regular ( & 1 )
345-
346- if files != [ ] do
347- wrapper fn ->
348- Code . compiler_options ( config . compiler_options )
349- Kernel.ParallelCompiler . files_to_path ( files , config . output ,
350- each_file: fn file -> if config . verbose_compile do IO . puts "Compiled #{ file } " end end )
351- end
352- else
353- { :error , "--compile : No files matched patterns #{ Enum . join ( patterns , "," ) } " }
342+ case match_regular_files ( patterns ) do
343+ { :ok , [ ] } ->
344+ { :error , "--compile : No files matched provided patterns." }
345+ { :ok , files } ->
346+ wrapper fn ->
347+ Code . compiler_options ( config . compiler_options )
348+ Kernel.ParallelCompiler . files_to_path ( files , config . output ,
349+ each_file: fn file -> if config . verbose_compile do IO . puts "Compiled #{ file } " end end )
350+ end
351+ { :missing , missing } ->
352+ { :error , "--compile : No files matched pattern(s) #{ Enum . join ( missing , "," ) } " }
354353 end
355354 end
356355
356+ defp match_regular_files ( patterns ) do
357+
358+ matched_files = Enum . map patterns , fn ( pattern ) ->
359+ case Path . wildcard ( pattern ) do
360+ [ ] -> { :missing , pattern }
361+ files -> { :ok , files }
362+ end
363+ end
364+
365+ files = Enum . filter_map matched_files ,
366+ fn ( match ) -> elem ( match , 0 ) == :ok end ,
367+ & elem ( & 1 , 1 )
368+
369+ missing_patterns = Enum . filter_map matched_files ,
370+ fn ( match ) -> elem ( match , 0 ) == :missing end ,
371+ & elem ( & 1 , 1 )
372+
373+ if missing_patterns == [ ] do
374+ files = Enum . uniq ( Enum . concat ( files ) )
375+ files = Enum . filter files , & :filelib . is_regular ( & 1 )
376+ { :ok , files }
377+ else
378+ { :missing , Enum . uniq ( missing_patterns ) }
379+ end
380+ end
381+
357382 defp wrapper ( fun ) do
358383 fun . ( )
359384 :ok
0 commit comments