diff options
Diffstat (limited to 'lib/tools/examples/xref_examples.erl')
-rw-r--r-- | lib/tools/examples/xref_examples.erl | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/lib/tools/examples/xref_examples.erl b/lib/tools/examples/xref_examples.erl new file mode 100644 index 0000000000..4c082195a2 --- /dev/null +++ b/lib/tools/examples/xref_examples.erl @@ -0,0 +1,42 @@ +-module(xref_examples). + +-export([script/0]). + +%% Used at Erlang/OTP for finding undefined functions and unused local +%% functions. Output are the two files ${HOME}/undefined.txt and +%% ${HOME}/unused_locals.txt. +script() -> + Root = code:root_dir(), + Dir = os:getenv("HOME"), + Server = s, + xref:start(Server), + {ok, _Relname} = xref:add_release(Server, code:lib_dir(), {name,otp}), + %% Exclude undefined functions in some modules... + Exclude = "(CORBA|Cos|Orber|Puller|Pusher|" + "StackModule|oe_Cos|mnesia).*_impl", + UndefS = "XC || (XU - X - B)", + Q = io_lib:format("Undef = ~s," + "Excluded = ~p:_/_," + "Undef - Undef || Excluded", + [UndefS, Exclude]), + {ok, Undef} = xref:q(Server, lists:flatten(Q)), + {ok, NotCalled} = xref:analyze(Server, locals_not_used), + dump("%% " ++ Root ++ + "\n%% Undefined external functions." ++ + "\n%% The second MFA is the undefined function." ++ + "\n%% Functions in modules matching the following " + "regular expression have been skipped:" ++ + "\n%% " ++ Exclude, + filename:join(Dir, "undefined.txt"), + Undef), + dump("%% " ++ Root ++ "\n%% Unused local functions.", + filename:join(Dir, "unused_locals.txt"), + NotCalled), + catch xref:stop(Server), + halt(). + +dump(H, F, T) -> + {ok, IoDev} = file:open(F,[write]), + io:format(IoDev, "~s~n", [H]), + io:format(IoDev, "~p.~n", [T]), + file:close(IoDev). |