[PATCH] Improved handling of escaped newlines at the token start.
Alexander Kornienko
alexfh at google.com
Fri Jun 7 10:19:56 PDT 2013
Hi klimek,
Remove them from the TokenText as well.
http://llvm-reviews.chandlerc.com/D935
Files:
lib/Format/Format.cpp
unittests/Format/FormatTest.cpp
Index: lib/Format/Format.cpp
===================================================================
--- lib/Format/Format.cpp
+++ lib/Format/Format.cpp
@@ -1166,27 +1166,25 @@
Text = rawTokenText(FormatTok->Tok);
}
- // Now FormatTok is the next non-whitespace token.
- FormatTok->ByteCount = Text.size();
-
- TrailingWhitespace = 0;
- if (FormatTok->Tok.is(tok::comment)) {
- TrailingWhitespace = Text.size() - Text.rtrim().size();
- FormatTok->ByteCount -= TrailingWhitespace;
- }
-
// In case the token starts with escaped newlines, we want to
// take them into account as whitespace - this pattern is quite frequent
// in macro definitions.
// FIXME: What do we want to do with other escaped spaces, and escaped
// spaces or newlines in the middle of tokens?
// FIXME: Add a more explicit test.
- unsigned i = 0;
- while (i + 1 < Text.size() && Text[i] == '\\' && Text[i + 1] == '\n') {
+ while (Text.size() > 1 && Text[0] == '\\' && Text[1] == '\n') {
// FIXME: ++FormatTok->NewlinesBefore is missing...
WhitespaceLength += 2;
- FormatTok->ByteCount -= 2;
- i += 2;
+ Text = Text.substr(2);
+ }
+
+ // Now FormatTok is the next non-whitespace token.
+ FormatTok->ByteCount = Text.size();
+
+ TrailingWhitespace = 0;
+ if (FormatTok->Tok.is(tok::comment)) {
+ TrailingWhitespace = Text.size() - Text.rtrim().size();
+ FormatTok->ByteCount -= TrailingWhitespace;
}
if (FormatTok->Tok.is(tok::raw_identifier)) {
Index: unittests/Format/FormatTest.cpp
===================================================================
--- unittests/Format/FormatTest.cpp
+++ unittests/Format/FormatTest.cpp
@@ -1935,10 +1935,11 @@
format("#define A } }\nint i;", getLLVMStyleWithColumns(11)));
}
-TEST_F(FormatTest, EscapedNewlineAtStartOfTokenInMacroDefinition) {
+TEST_F(FormatTest, EscapedNewlineAtStartOfToken) {
EXPECT_EQ(
"#define A \\\n int i; \\\n int j;",
format("#define A \\\nint i;\\\n int j;", getLLVMStyleWithColumns(11)));
+ EXPECT_EQ("template <class T> f();", format("\\\ntemplate <class T> f();"));
}
TEST_F(FormatTest, CalculateSpaceOnConsecutiveLinesInMacro) {
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D935.1.patch
Type: text/x-patch
Size: 2250 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20130607/7519eeb6/attachment.bin>
More information about the cfe-commits
mailing list