Как заставить компилятор 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 набор внешних ссылок, что позволяет обнаруживать экспортированные значения, которые никогда не используются. (Существует также некоторая логика для анализа необязательных аргументов и сообщения о том, какие из них никогда не были или всегда передаются.)

Другие вопросы по тегам