       h in '(+[' ->
         expand ''
       true ->
-        no_match
+        no()
     end
   end
 

  defp expand_dot(expr) do
    case Code.string_to_quoted expr do
      {:ok, atom} when is_atom(atom) ->
        expand_call atom, ''
      {:ok, {:__aliases__, _, list}} ->
        expand_elixir_modules list
      _ ->
        no_match
    end
  end

  defp expand_expr(expr) do
    case Code.string_to_quoted expr do
      {:ok, atom} when is_atom(atom) ->
        expand_erlang_modules atom_to_list(atom)
      {:ok, { atom, _, nil }} when is_atom(atom) ->
        expand_call Kernel, atom_to_list(atom)
      {:ok, {:__aliases__, _, [root]}} ->
        expand_elixir_modules [], atom_to_list(root)
      {:ok, {:__aliases__, _, [h|_] = list}} when is_atom(h) ->
        hint = atom_to_list(List.last(list))
        list = Enum.take(list, length(list) - 1)
        expand_elixir_modules list, hint
      {:ok, {{:., _, [mod, fun]}, _, []}} when is_atom(fun) ->
        expand_call mod, atom_to_list(fun)
      _ -> no_match
    end
  end


  end

  defp expand_call(_, _) do
    no()
  end

  defp expand_module_funs(mod, hint) do
