Current section

Files

Jump to
beamoji src beamoji_pt.erl
Raw

src/beamoji_pt.erl

-module(beamoji_pt).
-export([parse_transform/2, parse_transform_info/0, walker/2]).
parse_transform(Forms0, _Options) ->
State = update_translator(#{}, beamoji_id_translator),
{Forms, _NewState} = ast_walk:forms(Forms0, fun walker/2, State),
Forms.
parse_transform_info() ->
#{error_location => column}.
update_translator(State0, TranslatorMod) ->
TranslatorState = beamoji_translator:'🐣'(TranslatorMod),
TranslatorFn = fun beamoji_translator:'⏪'/2,
maps:merge(State0, #{translator_fn => TranslatorFn, translator_state => TranslatorState}).
walker(State, Ast = {attribute, _Anno, beamoji_translator, TranslatorMod}) ->
NewState = update_translator(State, TranslatorMod),
{Ast, NewState};
walker(State, Ast) ->
Translate = fun(Atom) -> translate(State, Atom) end,
NewAst = beamoji_utils:'🪄'(Translate, Ast),
{NewAst, State}.
translate(State, Atom) ->
#{translator_fn := TranslatorFn, translator_state := TranslatorState} = State,
TranslatorFn(Atom, TranslatorState).