Могу ли я сказать Dialyzer игнорировать некоторые модули?

Я строю PLT, используя

dialyzer  --output_plt lib.plt --build_plt --apps stdlib kernel mnesia ssl public_key crypto erts asn1 inets sasl odbc

Он выдает некоторые ошибки о неизвестных функциях в модулях, которые меня не волнуют. Например:

  Compiling some key modules to native code... done in 1m10.81s
  Creating PLT lib.plt ...
Unknown functions:
  compile:file/2
  compile:forms/2
  compile:noenv_forms/2

Могу ли я сказать диализатору игнорировать их? Должен ли я на самом деле заботиться о них?

3 ответа

Решение

В качестве продолжения этого вопроса я использовал rebar3 и его rebar3 dialyzer Насколько мне известно, команда делает правильные вещи. (То есть, он показывает все предупреждения, которые вызваны моим кодом, и не показывает предупреждения, которые не вызваны моим кодом.) Я думаю, что это работает путем построения PLT для системных модулей и последующего использования его в качестве входных данных при запуске диализатора. против проекта.

Чтобы игнорировать предупреждения для определенных функций, которые вы не хотите анализировать, вы можете добавить это в свой модуль:

-dialyzer({nowarn_function, f/0}).

или это, чтобы избежать конкретного предупреждения в вашем модуле:

-dialyzer(no_improper_lists).

Полная информация: http://erlang.org/doc/man/dialyzer.html

Вам не нужно заботиться об этих предупреждениях. Это просто означает, что диализатор не сможет проверять типы аргументов в вызовах этих функций, поэтому он может не найти некоторые несоответствия, которые он сможет найти, если эти функции будут включены в PLT.

Для более полного анализа добавьте compiler к списку приложений, которые вы встраиваете в свой PLT.

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