Packages
credo
1.6.2
1.7.19
1.7.18
1.7.17
1.7.16
1.7.15
1.7.14
1.7.13
1.7.12
1.7.11
1.7.10
1.7.9
1.7.8
1.7.7
1.7.7-rc.0
1.7.6
1.7.5
1.7.4
1.7.3
1.7.2
1.7.2-rc.4
1.7.2-rc.3
1.7.2-rc.2
1.7.2-rc.1
1.7.2-rc.0
1.7.1
1.7.0
1.7.0-rc.2
1.7.0-rc.1
1.6.7
1.6.6
1.6.5
1.6.4
1.6.3
1.6.2
1.6.1
1.6.0
1.6.0-rc.1
1.6.0-rc.0
1.5.6
1.5.5
1.5.4
1.5.3
1.5.2
1.5.1
1.5.0
1.5.0-rc.5
1.5.0-rc.4
1.5.0-rc.3
1.5.0-rc.2
1.5.0-rc.1
1.4.1
1.4.0
1.4.0-rc.2
1.4.0-rc.1
1.3.2
1.3.1
1.3.0
1.3.0-rc3
1.3.0-rc2
1.3.0-rc1
1.2.3
1.2.2
1.2.1
1.2.0
1.2.0-rc4
1.2.0-rc3
1.2.0-rc2
1.2.0-rc1
1.1.5
1.1.4
1.1.3
1.1.2
1.1.1
1.1.0
1.1.0-rc3
1.1.0-rc2
1.1.0-rc1
1.0.5
1.0.4
1.0.3
1.0.2
1.0.1
1.0.1-rc1
1.0.0
1.0.0-rc1
0.10.2
0.10.1
0.10.0
0.9.3
0.9.2
0.9.1
0.9.0
0.9.0-rc8
0.9.0-rc7
0.9.0-rc6
0.9.0-rc5
0.9.0-rc4
0.9.0-rc3
0.9.0-rc2
0.9.0-rc1
0.8.10
0.8.9
0.8.8
0.8.7
0.8.6
0.8.5
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.8.0-rc7
0.8.0-rc6
0.8.0-rc5
0.8.0-rc4
0.8.0-rc3
0.8.0-rc2
0.8.0-rc1
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.1
0.6.0
0.6.0-rc2
0.6.0-rc1
0.5.3
0.5.2
0.5.1
0.5.0
0.4.14
0.4.13
0.4.12
0.4.11
0.4.10
0.4.10-dev
0.4.9
0.4.8
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.4.0-beta5
0.4.0-beta4
0.4.0-beta3
0.4.0-beta2
0.4.0-beta1
0.3.13
0.3.12
0.3.11
0.3.10
0.3.9
0.3.8
0.3.7
0.3.6
0.3.5
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.3.0-dev2
0.3.0-dev
0.2.6
0.2.5
0.2.4
0.2.3
0.2.2
0.2.1
0.2.0
0.1.10
0.1.9
0.1.8
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
0.0.1-dev
A static code analysis tool with a focus on code consistency and teaching.
Current section
Files
Jump to
Current section
Files
lib/credo/cli/task/prepare_checks_to_run.ex
defmodule Credo.CLI.Task.PrepareChecksToRun do
@moduledoc false
use Credo.Execution.Task
def call(exec, _opts \\ []) do
source_files = Execution.get_source_files(exec)
exec
|> set_config_comments(source_files)
|> enable_disabled_checks_if_applicable()
|> exclude_low_priority_checks(exec.min_priority - 9)
|> exclude_checks_based_on_elixir_version
end
defp set_config_comments(exec, source_files) do
config_comment_map =
source_files
|> Credo.Check.ConfigCommentFinder.run()
|> Enum.into(%{})
%Execution{exec | config_comment_map: config_comment_map}
end
defp enable_disabled_checks_if_applicable(%Execution{enable_disabled_checks: nil} = exec) do
exec
end
defp enable_disabled_checks_if_applicable(exec) do
enable_disabled_checks_regexes = to_match_regexes(exec.enable_disabled_checks)
enable_disabled_checks =
Enum.map(exec.checks.disabled, fn
{check, params} ->
if matches?(to_string(check), enable_disabled_checks_regexes) do
{check, params}
else
{check, false}
end
end)
checks = Keyword.merge(exec.checks.enabled, enable_disabled_checks)
%Execution{exec | checks: %{enabled: checks, disabled: exec.checks.disabled}}
end
defp exclude_low_priority_checks(exec, below_priority) do
checks =
Enum.reject(exec.checks.enabled, fn
# deprecated
{check} ->
Credo.Priority.to_integer(check.base_priority) < below_priority
{_check, false} ->
true
{check, params} ->
priority =
params
|> Credo.Check.Params.priority(check)
|> Credo.Priority.to_integer()
priority < below_priority
end)
%Execution{exec | checks: %{enabled: checks, disabled: exec.checks.disabled}}
end
defp exclude_checks_based_on_elixir_version(exec) do
elixir_version = System.version()
skipped_checks = Enum.reject(exec.checks.enabled, &matches_requirement?(&1, elixir_version))
checks = Enum.filter(exec.checks.enabled, &matches_requirement?(&1, elixir_version))
%Execution{
exec
| checks: %{enabled: checks, disabled: exec.checks.disabled},
skipped_checks: skipped_checks
}
end
defp matches_requirement?({check, _}, elixir_version) do
matches_requirement?({check}, elixir_version)
end
defp matches_requirement?({check}, elixir_version) do
Version.match?(elixir_version, check.elixir_version)
end
defp to_match_regexes(nil), do: []
defp to_match_regexes(list) do
Enum.map(list, fn match_check ->
{:ok, match_pattern} = Regex.compile(match_check, "i")
match_pattern
end)
end
defp matches?(_string, nil), do: false
defp matches?(string, list) when is_list(list), do: Enum.any?(list, &matches?(string, &1))
defp matches?(string, %Regex{} = regex), do: Regex.match?(regex, string)
defp matches?(string, pattern) when is_binary(pattern), do: String.contains?(string, pattern)
end