Credo自定义检查Skill credo-custom-checks

该技能用于在Elixir项目中创建自定义的Credo检查,以检测和强制执行项目特定的代码质量规则,如防止硬编码密钥,提升代码安全性和可维护性。关键词:Elixir, Credo, 自定义检查, 代码质量, 硬编码密钥, 代码分析, 安全检查, 编程工具。

后端开发 0 次安装 0 次浏览 更新于 3/25/2026

name: credo-custom-checks user-invocable: false description: 用于在Elixir中为项目特定的代码质量规则和标准创建自定义Credo检查。 allowed-tools: []

Credo自定义检查

创建自定义Credo检查以适用于项目特定规则。

创建自定义检查

defmodule MyApp.Credo.Check.NoHardcodedSecrets do
  use Credo.Check,
    category: :warning,
    base_priority: :high,
    explanations: [
      check: """
      检测代码中的硬编码密钥。
      """
    ]

  @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: "找到硬编码密钥: #{String.slice(value, 0..5)}...",
      trigger: value
    )
  end
end

使用自定义检查

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