Index: cfe/trunk/lib/Format/Format.cpp =================================================================== --- cfe/trunk/lib/Format/Format.cpp +++ cfe/trunk/lib/Format/Format.cpp @@ -2140,13 +2140,23 @@ const tooling::Replacements &Replaces, const FormatStyle &Style) { // We need to use lambda function here since there are two versions of + // `sortIncludes`. + auto SortIncludes = [](const FormatStyle &Style, StringRef Code, + std::vector Ranges, + StringRef FileName) -> tooling::Replacements { + return sortIncludes(Style, Code, Ranges, FileName); + }; + tooling::Replacements SortedReplaces = + processReplacements(SortIncludes, Code, Replaces, Style); + + // We need to use lambda function here since there are two versions of // `reformat`. auto Reformat = [](const FormatStyle &Style, StringRef Code, std::vector Ranges, StringRef FileName) -> tooling::Replacements { return reformat(Style, Code, Ranges, FileName); }; - return processReplacements(Reformat, Code, Replaces, Style); + return processReplacements(Reformat, Code, SortedReplaces, Style); } tooling::Replacements Index: cfe/trunk/unittests/Format/FormatTest.cpp =================================================================== --- cfe/trunk/unittests/Format/FormatTest.cpp +++ cfe/trunk/unittests/Format/FormatTest.cpp @@ -11559,6 +11559,31 @@ EXPECT_EQ(Expected, applyAllReplacements(Code, FinalReplaces)); } +TEST_F(ReplacementTest, SortIncludesAfterReplacement) { + std::string Code = "#include \"a.h\"\n" + "#include \"c.h\"\n" + "\n" + "int main() {\n" + " return 0;\n" + "}"; + std::string Expected = "#include \"a.h\"\n" + "#include \"b.h\"\n" + "#include \"c.h\"\n" + "\n" + "int main() {\n" + " return 0;\n" + "}"; + FileID ID = Context.createInMemoryFile("fix.cpp", Code); + tooling::Replacements Replaces; + Replaces.insert(tooling::Replacement( + Context.Sources, Context.getLocation(ID, 1, 1), 0, "#include \"b.h\"\n")); + + format::FormatStyle Style = format::getLLVMStyle(); + Style.SortIncludes = true; + auto FinalReplaces = formatReplacements(Code, Replaces, Style); + EXPECT_EQ(Expected, applyAllReplacements(Code, FinalReplaces)); +} + } // end namespace } // end namespace format } // end namespace clang