From: Daniel Jasper Date: Mon, 21 Dec 2015 13:40:49 +0000 (+0000) Subject: clang-format: Only try to find the "main" include in the first block of X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=54d63ca3436fb12393ecf663752f57e408dc3d7e;p=clang clang-format: Only try to find the "main" include in the first block of includes. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@256153 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Format/Format.cpp b/lib/Format/Format.cpp index c9058a587e..9b9a1b3e41 100644 --- a/lib/Format/Format.cpp +++ b/lib/Format/Format.cpp @@ -1814,6 +1814,7 @@ tooling::Replacements sortIncludes(const FormatStyle &Style, StringRef Code, FileName.endswith(".cxx") || FileName.endswith(".m") || FileName.endswith(".mm"); StringRef FileStem = llvm::sys::path::stem(FileName); + bool FirstIncludeBlock = true; // Create pre-compiled regular expressions for the #include categories. SmallVector CategoryRegexs; @@ -1843,7 +1844,8 @@ tooling::Replacements sortIncludes(const FormatStyle &Style, StringRef Code, break; } } - if (IsSource && Category > 0 && IncludeName.startswith("\"")) { + if (IsSource && Category > 0 && FirstIncludeBlock && + IncludeName.startswith("\"")) { StringRef HeaderStem = llvm::sys::path::stem(IncludeName.drop_front(1).drop_back(1)); if (FileStem.startswith(HeaderStem)) @@ -1854,6 +1856,7 @@ tooling::Replacements sortIncludes(const FormatStyle &Style, StringRef Code, sortIncludes(Style, IncludesInBlock, Ranges, FileName, Replaces, Cursor); IncludesInBlock.clear(); + FirstIncludeBlock = false; } Prev = Pos + 1; } diff --git a/unittests/Format/SortIncludesTest.cpp b/unittests/Format/SortIncludesTest.cpp index ce83091b71..d96227d13e 100644 --- a/unittests/Format/SortIncludesTest.cpp +++ b/unittests/Format/SortIncludesTest.cpp @@ -191,6 +191,19 @@ TEST_F(SortIncludesTest, LeavesMainHeaderFirst) { "#include \"c.h\"\n" "#include \"b.h\"\n", "a.h")); + + // Only do this in the first #include block. + EXPECT_EQ("#include \n" + "\n" + "#include \"b.h\"\n" + "#include \"c.h\"\n" + "#include \"llvm/a.h\"\n", + sort("#include \n" + "\n" + "#include \"llvm/a.h\"\n" + "#include \"c.h\"\n" + "#include \"b.h\"\n", + "a.cc")); } TEST_F(SortIncludesTest, NegativePriorities) {