소스 검색

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;

불러오는 중...
취소
저장