Kaynağa Gözat

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 yıl önce
ebeveyn
işleme
9a9f2d2024
1 değiştirilmiş dosya ile 16 ekleme ve 0 silme
  1. +16
    -0
      src/rebar_templater.erl

+ 16
- 0
src/rebar_templater.erl Dosyayı Görüntüle

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

Yükleniyor…
İptal
Kaydet