Как заставить компилятор OCaml сообщать о неиспользуемых функциях?
Интересно, есть ли способы, чтобы компилятор OCaml сообщал о предупреждениях о неиспользуемых функциях? Я погуглил, но об этой функции обсуждается не так много тем.
В частности, в следующей программе есть две функции "foo" и "bar", которые объявлены, но "bar" не используется в функции "_". Поэтому я думаю, что компилятор OCaml должен сообщать о "баре" как о неиспользуемой функции.
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
2 ответа
Вы должны определить (возможно, пустой) .mli
Файл интерфейса, в котором указано, что экспортирует этот модуль. В противном случае вы просто определяете bar
функция для использования другими модулями.
(и убедитесь, что вы компилируете с предупреждениями, конечно)
Вы можете взглянуть на https://github.com/alainfrisch/dead_code_analyzer, который является "глобальным" детектором мертвого кода. Он собирает из файлов.cmi набор экспортируемых значений и из файлов.cmt набор внешних ссылок, что позволяет обнаруживать экспортированные значения, которые никогда не используются. (Существует также некоторая логика для анализа необязательных аргументов и сообщения о том, какие из них никогда не были или всегда передаются.)