Переглянути джерело

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 роки тому
джерело
коміт
9a9f2d2024
1 змінених файлів з 16 додано та 0 видалено
  1. +16
    -0
      src/rebar_templater.erl

+ 16
- 0
src/rebar_templater.erl Переглянути файл

@ -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;

Завантаження…
Відмінити
Зберегти