[PATCH] D36019: [clang-format] Fix bug with ENAS_DontAlign and empty lines
Jacob Bandes-Storch via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Sun Jul 30 23:21:07 PDT 2017
jtbandes updated this revision to Diff 108860.
jtbandes added a comment.
Okay, I think this approach is better:
- Rename the version of `appendNewlineText` used for escaped newlines to `appendEscapedNewlineText` to reduce confusability.
- If `ENAS_DontAlign`, skip all of the offset calculation logic. Just append space-backslash-newline.
- Restore the offset calculation to use `EscapedNewlineColumn - 1`, which it was before https://reviews.llvm.org/D32733. I don't think there was a good reason to change this.
- Leave in the `assert`.
https://reviews.llvm.org/D36019
Files:
lib/Format/WhitespaceManager.cpp
lib/Format/WhitespaceManager.h
unittests/Format/FormatTest.cpp
Index: unittests/Format/FormatTest.cpp
===================================================================
--- unittests/Format/FormatTest.cpp
+++ unittests/Format/FormatTest.cpp
@@ -2309,6 +2309,30 @@
EXPECT_EQ("template <class T> f();", format("\\\ntemplate <class T> f();"));
EXPECT_EQ("/* \\ \\ \\\n */", format("\\\n/* \\ \\ \\\n */"));
EXPECT_EQ("<a\n\\\\\n>", format("<a\n\\\\\n>"));
+
+ FormatStyle DontAlign = getLLVMStyle();
+ DontAlign.AlignEscapedNewlines = FormatStyle::ENAS_DontAlign;
+ DontAlign.MaxEmptyLinesToKeep = 3;
+ // FIXME: can't use verifyFormat here because the newline before
+ // "public:" is not inserted the first time it's reformatted
+ EXPECT_EQ("#define A \\\n"
+ " class Foo { \\\n"
+ " void bar(); \\\n"
+ " \\\n"
+ " \\\n"
+ " \\\n"
+ " public: \\\n"
+ " void baz(); \\\n"
+ " };",
+ format("#define A \\\n"
+ " class Foo { \\\n"
+ " void bar(); \\\n"
+ " \\\n"
+ " \\\n"
+ " \\\n"
+ " public: \\\n"
+ " void baz(); \\\n"
+ " };", DontAlign));
}
TEST_F(FormatTest, CalculateSpaceOnConsecutiveLinesInMacro) {
Index: lib/Format/WhitespaceManager.h
===================================================================
--- lib/Format/WhitespaceManager.h
+++ lib/Format/WhitespaceManager.h
@@ -195,9 +195,7 @@
/// \brief Stores \p Text as the replacement for the whitespace in \p Range.
void storeReplacement(SourceRange Range, StringRef Text);
void appendNewlineText(std::string &Text, unsigned Newlines);
- void appendNewlineText(std::string &Text, unsigned Newlines,
- unsigned PreviousEndOfTokenColumn,
- unsigned EscapedNewlineColumn);
+ void appendEscapedNewlineText(std::string &Text, const Change &C);
void appendIndentText(std::string &Text, unsigned IndentLevel,
unsigned Spaces, unsigned WhitespaceStartColumn);
Index: lib/Format/WhitespaceManager.cpp
===================================================================
--- lib/Format/WhitespaceManager.cpp
+++ lib/Format/WhitespaceManager.cpp
@@ -603,8 +603,7 @@
if (C.CreateReplacement) {
std::string ReplacementText = C.PreviousLinePostfix;
if (C.ContinuesPPDirective)
- appendNewlineText(ReplacementText, C.NewlinesBefore,
- C.PreviousEndOfTokenColumn, C.EscapedNewlineColumn);
+ appendEscapedNewlineText(ReplacementText, C);
else
appendNewlineText(ReplacementText, C.NewlinesBefore);
appendIndentText(ReplacementText, C.Tok->IndentLevel,
@@ -640,14 +639,19 @@
Text.append(UseCRLF ? "\r\n" : "\n");
}
-void WhitespaceManager::appendNewlineText(std::string &Text, unsigned Newlines,
- unsigned PreviousEndOfTokenColumn,
- unsigned EscapedNewlineColumn) {
- if (Newlines > 0) {
+void WhitespaceManager::appendEscapedNewlineText(std::string &Text, const Change &C) {
+ if (Style.AlignEscapedNewlines == FormatStyle::ENAS_DontAlign) {
+ for (unsigned i = 0; i < C.NewlinesBefore; ++i)
+ Text.append(UseCRLF ? " \\\r\n" : " \\\n");
+ return;
+ }
+
+ if (C.NewlinesBefore > 0) {
+ assert(C.EscapedNewlineColumn >= 1);
unsigned Offset =
- std::min<int>(EscapedNewlineColumn - 2, PreviousEndOfTokenColumn);
- for (unsigned i = 0; i < Newlines; ++i) {
- Text.append(EscapedNewlineColumn - Offset - 1, ' ');
+ std::min<int>(C.EscapedNewlineColumn - 1, C.PreviousEndOfTokenColumn);
+ for (unsigned i = 0; i < C.NewlinesBefore; ++i) {
+ Text.append(C.EscapedNewlineColumn - Offset - 1, ' ');
Text.append(UseCRLF ? "\\\r\n" : "\\\n");
Offset = 0;
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D36019.108860.patch
Type: text/x-patch
Size: 3947 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20170731/bf4d81f5/attachment.bin>
More information about the cfe-commits
mailing list