Current section

Files

Jump to
sf_transform src sf_transform.erl
Raw

src/sf_transform.erl

-module(sf_transform).
%% API exports
-export([parse_transform/2]).
%%====================================================================
%% API functions
%%====================================================================
parse_transform(AST, Options) ->
PrefixFilename = proplists:get_value(sf_prefix, Options, cwd),
NthTail = proplists:get_value(sf_nth_tail, Options, 0),
lists:map(
fun({attribute, Line, file, {Filename, _Line}}) ->
NewFilename = rename_filename(PrefixFilename, Filename, NthTail),
{attribute, Line, file, {NewFilename, Line}};
(Form) -> Form
end, AST).
%%====================================================================
%% Internal functions
%%====================================================================
rename_filename(cwd, Filename, NthTail) ->
{ok, Cwd} = file:get_cwd(),
rename_filename(Cwd, Filename, NthTail);
rename_filename(PrefixFilename, Filename, NthTail) ->
List = filename:split(Filename) -- filename:split(PrefixFilename),
filename:join(lists:nthtail(NthTail, List)).