1

我试图让詹金斯在 erlang 代码上运行透析器,但我遇到了问题。当我们将其引入现有项目时,有许多我们不想标记的现有错误,我们在文件dialyzer-ignore-warnings中有这些错误

我的makefile中有这个,但我真正想要它做的是如果grep返回一个空文档则返回0,如果有新错误则返回一个值。但我的剧本就是不合格

(DEPS_PLT): compile
    @echo Building local plt at $(DEPS_PLT)
    @echo 
    @(echo "Using Dialyzer in `which dialyzer`"; dialyzer --output_plt $(DEPS_PLT) --build_plt --apps  $(DEPS))


dialyzer: compile $(DEPS_PLT)
    @(echo "Using Dialyzer in `which dialyzer`"; dialyzer --fullpath --plt $(DEPS_PLT) -Wrace_conditions -r ./ebin)|\
    fgrep -v -f ./dialyzer-ignore-warnings
4

2 回答 2

2

像这样的东西,也许:

dialyzer: compile $(DEPS_PLT)
    @echo "Using Dialyzer in `which dialyzer`"
    @(dialyzer --fullpath --plt $(DEPS_PLT) -Wrace_conditions -r ./ebin)|\
    fgrep -v -f ./dialyzer-ignore-warnings; test "$$?" != 0

也就是说,确保退出代码fgrep不为零。

于 2015-01-13T14:47:52.710 回答
1

这是rebar的存储库中的类似解决方案:

Makefile包含:

dialyzer: dialyzer_warnings
    @diff -U0 dialyzer_reference dialyzer_warnings

dialyzer_warnings:
    -@dialyzer -q -nn -n ebin -Wunmatched_returns -Werror_handling \
        -Wrace_conditions > dialyzer_warnings

参考文件包含:

rebar_eunit.erl:388: Call to missing or unexported function eunit_test:function_wrapper/2
rebar_utils.erl:163: Call to missing or unexported function escript:foldl/3
于 2015-01-16T12:07:01.097 回答