<div dir="ltr">Thanks Slava and Peti, this works!<br><br>Specifically, adding the form:<br><br>    {error, {Line, ModuleWithFormatError, Reason}}<div><br></div><div>Where:</div><div>- "Line" is the line number,</div><div>- "ModuleWithFormatError" is a module exporting a format_error/1 function, which will be used to format the Reason.</div><div>- "Reason" is some kind of info, given to the format_error/1 above.</div><div><br></div><div>I've built a minimal parse transform module to test this:</div><div><br></div><div><pre style="color:rgb(0,0,0);font-family:menlo;font-size:10.5pt">-module(fail_on_function_trans)<span style="color:rgb(0,0,128);font-weight:bold">.<br></span></pre><pre style="color:rgb(0,0,0);font-family:menlo;font-size:10.5pt"><pre style="font-family:menlo;font-size:10.5pt"><br></pre><pre style="font-family:menlo;font-size:10.5pt">-export([parse_transform/<span style="color:rgb(0,0,255)">2</span>])<span style="color:rgb(0,0,128);font-weight:bold">.<br></span><span style="color:rgb(0,0,128);font-weight:bold"><br></span>-export([format_error/<span style="color:rgb(0,0,255)">1</span>])<span style="color:rgb(0,0,128);font-weight:bold">.<br></span></pre><pre style="font-family:menlo;font-size:10.5pt"><span style="color:rgb(0,0,128);font-weight:bold"><br></span></pre><pre style="font-family:menlo;font-size:10.5pt"><pre style="font-family:menlo;font-size:10.5pt">parse_transform(<span style="color:rgb(102,14,122)">Forms</span>, <span style="color:rgb(102,14,122)">_Options</span>) -><br>  <span style="color:rgb(102,14,122)">Mod </span>= extract_module(<span style="color:rgb(102,14,122)">Forms</span>),<br>  io:format(<span style="color:rgb(0,128,0);font-weight:bold">"processing module: ~w~n"</span>, [<span style="color:rgb(102,14,122)">Mod</span>]),<br><br>  <span style="color:rgb(102,14,122)">OutForms </span>= <span style="color:rgb(102,14,122)">Forms </span>++ [error_form(<span style="color:rgb(0,0,255)">15</span>, <span style="color:rgb(0,128,0);font-weight:bold">"bad thing has happened"</span>)],<br></pre><pre style="font-family:menlo;font-size:10.5pt"><pre style="font-family:menlo;font-size:10.5pt">  io:format(<span style="color:rgb(0,128,0);font-weight:bold">"output will be: ~p~n"</span>, [<span style="color:rgb(102,14,122)">OutForms</span>]),<br><span style="color:rgb(102,14,122)">  OutForms</span><span style="color:rgb(0,0,128);font-weight:bold">.<br></span></pre><pre style="font-family:menlo;font-size:10.5pt"><br></pre><pre style="font-family:menlo;font-size:10.5pt"><pre style="font-family:menlo;font-size:10.5pt">extract_module([{attribute, <span style="color:rgb(102,14,122)">_</span>, module, <span style="color:rgb(102,14,122)">Mod</span>} | <span style="color:rgb(102,14,122)">_</span>]) -><br>  <span style="color:rgb(102,14,122)">Mod</span>;<br>extract_module([<span style="color:rgb(102,14,122)">_ </span>| <span style="color:rgb(102,14,122)">H</span>]) -><br>  extract_module(<span style="color:rgb(102,14,122)">H</span>);<br>extract_module([]) -><br>  unknown<span style="color:rgb(0,0,128);font-weight:bold">.<br></span><span style="color:rgb(0,0,128);font-weight:bold"><br></span><span style="color:rgb(0,0,128);font-weight:bold"><br></span>error_form(<span style="color:rgb(102,14,122)">Line</span>, <span style="color:rgb(102,14,122)">ReasonString</span>) -><br>  {error, {<span style="color:rgb(102,14,122)">Line</span>, ?<span style="color:rgb(102,14,122)">MODULE</span>, <span style="color:rgb(102,14,122)">ReasonString</span>}}<span style="color:rgb(0,0,128);font-weight:bold">.<br></span><span style="color:rgb(128,128,128);font-style:italic"><br></span>format_error(<span style="color:rgb(102,14,122)">Arg</span>) -><br>  io_lib:format(<span style="color:rgb(0,128,0);font-weight:bold">"~s"</span>, [<span style="color:rgb(102,14,122)">Arg</span>])<span style="color:rgb(0,0,128);font-weight:bold">.<br></span></pre></pre></pre></pre></pre></div><div><br></div><div>The output then contains, when compiling module "xxx_check_fail":</div><div><br></div><div>    xxx_check_fail.erl:15: bad thing has happened</div><div><br></div><div><br></div><div>Cheers,</div><div>Alex.</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Sun, Oct 30, 2016 at 8:08 AM, Slava Yurin <span dir="ltr"><<a href="mailto:yurinvv@ya.ru" target="_blank">yurinvv@ya.ru</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div>Try this:</div><div><a href="https://github.com/uwiger/parse_trans/blob/master/src/parse_trans.erl#L127" target="_blank">https://github.com/uwiger/<wbr>parse_trans/blob/master/src/<wbr>parse_trans.erl#L127</a></div><div> </div><div>29.10.2016, 15:47, "Alex Arnon" <<a href="mailto:alex.arnon@gmail.com" target="_blank">alex.arnon@gmail.com</a>>:</div><blockquote type="cite"><div><div class="h5"><div><div><div><div><div>Hi All!<br> </div>I am trying to build a simple parse transform, that makes a small modification when a called function's name is of a certain form. I would like to signal that an error has occurred (e.g. the name is malformed, or arguments of wrong kind). How can I do this?</div>I have tried to insert {error, X}, with various types of X (including the {Line, Module, Reason} form, which pacifies erl_lint at least), but compilation with erlc keeps failing with:<br><br>    Compiler function compile:compile/3 returned:<br>    {error,undef}<br> </div>Thanks in advance,</div>Alex.<br> </div></div></div>,<span class=""><p>______________________________<wbr>_________________<br>erlang-questions mailing list<br><a href="mailto:erlang-questions@erlang.org" target="_blank">erlang-questions@erlang.org</a><br><a href="http://erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://erlang.org/mailman/<wbr>listinfo/erlang-questions</a></p></span></blockquote></blockquote></div><br></div>