diff options
author | Ben Hamilton <benhamilton@google.com> | 2018-04-12 15:11:51 +0000 |
---|---|---|
committer | Ben Hamilton <benhamilton@google.com> | 2018-04-12 15:11:51 +0000 |
commit | df72e9851a33d137de1d323c06feea3faf16deb3 (patch) | |
tree | 5ae5ec991f6b90c9f2765cd820c3fdfc9f0c428e | |
parent | 416348ef8323ceebfae40886ec355fb55f381e2c (diff) | |
download | bcm5719-llvm-df72e9851a33d137de1d323c06feea3faf16deb3.tar.gz bcm5719-llvm-df72e9851a33d137de1d323c06feea3faf16deb3.zip |
[clang-format] Don't insert space between ObjC class and lightweight generic
Summary:
In D45185, I added clang-format parser support for Objective-C
generics. However, I didn't touch the whitespace logic, so they
got the same space logic as Objective-C protocol lists.
In every example in the Apple SDK and in the documentation,
there is no space between the class name and the opening `<`
for the lightweight generic specification, so this diff
removes the space and updates the tests.
Test Plan: Tests updated. Ran tests with:
% make -j16 FormatTests && ./tools/clang/unittests/Format/FormatTests
Reviewers: djasper, jolesiak
Reviewed By: djasper
Subscribers: klimek, cfe-commits
Differential Revision: https://reviews.llvm.org/D45498
llvm-svn: 329917
-rw-r--r-- | clang/lib/Format/TokenAnnotator.cpp | 9 | ||||
-rw-r--r-- | clang/unittests/Format/FormatTestObjC.cpp | 4 |
2 files changed, 8 insertions, 5 deletions
diff --git a/clang/lib/Format/TokenAnnotator.cpp b/clang/lib/Format/TokenAnnotator.cpp index 60ebe56d072..60244924079 100644 --- a/clang/lib/Format/TokenAnnotator.cpp +++ b/clang/lib/Format/TokenAnnotator.cpp @@ -2349,9 +2349,12 @@ bool TokenAnnotator::spaceRequiredBetween(const AnnotatedLine &Line, : Style.SpacesInParentheses; if (Right.isOneOf(tok::semi, tok::comma)) return false; - if (Right.is(tok::less) && Line.Type == LT_ObjCDecl && - Style.ObjCSpaceBeforeProtocolList) - return true; + if (Right.is(tok::less) && Line.Type == LT_ObjCDecl) { + bool IsLightweightGeneric = + Right.MatchingParen && Right.MatchingParen->Next && + Right.MatchingParen->Next->is(tok::colon); + return !IsLightweightGeneric && Style.ObjCSpaceBeforeProtocolList; + } if (Right.is(tok::less) && Left.is(tok::kw_template)) return Style.SpaceAfterTemplateKeyword; if (Left.isOneOf(tok::exclaim, tok::tilde)) diff --git a/clang/unittests/Format/FormatTestObjC.cpp b/clang/unittests/Format/FormatTestObjC.cpp index ded4607334e..9c8f252143f 100644 --- a/clang/unittests/Format/FormatTestObjC.cpp +++ b/clang/unittests/Format/FormatTestObjC.cpp @@ -299,13 +299,13 @@ TEST_F(FormatTestObjC, FormatObjCInterface) { "+ (id)init;\n" "@end"); - verifyFormat("@interface Foo <Baz : Blech> : Bar <Baz, Quux> {\n" + verifyFormat("@interface Foo<Baz : Blech> : Bar <Baz, Quux> {\n" " int _i;\n" "}\n" "+ (id)init;\n" "@end"); - verifyFormat("@interface Foo <Bar : Baz <Blech>> : Xyzzy <Corge> {\n" + verifyFormat("@interface Foo<Bar : Baz <Blech>> : Xyzzy <Corge> {\n" " int _i;\n" "}\n" "+ (id)init;\n" |