[PATCH] D79172: [clang-format] [PR45626] SpacesInAngles does not insert or preserve leading space before :: operator
MyDeveloperDay via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Apr 30 06:46:46 PDT 2020
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.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D79172.261210.patch
Type: text/x-patch
Size: 2607 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20200430/defeb5d2/attachment.bin>
More information about the cfe-commits
mailing list