// 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 #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: // ::: // 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 tracked_edits_; RenameCategory category_; }; #endif // #define TOOLS_CLANG_REWRITE_TO_CHROME_STYLE_EDIT_TRACKER_H_