Fix static analysis issues

diff --git a/rebar.config b/rebar.config
index a758c0c..c1b75cd 100644
--- a/rebar.config
+++ b/rebar.config
@@ -16,3 +16,12 @@
         ]}
     ]}
 ]}.
+{xref_checks, [
+    undefined_function_calls,
+    deprecated_function_calls
+]}.
+{dialyzer, [
+    {warnings, [
+        unknown
+    ]}
+]}.
diff --git a/src/meck_code_gen.erl b/src/meck_code_gen.erl
index 2a245a3..6f7257a 100644
--- a/src/meck_code_gen.erl
+++ b/src/meck_code_gen.erl
@@ -189,7 +189,7 @@
 -spec handle_exception(CallerPid::pid(), Mod::atom(), Func::atom(),
                        Args::[any()], Class:: exit | error | throw,
                        Reason::any(),
-                       Stack::list()) ->
+                       Stack::meck_history:stack_trace()) ->
         no_return().
 handle_exception(Pid, Mod, Func, Args, Class, Reason, Stack) ->
     case meck_ret_spec:is_meck_exception(Reason) of
@@ -201,7 +201,7 @@
     end.
 
 -spec raise(CallerPid::pid(), Mod::atom(), Func::atom(), Args::[any()],
-            Class:: exit | error | throw, Reason::any(), Stack::list()) ->
+            Class:: exit | error | throw, Reason::any(), Stack::meck_history:stack_trace()) ->
         no_return().
 raise(Pid, Mod, Func, Args, Class, Reason, Stack) ->
     StackTrace = inject(Mod, Func, Args, Stack),
@@ -209,6 +209,7 @@
                                     {Class, Reason, StackTrace}),
     erlang:raise(Class, Reason, StackTrace).
 
+-dialyzer({no_match, inject/4}). % for meck_history:stack_trace in older Erlang/OTP versions
 -spec inject(Mod::atom(), Func::atom(), Args::[any()],
              meck_history:stack_trace()) ->
         NewStackTrace::meck_history:stack_trace().
diff --git a/src/meck_cover.erl b/src/meck_cover.erl
index 600491b..d97f368 100644
--- a/src/meck_cover.erl
+++ b/src/meck_cover.erl
@@ -22,6 +22,11 @@
 -export([rename_module/2]).
 -export([dump_coverdata/1]).
 
+-ignore_xref({cover, compile_beams, 1}).
+-ignore_xref({cover, compile_beam, 2}).
+-ignore_xref({cover, get_term, 1}).
+-ignore_xref({cover, write, 2}).
+
 %%=============================================================================
 %% Interface exports
 %%=============================================================================
@@ -64,6 +69,7 @@
 %% access to `compile_beam/2' which allows passing a binary.
 %% In OTP 18.0 the internal API of cover changed a bit and
 %% compile_beam/2 was replaced by compile_beams/1.
+-dialyzer({no_missing_calls, alter_cover/0}). % for cover:compile_beams/1
 alter_cover() ->
     CoverExports = cover:module_info(exports),
     case {lists:member({compile_beams,1}, CoverExports),
@@ -91,6 +97,7 @@
     end.
 
 %% wrap cover's pre-18.0 internal API to simulate the new API
+-dialyzer({no_missing_calls, compile_beam_wrapper/1}). % for cover:compile_beam/2
 compile_beam_wrapper(ModFiles) ->
     [cover:compile_beam(Mod, Bin)||{Mod, Bin} <- ModFiles].
 
@@ -124,6 +131,7 @@
     ok = file:close(Fd),
     Terms.
 
+-dialyzer({no_missing_calls, get_terms/2}). % for cover:get_term/1
 get_terms(Fd, Terms) ->
     case cover:get_term(Fd) of
         eof -> Terms;
@@ -135,5 +143,6 @@
     lists:foreach(write_term(Fd), Terms),
     ok.
 
+-dialyzer({no_missing_calls, write_term/1}). % for cover:write/2
 write_term(Fd) ->
     fun(Term) -> cover:write(Term, Fd) end.
diff --git a/src/meck_expect.erl b/src/meck_expect.erl
index 5a02fe5..69766b0 100644
--- a/src/meck_expect.erl
+++ b/src/meck_expect.erl
@@ -39,7 +39,7 @@
                         meck_ret_spec:ret_spec()}.
 
 -type func_ari() :: {Func::atom(), Ari::byte()}.
--opaque expect() :: {func_ari(), [func_clause()]}.
+-type expect() :: {func_ari(), [func_clause()]}.
 
 %%%============================================================================
 %%% API
diff --git a/src/meck_proc.erl b/src/meck_proc.erl
index 3cd02cb..61bc175 100644
--- a/src/meck_proc.erl
+++ b/src/meck_proc.erl
@@ -122,7 +122,7 @@
     gen_server(call, Mod, {delete_expect, Func, Ari, Force}).
 
 -spec list_expects(Mod::atom(), ExcludePassthrough::boolean()) ->
-    [{Mod::atom(), Func::atom(), Ari::byte}].
+    [{Mod::atom(), Func::atom(), Ari::byte()}].
 list_expects(Mod, ExcludePassthrough) ->
     gen_server(call, Mod, {list_expects, ExcludePassthrough}).