Thank you Anthony, Ulf,<div><br></div><div>I'll definitely look into that. I just felt curious when I saw<br><br><div style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.800000190734863px;background-color:rgb(255,255,255)">
<font face="courier new, monospace">-spec({{greetings, 1},</font></div><div style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.800000190734863px;background-color:rgb(255,255,255)"><font face="courier new, monospace">       [{type, 12, 'fun',</font></div>
<div style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.800000190734863px;background-color:rgb(255,255,255)"><font face="courier new, monospace"><span style="white-space:pre-wrap">  </span> [{type, 12, product,</font></div>
<div style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.800000190734863px;background-color:rgb(255,255,255)"><font face="courier new, monospace"><span style="white-space:pre-wrap">  </span>   [{ann_type, 12,</font></div>
<div style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.800000190734863px;background-color:rgb(255,255,255)"><font face="courier new, monospace"><span style="white-space:pre-wrap">  </span>     [{var, 12, 'Text'}, {type, 12, string, []}]}]},</font></div>
<div style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.800000190734863px;background-color:rgb(255,255,255)"><font face="courier new, monospace"><span style="white-space:pre-wrap">  </span>  {type, 12, string, []}]}]}).</font></div>
<br>hem... ^^_</div><div><br></div><div>r.</div><div><br><br><div class="gmail_quote">On Tue, Sep 25, 2012 at 1:34 AM, Ulf Wiger <span dir="ltr"><<a href="mailto:ulf@feuerlabs.com" target="_blank">ulf@feuerlabs.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><div><br></div><div>Roberto,</div><div><br></div><div>It appears as if erl_pp:form/1 does a much better job of formatting specs,</div>
<div>but then, of course, you lose the comments.</div><div><br></div><div>There is also an issue with typed record fields, which seems to affect </div><div>erl_prettypr as well. It simply removes the types from record declarations.</div>
<div><br></div><div>Take a look at parse_trans_pp:beam/1. It makes no effort to preserve comments</div><div>(naturally, since it doesn't expect to find any), but handles specs and typed </div><div>records correctly.</div>
<div><br></div><div><a href="https://github.com/uwiger/parse_trans/blob/master/src/parse_trans_pp.erl#L71" target="_blank">https://github.com/uwiger/parse_trans/blob/master/src/parse_trans_pp.erl#L71</a></div><div><br></div>
<div>This module, BTW, is also made to be used as an escript, and I have the </div><div>following convenient alias:</div><div><br></div><div><div>alias pp='escript /Users/uwiger/git/parse_trans/ebin/parse_trans_pp.beam'</div>
</div><div><br></div><div>Not that the last point was particularly relevant to your particular problem. :)</div><div><br></div><div>BR,</div><div>Ulf W</div><br><div><div><div class="h5"><div>On 25 Sep 2012, at 06:00, Roberto Ostinelli wrote:</div>
<br></div></div><blockquote type="cite"><div><div class="h5"><div>I have this code:</div><div><br></div><div><font face="courier new, monospace">%%%%%%%%%%%%%%%%%%%%%%%%</font></div><div><div><font face="courier new, monospace">-module(mymodule).</font></div>
<div><font face="courier new, monospace">-export([hello/0, goodbye/0, greetings/1]).</font></div>
<div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">-spec hello() -> string().</font></div><div><font face="courier new, monospace">hello() -></font></div><div><font face="courier new, monospace"><span style="white-space:pre-wrap">  </span>greetings("hello").</font></div>

<div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">-spec goodbye() -> string().</font></div><div><font face="courier new, monospace">goodbye() -></font></div><div><font face="courier new, monospace"><span style="white-space:pre-wrap">      </span>greetings("goodbye").</font></div>

<div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">-spec greetings(Text::string()) -> string().</font></div><div><font face="courier new, monospace">greetings(Text) -></font></div>

<div><font face="courier new, monospace"><span style="white-space:pre-wrap">      </span>lists:flatten(io_lib:format("~s sublimerl", [Text])).</font></div><div><font face="courier new, monospace"><br>
</font></div><div><font face="courier new, monospace">-ifdef(TEST).</font></div><div><font face="courier new, monospace">-include_lib("eunit/include/eunit.hrl").</font></div><div><font face="courier new, monospace"><br>

</font></div><div><font face="courier new, monospace">simple_test() -></font></div><div><font face="courier new, monospace"><span style="white-space:pre-wrap">  </span>?assertEqual("hey sublimerl", greetings("hey")).</font></div>

<div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">greetings_test_() -></font></div><div><font face="courier new, monospace"><span style="white-space:pre-wrap">     </span>[?_assertEqual("hey sublimerl", greetings("hey"))].</font></div>

<div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">-endif.</font></div></div><div><font face="courier new, monospace">%%%%%%%%%%%%%%%%%%%%%%%%</font></div><div><br></div><div>

<br></div><div>when i convert it using this:</div><div><br></div><div><br></div><div><div><font face="courier new, monospace">%%%%%%%%%%%%%%%%%%%%%%%%</font></div></div><div><font face="courier new, monospace">Formatted = case epp_dodger:parse_file(FilePath) of</font></div>

<div><div><font face="courier new, monospace"><span style="white-space:pre-wrap">           </span>{ok, Forms} -></font></div><div><font face="courier new, monospace"><span style="white-space:pre-wrap">                       </span>case lists:keymember(error, 1, Forms) of</font></div>

<div><font face="courier new, monospace"><span style="white-space:pre-wrap">                              </span>false -></font></div><div><font face="courier new, monospace"><span style="white-space:pre-wrap">                                     </span>erl_prettypr:format(erl_recomment:recomment_forms(Forms, erl_comment_scan:file(FilePath)));</font></div>

<div><font face="courier new, monospace"><span style="white-space:pre-wrap">                              </span>true -></font></div><div><font face="courier new, monospace"><span style="white-space:pre-wrap">                                      </span>""</font></div>

<div><font face="courier new, monospace"><span style="white-space:pre-wrap">                      </span>end;</font></div><div><font face="courier new, monospace"><span style="white-space:pre-wrap">            </span>{error, _} -></font></div>
<div><font face="courier new, monospace"><span style="white-space:pre-wrap">                      </span>""</font></div><div><font face="courier new, monospace"><span style="white-space:pre-wrap">    </span>end</font></div>
</div><div><div><font face="courier new, monospace">%%%%%%%%%%%%%%%%%%%%%%%%</font></div></div><div><br></div><div><br></div><div>I get:</div><div><br></div><div><div><font face="courier new, monospace">%%%%%%%%%%%%%%%%%%%%%%%%</font></div>

</div><div><font face="courier new, monospace">-module(mymodule).</font></div><div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">-export([hello/0, goodbye/0, greetings/1]).</font></div>

<div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">-spec({{hello, 0},</font></div><div><font face="courier new, monospace">       [{type, 4, 'fun',</font></div><div>

<font face="courier new, monospace"><span style="white-space:pre-wrap"> </span> [{type, 4, product, []}, {type, 4, string, []}]}]}).</font></div><div><font face="courier new, monospace"><br></font></div>
<div><font face="courier new, monospace">hello() -> greetings("hello").</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">-spec({{goodbye, 0},</font></div>

