Yep, that's why I dug up this thread.. but like I said, I'll let it simmer some more now :-)
On Tuesday, April 23, 2019 at 9:01:30 PM UTC+2, Steve Morin wrote: > > Arjan, > So sounds like we both ran in to the same issue of refactoring/code > manipulation with the problem of losing comments. > -Steve > > On Tue, Apr 23, 2019 at 11:48 AM Arjan Scherpenisse <[email protected] > <javascript:>> wrote: > >> Yes, sorry, a part of my talk at Elixirconf was about using the AST as >> the source for "intelligent" refactoring tools; renaming functions, >> inlining variables, extracting functions, etc. >> It should be online soon, I think, slides are here >> <https://docs.google.com/presentation/d/15_xKuL_H4Eu-EkGarxVixCk192858avE1ef1gmcVKoc/edit?usp=sharing> >> . >> >> Arjan >> >> On Tuesday, April 23, 2019 at 6:29:20 PM UTC+2, Steve Morin wrote: >>> >>> Arjan Scherpenisse >>> What is you're use-case? >>> >>> On Tue, Apr 23, 2019 at 4:20 AM Arjan Scherpenisse <[email protected]> >>> wrote: >>> >>>> I actually discussed a solution like this with José in Prague but this >>>> will also become complicated very quickly, especially as these primivite >>>> nodes can be nested (e.g. keyword lists and normal lists). Maintaining the >>>> correct position in the parent is also problematic when you want to do >>>> something with the child nodes, for instance if you write an AST transform >>>> to swap 2 parameters of a function call, the comments would not get >>>> swapped. >>>> >>>> For the short term I've put this subject to rest. My opinion is that >>>> for tooling that depends on code -> ast -> code transforms, we need more >>>> specialized tooling. For instance, we cannot assume that the input source >>>> code is already properly formatted; Ideally a source code modification >>>> tool >>>> should work with all kinds of source code, and a transformation should >>>> only >>>> affect the local scope, and not, for instance, reformat all of the output. >>>> I could even imagine it working with code that is not syntactically >>>> correct. That is a subject that the Elixir parser was just not meant to >>>> do, >>>> and trying to squeeze comments into the AST would not solve this. >>>> >>>> I have been looking at the Wrangler >>>> <https://github.com/RefactoringTools/Wrangler/> source code, which is >>>> a set of Erlang refactoring tools, but I have not come very far yet. It is >>>> an interesting source of information though. >>>> >>>> Arjan >>>> >>>> On Tuesday, April 23, 2019 at 12:18:07 PM UTC+2, [email protected] wrote: >>>>> >>>>> What about "hoisting" the comments into the metadata of the >>>>> surrounding block for the primitive AST nodes? >>>>> This means that we need to be able to specify *where* in a >>>>> `:__block__` a comment ought to occur, which shouldn't be a problem: The >>>>> only cases where this information will be out of date is when macro >>>>> rewriting alters the AST, which is a situation that would probably remove >>>>> the comments anyway. >>>>> (so e.g. a formatter would need to move comments with the code just as >>>>> is the case currently, but optimization tools would not care about >>>>> comments >>>>> anyway). >>>>> >>>>> This 'where' might take the format of a keyword-list, with >>>>> half-line-numbers as keys and strings (containing the actual comments) as >>>>> values. 'half-line-numbers ' go from 0 up to and including >>>>> `2*n_lines_in_block`. Even numbers are comments occuring before (e.g. on >>>>> the line above) `div(half-line-number, 2)`. Odd numbers are comments >>>>> occuring after (at the end of the same line as) `div(half-line-number/2)`. >>>>> >>>>> >>>>> So >>>>> >>>>> quote do >>>>> # one is the lonliest number >>>>> 1 >>>>> 2 # two is the smallest prime >>>>> 3 >>>>> # I am at the end >>>>> end >>>>> >>>>> >>>>> >>>>> would compile to >>>>> {:__block__, [comments: [0 => "one is the lonliest number", 3 => >>>>> "two is the smallest prime", 6 => "I am at the end"]], [1,2,3]} >>>>> >>>>> >>>>> ~Marten / Qqwy >>>>> >>>> -- >>>> You received this message because you are subscribed to the Google >>>> Groups "elixir-lang-core" group. >>>> To unsubscribe from this group and stop receiving emails from it, send >>>> an email to [email protected]. >>>> To view this discussion on the web visit >>>> https://groups.google.com/d/msgid/elixir-lang-core/df0438ce-45cb-4c90-b87c-c7a1ee9cc41b%40googlegroups.com >>>> >>>> <https://groups.google.com/d/msgid/elixir-lang-core/df0438ce-45cb-4c90-b87c-c7a1ee9cc41b%40googlegroups.com?utm_medium=email&utm_source=footer> >>>> . >>>> For more options, visit https://groups.google.com/d/optout. >>>> >>> >>> >>> -- >>> Steve Morin | Hacker, Entrepreneur, Startup Advisor >>> twitter.com/SteveMorin | stevemorin.com >>> *Live the dream start a startup. Make the world ... a better place.* >>> >> -- >> You received this message because you are subscribed to the Google Groups >> "elixir-lang-core" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected] <javascript:>. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/elixir-lang-core/6fa656e1-6eec-4ad9-be50-e0f503edf58a%40googlegroups.com >> >> <https://groups.google.com/d/msgid/elixir-lang-core/6fa656e1-6eec-4ad9-be50-e0f503edf58a%40googlegroups.com?utm_medium=email&utm_source=footer> >> . >> For more options, visit https://groups.google.com/d/optout. >> > > > -- > Steve Morin | Hacker, Entrepreneur, Startup Advisor > twitter.com/SteveMorin | stevemorin.com > *Live the dream start a startup. Make the world ... a better place.* > -- You received this message because you are subscribed to the Google Groups "elixir-lang-core" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/elixir-lang-core/9c413056-6dff-47bd-8cb9-ea9ded54aa8b%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.
