11defmodule Mix.Compilers.Elixir do
22 @ moduledoc false
33
4- @ manifest_vsn 22
4+ @ manifest_vsn 23
55 @ checkpoint_vsn 2
66
77 import Record
@@ -171,15 +171,17 @@ defmodule Mix.Compilers.Elixir do
171171 state = { % { } , exports , sources , [ ] , modules , removed_modules }
172172 compiler_loop ( stale , stale_modules , dest , timestamp , opts , state )
173173 else
174- { :ok , info , state } ->
174+ { :ok , % { runtime_warnings: runtime_warnings , compile_warnings: compile_warnings } , state } ->
175175 { modules , _exports , sources , _changed , pending_modules , _stale_exports } = state
176176
177177 previous_warnings =
178178 if Keyword . get ( opts , :all_warnings , true ) ,
179179 do: previous_warnings ( sources , true ) ,
180180 else: [ ]
181181
182- sources = apply_warnings ( sources , info )
182+ runtime_warnings = Enum . map ( runtime_warnings , & diagnostic / 1 )
183+ compile_warnings = Enum . map ( compile_warnings , & diagnostic / 1 )
184+ sources = apply_warnings ( sources , runtime_warnings , compile_warnings )
183185
184186 write_manifest (
185187 manifest ,
@@ -193,8 +195,7 @@ defmodule Mix.Compilers.Elixir do
193195 )
194196
195197 put_compile_env ( sources )
196- info_warnings = info . runtime_warnings ++ info . compile_warnings
197- all_warnings = previous_warnings ++ Enum . map ( info_warnings , & diagnostic / 1 )
198+ all_warnings = previous_warnings ++ runtime_warnings ++ compile_warnings
198199 unless_previous_warnings_as_errors ( previous_warnings , opts , { :ok , all_warnings } )
199200
200201 { :error , errors , % { runtime_warnings: r_warnings , compile_warnings: c_warnings } , state } ->
@@ -717,25 +718,9 @@ defmodule Mix.Compilers.Elixir do
717718 end
718719
719720 defp previous_warnings ( sources , print? ) do
720- for { source ,
721- source (
722- compile_warnings: compile_warnings ,
723- runtime_warnings: runtime_warnings
724- ) } <- sources ,
725- file = Path . absname ( source ) ,
726- { position , message , span } <- compile_warnings ++ runtime_warnings do
727- # TODO: Store the whole diagnostic
728- diagnostic = % Mix.Task.Compiler.Diagnostic {
729- severity: :warning ,
730- file: file ,
731- source: file ,
732- position: position ,
733- message: message ,
734- compiler_name: "Elixir" ,
735- stacktrace: [ ] ,
736- span: span
737- }
738-
721+ for { _ , source ( compile_warnings: compile_warnings , runtime_warnings: runtime_warnings ) } <-
722+ sources ,
723+ diagnostic <- compile_warnings ++ runtime_warnings do
739724 if print? do
740725 Mix . shell ( ) . print_app ( )
741726 Code . print_diagnostic ( diagnostic )
@@ -745,13 +730,13 @@ defmodule Mix.Compilers.Elixir do
745730 end
746731 end
747732
748- defp apply_warnings ( sources , % { runtime_warnings: [ ] , compile_warnings: [ ] } ) do
733+ defp apply_warnings ( sources , [ ] , [ ] ) do
749734 sources
750735 end
751736
752- defp apply_warnings ( sources , % { runtime_warnings: r_warnings , compile_warnings: c_warnings } ) do
753- runtime_group = Enum . group_by ( r_warnings , & & 1 . file , & { & 1 . position , & 1 . message , & 1 . span } )
754- compile_group = Enum . group_by ( c_warnings , & & 1 . file , & { & 1 . position , & 1 . message , & 1 . span } )
737+ defp apply_warnings ( sources , runtime_warnings , compile_warnings ) do
738+ runtime_group = Enum . group_by ( runtime_warnings , & & 1 . source )
739+ compile_group = Enum . group_by ( compile_warnings , & & 1 . source )
755740
756741 for { source_path , source_entry } <- sources , into: % { } do
757742 key = Path . absname ( source_path )
0 commit comments