]> granicus.if.org Git - clang/commitdiff
clang-format: Correctly calculate affected ranges when sorting #includes.
authorDaniel Jasper <djasper@google.com>
Tue, 30 Aug 2016 21:33:41 +0000 (21:33 +0000)
committerDaniel Jasper <djasper@google.com>
Tue, 30 Aug 2016 21:33:41 +0000 (21:33 +0000)
affectedRanges takes a start and an end offset, not offset and length.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@280165 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Format/Format.cpp
unittests/Format/SortIncludesTest.cpp

index b7d3c55061a712b5de60176b374ae3f862fcbc14..86f4ae1f196af07a9587e0481cb970fc13e6bf30 100644 (file)
@@ -1263,10 +1263,10 @@ static void sortCppIncludes(const FormatStyle &Style,
                             ArrayRef<tooling::Range> Ranges, StringRef FileName,
                             tooling::Replacements &Replaces, unsigned *Cursor) {
   unsigned IncludesBeginOffset = Includes.front().Offset;
-  unsigned IncludesBlockSize = Includes.back().Offset +
-                               Includes.back().Text.size() -
-                               IncludesBeginOffset;
-  if (!affectsRange(Ranges, IncludesBeginOffset, IncludesBlockSize))
+  unsigned IncludesEndOffset =
+      Includes.back().Offset + Includes.back().Text.size();
+  unsigned IncludesBlockSize = IncludesEndOffset - IncludesBeginOffset;
+  if (!affectsRange(Ranges, IncludesBeginOffset, IncludesEndOffset))
     return;
   SmallVector<unsigned, 16> Indices;
   for (unsigned i = 0, e = Includes.size(); i != e; ++i)
index b6ee2ddf6693244ab1fb7b19d9b0d1092a0d532d..c3c56a813041a9526d74bc81896161a63476e046 100644 (file)
@@ -24,8 +24,8 @@ protected:
     return std::vector<tooling::Range>(1, tooling::Range(0, Code.size()));
   }
 
-  std::string sort(StringRef Code, StringRef FileName = "input.cpp") {
-    auto Ranges = GetCodeRange(Code);
+  std::string sort(StringRef Code, std::vector<tooling::Range> Ranges,
+                   StringRef FileName = "input.cc") {
     auto Replaces = sortIncludes(Style, Code, Ranges, FileName);
     Ranges = tooling::calculateRangesAfterReplacements(Replaces, Ranges);
     auto Sorted = applyAllReplacements(Code, Replaces);
@@ -36,6 +36,10 @@ protected:
     return *Result;
   }
 
+  std::string sort(StringRef Code, StringRef FileName = "input.cpp") {
+    return sort(Code, GetCodeRange(Code), FileName);
+  }
+
   unsigned newCursor(llvm::StringRef Code, unsigned Cursor) {
     sortIncludes(Style, Code, GetCodeRange(Code), "input.cpp", &Cursor);
     return Cursor;
@@ -52,6 +56,14 @@ TEST_F(SortIncludesTest, BasicSorting) {
             sort("#include \"a.h\"\n"
                  "#include \"c.h\"\n"
                  "#include \"b.h\"\n"));
+
+  EXPECT_EQ("// comment\n"
+            "#include <a>\n"
+            "#include <b>\n",
+            sort("// comment\n"
+                 "#include <b>\n"
+                 "#include <a>\n",
+                 {tooling::Range(25, 1)}));
 }
 
 TEST_F(SortIncludesTest, NoReplacementsForValidIncludes) {