name: Dialyzer配置 user-invocable: false description: 在配置Dialyzer以进行Erlang/Elixir类型检查和静态分析时使用。 allowed-tools: []
Dialyzer配置
Dialyzer是一个用于Erlang和Elixir的静态分析工具,用于识别软件差异,如类型错误、不可达代码和不必要的测试。
配置文件
dialyzer.ignore-warnings
# 忽略特定警告
lib/my_module.ex:42:pattern_match_cov
.dialyzer_ignore.exs
[
{"lib/generated_code.ex", :no_return},
{~r/lib\/legacy\/.*/, :unknown_function}
]
mix.exs配置
def project do
[
app: :my_app,
dialyzer: [
plt_add_apps: [:mix, :ex_unit],
plt_core_path: "priv/plts",
plt_file: {:no_warn, "priv/plts/dialyzer.plt"},
flags: [:error_handling, :underspecs, :unmatched_returns],
ignore_warnings: ".dialyzer_ignore.exs",
list_unused_filters: true
]
]
end
常见配置选项
PLT管理
plt_add_apps: 要包含在PLT中的其他应用程序plt_core_path: 核心PLT文件的目录plt_file: 自定义PLT文件位置plt_add_deps: 包含依赖项 (:app_tree,:apps_direct,:transitive)
分析标志
:error_handling- 检查错误处理:underspecs- 警告未充分指定的函数:unmatched_returns- 警告不匹配的返回值:unknown- 警告未知的函数/类型:overspecs- 警告过度指定的函数
过滤选项
ignore_warnings: 包含要忽略的警告模式的文件list_unused_filters: 显示未使用的忽略模式
最佳实践
- 增量PLT构建: 使用项目特定的PLT来加速分析
- 逐步采用: 从检查子集开始,随时间扩展
- CI集成: 在持续集成中运行Dialyzer
- 类型规范: 添加全面的@spec注解
- 警告管理: 记录有意的忽略
常见模式
条件分析
if Mix.env() in [:dev, :test] do
{:dialyxir, "~> 1.4", only: [:dev, :test], runtime: false}
end
自定义检查脚本
#!/bin/bash
mix dialyzer --format github
GitHub Actions集成
- name: 运行Dialyzer
run: mix dialyzer --format github