From 9356a91ad2c616edf55abd27534167d9c1373713 Mon Sep 17 00:00:00 2001 From: Manuel Klimek Date: Mon, 29 Feb 2016 16:44:16 +0000 Subject: [PATCH] Revert "Implement new interfaces for code-formatting when applying replacements." This reverts commit r262232. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@262234 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/Tooling/Core/Replacement.h | 39 ------------------- lib/Tooling/Core/Replacement.cpp | 45 +--------------------- unittests/Tooling/CMakeLists.txt | 1 - unittests/Tooling/RefactoringTest.cpp | 49 ------------------------ 4 files changed, 2 insertions(+), 132 deletions(-) diff --git a/include/clang/Tooling/Core/Replacement.h b/include/clang/Tooling/Core/Replacement.h index 5753c955be..37389ac915 100644 --- a/include/clang/Tooling/Core/Replacement.h +++ b/include/clang/Tooling/Core/Replacement.h @@ -30,10 +30,6 @@ namespace clang { class Rewriter; -namespace format { -struct FormatStyle; -} // namespace format - namespace tooling { /// \brief A source range independent of the \c SourceManager. @@ -224,41 +220,6 @@ bool applyAllReplacements(const std::vector &Replaces, /// replacements cannot be applied, this returns an empty \c string. std::string applyAllReplacements(StringRef Code, const Replacements &Replaces); -/// \brief Applies all replacements in \p Replaces to \p Code. -/// -/// This completely ignores the path stored in each replacement. If one or more -/// replacements cannot be applied, this returns an empty \c string. -std::string applyAllReplacements(StringRef Code, - const std::vector &Replaces); - -/// \brief Calculate the ranges in a single file that are affected by the -/// Replacements. -/// -/// \pre Replacements must be for the same file. -std::vector -calculateChangedRangesInFile(const tooling::Replacements &Replaces); - -/// \brief Return replacements that are merged from orginal replacements -/// and the replacements for formatting the code after applying the orginal -/// replacements. -tooling::Replacements formatReplacements(StringRef Code, - const tooling::Replacements &Replaces, - const format::FormatStyle &Style); - -/// \brief In addition to applying replacements as in `applyAllReplacements`, -/// this function also reformats the changed code after applying replacements. -/// -/// \pre Replacements must be for the same file and conflict-free. -/// -/// Replacement applications happen independently of the success of -/// other applications. -/// -/// \returns the changed code if all replacements apply and code is fixed. -/// empty string otherwise. -std::string applyAllReplacementsAndFormat(StringRef Code, - const Replacements &Replaces, - const format::FormatStyle &Style); - /// \brief Merges two sets of replacements with the second set referring to the /// code after applying the first set. Within both 'First' and 'Second', /// replacements must not overlap. diff --git a/lib/Tooling/Core/Replacement.cpp b/lib/Tooling/Core/Replacement.cpp index 179d70ec59..47bbdeb470 100644 --- a/lib/Tooling/Core/Replacement.cpp +++ b/lib/Tooling/Core/Replacement.cpp @@ -11,20 +11,17 @@ // //===----------------------------------------------------------------------===// -#include "clang/Tooling/Core/Replacement.h" - #include "clang/Basic/Diagnostic.h" #include "clang/Basic/DiagnosticIDs.h" #include "clang/Basic/DiagnosticOptions.h" #include "clang/Basic/FileManager.h" #include "clang/Basic/SourceManager.h" -#include "clang/Format/Format.h" #include "clang/Lex/Lexer.h" #include "clang/Rewrite/Core/Rewriter.h" +#include "clang/Tooling/Core/Replacement.h" #include "llvm/Support/FileSystem.h" #include "llvm/Support/Path.h" #include "llvm/Support/raw_os_ostream.h" -#include namespace clang { namespace tooling { @@ -284,44 +281,6 @@ std::string applyAllReplacements(StringRef Code, const Replacements &Replaces) { return Result; } -tooling::Replacements formatReplacements(StringRef Code, - const tooling::Replacements &Replaces, - const format::FormatStyle &Style) { - if (Replaces.empty()) return Replacements(); - - std::string NewCode = applyAllReplacements(Code, Replaces); - std::vector ChangedRanges = - calculateChangedRangesInFile(Replaces); - StringRef FileName = Replaces.begin()->getFilePath(); - tooling::Replacements FormatReplaces = - format::reformat(Style, NewCode, ChangedRanges, FileName); - - tooling::Replacements MergedReplacements = - mergeReplacements(Replaces, FormatReplaces); - return MergedReplacements; -} - -std::vector calculateChangedRangesInFile(const Replacements &Replaces) { - std::vector ChangedRanges; - int Shift = 0; - for (const tooling::Replacement &R : Replaces) { - unsigned Offset = R.getOffset() + Shift; - unsigned Length = R.getReplacementText().size(); - Shift += Length - R.getLength(); - ChangedRanges.push_back(tooling::Range(Offset, Length)); - } - return ChangedRanges; -} - -std::string applyAllReplacementsAndFormat(StringRef Code, - const Replacements &Replaces, - const format::FormatStyle &Style) { - Replacements NewReplacements = formatReplacements(Code, Replaces, Style); - if (NewReplacements.empty()) - return Code; // Exit early to avoid overhead in `applyAllReplacements`. - return applyAllReplacements(Code, NewReplacements); -} - namespace { // Represents a merged replacement, i.e. a replacement consisting of multiple // overlapping replacements from 'First' and 'Second' in mergeReplacements. @@ -355,7 +314,7 @@ public: // Merges the next element 'R' into this merged element. As we always merge // from 'First' into 'Second' or vice versa, the MergedReplacement knows what - // set the next element is coming from. + // set the next element is coming from. void merge(const Replacement &R) { if (MergeSecond) { unsigned REnd = R.getOffset() + Delta + R.getLength(); diff --git a/unittests/Tooling/CMakeLists.txt b/unittests/Tooling/CMakeLists.txt index 74e7e76a31..3035fdcc01 100644 --- a/unittests/Tooling/CMakeLists.txt +++ b/unittests/Tooling/CMakeLists.txt @@ -24,7 +24,6 @@ target_link_libraries(ToolingTests clangAST clangASTMatchers clangBasic - clangFormat clangFrontend clangLex clangRewrite diff --git a/unittests/Tooling/RefactoringTest.cpp b/unittests/Tooling/RefactoringTest.cpp index 49a4e1dde7..ff11aeae11 100644 --- a/unittests/Tooling/RefactoringTest.cpp +++ b/unittests/Tooling/RefactoringTest.cpp @@ -18,7 +18,6 @@ #include "clang/Basic/FileManager.h" #include "clang/Basic/LangOptions.h" #include "clang/Basic/SourceManager.h" -#include "clang/Format/Format.h" #include "clang/Frontend/CompilerInstance.h" #include "clang/Frontend/FrontendAction.h" #include "clang/Frontend/TextDiagnosticPrinter.h" @@ -167,35 +166,6 @@ TEST_F(ReplacementTest, ApplyAllFailsIfOneApplyFails) { EXPECT_EQ("z", Context.getRewrittenText(IDz)); } -TEST_F(ReplacementTest, FormatCodeAfterReplacements) { - // Column limit is 20. - std::string Code = "Type *a =\n" - " new Type();\n" - "g(iiiii, 0, jjjjj,\n" - " 0, kkkkk, 0, mm);\n" - "int bad = format ;"; - std::string Expected = "auto a = new Type();\n" - "g(iiiii, nullptr,\n" - " jjjjj, nullptr,\n" - " kkkkk, nullptr,\n" - " mm);\n" - "int bad = format ;"; - FileID ID = Context.createInMemoryFile("format.cpp", Code); - Replacements Replaces; - Replaces.insert( - Replacement(Context.Sources, Context.getLocation(ID, 1, 1), 6, "auto ")); - Replaces.insert(Replacement(Context.Sources, Context.getLocation(ID, 3, 10), - 1, "nullptr")); - Replaces.insert(Replacement(Context.Sources, Context.getLocation(ID, 4, 3), 1, - "nullptr")); - Replaces.insert(Replacement(Context.Sources, Context.getLocation(ID, 4, 13), - 1, "nullptr")); - - format::FormatStyle Style = format::getLLVMStyle(); - Style.ColumnLimit = 20; // Set column limit to 20 to increase readibility. - EXPECT_EQ(Expected, applyAllReplacementsAndFormat(Code, Replaces, Style)); -} - TEST(ShiftedCodePositionTest, FindsNewCodePosition) { Replacements Replaces; Replaces.insert(Replacement("", 0, 1, "")); @@ -448,25 +418,6 @@ TEST(Range, contains) { EXPECT_FALSE(Range(0, 10).contains(Range(0, 11))); } -TEST(Range, CalculateRangesOfReplacements) { - // Before: aaaabbbbbbz - // After : bbbbbbzzzzzzoooooooooooooooo - Replacements Replaces; - Replaces.insert(Replacement("foo", 0, 4, "")); - Replaces.insert(Replacement("foo", 10, 1, "zzzzzz")); - Replaces.insert(Replacement("foo", 11, 0, "oooooooooooooooo")); - - std::vector Ranges = calculateChangedRangesInFile(Replaces); - - EXPECT_EQ(3ul, Ranges.size()); - EXPECT_TRUE(Ranges[0].getOffset() == 0); - EXPECT_TRUE(Ranges[0].getLength() == 0); - EXPECT_TRUE(Ranges[1].getOffset() == 6); - EXPECT_TRUE(Ranges[1].getLength() == 6); - EXPECT_TRUE(Ranges[2].getOffset() == 12); - EXPECT_TRUE(Ranges[2].getLength() == 16); -} - TEST(DeduplicateTest, removesDuplicates) { std::vector Input; Input.push_back(Replacement("fileA", 50, 0, " foo ")); -- 2.40.0