dialyzer_options.erl
来自「OTP是开放电信平台的简称」· ERL 代码 · 共 167 行
ERL
167 行
%% ``The contents of this file are subject to the Erlang Public License,%% Version 1.1, (the "License"); you may not use this file except in%% compliance with the License. You should have received a copy of the%% Erlang Public License along with this software. If not, it can be%% retrieved via the world wide web at http://www.erlang.org/.%% %% Software distributed under the License is distributed on an "AS IS"%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See%% the License for the specific language governing rights and limitations%% under the License.%% %% Copyright 2006, Tobias Lindahl and Kostis Sagonas%% %% $Id$%%%%% -*- erlang-indent-level: 2 -*-%%%-------------------------------------------------------------------%%% File : dialyzer_options.erl%%% Authors : Richard Carlsson <richardc@csd.uu.se>%%% Description : Provides a better way to start Dialyzer from a script.%%%%%% Created : 17 Oct 2004 by Richard Carlsson <richardc@csd.uu.se>%%%--------------------------------------------------------------------module(dialyzer_options).-export([build/1]).-include("dialyzer.hrl").build(Opts) -> DefaultWarns = [?WARN_RETURN_NO_RETURN, ?WARN_NOT_CALLED, ?WARN_NON_PROPER_LIST, ?WARN_TUPLE_AS_FUN, ?WARN_FUN_APP, ?WARN_MATCHING, ?WARN_CALLGRAPH, ?WARN_COMP, ?WARN_GUARDS, ?WARN_OLD_BEAM, ?WARN_FAILING_CALL, ?WARN_CALLGRAPH], DefaultWarns1 = ordsets:from_list(DefaultWarns), InitPlt=filename:join([code:lib_dir(dialyzer),"plt","dialyzer_init_plt"]), DefaultOpts = #options{}, DefaultOpts1 = DefaultOpts#options{legal_warnings=DefaultWarns1, init_plt=InitPlt}, try build_options(Opts, DefaultOpts1) catch throw:{dialyzer_options_error, Msg} -> {error, Msg} end.build_options([{_OptionName, undefined}|Rest], Options) -> build_options(Rest, Options);build_options([Term = {OptionName, Value}|Rest], Options) -> case OptionName of files -> assert_filenames(Term, Value), build_options(Rest, Options#options{files=Value}); files_rec -> assert_filenames(Term, Value), build_options(Rest, Options#options{files_rec=Value}); analysis_type when Value =:= dataflow; Value =:= succ_typings; Value =:= old_style -> build_options(Rest, Options#options{analysis_type=Value}); defines -> assert_defines(Term, Value), OldVal = Options#options.defines, NewVal = ordsets:union(ordsets:from_list(Value), OldVal), build_options(Rest, Options#options{defines=NewVal}); from when Value =:= byte_code; Value =:= src_code -> build_options(Rest, Options#options{from=Value}); init_plt -> assert_filenames([Term], [Value]), build_options(Rest, Options#options{init_plt=Value}); include_dirs -> assert_filenames(Term, Value), OldVal = Options#options.include_dirs, NewVal = ordsets:union(ordsets:from_list(Value), OldVal), build_options(Rest, Options#options{include_dirs=NewVal}); old_style -> case Value of true -> build_options(Rest, Options#options{analysis_type=old_style}); false -> build_options(Rest, Options) end; output_file -> assert_filenames([Term], [Value]), build_options(Rest, Options#options{output_file=Value}); output_plt -> assert_filenames([Term], [Value]), build_options(Rest, Options#options{output_plt=Value}); quiet -> build_options(Rest, Options#options{quiet=Value}); erlang_mode -> build_options(Rest, Options#options{erlang_mode=true}); supress_inline -> build_options(Rest, Options#options{supress_inline=Value}); warnings -> NewWarnings = build_warnings(Value, Options#options.legal_warnings), build_options(Rest, Options#options{legal_warnings=NewWarnings}); _ -> bad_option(Term) end;build_options([Term|_Rest], _Options) -> bad_option(Term);build_options([], Options) -> Options.assert_filenames(Term, [FileName|Left]) when length(FileName) >= 0 -> assert_filenames(Term, Left);assert_filenames(_Term, []) -> ok;assert_filenames(Term, [_|_]) -> bad_option(Term).assert_defines(Term, [{Macro, _Value}|Left]) when is_atom(Macro) -> assert_defines(Term, Left);assert_defines(_Term, []) -> ok;assert_defines(Term, [_|_]) -> bad_option(Term).bad_option(Term) -> Msg = io_lib:format("Illegal dialyzer option: ~P.\n",[Term,15]), throw({dialyzer_options_error, Msg}).build_warnings([Opt|Left], Warnings) -> NewWarnings = case Opt of no_return -> ordsets:del_element(?WARN_RETURN_NO_RETURN, Warnings); no_unused -> ordsets:del_element(?WARN_NOT_CALLED, Warnings); no_improper_lists -> ordsets:del_element(?WARN_NON_PROPER_LIST, Warnings); no_tuple_as_fun -> ordsets:del_element(?WARN_TUPLE_AS_FUN, Warnings); no_fun_app -> ordsets:del_element(?WARN_FUN_APP, Warnings); no_match -> ordsets:del_element(?WARN_MATCHING, Warnings); no_comp -> ordsets:del_element(?WARN_COMP, Warnings); no_guards -> ordsets:del_element(?WARN_GUARDS, Warnings); no_unsafe_beam -> ordsets:del_element(?WARN_OLD_BEAM, Warnings); no_fail_call -> ordsets:del_element(?WARN_FAILING_CALL, Warnings); error_handling -> ordsets:add_element(?WARN_RETURN_ONLY_EXIT, Warnings); kostis -> ordsets:add_element(?WARN_TERM_COMP, Warnings); Other -> bad_option(Other) end, build_warnings(Left, NewWarnings);build_warnings([], Warnings) -> Warnings.
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?