Могу ли я сказать 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.