djasper accepted this revision.
djasper added a comment.
This revision is now accepted and ready to land.

Looks good. Thank you!



================
Comment at: lib/Format/ContinuationIndenter.cpp:196
+           FormatStyle::BCIS_AfterColonAndComma) &&
+      (State.Column + State.Line->Last->TotalLength - Previous.TotalLength >
+           getColumnLimit(State) ||
----------------
Typz wrote:
> djasper wrote:
> > Typz wrote:
> > > djasper wrote:
> > > > Typz wrote:
> > > > > Typz wrote:
> > > > > > djasper wrote:
> > > > > > > Why can you drop the "+2" here?
> > > > > > > 
> > > > > > > Also, I'd like to structure this so we have to duplicate less of 
> > > > > > > the logic. But I am not really sure it's possible.
> > > > > > the +2 here was needed to keep identifiers aligned when breaking 
> > > > > > after colon but before the command (e.g. the 4th combination, not 
> > > > > > defined anymore):
> > > > > > 
> > > > > >   Foo() :
> > > > > >       field(1)
> > > > > >     , field(2)
> > > > > I can avoid some duplication like this,m but i am not convinced it 
> > > > > helps :
> > > > > 
> > > > >   const FormatToken &ColonToken =
> > > > >       Style.BreakConstructorInitializers != 
> > > > > FormatStyle::BCIS_AfterColon
> > > > >                                             ? Current : Previous;
> > > > >   if (ColonToken.is(TT_CtorInitializerColon) &&
> > > > >       (State.Column + State.Line->Last->TotalLength - 
> > > > > ColonToken.TotalLength +
> > > > >                (Style.BreakConstructorInitializers !=
> > > > >                     FormatStyle::BCIS_AfterColon ? 2 : 0) >
> > > > >            getColumnLimit(State) ||
> > > > >        State.Stack.back().BreakBeforeParameter) &&
> > > > >       (Style.AllowShortFunctionsOnASingleLine != FormatStyle::SFS_All 
> > > > > ||
> > > > >        Style.BreakConstructorInitializers != 
> > > > > FormatStyle::BCIS_BeforeColon ||
> > > > >        Style.ColumnLimit != 0))
> > > > >     return true;
> > > > > 
> > > > > what do you think?
> > > > The +2 here has nothing todo with how the things are aligned. This is 
> > > > about whether the entire constructor with initializer fits on one line. 
> > > > Can you try out (or even add tests) for cases where the entire 
> > > > constructor is 80 and 81 columns long?
> > > > 
> > > > I think I like the condensed version a bit better, but yeah, it's not 
> > > > beautiful either ;).
> > > My mistake, I read to quickly and talked about another +2 I removed from 
> > > an earlier patch.
> > > 
> > > As far as I understand it, this +2 accounts for the the "upcoming" space 
> > > and colon, when checking if breaking _before_ the colon (e.g. before it 
> > > was added to the line).
> > > 
> > > Since this case is trying to break _after_ the colon, the space and colon 
> > > have already been added to line (i.e. removed the column limit).
> > > 
> > > The tests are already included (and I have just double-checked: 
> > > `Constructor() : Initializer(FitsOnTheLine) {}` is indeed 45 characters) :
> > > 
> > >   verifyFormat("Constructor() : Initializer(FitsOnTheLine) {}",
> > >                getStyleWithColumns(Style, 45));
> > >   verifyFormat("Constructor() :\n"
> > >                "    Initializer(FitsOnTheLine) {}",
> > >                getStyleWithColumns(Style, 44));
> > >   verifyFormat("Constructor() :\n"
> > >                "    Initializer(FitsOnTheLine) {}",
> > >                getStyleWithColumns(Style, 43));
> > Ah, right. So as we are on the next token, State.Column will already 
> > include the +2. However, I think we should change that and make this always:
> > 
> >   State.Column + State.Line->Last->TotalLength - Previous.TotalLength > 
> > getColumnLimit(State)
> > 
> > I think this should automatically add the "+2" or actually +1 should we go 
> > forward with your patch to not have a space before the colon at some point.
> Seems to work indeed, looking much better!
> I had some trouble deciphering this when making my initial patch, and did not 
> take the chance/risk to try to improve the 'regular' case.
Yeah, not surprising. This code isn't exactly nice or easy to understand or 
well-commented :-(. Sorry about that.


https://reviews.llvm.org/D32479



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to