SuperAPI AI 工具集

credo-custom-checks

测试与质量

查看项目

更新于 10-16 04:24

技能介绍

用途

credo-custom-checks 用于在 Elixir 项目中创建自定义 Credo 检查,从而为项目定义专属的代码质量规则与标准。当内置 Credo 检查无法覆盖团队或项目的特定规范时,可以通过该技能编写自定义检查。

主要能力

  • 定义自定义检查模块,使用 use Credo.Check 并配置 category、base_priority 和 explanations。
  • 实现 run/2 回调,接收 %SourceFile{} 与 params,并通过 IssueMeta.for/2 构建问题元数据。
  • 使用 Credo.Code.prewalk/2 遍历源码 AST,匹配特定模式并收集问题。
  • 通过 format_issue/2 生成带 message 与 trigger 的问题报告。
  • 在 .credo.exs 中通过 requires 加载自定义检查文件,并在 checks.enabled 中启用检查。

使用方式

资料给出的示例创建了一个检测硬编码密钥的检查 MyApp.Credo.Check.NoHardcodedSecrets:

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

在 .credo.exs 中启用自定义检查:

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

适用场景

  • 需要强制执行项目特定的代码规范或标准。
  • 检测硬编码密钥等自定义代码质量问题。
  • 在 Elixir 项目中扩展 Credo 的检查能力。

限制

资料未提供关于安装命令、依赖版本、支持的 Credo 版本、性能影响或平台限制等信息,暂未提供。