Browse Source

Add basic linting for .app file

This currently just checks for the existence of the description and applications
keys and that the applications list has kernel and stdlib in it.
pull/2035/head
Justin Wood 6 years ago
parent
commit
4d893f123c
1 changed files with 31 additions and 0 deletions
  1. +31
    -0
      src/rebar_app_utils.erl

+ 31
- 0
src/rebar_app_utils.erl View File

@ -100,6 +100,7 @@ validate_application_info(AppInfo, AppDetail) ->
undefined -> undefined ->
false; false;
AppFile -> AppFile ->
lint_detail(AppDetail, AppFile),
case proplists:get_value(modules, AppDetail) of case proplists:get_value(modules, AppDetail) of
undefined -> undefined ->
?PRV_ERROR({module_list, AppFile}); ?PRV_ERROR({module_list, AppFile});
@ -108,6 +109,36 @@ validate_application_info(AppInfo, AppDetail) ->
end end
end. end.
-spec lint_detail(list(), file:filename_all()) -> ok.
lint_detail(AppDetail, AppFile) ->
lint_description(AppDetail, AppFile),
lint_applications(AppDetail, AppFile).
-spec lint_description(list(), file:filename_all()) -> ok.
lint_description(AppDetail, AppFile) ->
case proplists:get_value(description, AppDetail, "") of
"" -> ?WARN("~p is missing description entry", [AppFile]);
_ -> ok
end.
-spec lint_applications(list(), file:filename_all()) -> ok.
lint_applications(AppDetail, AppFile) ->
case proplists:get_value(applications, AppDetail, []) of
[] -> ?WARN("~p is missing applications entry", [AppFile]);
AppList when is_list(AppList) ->
case lists:member(kernel, AppList) of
false ->
?WARN("~p is missing kernel from applications list", [AppFile]);
true -> ok
end,
case lists:member(stdlib, AppList) of
false ->
?WARN("~p is missing stdlib from applications list", [AppFile]);
true -> ok
end;
_ -> ?WARN("~p requires a list for applications key", [AppFile])
end.
%% @doc parses all dependencies from the root of the project %% @doc parses all dependencies from the root of the project
-spec parse_deps(Dir, Deps, State, Locks, Level) -> [rebar_app_info:t()] when -spec parse_deps(Dir, Deps, State, Locks, Level) -> [rebar_app_info:t()] when
Dir :: file:filename(), Dir :: file:filename(),

Loading…
Cancel
Save