summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/Format/Format.cpp2
-rw-r--r--lib/Format/UnwrappedLineParser.cpp5
-rw-r--r--test/Index/comment-objc-decls.m2
-rw-r--r--unittests/Format/FormatTest.cpp8
4 files changed, 16 insertions, 1 deletions
diff --git a/lib/Format/Format.cpp b/lib/Format/Format.cpp
index e271ba2e13..beea48e9a3 100644
--- a/lib/Format/Format.cpp
+++ b/lib/Format/Format.cpp
@@ -273,6 +273,7 @@ private:
void addTokenToState(bool Newline, bool DryRun, IndentState &State) {
const AnnotatedToken &Current = *State.NextToken;
const AnnotatedToken &Previous = *State.NextToken->Parent;
+ assert(State.Indent.size());
unsigned ParenLevel = State.Indent.size() - 1;
if (Newline) {
@@ -357,6 +358,7 @@ private:
/// accordingly.
void moveStateToNextToken(IndentState &State) {
const AnnotatedToken &Current = *State.NextToken;
+ assert(State.Indent.size());
unsigned ParenLevel = State.Indent.size() - 1;
if (Current.is(tok::lessless) && State.FirstLessLess[ParenLevel] == 0)
diff --git a/lib/Format/UnwrappedLineParser.cpp b/lib/Format/UnwrappedLineParser.cpp
index c049ac607d..9b2a1e90e1 100644
--- a/lib/Format/UnwrappedLineParser.cpp
+++ b/lib/Format/UnwrappedLineParser.cpp
@@ -215,6 +215,11 @@ void UnwrappedLineParser::parseStructuralElement() {
return parseObjCProtocol();
case tok::objc_end:
return; // Handled by the caller.
+ case tok::objc_optional:
+ case tok::objc_required:
+ nextToken();
+ addUnwrappedLine();
+ return;
default:
break;
}
diff --git a/test/Index/comment-objc-decls.m b/test/Index/comment-objc-decls.m
index c61d99598d..0e3c072121 100644
--- a/test/Index/comment-objc-decls.m
+++ b/test/Index/comment-objc-decls.m
@@ -32,7 +32,7 @@
@end
// CHECK: <Declaration>@protocol MyProto\n@end</Declaration>
// CHECK: <Declaration>- (unsigned int)MethodMyProto:(id)anObject inRange:(unsigned int)range;</Declaration>
-// CHECK: <Declaration>@optional\n @property(readwrite, copy, atomic) id PropertyMyProto;</Declaration>
+// CHECK: <Declaration>@optional\n@property(readwrite, copy, atomic) id PropertyMyProto;</Declaration>
// CHECK: <Declaration>+ (id)ClassMethodMyProto;</Declaration>
/**
diff --git a/unittests/Format/FormatTest.cpp b/unittests/Format/FormatTest.cpp
index b536e012eb..9ed6b5f0f9 100644
--- a/unittests/Format/FormatTest.cpp
+++ b/unittests/Format/FormatTest.cpp
@@ -1340,6 +1340,14 @@ TEST_F(FormatTest, FormatObjCProtocol) {
"@end\n"
"@protocol Bar\n"
"@end");
+
+ verifyFormat("@protocol myProtocol\n"
+ "- (void)mandatoryWithInt:(int)i;\n"
+ "@optional\n"
+ "- (void)optional;\n"
+ "@required\n"
+ "- (void)required;\n"
+ "@end\n");
}
TEST_F(FormatTest, ObjCAt) {