diff options
-rw-r--r-- | lib/Format/UnwrappedLineParser.cpp | 29 | ||||
-rw-r--r-- | lib/Format/UnwrappedLineParser.h | 1 | ||||
-rw-r--r-- | test/Index/comment-cplus-decls.cpp | 2 | ||||
-rw-r--r-- | test/Index/comment-to-html-xml-conversion.cpp | 2 | ||||
-rw-r--r-- | unittests/Format/FormatTest.cpp | 21 |
5 files changed, 42 insertions, 13 deletions
diff --git a/lib/Format/UnwrappedLineParser.cpp b/lib/Format/UnwrappedLineParser.cpp index 00ca3a5334..d7220259b7 100644 --- a/lib/Format/UnwrappedLineParser.cpp +++ b/lib/Format/UnwrappedLineParser.cpp @@ -129,13 +129,10 @@ bool UnwrappedLineParser::parseBlock(unsigned AddLevels) { parseLevel(/*HasOpeningBrace=*/true); Line.Level -= AddLevels; - // FIXME: Add error handling. if (!FormatTok.Tok.is(tok::r_brace)) return true; - nextToken(); - if (FormatTok.Tok.is(tok::semi)) - nextToken(); + nextToken(); // Munch the closing brace. return false; } @@ -246,6 +243,10 @@ void UnwrappedLineParser::parseStructuralElement() { case tok::kw_enum: parseEnum(); return; + case tok::kw_struct: // fallthrough + case tok::kw_class: + parseStructOrClass(); + return; case tok::semi: nextToken(); addUnwrappedLine(); @@ -459,6 +460,26 @@ void UnwrappedLineParser::parseEnum() { } while (!eof()); } +void UnwrappedLineParser::parseStructOrClass() { + nextToken(); + do { + switch (FormatTok.Tok.getKind()) { + case tok::l_brace: + // FIXME: Think about how to resolve the error handling here. + parseBlock(); + parseStructuralElement(); + return; + case tok::semi: + nextToken(); + addUnwrappedLine(); + return; + default: + nextToken(); + break; + } + } while (!eof()); +} + void UnwrappedLineParser::addUnwrappedLine() { // Consume trailing comments. while (!eof() && FormatTok.NewlinesBefore == 0 && diff --git a/lib/Format/UnwrappedLineParser.h b/lib/Format/UnwrappedLineParser.h index 27c1102055..a9f0475e32 100644 --- a/lib/Format/UnwrappedLineParser.h +++ b/lib/Format/UnwrappedLineParser.h @@ -128,6 +128,7 @@ private: void parseNamespace(); void parseAccessSpecifier(); void parseEnum(); + void parseStructOrClass(); void addUnwrappedLine(); bool eof() const; void nextToken(); diff --git a/test/Index/comment-cplus-decls.cpp b/test/Index/comment-cplus-decls.cpp index 29af712e1c..ed851d84fc 100644 --- a/test/Index/comment-cplus-decls.cpp +++ b/test/Index/comment-cplus-decls.cpp @@ -162,7 +162,7 @@ private: */ template <class T> friend class valarray; }; -// CHECK: <Declaration>template <class T = unsigned int> class valarray {\n}\ntemplate <class T> class valarray</Declaration> +// CHECK: <Declaration>template <class T = unsigned int> class valarray {\n} template <class T> class valarray</Declaration> // CHECK: <Declaration>friend template <class T> class valarray</Declaration> class gslice diff --git a/test/Index/comment-to-html-xml-conversion.cpp b/test/Index/comment-to-html-xml-conversion.cpp index 1ab49d6fc0..139120ec05 100644 --- a/test/Index/comment-to-html-xml-conversion.cpp +++ b/test/Index/comment-to-html-xml-conversion.cpp @@ -670,7 +670,7 @@ void comment_to_xml_conversion_10(int aaa, int bbb); template<typename T, typename U> class comment_to_xml_conversion_11 { }; -// CHECK: comment-to-html-xml-conversion.cpp:[[@LINE-2]]:7: ClassTemplate=comment_to_xml_conversion_11:{{.*}} FullCommentAsXML=[<Class templateKind="template" file="{{[^"]+}}comment-to-html-xml-conversion.cpp" line="[[@LINE-2]]" column="7"><Name>comment_to_xml_conversion_11</Name><USR>c:@CT>2#T#T@comment_to_xml_conversion_11</USR><Declaration>template <typename T = int, typename U = int>\nclass comment_to_xml_conversion_11 {\n}\ntemplate <typename T, typename U> class comment_to_xml_conversion_11 {\n}</Declaration><Abstract><Para> Aaa.</Para></Abstract></Class>] +// CHECK: comment-to-html-xml-conversion.cpp:[[@LINE-2]]:7: ClassTemplate=comment_to_xml_conversion_11:{{.*}} FullCommentAsXML=[<Class templateKind="template" file="{{[^"]+}}comment-to-html-xml-conversion.cpp" line="[[@LINE-2]]" column="7"><Name>comment_to_xml_conversion_11</Name><USR>c:@CT>2#T#T@comment_to_xml_conversion_11</USR><Declaration>template <typename T = int, typename U = int>\nclass comment_to_xml_conversion_11 {\n} template <typename T, typename U> class comment_to_xml_conversion_11 {\n}</Declaration><Abstract><Para> Aaa.</Para></Abstract></Class>] /// Aaa. template<typename T> diff --git a/unittests/Format/FormatTest.cpp b/unittests/Format/FormatTest.cpp index d4490dddfc..2ba4765cc7 100644 --- a/unittests/Format/FormatTest.cpp +++ b/unittests/Format/FormatTest.cpp @@ -332,6 +332,13 @@ TEST_F(FormatTest, FormatsDerivedClass) { "};"); } +TEST_F(FormatTest, FormatsVariableDeclarationsAfterStructOrClass) { + verifyFormat("class A {\n" + "} a, b;"); + verifyFormat("struct A {\n" + "} a, b;"); +} + TEST_F(FormatTest, FormatsEnum) { verifyFormat("enum {\n" " Zero,\n" @@ -624,7 +631,7 @@ TEST_F(FormatTest, BreaksAsHighAsPossible) { TEST_F(FormatTest, BreaksDesireably) { verifyFormat("if (aaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaa) ||\n" " aaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaa) ||\n" - " aaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaa)) {\n};"); + " aaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaa)) {\n}"); verifyFormat( "aaaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,\n" @@ -974,14 +981,14 @@ TEST_F(FormatTest, IncorrectAccessSpecifier) { "int qwerty;"); verifyFormat("public\n" "B {\n" - "};"); + "}"); verifyFormat("public\n" "{\n" - "};"); + "}"); verifyFormat("public\n" "B {\n" " int x;\n" - "};"); + "}"); } TEST_F(FormatTest, IncorrectCodeUnbalancedBraces) { @@ -990,16 +997,16 @@ TEST_F(FormatTest, IncorrectCodeUnbalancedBraces) { TEST_F(FormatTest, IncorrectCodeDoNoWhile) { verifyFormat("do {\n" - "};"); + "}"); verifyFormat("do {\n" - "};\n" + "}\n" "f();"); verifyFormat("do {\n" "}\n" "wheeee(fun);"); verifyFormat("do {\n" " f();\n" - "};"); + "}"); } TEST_F(FormatTest, DoesNotTouchUnwrappedLinesWithErrors) { |