diff options
author | Edwin Vane <edwin.vane@intel.com> | 2013-07-22 20:26:29 +0000 |
---|---|---|
committer | Edwin Vane <edwin.vane@intel.com> | 2013-07-22 20:26:29 +0000 |
commit | 55b0be72d11ce678df24d8971d5553415a0edd61 (patch) | |
tree | e2428cb71cab77800de04fd621c3816df321fc4f /clang-tools-extra/cpp11-migrate/Core/FileOverrides.h | |
parent | 7d6753738a0a84fd3c2427fda8daf028687ccaee (diff) | |
download | bcm5719-llvm-55b0be72d11ce678df24d8971d5553415a0edd61.tar.gz bcm5719-llvm-55b0be72d11ce678df24d8971d5553415a0edd61.zip |
cp11-migrate: Integration with LibFormat
Adding a feature to optionally reformat code changed by the migrator. Like
LibFormat, can choose between built-in styles (LLVM, Mozilla, Google, Chromium)
or use a YAML-format config file.
Author: Guillaume Papin <guillaume.papin@epitech.eu>
llvm-svn: 186866
Diffstat (limited to 'clang-tools-extra/cpp11-migrate/Core/FileOverrides.h')
-rw-r--r-- | clang-tools-extra/cpp11-migrate/Core/FileOverrides.h | 50 |
1 files changed, 48 insertions, 2 deletions
diff --git a/clang-tools-extra/cpp11-migrate/Core/FileOverrides.h b/clang-tools-extra/cpp11-migrate/Core/FileOverrides.h index 7f8c8d20011..2bb3daea7b0 100644 --- a/clang-tools-extra/cpp11-migrate/Core/FileOverrides.h +++ b/clang-tools-extra/cpp11-migrate/Core/FileOverrides.h @@ -29,6 +29,34 @@ class SourceManager; class Rewriter; } // namespace clang +/// \brief Class encapsulating a list of \c tooling::Range with some +/// convenience methods. +/// +/// The ranges stored are used to keep track of the overriden parts of a file. +class ChangedRanges { + typedef std::vector<clang::tooling::Range> RangeVec; + +public: + typedef RangeVec::const_iterator const_iterator; + + /// \brief Create new ranges from the replacements and adjust existing one + /// to remove replaced parts. + /// + /// Note that all replacements should come from the same file. + void adjustChangedRanges(const clang::tooling::Replacements &Replaces); + + /// \brief Iterators. + /// @{ + const_iterator begin() const { return Ranges.begin(); } + const_iterator end() const { return Ranges.end(); } + /// @} + +private: + void coalesceRanges(); + + RangeVec Ranges; +}; + /// \brief Container for storing override information for a single headers. struct HeaderOverride { HeaderOverride() {} @@ -36,6 +64,7 @@ struct HeaderOverride { std::string FileName; std::string FileOverride; + ChangedRanges Changes; }; /// \brief Container mapping header file names to override information. @@ -46,12 +75,18 @@ typedef llvm::StringMap<HeaderOverride> HeaderOverrides; /// which changes have been made. class SourceOverrides { public: - SourceOverrides(llvm::StringRef MainFileName); + SourceOverrides(llvm::StringRef MainFileName, bool TrackChanges); /// \brief Accessors. /// @{ llvm::StringRef getMainFileName() const { return MainFileName; } llvm::StringRef getMainFileContent() const { return MainFileOverride; } + const ChangedRanges &getChangedRanges() const { return MainFileChanges; } + + /// \brief Is file change tracking enabled? + /// + /// Tracking file changes can be useful to reformat the code for example. + bool isTrackingFileChanges() const { return TrackChanges; } /// @} /// \brief Indicates if the source file has been overridden. @@ -87,8 +122,14 @@ private: /// file content overrides. void applyRewrites(clang::Rewriter &Rewrite); + /// \brief Adjust the changed ranges to reflect the parts of the files that + /// have been replaced. + void adjustChangedRanges(const clang::tooling::Replacements &Replaces); + const std::string MainFileName; std::string MainFileOverride; + const bool TrackChanges; + ChangedRanges MainFileChanges; HeaderOverrides Headers; }; @@ -98,7 +139,11 @@ public: typedef llvm::StringMap<SourceOverrides *> SourceOverridesMap; typedef SourceOverridesMap::const_iterator const_iterator; - FileOverrides() {} + /// \brief Construct the SourceOverrides manager. + /// + /// \param TrackChanges Wether or not the \c SourceOverrides should keep track + /// of changes. See \c SourceOverrides::isTrackingFileChanges(). + FileOverrides(bool TrackChanges) : TrackChanges(TrackChanges) {} ~FileOverrides(); const_iterator find(llvm::StringRef Filename) const { @@ -120,6 +165,7 @@ private: FileOverrides &operator=(const FileOverrides &) LLVM_DELETED_FUNCTION; SourceOverridesMap Overrides; + const bool TrackChanges; }; /// \brief Generate a unique filename to store the replacements. |