diff options
author | Fred Hebert <mononcqc@ferd.ca> | 2016-07-22 08:12:46 -0400 |
---|---|---|
committer | Fred Hebert <mononcqc@ferd.ca> | 2016-07-22 08:12:46 -0400 |
commit | 2c7296babf5849dba383b52894490e397acb64d2 (patch) | |
tree | 6061983ec988651ecb850b8403e187374c6c0500 | |
parent | 21571ad38a693124d2294db5c163eeae257f4280 (diff) |
Fix opts check when compiler called with dict opts
rebar_base_compiler allows to be called with two types of options: a
dictionary, or a rebar_state record. In the later case, the options are
taken out with a call from rebar_opts, which fetches options that have
been inserted in the application via rebar_app_info as part of the
app_discovery phase, and are a list.
This yields a possibility that options used when formatting warnings can
either be a list of a dict, and we only used lists when making checks.
This ended up breaking 3rd party compiler users (i.e. LFE compile
plugin) since they were calling us with a dict rather than our own
internal records.
This patch supports both types of lookups to avoid issues.
-rw-r--r-- | src/rebar_base_compiler.erl | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/rebar_base_compiler.erl b/src/rebar_base_compiler.erl index 6b8c7ca..5d54057 100644 --- a/src/rebar_base_compiler.erl +++ b/src/rebar_base_compiler.erl @@ -155,7 +155,13 @@ format_warnings(Source, Warnings) -> format_warnings(Source, Warnings, []). format_warnings(Source, Warnings, Opts) -> - Prefix = case lists:member(warnings_as_errors, Opts) of + %% `Opts' can be passed in both as a list or a dictionary depending + %% on whether the first call to rebar_erlc_compiler was done with + %% the type `rebar_dict()' or `rebar_state:t()'. + LookupFn = if is_list(Opts) -> fun lists:member/2 + ; true -> fun dict:is_key/2 + end, + Prefix = case LookupFn(warnings_as_errors, Opts) of true -> ""; false -> "Warning: " end, |