diff --git a/.gitignore b/.gitignore index 0ec86528..8852dc93 100644 --- a/.gitignore +++ b/.gitignore @@ -6,5 +6,7 @@ rebar rt.work .hgignore .eunit +dialyzer_warnings +xref_warnings rebar.cmd rebar.ps1 diff --git a/Makefile b/Makefile index 375bc81f..e521f080 100644 --- a/Makefile +++ b/Makefile @@ -1,3 +1,5 @@ +.PHONY: dialyzer_warnings xref_warnings + all: ./bootstrap @@ -5,9 +7,19 @@ clean: @rm -rf rebar ebin/*.beam inttest/rt.work debug: - ./bootstrap debug + @./bootstrap debug + +check: debug xref dialyzer + +xref: xref_warnings + @diff -U0 xref_reference xref_warnings + +xref_warnings: + -@./rebar xref > xref_warnings + +dialyzer: dialyzer_warnings + @diff -U0 dialyzer_reference dialyzer_warnings -check: debug - -@./rebar xref - -@dialyzer ebin --verbose -Wunmatched_returns -Werror_handling \ - -Wrace_conditions +dialyzer_warnings: + -@dialyzer -q -n ebin -Wunmatched_returns -Werror_handling \ + -Wrace_conditions > dialyzer_warnings diff --git a/README.md b/README.md index 78a6cd42..cff84127 100644 --- a/README.md +++ b/README.md @@ -14,8 +14,9 @@ locations (git, hg, etc). Building -------- -Information on building and installing Erlang/OTP can be found -in the `INSTALL.md` document. +Information on building and installing [Erlang/OTP](http://www.erlang.org) +can be found [here](https://github.com/erlang/otp/wiki/Installation) +([more info](https://github.com/erlang/otp/blob/master/INSTALL.md)). ### Dependencies @@ -28,7 +29,9 @@ Should you want to clone the rebar repository, you will also require git. Clone the git repository: - $ git clone git://github.com/basho/rebar.git +```sh +$ git clone git://github.com/basho/rebar.git +``` #### Building rebar @@ -69,7 +72,8 @@ Do not mix spaces and tabs. Do not introduce lines longer than 80 characters. [erlang-mode (emacs)](http://www.erlang.org/doc/man/erlang.el.html) indentation is preferred. -vi-only users are encouraged to give [Vim emulation](http://emacswiki.org/emacs/Evil) ([more info](https://gitorious.org/evil/pages/Home)) a try. +vi-only users are encouraged to give [Vim emulation](http://emacswiki.org/emacs/Evil) +([more info](https://gitorious.org/evil/pages/Home)) a try. Writing Commit Messages ----------------------- @@ -106,18 +110,32 @@ Longer description (wrap at 72 characters) Dialyzer and Tidier ------------------- -Before you submit a patch check for discrepancies with -[Dialyzer](http://www.erlang.org/doc/man/dialyzer.html): +Before you submit a patch check for +[xref](http://www.erlang.org/doc/man/xref.html) and +[Dialyzer](http://www.erlang.org/doc/man/dialyzer.html) +warnings. + +A successful run of ``make check`` looks like: ```sh $ make check +Recompile: src/rebar_core +==> rebar (compile) +Command 'debug' not understood or not applicable +Congratulations! You now have a self-contained script called "rebar" in +your current working directory. Place this script anywhere in your path +and you can use rebar to build OTP-compliant apps. +make: [xref_warnings] Error 1 (ignored) +make: [dialyzer_warnings] Error 2 (ignored) ``` -The following discrepancies are known and safe to ignore: - -``` -rebar_utils.erl:147: Call to missing or unexported function escript:foldl/3 -``` +[xref](http://www.erlang.org/doc/man/xref.html) and +[Dialyzer](http://www.erlang.org/doc/man/dialyzer.html) warnings are compared +against a set of safe-to-ignore warnings +found in +[dialyzer_reference](https://raw.github.com/tuncer/rebar/maint/dialyzer_reference) +and +[xref_reference](https://raw.github.com/tuncer/rebar/maint/xref_reference). It is **strongly recommended** to check the code with [Tidier](http://tidier.softlab.ntua.gr:20000/tidier/getstarted). diff --git a/dialyzer_reference b/dialyzer_reference new file mode 100644 index 00000000..be486b57 --- /dev/null +++ b/dialyzer_reference @@ -0,0 +1,2 @@ + +rebar_utils.erl:163: Call to missing or unexported function escript:foldl/3 diff --git a/xref_reference b/xref_reference new file mode 100644 index 00000000..c723da83 --- /dev/null +++ b/xref_reference @@ -0,0 +1,2 @@ +==> rebar (xref) +src/rebar_utils.erl:157: Warning escript_foldl/3 calls undefined function escript:foldl/3