Browse Source

dialyzer support

Namdak Tonpa 6 years ago
parent
commit
9d1a0e1e17
8 changed files with 22 additions and 6 deletions
  1. 4 2
      include/api.hrl
  2. 1 1
      include/mad.hrl
  3. BIN
      mad
  4. 1 1
      src/compile/mad_erl.erl
  5. 1 0
      src/mad.erl
  6. 1 0
      src/mad_local.erl
  7. 2 2
      src/mad_man.erl
  8. 12 0
      src/provide/mad_run.erl

+ 4 - 2
include/api.hrl

@@ -1,6 +1,6 @@
--define(MAD,[compile/1,app/1,get/1,man/1,release/1,resolve/1,clean/1,
+-define(MAD,[compile/1,app/1,get/1,man/1,dia/1,release/1,resolve/1,clean/1,
              start/1,attach/1,stop/1,sh/1,deps/1,up/1,fetch/1,
-            static/1,eunit/1,strip/1]).
+             static/1,eunit/1,strip/1]).
 
 -type return() :: [] | true | false | {ok,any()} | {error,any()}.
 
@@ -16,6 +16,8 @@
 -spec sh(list(string())) -> return().
 -spec deps(list(string())) -> return().
 -spec up(list(string())) -> return().
+-spec man(list(string())) -> return().
+-spec dia(list(string())) -> return().
 -spec fetch(list(string())) -> return().
 -spec static(list(string())) -> return().
 -spec eunit(list(string())) -> return().

+ 1 - 1
include/mad.hrl

@@ -1 +1 @@
--define(VERSION,"dfe14b").
+-define(VERSION,"777f6e").

BIN
mad


+ 1 - 1
src/compile/mad_erl.erl

@@ -5,7 +5,7 @@
     compile_options() ++ [{i, [Inc]}, {outdir, Ebin}] ++ Opts ++ Deps).
 
 compile_options() -> application:get_env(mad,compile_options,
-    [return_errors, return_warnings, debug_info, nowarn_export_all]).
+    [return_errors, return_warnings, debug_info, nowarn_export_all, debug_info]).
 erl_to_beam(Bin, F) -> filename:join(Bin, filename:basename(F, ".erl") ++ ".beam").
 
 filter(I) -> [ X || X <- I, X /= warnings_as_errors, X /= warn_export_all, X /=warn_unused_import] .

+ 1 - 0
src/mad.erl

@@ -43,6 +43,7 @@ atomize("sta"++_) -> 'start';
 atomize("sto"++_) -> 'stop';
 atomize("att"++_) -> 'attach';
 atomize("sh")     -> 'sh';
+atomize("dia"++_) -> 'dia';
 atomize("rep"++_) -> 'sh';
 atomize("pla"++_) -> 'resolve';
 atomize("str"++_) -> 'strip';

+ 1 - 0
src/mad_local.erl

@@ -4,6 +4,7 @@
 
 compile(Params)   -> mad_compile:compile(Params).
 man(Params)       -> mad_man:man(Params).
+dia(Params)       -> mad_run:dia(Params).
 app(Params)       -> mad_static:app(Params).
 static(Params)    -> mad_static:main([],Params).
 release(Params)   -> mad_release:release(Params).

+ 2 - 2
src/mad_man.erl

@@ -2,7 +2,7 @@
 -doc("Generate n2o.dev man pages.").
 -compile(export_all).
 
-man(Params) ->
+man(_Params) ->
    Temp = template(),
    [ generate(filename:basename(I,".erl"),Temp)
     || I <- filelib:wildcard("*/src/**/*.erl")
@@ -13,7 +13,7 @@ write(Gen,Bin) -> io:format("Generated: ~p~n",[Gen]), file:write_file(Gen,Bin).
 replace(S,A,B) -> re:replace(S,A,B,[global,{return,list}]).
 trim(A) -> re:replace(A, "(^\\s+)|(\\s+$)", "", [global,{return,list}]).
 fix([Prefix]) -> Prefix;
-fix([Prefix,Name|Rest]) -> Name.
+fix([_Prefix,Name|_Rest]) -> Name.
 generate(Lower,Temp) ->
     Name = string:to_upper(Lower),
     Tem2 = replace(Temp,"MAN_TOOL",hd(string:tokens(Name,"_"))),

+ 12 - 0
src/provide/mad_run.erl

@@ -21,3 +21,15 @@ clean(_) -> [ file:delete(X) || X <- filelib:wildcard("{apps,deps}/*/ebin/*.beam
             [ file:delete(X) || X <- filelib:wildcard("c_src/**/*.o") ++
                                      filelib:wildcard("c_src/**/*.d")],  {ok,[]}.
 
+
+dia(Params) ->
+    App = mad_repl:local_app(),
+    Plt = lists:concat([".",App,".plt"]),
+    {_,S1,X1} = sh:run("dialyzer",["--build_plt","--output_plt",Plt,"--apps","."],binary,".",[{"ERL_LIBS","deps"}]),
+    {_,S2,X2} = sh:run("dialyzer",["-q","ebin","--plt",Plt,"--no_native","-Werror_handling",
+                   "-Wunderspecs","-Wrace_conditions","-Wno_undefined_callbacks"],binary,".",[{"ERL_LIBS","deps"}]),
+    case S1 of
+         0 -> case S2 of
+              0 -> {ok,App};
+              _ -> io:format("~s",[X2]), {error,App} end;
+         _ -> io:format("~s",[X1]), {error,App} end.