[lldb-dev] LLDB Evolution

Zachary Turner via lldb-dev lldb-dev at lists.llvm.org
Tue Aug 9 15:01:46 PDT 2016


Standardizing include order would really help.  LLVM's style is documented
here <http://llvm.org/docs/CodingStandards.html#include-style>, but to
quote it:


   1. Main Module Header
   2. Local/Private Headers
   3. llvm/...
   4. System #includes

So perhaps it would be reasonable for us to standardize on something like
this:


   1. Main Module Header
   2. Local/Private Headers
   3. lldb/...
   4. llvm/...
   5. System #includes

Putting LLDB headers before LLVM headers is a nice way to enforce "include
what you use".  Otherwise you might have something like this:

// lldb.cpp
#include "llvm/LLVM1.h"
#include "lldb/lldb2.h

// lldb2.h
llvm::MyType foo();

And this will work, even though lldb2.h needs to have #include
"llvm/LLVM1.h"

So the above ordering fixes that.  clang-format won't solve this for us
automatically, but it would be nice to at least move towards it.

On Tue, Aug 9, 2016 at 2:49 PM Kate Stone <k8stone at apple.com> wrote:

> Great catch!  If refactoring along those lines doesn’t clean up 100% of
> the cases then it’s worth explicitly breaking up groups of #include
> directives with comments.  clang-format won’t reorder any non-contiguous
> groups and it’s a great way to explicitly call out dependencies.
>
> Ideally we should be focused on committing changes along these lines so
> that there’s *no* post-format tweaking required to build cleanly again.
>
> Kate Stone k8stone at apple.com
>  Xcode Low Level Tools
>
> On Aug 9, 2016, at 1:03 PM, Zachary Turner <zturner at google.com> wrote:
>
> I ran clang-format and tried to build and got a bunch of compiler errors.
> Most of them are order of include errors.  I fixed everything in the
> attached patch.  I doubt this will apply cleanly for anyone unless you are
> at the exact same revision as me, but at least you can look at it and get
> an idea of what had to change.
>
> The #include win32.h thing is really annoying and hard for people to
> remember the right incantation.  I'm going to make a file called
> Host/PosixApi.h which you can just include, no matter what platform you're
> on, and everything will just work.  That should clean up a lot of this
> nonsense.
>
> On Tue, Aug 9, 2016 at 11:10 AM Zachary Turner <zturner at google.com> wrote:
>
>> Another thing worth thinking about for the long term is library layering
>> and breaking the massive dependency cycle in LLDB.  Every library currently
>> depends on every other library.  This isn't good for build times, code
>> size, or reusability (especially where size matters like in lldb-server).
>> I think the massive Python dependency was removed after my work earlier
>> this year.  But I'm not sure what the status of that is now, and there's
>> still the rest of LLDB.
>>
>> In the future it would be nice to have a modules build of LLDB.  And
>> sure, we could just have liblldb be one giant module, but that seems to
>> kind of defeat the purpose of modules in the first place.
>>
>> For unit tests in particular, it's nice to be able to link in just the
>> set of things you need, and that's difficult / impossible right now.
>>
>> On Tue, Aug 9, 2016 at 10:00 AM Zachary Turner <zturner at google.com>
>> wrote:
>>
>>> On Mon, Aug 8, 2016 at 2:40 PM Kate Stone via lldb-dev <
>>> lldb-dev at lists.llvm.org> wrote:
>>>
>>>>
>>>> *Near-Term Goal: Standardizing on LLVM-style clang-format Rules*
>>>>
>>>> We’ve heard from several in the community that would prefer to have a
>>>> single code formatting style to further unify the two code bases.  Using
>>>> clang-format with the default LLVM conventions would simplify code
>>>> migration, editor configuration, and coding habits for developers who work
>>>> in multiple LLVM projects.  There are non-trivial implications to
>>>> reformatting a code base with this much history.  It can obfuscate history
>>>> and impact downstream projects by complicating merges.  Ideally, it should
>>>> be done once with as much advance notice as is practical.  Here’s the
>>>> timeline we’re proposing:
>>>>
>>>> *Today* - mechanical reformatting proposed, comment period begins
>>>>
>>>> To get a preview of what straightforward reformatting of the code looks
>>>> like, just follow these steps to get a clean copy of the repository and
>>>> reformat it:
>>>>
>>>>
>>>>    1. Check out a clean copy of the existing repository
>>>>    2. Edit .clang-format in the root of the tree, remove all but the
>>>>    line “BasedOnStyle: LLVM”
>>>>    3. Change your current working directory to the root of the tree to
>>>>    reformat
>>>>    4. Double-check to make sure you did step 3 ;-)
>>>>    5. Run the following shell command: "find . -name "*.[c,cpp,h]
>>>>    -exec clang-format -i {} +"
>>>>
>>>>
>>>> *Aug 20th* - comment period closes, final schedule proposed
>>>> *TBD (early September?)* - patches land in svn
>>>>
>>>> The purpose of the comment period is to review the straightforward
>>>> diffs to identify areas where comment pragmas should be used to avoid
>>>> undesirable formatting (tables laid out in code are a classic example.)
>>>>  It’s also a time when feedback on the final timetable can be discussed,
>>>> and any unforeseen implications can be discovered.  We understand that LLDB
>>>> tends toward relatively long names that may not always work well with the
>>>> LLVM convention of wrapping at 80 columns.  Worst case scenarios will be
>>>> evaluated to determine the desired course of action.
>>>>
>>>
>>> One thing we will need to take a look at is functions which have a very
>>> deep indentation level. They have the potential to be made really ugly
>>> by clang-format.  The default indentation will be reduced from 4 to 2, so
>>> that will help, but I recall we had some lines that began very far to the
>>> right.
>>>
>>> Here's a little bash command shows all lines with >= 50 leading spaces,
>>> sorted in descending order by number of leading spaces.
>>>
>>> grep -n '^ \+' . -r -o | awk '{t=length($0);sub("
>>> *$","");printf("%s%d\n", $0, t-length($0));}' |  sort -t: -n -k 3 -r | awk
>>> 'BEGIN { FS = ":" } ; { if ($3 >= 50) print $0 }'
>>>
>>> It's less useful than I was hoping because most of the lines are noise
>>> (line breaking in a function parameter list).
>>>
>>> If there were a way to detect indentation level that would be better.
>>> Mostly just to identify places that we should manually inspect after
>>> running clang-format.
>>>
>> <reformat.patch>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/lldb-dev/attachments/20160809/f84503d9/attachment.html>


More information about the lldb-dev mailing list