Sfoglia il codice sorgente

Make rebar3 templates check for name clashes

This commit changes rebar3 to check for name clashes of the
modules created from its templates with existing Erlang modules
to produce a non-blocking warning for each clashing module.
pull/2384/head
Pablo Costas Sánchez 4 anni fa
parent
commit
9a9f2d2024
1 ha cambiato i file con 16 aggiunte e 0 eliminazioni
  1. +16
    -0
      src/rebar_templater.erl

+ 16
- 0
src/rebar_templater.erl Vedi File

@ -196,6 +196,21 @@ maybe_warn_about_name(Vars) ->
ok
end.
maybe_warn_about_name_clash(File) ->
case filename:extension(File) of
".erl" ->
Module0 = re:replace(filename:basename(File), "\.erl", "", [{return, list}]),
Module = list_to_atom(Module0),
try Module:module_info() of
_ -> ?WARN("The module definition of '~ts' in file ~ts "
"will clash with an existing Erlang module.",
[Module, File])
catch
_:_ -> ok
end;
_ -> ok
end.
validate_atom(Str) ->
case io_lib:fread("~a", unicode:characters_to_list(Str)) of
{ok, [Atom], ""} ->
@ -258,6 +273,7 @@ execute_template([{template, From, To} | Terms], Files, {Template, Type, Cwd}, V
In = expand_path(From, Vars),
Out = expand_path(To, Vars),
Tpl = load_file(Files, Type, filename:join(Cwd, In)),
maybe_warn_about_name_clash(Out),
case write_file(Out, render(Tpl, Vars), Force) of
ok ->
ok;

Caricamento…
Annulla
Salva