anchor.diff:  %% packages
   display_dep(_State, {Name, Vsn}) when is_list(Vsn) ->
       ?CONSOLE("~s* (package ~s)", [ec_cnv:to_binary(Name), ec_cnv:to_binary(Vsn)]);
  -display_dep(_State, Name) when is_atom(Name) ->
  -    ?CONSOLE("~s* (package)", [ec_cnv:to_binary(Name)]);
  +display_dep(_State, Name) when is_binary(Name) ->
  +    ?CONSOLE("~s* (package)", [Name]);
   %% git source
   display_dep(_State, {Name, Source}) when is_tuple(Source), element(1, Source) =:= git ->
       ?CONSOLE("~s* (git source)", [ec_cnv:to_binary(Name)]);
  
positive.code:     display_deps(State, Deps),
      ?CONSOLE("", []).
  
  merge(Deps, Deps) ->
      Deps;
  merge(Deps, SourceDeps) ->
      ToAdd = [Dep || Dep <- SourceDeps,
                      not lists:keymember(ec_cnv:to_binary(element(1,Dep)), 1, Deps)],
      Deps ++ ToAdd.
  
  display_deps(State, Deps) ->
      lists:foreach(fun(Dep) -> display_dep(State, Dep) end, Deps).
  
negative.code: 
  -spec init(rebar_state:t()) -> {ok, rebar_state:t()}.
  init(State) ->
      State1 = rebar_state:add_provider(
              State,
              providers:create([
                      {name, ?PROVIDER},
                      {module, ?MODULE},
                      {bare, true},
                      {deps, ?DEPS},
                      {example, "rebar3 deps"},
                      {short_desc, "List dependencies"},
                      {desc, "List dependencies. Those not matching lock files "
                             "are followed by an asterisk (*)."},
                      {opts, []}])),
      {ok, State1}.
  
  -spec do(rebar_state:t()) -> {ok, rebar_state:t()} | {error, string()}.
  