summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJustin Wood <justin.k.wood@protonmail.com>2019-03-18 23:51:20 -0400
committerJustin Wood <justin.k.wood@protonmail.com>2019-03-19 00:07:27 -0400
commit4d893f123c462e175e717d80dd356d42c570b82f (patch)
treeff41f5d7f7e46ba3d502ade6841ebc0fc4e31a68 /src
parent3e19dcfa7f95145ec2a4c70fbc44208f4bd6345d (diff)
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.
Diffstat (limited to 'src')
-rw-r--r--src/rebar_app_utils.erl31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/rebar_app_utils.erl b/src/rebar_app_utils.erl
index 5fe5ba6..037bf9d 100644
--- a/src/rebar_app_utils.erl
+++ b/src/rebar_app_utils.erl
@@ -100,6 +100,7 @@ validate_application_info(AppInfo, AppDetail) ->
undefined ->
false;
AppFile ->
+ lint_detail(AppDetail, AppFile),
case proplists:get_value(modules, AppDetail) of
undefined ->
?PRV_ERROR({module_list, AppFile});
@@ -108,6 +109,36 @@ validate_application_info(AppInfo, AppDetail) ->
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
-spec parse_deps(Dir, Deps, State, Locks, Level) -> [rebar_app_info:t()] when
Dir :: file:filename(),