用途
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 版本、性能影响或平台限制等信息,暂未提供。