我想知道是否有任何方法可以让OCaml编译器报告有关未使用函数的警告?我用谷歌搜索,但没有讨论有关此功能的主题。
特别是在以下程序中,有两个函数" foo"和" bar"宣布但是" bar"未用于" _"功能。所以我认为OCaml编译器应该报告" bar"作为未使用的功能。
let foo x y = x + y
let bar x y z = x + y + z (* should be reported unused *)
let _ =
let x = foo 1 2 in
x
答案 0 :(得分:4)
您需要定义一个(可能为空的).mli
接口文件,说明此模块导出的内容。否则,您只是为其他模块定义bar
函数。
(并确保你当然正在编写警告)
答案 1 :(得分:2)
您可以查看https://github.com/alainfrisch/dead_code_analyzer,这是一个“全局”死码检测器。它从.cmi文件中收集导出值的集合,从.cmt文件收集外部引用集,从而允许检测从未使用过的导出值。 (还有一些逻辑可以分析可选参数并报告哪些参数永远或永远不会传递。)