credo-custom-checks

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Credo Custom Checks

Credo自定义检查

Creating custom Credo checks for project-specific rules.
为项目特定规则创建自定义Credo检查。

Creating a Custom Check

创建自定义检查

elixir
defmodule MyApp.Credo.Check.NoHardcodedSecrets do
  use Credo.Check,
    category: :warning,
    base_priority: :high,
    explanations: [
      check: """
      Detects hardcoded secrets in code.
      """
    ]

  @impl true
  def run(%SourceFile{} = source_file, params) do
    issue_meta = IssueMeta.for(source_file, params)

    Credo.Code.prewalk(source_file, &traverse(&1, &2, issue_meta))
  end

  defp traverse(
         {:@, _, [{:secret_key, _, [value]}]} = ast,
         issues,
         issue_meta
       )
       when is_binary(value) do
    new_issue = issue_for(issue_meta, value)
    {ast, [new_issue | issues]}
  end

  defp traverse(ast, issues, _issue_meta) do
    {ast, issues}
  end

  defp issue_for(issue_meta, value) do
    format_issue(
      issue_meta,
      message: "Hardcoded secret found: #{String.slice(value, 0..5)}...",
      trigger: value
    )
  end
end
elixir
defmodule MyApp.Credo.Check.NoHardcodedSecrets do
  use Credo.Check,
    category: :warning,
    base_priority: :high,
    explanations: [
      check: """
      Detects hardcoded secrets in code.
      """
    ]

  @impl true
  def run(%SourceFile{} = source_file, params) do
    issue_meta = IssueMeta.for(source_file, params)

    Credo.Code.prewalk(source_file, &traverse(&1, &2, issue_meta))
  end

  defp traverse(
         {:@, _, [{:secret_key, _, [value]}]} = ast,
         issues,
         issue_meta
       )
       when is_binary(value) do
    new_issue = issue_for(issue_meta, value)
    {ast, [new_issue | issues]}
  end

  defp traverse(ast, issues, _issue_meta) do
    {ast, issues}
  end

  defp issue_for(issue_meta, value) do
    format_issue(
      issue_meta,
      message: "Hardcoded secret found: #{String.slice(value, 0..5)}...",
      trigger: value
    )
  end
end

Using Custom Checks

使用自定义检查

elixir
undefined
elixir
undefined

.credo.exs

.credo.exs

%{ configs: [ %{ name: "default", requires: ["./lib/my_app/credo/check/*.ex"], checks: %{ enabled: [ {MyApp.Credo.Check.NoHardcodedSecrets, []} ] } } ] }
undefined
%{ configs: [ %{ name: "default", requires: ["./lib/my_app/credo/check/*.ex"], checks: %{ enabled: [ {MyApp.Credo.Check.NoHardcodedSecrets, []} ] } } ] }
undefined