SuperAPI AI 工具集

narrow-bare-rescue

编程与开发

查看项目

更新于 10-16 07:25

技能介绍

用途:审计 Elixir 代码中的裸 rescue(无 in 子句的 rescue _ -> 或 rescue e ->),将其收窄为只捕获明确异常类型,避免吞掉 UndefinedFunctionError、KeyError、CompileError 等程序缺陷异常,防止错误被静默降级为 {:error, :generic} 或 nil。

主要能力:支持单文件、目录、全项目三种范围,命令分别为 /narrow-bare-rescue path/to/file.ex、/narrow-bare-rescue lib/my_app/util/、/narrow-bare-rescue --all。流程为:用 grep -rn "^\srescue\s$" <scope> | head -200 定位裸 rescue;阅读 try/def 主体追踪每个调用可能抛出的异常;参考 taxonomy.md 或 grep -rn "defexception" deps/<libname>/lib/ 确定异常集合;应用收窄;最后运行 mix compile --warnings-as-errors、mix format <files_changed>、mix test <test_files_for_affected_modules> 验证。

核心转换示例:rescue _ -> %{} 改为 rescue _ in [Jason.DecodeError, ArgumentError] -> %{},适用于 try…rescue 与函数体 def…rescue。

限制:不盲目自动收窄,需先追踪调用路径以保持行为;不处理已有类型的 rescue;不覆盖 catch 子句;不将 try/rescue 重构为 with 或错误元组。要求 reraise e, STACKTRACE 而非 reraise e, [],且不得把程序缺陷异常列入捕获列表。