From: Daniel Jasper Date: Sat, 23 Feb 2013 07:46:38 +0000 (+0000) Subject: Allow splitting between string literals and identifiers. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=3a204418482c9ae70ad482e781132c54306c3aa6;p=clang Allow splitting between string literals and identifiers. Also don't break in long include directives as that is not desired. We can now format: #include "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaa" #define LL_FORMAT "ll" printf("aaaaa: %d, bbbbbbbbb: %" LL_FORMAT "d, cccccccc: %" LL_FORMAT "d, ddddddddd: %" LL_FORMAT "d\n"); Before, this led to weird results. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@175959 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Format/TokenAnnotator.cpp b/lib/Format/TokenAnnotator.cpp index 9a52f82657..359923f02f 100644 --- a/lib/Format/TokenAnnotator.cpp +++ b/lib/Format/TokenAnnotator.cpp @@ -415,6 +415,10 @@ private: } } else { while (CurrentToken != NULL) { + if (CurrentToken->is(tok::string_literal)) + // Mark these string literals as "implicit" literals, too, so that + // they are not split or line-wrapped. + CurrentToken->Type = TT_ImplicitStringLiteral; next(); } } @@ -1098,6 +1102,8 @@ bool TokenAnnotator::canBreakBefore(const AnnotatedLine &Line, if (Right.is(tok::r_paren) || Right.is(tok::greater)) return false; + if (Left.is(tok::identifier) && Right.is(tok::string_literal)) + return true; return (isBinaryOperator(Left) && Left.isNot(tok::lessless)) || Left.is(tok::comma) || Right.is(tok::lessless) || Right.is(tok::arrow) || Right.is(tok::period) || diff --git a/unittests/Format/FormatTest.cpp b/unittests/Format/FormatTest.cpp index 00657e046b..3cf151e43f 100644 --- a/unittests/Format/FormatTest.cpp +++ b/unittests/Format/FormatTest.cpp @@ -1460,6 +1460,11 @@ TEST_F(FormatTest, AlignsStringLiterals) { verifyFormat("a = a + \"a\"\n" " \"a\"\n" " \"a\";"); + + verifyFormat( + "#define LL_FORMAT \"ll\"\n" + "printf(\"aaaaa: %d, bbbbbb: %\" LL_FORMAT \"d, cccccccc: %\" LL_FORMAT\n" + " \"d, ddddddddd: %\" LL_FORMAT \"d\");"); } TEST_F(FormatTest, AlignsPipes) { @@ -1933,7 +1938,9 @@ TEST_F(FormatTest, HandlesIncludeDirectives) { "#include \"string.h\"\n" "#include \"string.h\"\n" "#include \n" - "#include < path with space >\n"); + "#include < path with space >\n" + "#include \"some very long include paaaaaaaaaaaaaaaaaaaaaaath\"", + getLLVMStyleWithColumns(35)); verifyFormat("#import "); verifyFormat("#import ");