Size: a a a

2021 May 14

LL

Lama Lover in pro.elixir
"path/to/module.ex"
|> File.read!()
|> Code.string_to_quoted!()
|> Macro.prewalk(& Macro.expand(&1, __ENV__))
|> Macro.to_string()
|> Code.format_string!()
источник

M

MrFlorius in pro.elixir
источник

M

MrFlorius in pro.elixir
Чет оно не сильно помогло, просто развернуло все в ast, но я уже придумал как сделать то что я хочу
источник

AB

Alex Bubnov in pro.elixir
Я в таких случаях достаю из дебаг-инфо модуля эрланговое ast и дамплю его через эрланговый же претти-принтер
источник

M

MrFlorius in pro.elixir
Попробую
источник

AB

Alex Bubnov in pro.elixir
Попробую сейчас однострочник в гисте найти
источник

AB

Alex Bubnov in pro.elixir
источник

M

MrFlorius in pro.elixir
Мне последнюю строчку после моего модуля дописать?
источник

AB

Alex Bubnov in pro.elixir
Ладно, сейчас сделаю проще
источник

AB

Alex Bubnov in pro.elixir
Минутку
источник

AB

Alex Bubnov in pro.elixir
~ $ cat ~/.iex.exs
...
defmodule X do
 def d(name) when is_atom(name) do
   {^name, bin, _filename} = :code.get_object_code(name)
   decompile_binary(bin)
 end

 def d({:module, _name, bin, _names}) do
   decompile_binary(bin)
 end

 def decompile_binary(bin) do
   bin
   |> :beam_lib.chunks([:abstract_code])
   |> elem(1) |> elem(1)
   |> get_in([:abstract_code])
   |> elem(1)
   |> :erl_syntax.form_list |> :erl_prettypr.format
   |> IO.puts
 end
end
источник

M

MrFlorius in pro.elixir
Да, понял. Дописал и заработало
источник

A ß in pro.elixir
а мог бы воспользоваться pathex
источник

AB

Alex Bubnov in pro.elixir
в однострочнике, в .iex.exs, ну
источник

M

MrFlorius in pro.elixir
Спасибо!)
источник

AB

Alex Bubnov in pro.elixir
вот мне только зависимостей в однострочниках не хватало
источник

AB

Alex Bubnov in pro.elixir
кстати, очень занятно
iex(1)> X.d X
** (MatchError) no match of right hand side value: :error
   .iex.exs:26: X.d/1
iex(1)> :code.get_object_code(X)
:error
источник

AB

Alex Bubnov in pro.elixir
что-то странное iex делает с модулями из exs, нужно не забыть почитать
источник

M

MrFlorius in pro.elixir
Хм, не пробовал прямо на этом модуле)
источник

((

(fun () -> ()) in pro.elixir
источник