Size: a a a

2018 December 28

AB

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

VP

Vladimir Potapev in pro.elixir
Хмхмхм. Надо это внимательно покурить. Любопытно
источник

AB

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

VP

Vladimir Potapev in pro.elixir
О, кстати!
источник

VP

Vladimir Potapev in pro.elixir
Хотя...
источник

AB

Alex Bubnov in pro.elixir
там в конце вызов :elixir_module.compile, можно его использовать, но это перебор
источник

VP

Vladimir Potapev in pro.elixir
Да, могут быть сайд эффекты
источник

VP

Vladimir Potapev in pro.elixir
так, щас ради интереса кое что попробую
источник

AB

Alex Bubnov in pro.elixir
короче, я бы попробовал сделать свой defmodule, который что-то там делает с ast, потом передает на вход Kernel.defmodule
источник

AB

Alex Bubnov in pro.elixir
единственное, тут может понадобиться всегда делать
defmodule Wrapper do
  require MyDirtyMacro

  MyDirtyMacro.defmodule XXX do
     .....
  end
end
источник

AB

Alex Bubnov in pro.elixir
не очень красиво
источник

VP

Vladimir Potapev in pro.elixir
Мне желательно как можно меньше вмешиваться в существующий код. Для каждого модуля такое делать - долго, муторно.
источник

VP

Vladimir Potapev in pro.elixir
https://github.com/elixir-lang/elixir/pull/4848 - тут что-то полезное запилено было
источник

VP

Vladimir Potapev in pro.elixir
Т.е. можно попытаться на @on_compile сделать defoverride для макроса defmodule 💀
источник

VP

Vladimir Potapev in pro.elixir
адок кокойто, но можно попытаться.
источник

VP

Vladimir Potapev in pro.elixir
Нет, таки нет
источник

VP

Vladimir Potapev in pro.elixir
на @on_definition у меня есть доступ ко всем аст функций. Но к модуля целиком - нет.
источник

VP

Vladimir Potapev in pro.elixir
а на @before_compile есть входной контекст под названием env, но там я тоже не вижу AST.
источник

VP

Vladimir Potapev in pro.elixir
Короче задачка вырисовывается очень интересная, ещё интереснее чем та, где надо было определять в компайл-тайме выполняется код или в рантайме. =)
источник

DR

Dmitry Russ (Aleksandrov) in pro.elixir
Vladimir Potapev
Ну там просто хотелось максимально автоматизировать одну задачку завязанную на изменение существующего кода. И это бы получилось, если бы можно было AST менять) А то даден в руки инстрУмент (defmacro, quote/unquote, сплайсинги, @on_definition, @before_compile, вот это всё), а во все поля чот не получается использовать. =)
Делаешь макро defmymodule, который вызывает defmodule и делаешь все, что угодно с AST.
источник