1Code.require_file "../helpers/complete.exs", __DIR__
2Code.require_file "../helpers/response.exs", __DIR__
3
4defmodule Alchemist.API.Comp do
5
6  @moduledoc false
7
8  alias Alchemist.Helpers.Complete
9  alias Alchemist.Helpers.Response
10
11  def request(args) do
12    args
13    |> normalize
14    |> process
15  end
16
17  def process([nil, _, imports, _]) do
18    Complete.run('', imports) ++ Complete.run('')
19    |> response
20  end
21
22  def process([hint, _context, imports, aliases]) do
23    Application.put_env(:"alchemist.el", :aliases, aliases)
24
25    Complete.run(hint, imports) ++ Complete.run(hint)
26    |> response
27  end
28
29  defp normalize(request) do
30    {{hint, [ context: context,
31              imports: imports,
32              aliases: aliases ]}, _} =  Code.eval_string(request)
33    [hint, context, imports, aliases]
34  end
35
36  defp response(result) do
37    result
38    |> Enum.join("\n")
39    |> Response.endmark("COMP")
40  end
41
42end
43