Hi Barry,

>       Can it handle code with all the CPP crap we have (how does the CPP 
> stuff fit in the AST)? Can you make a make clangify rule in the makefile 
> similar to make uncrustify so we can verify how fantastic it is?

I spend quite some time in verifying that the CPP is handled within 
LibTooling. I'm still not 100% sure, but I found strong indications that 
it can deal with it - maybe even properly.

>       In my reading a few months ago the LLVM/clang pretty printers sucked 
> and there was no serious effort to make them better. (I could have 
> misunderstood).

The problem seems to be the output writers rather than the internal 
representation. The current Formatter is basically nothing but a 
quick-and-dirty iterator over the internal representations. Even the 
option-structs are currently simply hard-coded for GoogleStyle(), etc. 
rather than accessible from outside.


>       If the clang AST to source code pretty printer doesn't produce code 
> that we can easily edit and manipulate then it isn't any good to us. It has 
> to generate code pretty dang close to the code we have currently used to.

It has to produce exactly the code style we agree on ;-)
Why? Because we can access the internal representation. If we can't 
achieve a full match, the description is incomplete.

Best regards,
Karli


>
> On Jan 21, 2013, at 10:10 PM, Karl Rupp <rupp at mcs.anl.gov> wrote:
>
>> Hi guys,
>>
>>>>>> Yes, though
>>>>>>
>>>>>> if (y < 12) {
>>>>>>    ierr = Something();CHKERRQ(ierr);
>>>>>> }
>>>>>>
>>>>>> takes three times as many lines. I don't care much either way, but it's
>>>>>> nice to not waste vertical space.
>>>>>
>>>>> I agree here.
>>>>
>>>> I've prefered the 1 liners as well.
>>>
>>> So, am I the only one that like the uniformity of the three-liner?
>>
>> I think I'm currently on the best way towards a rabbit hole, with uncrustify 
>> lacking the full understanding of the code an thus bound to failure. Rather 
>> than tuning regular expressions and the like, I'll spend some time on 
>> investigate further what Clang can do for us.
>>
>> First and foremost, it gives us access to the abstract syntax tree (AST), 
>> see e.g.
>>   http://clang.llvm.org/docs/IntroductionToTheClangAST.html
>> and already contains a formatter for Chromium-Style, Google-Style, 
>> LLVM-Style. The formatter for multiple Languages is currently less than 2000 
>> lines of code and eventually far more powerful than what we need.
>>
>> Via the C-interface LibClang
>> http://clang.llvm.org/doxygen/group__CINDEX.html
>> or LibTooling
>> http://clang.llvm.org/docs/LibTooling.html
>> it's much more natural to generate *the* PETSc-representation of code 
>> irrespective of the input, and from the same AST generate e.g. the 
>> Knepley-representation of code. At the same time, Clang remains an optional 
>> dependency: One can work directly with the PETSc-representation without 
>> Clang installed.
>>
>> Also, I found that they (Clang) are indeed aiming at a full code 
>> documentation generator:
>>   http://clang.llvm.org/OpenProjects.html
>> There is already a lot of parsing of Doxygen-style comments done in Clang 
>> and accessible via the AST, so it's mostly missing output generators only. 
>> It will take more time to reach maturity, though. It may, however, be just 
>> what it needs to replace sowing in terms of Fortran stubs generation and 
>> user manual generation.
>>
>> Best regards,
>> Karli
>>
>>
>>
>

Reply via email to