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, []}
]
}
}
]
}