On Mon, Jan 14, 2013 at 9:33 AM, Jordan Rose <[email protected]> wrote: > The ultimate goal in Apple-style is to switch to one selector piece per line, > aligned by colons, when a message expr needs to be broken up. (I will say > this wasn't even usually my personal style before joining Apple, but it is > what our docs usually do and what Xcode currently does when autoindenting > code.)
This is the ultimate goal for google style too. It's tracked in PR14939. > > Still, nice improvement! > > Jordan > > > On Jan 12, 2013, at 14:48 , Nico Weber <[email protected]> wrote: > >> Author: nico >> Date: Sat Jan 12 16:48:47 2013 >> New Revision: 172333 >> >> URL: http://llvm.org/viewvc/llvm-project?rev=172333&view=rev >> Log: >> Formatter: Prefer breaking before ObjC selector names over breaking at their >> ':' >> >> Before: >> if ((self = [super initWithContentRect:contentRect styleMask: >> styleMask backing:NSBackingStoreBuffered defer:YES])) { >> >> Now: >> if ((self = [super initWithContentRect:contentRect styleMask:styleMask >> backing:NSBackingStoreBuffered defer:YES])) { >> >> >> >> Modified: >> cfe/trunk/lib/Format/Format.cpp >> cfe/trunk/unittests/Format/FormatTest.cpp >> >> Modified: cfe/trunk/lib/Format/Format.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/Format.cpp?rev=172333&r1=172332&r2=172333&view=diff >> ============================================================================== >> --- cfe/trunk/lib/Format/Format.cpp (original) >> +++ cfe/trunk/lib/Format/Format.cpp Sat Jan 12 16:48:47 2013 >> @@ -170,7 +170,7 @@ >> >> /// \brief Checks whether the (remaining) \c UnwrappedLine starting with >> /// \p RootToken fits into \p Limit columns. >> -bool fitsIntoLimit(const AnnotatedToken &RootToken, unsigned Limit) { >> +static bool fitsIntoLimit(const AnnotatedToken &RootToken, unsigned Limit) { >> unsigned Columns = RootToken.FormatTok.TokenLength; >> bool FitsOnALine = true; >> const AnnotatedToken *Tok = &RootToken; >> @@ -188,6 +188,15 @@ >> return FitsOnALine; >> } >> >> +/// \brief Returns if a token is an Objective-C selector name. >> +/// >> +/// For example, "bar" is a selector name in [foo bar:(4 + 5)] >> +static bool isObjCSelectorName(const AnnotatedToken &Tok) { >> + return Tok.is(tok::identifier) && !Tok.Children.empty() && >> + Tok.Children[0].is(tok::colon) && >> + Tok.Children[0].Type == TT_ObjCMethodExpr; >> +} >> + >> class UnwrappedLineFormatter { >> public: >> UnwrappedLineFormatter(const FormatStyle &Style, SourceManager &SourceMgr, >> @@ -479,6 +488,14 @@ >> if (Left.is(tok::semi) || Left.is(tok::comma) || >> Left.ClosesTemplateDeclaration) >> return 0; >> + >> + // In Objective-C method expressions, prefer breaking before "param:" >> over >> + // breaking after it. >> + if (isObjCSelectorName(Right)) >> + return 0; >> + if (Right.is(tok::colon) && Right.Type == TT_ObjCMethodExpr) >> + return 20; >> + >> if (Left.is(tok::l_paren)) >> return 20; >> >> @@ -1188,6 +1205,8 @@ >> return false; >> if (Left.is(tok::colon) && Left.Type == TT_ObjCMethodExpr) >> return true; >> + if (isObjCSelectorName(Right)) >> + return true; >> if (Left.ClosesTemplateDeclaration) >> return true; >> if (Left.Type == TT_PointerOrReference || Left.Type == TT_TemplateCloser >> || >> >> Modified: cfe/trunk/unittests/Format/FormatTest.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Format/FormatTest.cpp?rev=172333&r1=172332&r2=172333&view=diff >> ============================================================================== >> --- cfe/trunk/unittests/Format/FormatTest.cpp (original) >> +++ cfe/trunk/unittests/Format/FormatTest.cpp Sat Jan 12 16:48:47 2013 >> @@ -1537,12 +1537,18 @@ >> verifyFormat("throw [self errorFor:a];"); >> verifyFormat("@throw [self errorFor:a];"); >> >> - // The formatting of this isn't ideal yet. It tests that the formatter >> doesn't >> - // break after "backing" but before ":", which would be at 80 columns. >> + // This tests that the formatter doesn't break after "backing" but before >> ":", >> + // which would be at 80 columns. >> verifyFormat( >> "void f() {\n" >> - " if ((self = [super initWithContentRect:contentRect styleMask:\n" >> - " styleMask backing:NSBackingStoreBuffered >> defer:YES]))"); >> + " if ((self = [super initWithContentRect:contentRect >> styleMask:styleMask\n" >> + " backing:NSBackingStoreBuffered defer:YES]))"); >> + >> + verifyFormat("[foo setasdfasdffffffffffffadfasdfasdf:\n" >> + " [bar dowith:asdfdsfasdfasdfasfasfasfsafasdfsfad]];"); >> + >> + verifyFormat("[foo checkThatBreakingAfterColonWorksOk:\n" >> + " [bar >> ifItDoes:reduceOverallLineLengthLikeInThisCase]];"); >> >> } >> >> @@ -1582,6 +1588,7 @@ >> verifyFormat("@'c'"); >> verifyFormat("@true"); >> verifyFormat("NSNumber *smallestInt = @(-INT_MAX - 1);"); >> + // FIXME: Array and dictionary literals need more work. >> verifyFormat("@["); >> verifyFormat("@{"); >> >> >> >> _______________________________________________ >> cfe-commits mailing list >> [email protected] >> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits > > _______________________________________________ > cfe-commits mailing list > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
