From e0b0cb83d4ff02e80ff179cf5f8c83fe8276bc4e Mon Sep 17 00:00:00 2001 From: Alex Lorenz Date: Fri, 13 Oct 2017 22:47:44 +0000 Subject: [PATCH] Revert r315738 The ParsedSourceRange class does not work correctly on Windows with the ':' drive separators git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@315774 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/Frontend/CommandLineSourceLoc.h | 45 --------- test/Refactor/tool-apply-replacements.cpp | 11 --- test/Refactor/tool-selection-option.c | 15 --- tools/clang-refactor/ClangRefactor.cpp | 94 ++----------------- 4 files changed, 6 insertions(+), 159 deletions(-) delete mode 100644 test/Refactor/tool-apply-replacements.cpp delete mode 100644 test/Refactor/tool-selection-option.c diff --git a/include/clang/Frontend/CommandLineSourceLoc.h b/include/clang/Frontend/CommandLineSourceLoc.h index 206bd86330..a78c96d23a 100644 --- a/include/clang/Frontend/CommandLineSourceLoc.h +++ b/include/clang/Frontend/CommandLineSourceLoc.h @@ -51,51 +51,6 @@ public: } }; -/// A source range that has been parsed on the command line. -struct ParsedSourceRange { - std::string FileName; - /// The starting location of the range. The first element is the line and - /// the second element is the column. - std::pair Begin; - /// The ending location of the range. The first element is the line and the - /// second element is the column. - std::pair End; - - /// Returns a parsed source range from a string or None if the string is - /// invalid. - /// - /// These source string has the following format: - /// - /// file:start_line:start_column[-end_line:end_column] - /// - /// If the end line and column are omitted, the starting line and columns - /// are used as the end values. - static Optional fromString(StringRef Str) { - std::pair RangeSplit; - // Avoid splitting '-' when there's no end line & column as '-' might be - // part of the filename. - if (Str.count(':') > 2) - RangeSplit = Str.rsplit('-'); - else - RangeSplit = {Str, ""}; - auto Begin = ParsedSourceLocation::FromString(RangeSplit.first); - if (Begin.FileName.empty()) - return None; - unsigned EndLine, EndColumn; - if (RangeSplit.second.empty()) { - EndLine = Begin.Line; - EndColumn = Begin.Column; - } else { - std::pair Split = RangeSplit.second.rsplit(':'); - if (Split.first.getAsInteger(10, EndLine) || - Split.second.getAsInteger(10, EndColumn)) - return None; - } - return ParsedSourceRange{std::move(Begin.FileName), - {Begin.Line, Begin.Column}, - {EndLine, EndColumn}}; - } -}; } namespace llvm { diff --git a/test/Refactor/tool-apply-replacements.cpp b/test/Refactor/tool-apply-replacements.cpp deleted file mode 100644 index 9f4595089c..0000000000 --- a/test/Refactor/tool-apply-replacements.cpp +++ /dev/null @@ -1,11 +0,0 @@ -// RUN: rm -f %t.cp.cpp -// RUN: cp %s %t.cp.cpp -// RUN: clang-refactor local-rename -selection=%t.cp.cpp:9:7 -new-name=test %t.cp.cpp -- -// RUN: grep -v CHECK %t.cp.cpp | FileCheck %t.cp.cpp -// RUN: cp %s %t.cp.cpp -// RUN: clang-refactor local-rename -selection=%t.cp.cpp:9:7-9:15 -new-name=test %t.cp.cpp -- -// RUN: grep -v CHECK %t.cp.cpp | FileCheck %t.cp.cpp - -class RenameMe { -// CHECK: class test { -}; diff --git a/test/Refactor/tool-selection-option.c b/test/Refactor/tool-selection-option.c deleted file mode 100644 index f80457a067..0000000000 --- a/test/Refactor/tool-selection-option.c +++ /dev/null @@ -1,15 +0,0 @@ -// RUN: rm -f %t.cp.c -// RUN: cp %s %t.cp.c -// RUN: clang-refactor local-rename -selection=%t.cp.c:6:5 -new-name=test -v %t.cp.c -- | FileCheck --check-prefix=CHECK1 %s -// RUN: clang-refactor local-rename -selection=%t.cp.c:6:5-6:9 -new-name=test -v %t.cp.c -- | FileCheck --check-prefix=CHECK2 %s - -int test; - -// CHECK1: invoking action 'local-rename': -// CHECK1-NEXT: -selection={{.*}}.cp.c:6:5 -> {{.*}}.cp.c:6:5 - -// CHECK2: invoking action 'local-rename': -// CHECK2-NEXT: -selection={{.*}}.cp.c:6:5 -> {{.*}}.cp.c:6:9 - -// RUN: not clang-refactor local-rename -selection=%s:6:5 -new-name=test -v %t.cp.c -- 2>&1 | FileCheck --check-prefix=CHECK-FILE-ERR %s -// CHECK-FILE-ERR: given file is not in the target TU diff --git a/tools/clang-refactor/ClangRefactor.cpp b/tools/clang-refactor/ClangRefactor.cpp index 800729db86..b1a1ebdf68 100644 --- a/tools/clang-refactor/ClangRefactor.cpp +++ b/tools/clang-refactor/ClangRefactor.cpp @@ -14,7 +14,6 @@ //===----------------------------------------------------------------------===// #include "TestSupport.h" -#include "clang/Frontend/CommandLineSourceLoc.h" #include "clang/Rewrite/Core/Rewriter.h" #include "clang/Tooling/CommonOptionsParser.h" #include "clang/Tooling/Refactoring.h" @@ -55,7 +54,7 @@ public: /// Prints any additional state associated with the selection argument to /// the given output stream. - virtual void print(raw_ostream &OS) {} + virtual void print(raw_ostream &OS) = 0; /// Returns a replacement refactoring result consumer (if any) that should /// consume the results of a refactoring operation. @@ -100,41 +99,6 @@ private: TestSelectionRangesInFile TestSelections; }; -/// Stores the parsed -selection=filename:line:column[-line:column] option. -class SourceRangeSelectionArgument final : public SourceSelectionArgument { -public: - SourceRangeSelectionArgument(ParsedSourceRange Range) - : Range(std::move(Range)) {} - - bool forAllRanges(const SourceManager &SM, - llvm::function_ref Callback) override { - const FileEntry *FE = SM.getFileManager().getFile(Range.FileName); - FileID FID = FE ? SM.translateFile(FE) : FileID(); - if (!FE || FID.isInvalid()) { - llvm::errs() << "error: -selection=" << Range.FileName - << ":... : given file is not in the target TU\n"; - return true; - } - - SourceLocation Start = SM.getMacroArgExpandedLocation( - SM.translateLineCol(FID, Range.Begin.first, Range.Begin.second)); - SourceLocation End = SM.getMacroArgExpandedLocation( - SM.translateLineCol(FID, Range.End.first, Range.End.second)); - if (Start.isInvalid() || End.isInvalid()) { - llvm::errs() << "error: -selection=" << Range.FileName << ':' - << Range.Begin.first << ':' << Range.Begin.second << '-' - << Range.End.first << ':' << Range.End.second - << " : invalid source location\n"; - return true; - } - Callback(SourceRange(Start, End)); - return false; - } - -private: - ParsedSourceRange Range; -}; - std::unique_ptr SourceSelectionArgument::fromString(StringRef Value) { if (Value.startswith("test:")) { @@ -146,12 +110,10 @@ SourceSelectionArgument::fromString(StringRef Value) { return llvm::make_unique( std::move(*ParsedTestSelection)); } - Optional Range = ParsedSourceRange::fromString(Value); - if (Range) - return llvm::make_unique(std::move(*Range)); + // FIXME: Support true selection ranges. llvm::errs() << "error: '-selection' option must be specified using " ":: or " - "::-: format\n"; + "::-: format"; return nullptr; } @@ -306,22 +268,11 @@ private: class ClangRefactorConsumer : public RefactoringResultConsumer { public: - void handleError(llvm::Error Err) override { + void handleError(llvm::Error Err) { llvm::errs() << llvm::toString(std::move(Err)) << "\n"; } - void handle(AtomicChanges Changes) override { - SourceChanges.insert(SourceChanges.begin(), Changes.begin(), Changes.end()); - } - - void handle(SymbolOccurrences Occurrences) override { - RefactoringResultConsumer::handle(std::move(Occurrences)); - } - - const AtomicChanges &getSourceChanges() const { return SourceChanges; } - -private: - AtomicChanges SourceChanges; + // FIXME: Consume atomic changes and apply them to files. }; class ClangRefactorTool { @@ -401,39 +352,6 @@ public: } } - bool applySourceChanges(const AtomicChanges &Replacements) { - std::set Files; - for (const auto &Change : Replacements) - Files.insert(Change.getFilePath()); - // FIXME: Add automatic formatting support as well. - tooling::ApplyChangesSpec Spec; - // FIXME: We should probably cleanup the result by default as well. - Spec.Cleanup = false; - for (const auto &File : Files) { - llvm::ErrorOr> BufferErr = - llvm::MemoryBuffer::getFile(File); - if (!BufferErr) { - llvm::errs() << "error: failed to open " << File << " for rewriting\n"; - return true; - } - auto Result = tooling::applyAtomicChanges(File, (*BufferErr)->getBuffer(), - Replacements, Spec); - if (!Result) { - llvm::errs() << toString(Result.takeError()); - return true; - } - - std::error_code EC; - llvm::raw_fd_ostream OS(File, EC, llvm::sys::fs::F_Text); - if (EC) { - llvm::errs() << EC.message() << "\n"; - return true; - } - OS << *Result; - } - return false; - } - bool invokeAction(RefactoringActionSubcommand &Subcommand, const CompilationDatabase &DB, ArrayRef Sources) { @@ -505,7 +423,7 @@ public: // FIXME (Alex L): Implement non-selection based invocation path. })) return true; - return HasFailed || applySourceChanges(Consumer.getSourceChanges()); + return HasFailed; } }; -- 2.40.0