defmodule Alchemist.Case do
|
|
|
|
alias Alchemist.Completer
|
|
alias Alchemist.Utils
|
|
alias Alchemist.Informant
|
|
|
|
defmodule Complete do
|
|
def process! do
|
|
:ets.insert(:alchemist, {"aliases", []})
|
|
Completer.run('')
|
|
|> Enum.map &IO.puts('cmp:' ++ &1)
|
|
print_end_of_complete_signal
|
|
end
|
|
|
|
def process!(hint) do
|
|
:ets.insert(:alchemist, {"aliases", []})
|
|
Completer.run(hint)
|
|
|> Enum.map &IO.puts('cmp:' ++ &1)
|
|
print_end_of_complete_signal
|
|
end
|
|
|
|
defp print_end_of_complete_signal do
|
|
IO.puts "END-OF-COMPLETE"
|
|
end
|
|
|
|
def process_with_context!(hint) do
|
|
[hint, modules, aliases] = String.split(hint, ";", parts: 3)
|
|
modules = Utils.clear_context_list(modules)
|
|
{modules, _} = Code.eval_string(modules)
|
|
{aliases, _} = Code.eval_string(aliases)
|
|
:ets.insert(:alchemist, {"aliases", aliases})
|
|
|
|
Completer.run(hint)
|
|
|> Enum.map &IO.puts('cmp:' ++ &1)
|
|
Enum.each modules, fn(module) ->
|
|
Informant.get_functions(module, hint)
|
|
|> Enum.map &IO.puts('cmp:' ++ &1)
|
|
end
|
|
IO.puts "END-OF-COMPLETE-WITH-CONTEXT"
|
|
end
|
|
end
|
|
|
|
defmodule Modules do
|
|
def process! do
|
|
Informant.get_modules |> Enum.map &IO.puts/1
|
|
IO.puts "END-OF-MODULES"
|
|
end
|
|
end
|
|
|
|
defmodule Doc do
|
|
def process!(exp) do
|
|
Code.eval_string("import IEx.Helpers \nApplication.put_env(:iex, :colors, [enabled: true])\nh(#{exp})", [], __ENV__)
|
|
IO.puts "END-OF-DOC"
|
|
end
|
|
end
|
|
|
|
defmodule Eval do
|
|
def process!(file) do
|
|
try do
|
|
File.read!("#{file}")
|
|
|> Code.eval_string
|
|
|> Tuple.to_list
|
|
|> List.first
|
|
|> IO.inspect
|
|
rescue
|
|
e -> IO.inspect e
|
|
end
|
|
IO.puts "END-OF-EVAL"
|
|
end
|
|
end
|
|
|
|
defmodule Quote do
|
|
def process!(file) do
|
|
try do
|
|
File.read!("#{file}")
|
|
|> Code.string_to_quoted
|
|
|> Tuple.to_list
|
|
|> List.last
|
|
|> IO.inspect
|
|
rescue
|
|
e -> IO.inspect e
|
|
end
|
|
IO.puts "END-OF-QUOTE"
|
|
end
|
|
end
|
|
|
|
defmodule Find do
|
|
def process!(exp) do
|
|
[module, function] = String.split(exp, ",", parts: 2)
|
|
module = String.to_char_list module
|
|
function = String.to_atom function
|
|
Code.eval_string("Alchemist.Source.find(#{module}, :#{function})", [], __ENV__)
|
|
IO.puts "END-OF-SOURCE"
|
|
end
|
|
end
|
|
end
|