| // Copyright 2016 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef TOOLS_CLANG_REWRITE_TO_CHROME_STYLE_EDIT_TRACKER_H_ |
| #define TOOLS_CLANG_REWRITE_TO_CHROME_STYLE_EDIT_TRACKER_H_ |
| |
| #include <map> |
| |
| #include "clang/Basic/SourceLocation.h" |
| #include "clang/Basic/SourceManager.h" |
| #include "llvm/ADT/StringMap.h" |
| #include "llvm/ADT/StringRef.h" |
| #include "llvm/ADT/StringSet.h" |
| |
| namespace llvm { |
| class raw_ostream; |
| } // namespace llvm |
| |
| struct EditInfo { |
| std::string new_text; |
| llvm::StringSet<> filenames; |
| }; |
| |
| enum class RenameCategory { |
| kEnumValue, |
| kField, |
| kFunction, |
| kUnresolved, |
| kVariable, |
| }; |
| |
| // Simple class that tracks the edits made by path. Used to dump the databaes |
| // used by the Blink rebase helper. |
| class EditTracker { |
| public: |
| explicit EditTracker(RenameCategory category); |
| |
| void Add(const clang::SourceManager& source_manager, |
| clang::SourceLocation location, |
| llvm::StringRef original_text, |
| llvm::StringRef new_text); |
| |
| // Serializes the tracked edits to |output|. Emits: |
| // <filename>:<tag>:<original text>:<new text> |
| // for each distinct filename for each tracked edit. |
| void SerializeTo(llvm::raw_ostream& output) const; |
| |
| private: |
| EditTracker(const EditTracker&) = delete; |
| EditTracker& operator=(const EditTracker&) = delete; |
| |
| // The string key is the original text. |
| llvm::StringMap<EditInfo> tracked_edits_; |
| |
| RenameCategory category_; |
| }; |
| |
| #endif // #define TOOLS_CLANG_REWRITE_TO_CHROME_STYLE_EDIT_TRACKER_H_ |