diff --git a/config/config.exs b/config/config.exs index e69de29bb..d1186fe06 100644 --- a/config/config.exs +++ b/config/config.exs @@ -0,0 +1,3 @@ +import Config + +import_config "#{config_env()}.exs" diff --git a/config/test.exs b/config/test.exs new file mode 100644 index 000000000..2b7616f7c --- /dev/null +++ b/config/test.exs @@ -0,0 +1,5 @@ +import Config + +config :logger, :default_formatter, metadata: [:key_new] + +config :logger, :console, metadata: [:key_old] diff --git a/lib/credo/check/warning/missed_metadata_key_in_logger_config.ex b/lib/credo/check/warning/missed_metadata_key_in_logger_config.ex index 17c9f6d1c..f85dcdea5 100644 --- a/lib/credo/check/warning/missed_metadata_key_in_logger_config.ex +++ b/lib/credo/check/warning/missed_metadata_key_in_logger_config.ex @@ -155,12 +155,20 @@ defmodule Credo.Check.Warning.MissedMetadataKeyInLoggerConfig do end defp find_metadata_keys(params) do - metadata_keys = Params.get(params, :metadata_keys, __MODULE__) + with [] <- Params.get(params, :metadata_keys, __MODULE__) do + find_metadata_from_config() + end + end - if metadata_keys == [] do - :logger |> Application.get_env(:console, []) |> Keyword.get(:metadata, []) + defp find_metadata_from_config do + with true <- Version.match?(System.version(), "~> 1.15"), + {:ok, options} <- Application.fetch_env(:logger, :default_formatter) do + Keyword.get(options, :metadata, []) else - metadata_keys + _ -> + :logger + |> Application.get_env(:console, []) + |> Keyword.get(:metadata, []) end end end diff --git a/test/credo/check/warning/missed_metadata_key_in_logger_config_test.exs b/test/credo/check/warning/missed_metadata_key_in_logger_config_test.exs index a2a27ac8f..d610eef25 100644 --- a/test/credo/check/warning/missed_metadata_key_in_logger_config_test.exs +++ b/test/credo/check/warning/missed_metadata_key_in_logger_config_test.exs @@ -41,6 +41,68 @@ defmodule Credo.Check.Warning.MissedMetadataKeyInLoggerConfigTest do end end + describe "Version-specific" do + for fun <- @logger_functions do + if Version.match?(System.version(), "~> 1.15") do + test "it should report a violation when Logger.#{fun}/2 is used with metadata not present in default_formatter but present in console in ~> 1.15 Elixir" do + """ + defmodule CredoSampleModule do + def some_function(parameter1, parameter2) do + var_1 = "Hello world" + Logger.#{unquote(fun)}("The module: #\{var1\}", key_old: "value") + end + end + """ + |> to_source_file + |> run_check(@described_check) + |> assert_issue() + end + + test "it should NOT report a violation when Logger.#{fun}/2 is used with metadata present in default_formatter in ~> 1.15 Elixir" do + """ + defmodule CredoSampleModule do + def some_function(parameter1, parameter2) do + var_1 = "Hello world" + Logger.#{unquote(fun)}("The module: #\{var1\}", key_new: "value") + end + end + """ + |> to_source_file + |> run_check(@described_check) + |> refute_issues() + end + else + test "it should NOT report a violation when Logger.#{fun}/2 is used with metadata not present in default_formatter but present in console in <= 1.15 Elixir" do + """ + defmodule CredoSampleModule do + def some_function(parameter1, parameter2) do + var_1 = "Hello world" + Logger.#{unquote(fun)}("The module: #\{var1\}", key_old: "value") + end + end + """ + |> to_source_file + |> run_check(@described_check) + |> refute_issues() + end + + test "it should report a violation when Logger.#{fun}/2 is used with metadata present in default_formatter in <= 1.15 Elixir" do + """ + defmodule CredoSampleModule do + def some_function(parameter1, parameter2) do + var_1 = "Hello world" + Logger.#{unquote(fun)}("The module: #\{var1\}", key_new: "value") + end + end + """ + |> to_source_file + |> run_check(@described_check) + |> assert_issue() + end + end + end + end + for fun <- @logger_functions do test "it should report a violation when Logger.#{fun}/2 is used with disallowed metadata" do """