用途:为 Elixir 代码补充类型安全,在模块边界(尤其 FCIS 的纯核心与外壳)显式表达数据形状与可失败返回,让核心与外壳保持一致。
主要能力与规则:每个公开函数写 @spec,尤其是 context/shell API 与纯核心入口;结构体/模式用 @type t 并匹配真实字段类型(默认 timestamps 为 NaiveDateTime.t() | nil);可失败操作用 tagged-tuple 成功类型 {:ok, t()} | {:error, reason()};在 CI 中运行 Dialyzer 并缓存 PLT;不静默忽略警告,通过 ignore_warnings 配置记录到 .dialyzer_ignore.exs;增量采用,先核心模块;不习惯性使用 any(),优先联合与参数化结果类型;spec 匹配现实,不为消除 Dialyzer 而放宽。
用法:依赖 {:dialyxir, "~> 1.4", only: [:dev, :test], runtime: false};配置 config :dialyxir, ignore_warnings: ".dialyzer_ignore.exs";运行 mix dialyzer(首次构建 PLT)、mix dialyzer --format short、mix dialyzer --format ignore_file 生成忽略条目。CI 中缓存 priv/plts,key 基于 mix.lock。
适用场景:编写公开函数、重构、为 Ecto schema 定义类型、封装 opaque 类型、处理 railway 返回。
限制:资料未提供具体版本兼容范围、性能数据或收费信息;忽略警告需人工记录,不能使用不存在的 CLI 标志。