<div><font face="courier new, monospace">       [{type, 8, 'fun',</font></div><div><font face="courier new, monospace"><span style="white-space:pre-wrap">      </span> [{type, 8, product, []}, {type, 8, string, []}]}]}).</font></div>

<div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">goodbye() -> greetings("goodbye").</font></div><div><font face="courier new, monospace"><br></font></div><div>

<font face="courier new, monospace">-spec({{greetings, 1},</font></div><div><font face="courier new, monospace">       [{type, 12, 'fun',</font></div><div><font face="courier new, monospace"><span style="white-space:pre-wrap">  </span> [{type, 12, product,</font></div>

<div><font face="courier new, monospace"><span style="white-space:pre-wrap">      </span>   [{ann_type, 12,</font></div><div><font face="courier new, monospace"><span style="white-space:pre-wrap">      </span>     [{var, 12, 'Text'}, {type, 12, string, []}]}]},</font></div>

<div><font face="courier new, monospace"><span style="white-space:pre-wrap">      </span>  {type, 12, string, []}]}]}).</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">greetings(Text) -></font></div>

<div><font face="courier new, monospace">    lists:flatten(io_lib:format("~s sublimerl", [Text])).</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">-ifdef(TEST).</font></div>

<div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">-include_lib("eunit/include/eunit.hrl").</font></div><div><font face="courier new, monospace"><br></font></div>
<div>
<font face="courier new, monospace">simple_test() -></font></div><div><font face="courier new, monospace">    ?assertEqual("hey sublimerl", (greetings("hey"))).</font></div><div><font face="courier new, monospace"><br>

</font></div><div><font face="courier new, monospace">greetings_test_() -></font></div><div><font face="courier new, monospace">    [?_assertEqual("hey sublimerl", (greetings("hey")))].</font></div>

<div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">-endif.</font></div></div><div><div><font face="courier new, monospace">%%%%%%%%%%%%%%%%%%%%%%%%</font></div></div><div><br>

</div><div><br></div><div>What happens to spec? What is the best way to use an erlang auto-formatter?</div><div><br></div><div>Any input welcome.</div><div><br></div><div>r.</div><div><br></div></div></div>
_______________________________________________<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/listinfo/erlang-questions</a><br>
</blockquote></div><br><div>
<div><div>Ulf Wiger, Co-founder & Developer Advocate, Feuerlabs Inc.</div><div><a href="http://feuerlabs.com" target="_blank">http://feuerlabs.com</a></div></div><div><br></div><br>
</div>
<br></div></blockquote></div><br></div>