MyDeveloperDay created this revision. MyDeveloperDay added reviewers: krasimir, mitchell-stellar. MyDeveloperDay added projects: clang, clang-format.
See https://bugs.llvm.org/show_bug.cgi?id=45626 void f() { (void)static_cast<::std::uint32_t>(1); (void)static_cast< ::std::uint32_t >(1); } Running clang-format -style="{SpacesInAngles: true}" bug.cpp produces void f() { (void)static_cast<::std::uint32_t >(1); (void)static_cast<::std::uint32_t >(1); } This revision fixes that behavior Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D79172 Files: clang/lib/Format/TokenAnnotator.cpp clang/unittests/Format/FormatTest.cpp Index: clang/unittests/Format/FormatTest.cpp =================================================================== --- clang/unittests/Format/FormatTest.cpp +++ clang/unittests/Format/FormatTest.cpp @@ -8483,6 +8483,7 @@ verifyFormat("vector<int> x {1, 2, 3, 4};", SpaceBeforeBrace); verifyFormat("f({}, {{}, {}}, MyMap[{k, v}]);", SpaceBeforeBrace); + FormatStyle SpaceBetweenBraces = getLLVMStyle(); SpaceBetweenBraces.SpacesInAngles = true; SpaceBetweenBraces.SpacesInParentheses = true; @@ -8512,6 +8513,20 @@ verifyFormat("vector< int > x{ };", SpaceBetweenBraces); } +TEST_F(FormatTest, FormatSpacesInAngles) { + FormatStyle SpaceInAngles = getLLVMStyle(); + SpaceInAngles.SpacesInAngles = true; + verifyFormat("vector< ::std::string > x1;", SpaceInAngles); + verifyFormat("Foo< int, Bar > x2;", SpaceInAngles); + verifyFormat("Foo< ::int, ::Bar > x3;", SpaceInAngles); + + SpaceInAngles.SpacesInAngles = false; + verifyFormat("vector<::std::string> x4;", SpaceInAngles); + verifyFormat("vector<int> x5;", SpaceInAngles); + verifyFormat("Foo<int, Bar> x6;", SpaceInAngles); + verifyFormat("Foo<::int, ::Bar> x7;", SpaceInAngles); +} + TEST_F(FormatTest, FormatsBracedListsInColumnLayout) { verifyFormat("vector<int> x = {1, 22, 333, 4444, 55555, 666666, 7777777,\n" " 1, 22, 333, 4444, 55555, 666666, 7777777,\n" Index: clang/lib/Format/TokenAnnotator.cpp =================================================================== --- clang/lib/Format/TokenAnnotator.cpp +++ clang/lib/Format/TokenAnnotator.cpp @@ -3270,12 +3270,13 @@ return Right.WhitespaceRange.getBegin() != Right.WhitespaceRange.getEnd(); if (Right.is(tok::coloncolon) && !Left.isOneOf(tok::l_brace, tok::comment, tok::l_paren)) + // Put a space between < and :: in vector< ::std::string > return (Left.is(TT_TemplateOpener) && - Style.Standard < FormatStyle::LS_Cpp11) || + (Style.Standard < FormatStyle::LS_Cpp11 || Style.SpacesInAngles)) || !(Left.isOneOf(tok::l_paren, tok::r_paren, tok::l_square, - tok::kw___super, TT_TemplateCloser, - TT_TemplateOpener)) || - (Left.is(tok ::l_paren) && Style.SpacesInParentheses); + tok::kw___super, TT_TemplateOpener, + TT_TemplateCloser)) || + (Left.is(tok::l_paren) && Style.SpacesInParentheses); if ((Left.is(TT_TemplateOpener)) != (Right.is(TT_TemplateCloser))) return Style.SpacesInAngles; // Space before TT_StructuredBindingLSquare.
Index: clang/unittests/Format/FormatTest.cpp =================================================================== --- clang/unittests/Format/FormatTest.cpp +++ clang/unittests/Format/FormatTest.cpp @@ -8483,6 +8483,7 @@ verifyFormat("vector<int> x {1, 2, 3, 4};", SpaceBeforeBrace); verifyFormat("f({}, {{}, {}}, MyMap[{k, v}]);", SpaceBeforeBrace); + FormatStyle SpaceBetweenBraces = getLLVMStyle(); SpaceBetweenBraces.SpacesInAngles = true; SpaceBetweenBraces.SpacesInParentheses = true; @@ -8512,6 +8513,20 @@ verifyFormat("vector< int > x{ };", SpaceBetweenBraces); } +TEST_F(FormatTest, FormatSpacesInAngles) { + FormatStyle SpaceInAngles = getLLVMStyle(); + SpaceInAngles.SpacesInAngles = true; + verifyFormat("vector< ::std::string > x1;", SpaceInAngles); + verifyFormat("Foo< int, Bar > x2;", SpaceInAngles); + verifyFormat("Foo< ::int, ::Bar > x3;", SpaceInAngles); + + SpaceInAngles.SpacesInAngles = false; + verifyFormat("vector<::std::string> x4;", SpaceInAngles); + verifyFormat("vector<int> x5;", SpaceInAngles); + verifyFormat("Foo<int, Bar> x6;", SpaceInAngles); + verifyFormat("Foo<::int, ::Bar> x7;", SpaceInAngles); +} + TEST_F(FormatTest, FormatsBracedListsInColumnLayout) { verifyFormat("vector<int> x = {1, 22, 333, 4444, 55555, 666666, 7777777,\n" " 1, 22, 333, 4444, 55555, 666666, 7777777,\n" Index: clang/lib/Format/TokenAnnotator.cpp =================================================================== --- clang/lib/Format/TokenAnnotator.cpp +++ clang/lib/Format/TokenAnnotator.cpp @@ -3270,12 +3270,13 @@ return Right.WhitespaceRange.getBegin() != Right.WhitespaceRange.getEnd(); if (Right.is(tok::coloncolon) && !Left.isOneOf(tok::l_brace, tok::comment, tok::l_paren)) + // Put a space between < and :: in vector< ::std::string > return (Left.is(TT_TemplateOpener) && - Style.Standard < FormatStyle::LS_Cpp11) || + (Style.Standard < FormatStyle::LS_Cpp11 || Style.SpacesInAngles)) || !(Left.isOneOf(tok::l_paren, tok::r_paren, tok::l_square, - tok::kw___super, TT_TemplateCloser, - TT_TemplateOpener)) || - (Left.is(tok ::l_paren) && Style.SpacesInParentheses); + tok::kw___super, TT_TemplateOpener, + TT_TemplateCloser)) || + (Left.is(tok::l_paren) && Style.SpacesInParentheses); if ((Left.is(TT_TemplateOpener)) != (Right.is(TT_TemplateCloser))) return Style.SpacesInAngles; // Space before TT_StructuredBindingLSquare.
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits