diff options
| author | Eric Liu <ioeric@google.com> | 2016-05-18 13:43:48 +0000 |
|---|---|---|
| committer | Eric Liu <ioeric@google.com> | 2016-05-18 13:43:48 +0000 |
| commit | baf58c2309010f8796daff461ff7045f9a0b1c21 (patch) | |
| tree | 08e3d99ec19ab9f4a82e88ba7c47fd9cf1f21d53 | |
| parent | 6b5160a369a10f5fa521391c633b0736408936cd (diff) | |
| download | bcm5719-llvm-baf58c2309010f8796daff461ff7045f9a0b1c21.tar.gz bcm5719-llvm-baf58c2309010f8796daff461ff7045f9a0b1c21.zip | |
[clang-format] Make formatReplacements() also sort #includes.
Summary: [clang-format] Make formatReplacements() also sort #includes.
Reviewers: bkramer, djasper
Subscribers: klimek, cfe-commits
Differential Revision: http://reviews.llvm.org/D20362
llvm-svn: 269924
| -rw-r--r-- | clang/lib/Format/Format.cpp | 12 | ||||
| -rw-r--r-- | clang/unittests/Format/FormatTest.cpp | 25 |
2 files changed, 36 insertions, 1 deletions
diff --git a/clang/lib/Format/Format.cpp b/clang/lib/Format/Format.cpp index c31e618520a..a70a7ef2a3c 100644 --- a/clang/lib/Format/Format.cpp +++ b/clang/lib/Format/Format.cpp @@ -2140,13 +2140,23 @@ tooling::Replacements formatReplacements(StringRef Code, 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<tooling::Range> 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<tooling::Range> 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 diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp index 3c72a13bf10..1b434eb8c94 100644 --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/unittests/Format/FormatTest.cpp @@ -11559,6 +11559,31 @@ TEST_F(ReplacementTest, FixOnlyAffectedCodeAfterReplacements) { 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 |

