summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/cpp11-migrate/Core
diff options
context:
space:
mode:
authorMichael Gottesman <mgottesman@apple.com>2013-07-22 21:03:56 +0000
committerMichael Gottesman <mgottesman@apple.com>2013-07-22 21:03:56 +0000
commit29e449f22280b8c15619e5b3e9df30f1ae9dfb0a (patch)
tree83250c1587ab42fc65774d7be76c2b6e10dd6a8a /clang-tools-extra/cpp11-migrate/Core
parent476f38a0c28f3cf94535b9eed2e2b2929f075c91 (diff)
downloadbcm5719-llvm-29e449f22280b8c15619e5b3e9df30f1ae9dfb0a.tar.gz
bcm5719-llvm-29e449f22280b8c15619e5b3e9df30f1ae9dfb0a.zip
Revert "cp11-migrate: Integration with LibFormat"
This reverts commit r186866. This breaks the build and the original author Guillaume Papin <guillaume.papin@epitech.eu> asked me to revert so he could look at it more with revane. llvm-svn: 186873
Diffstat (limited to 'clang-tools-extra/cpp11-migrate/Core')
-rw-r--r--clang-tools-extra/cpp11-migrate/Core/CMakeLists.txt3
-rw-r--r--clang-tools-extra/cpp11-migrate/Core/FileOverrides.cpp140
-rw-r--r--clang-tools-extra/cpp11-migrate/Core/FileOverrides.h50
-rw-r--r--clang-tools-extra/cpp11-migrate/Core/Reformatting.cpp76
-rw-r--r--clang-tools-extra/cpp11-migrate/Core/Reformatting.h59
5 files changed, 8 insertions, 320 deletions
diff --git a/clang-tools-extra/cpp11-migrate/Core/CMakeLists.txt b/clang-tools-extra/cpp11-migrate/Core/CMakeLists.txt
index d89d86cc545..562ae65e1eb 100644
--- a/clang-tools-extra/cpp11-migrate/Core/CMakeLists.txt
+++ b/clang-tools-extra/cpp11-migrate/Core/CMakeLists.txt
@@ -7,12 +7,9 @@ add_clang_library(migrateCore
Transform.cpp
IncludeExcludeInfo.cpp
PerfSupport.cpp
- Reformatting.cpp
)
target_link_libraries(migrateCore
- clangFormat
clangTooling
clangBasic
clangASTMatchers
- clangRewriteFrontend
)
diff --git a/clang-tools-extra/cpp11-migrate/Core/FileOverrides.cpp b/clang-tools-extra/cpp11-migrate/Core/FileOverrides.cpp
index ae90b113bdb..200b7fa2d9e 100644
--- a/clang-tools-extra/cpp11-migrate/Core/FileOverrides.cpp
+++ b/clang-tools-extra/cpp11-migrate/Core/FileOverrides.cpp
@@ -17,6 +17,8 @@
#include "clang/Basic/Diagnostic.h"
#include "clang/Basic/DiagnosticOptions.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/Tooling.h"
#include "llvm/Support/FileSystem.h"
@@ -27,11 +29,10 @@
using namespace clang;
using namespace clang::tooling;
-SourceOverrides::SourceOverrides(llvm::StringRef MainFileName,
- bool TrackChanges)
- : MainFileName(MainFileName), TrackChanges(TrackChanges) {}
+SourceOverrides::SourceOverrides(llvm::StringRef MainFileName)
+ : MainFileName(MainFileName) {}
-void SourceOverrides::applyReplacements(Replacements &Replaces) {
+void SourceOverrides::applyReplacements(tooling::Replacements &Replaces) {
llvm::IntrusiveRefCntPtr<clang::DiagnosticOptions> DiagOpts(
new DiagnosticOptions());
DiagnosticsEngine Diagnostics(
@@ -56,8 +57,6 @@ void SourceOverrides::applyReplacements(tooling::Replacements &Replaces,
llvm::errs() << "error: failed to apply some replacements.";
applyRewrites(Rewrites);
- if (TrackChanges)
- adjustChangedRanges(Replaces);
}
void SourceOverrides::applyRewrites(Rewriter &Rewrites) {
@@ -97,30 +96,6 @@ void SourceOverrides::applyRewrites(Rewriter &Rewrites) {
}
}
-void SourceOverrides::adjustChangedRanges(const Replacements &Replaces) {
- // Start by grouping replacements by file name
- Replacements MainFileReplaces;
- llvm::StringMap<Replacements> HeadersReplaces;
-
- for (Replacements::iterator I = Replaces.begin(), E = Replaces.end(); I != E;
- ++I) {
- llvm::StringRef ReplacementFileName = I->getFilePath();
-
- if (ReplacementFileName == MainFileName)
- MainFileReplaces.insert(*I);
- else
- HeadersReplaces[ReplacementFileName].insert(*I);
- }
-
- // Then adjust the changed ranges for each individual file
- MainFileChanges.adjustChangedRanges(Replaces);
- for (llvm::StringMap<Replacements>::iterator I = HeadersReplaces.begin(),
- E = HeadersReplaces.end();
- I != E; ++I) {
- Headers[I->getKey()].Changes.adjustChangedRanges(I->getValue());
- }
-}
-
void SourceOverrides::applyOverrides(SourceManager &SM) const {
FileManager &FM = SM.getFileManager();
@@ -179,109 +154,6 @@ SourceOverrides &FileOverrides::getOrCreate(llvm::StringRef Filename) {
SourceOverrides *&Override = Overrides[Filename];
if (Override == NULL)
- Override = new SourceOverrides(Filename, TrackChanges);
+ Override = new SourceOverrides(Filename);
return *Override;
}
-
-namespace {
-
-/// \brief Comparator to be able to order tooling::Range based on their offset.
-bool rangeLess(clang::tooling::Range A, clang::tooling::Range B) {
- if (A.getOffset() == B.getOffset())
- return A.getLength() < B.getLength();
- return A.getOffset() < B.getOffset();
-}
-
-/// \brief Functor that returns the given range without its overlaps with the
-/// replacement given in the constructor.
-struct RangeReplacedAdjuster {
- RangeReplacedAdjuster(const tooling::Replacement &Replace)
- : Replace(Replace.getOffset(), Replace.getLength()),
- ReplaceNewSize(Replace.getReplacementText().size()) {}
-
- tooling::Range operator()(clang::tooling::Range Range) const {
- if (!Range.overlapsWith(Replace))
- return Range;
- // range inside replacement -> make the range length null
- if (Replace.contains(Range))
- return tooling::Range(Range.getOffset(), 0);
- // replacement inside range -> resize the range
- if (Range.contains(Replace)) {
- int Difference = ReplaceNewSize - Replace.getLength();
- return tooling::Range(Range.getOffset(), Range.getLength() + Difference);
- }
- // beginning of the range replaced -> truncate range beginning
- if (Range.getOffset() > Replace.getOffset()) {
- unsigned ReplaceEnd = Replace.getOffset() + Replace.getLength();
- unsigned RangeEnd = Range.getOffset() + Range.getLength();
- return tooling::Range(ReplaceEnd, RangeEnd - ReplaceEnd);
- }
- // end of the range replaced -> truncate range end
- if (Range.getOffset() < Replace.getOffset())
- return tooling::Range(Range.getOffset(),
- Replace.getOffset() - Range.getOffset());
- llvm_unreachable("conditions not handled properly");
- }
-
- const tooling::Range Replace;
- const unsigned ReplaceNewSize;
-};
-
-} // end anonymous namespace
-
-void ChangedRanges::adjustChangedRanges(const tooling::Replacements &Replaces) {
- // first adjust existing ranges in case they overlap with the replacements
- for (Replacements::iterator I = Replaces.begin(), E = Replaces.end(); I != E;
- ++I) {
- const tooling::Replacement &Replace = *I;
-
- std::transform(Ranges.begin(), Ranges.end(), Ranges.begin(),
- RangeReplacedAdjuster(Replace));
- }
-
- // then shift existing ranges to reflect the new positions
- for (RangeVec::iterator I = Ranges.begin(), E = Ranges.end(); I != E; ++I) {
- unsigned ShiftedOffset =
- tooling::shiftedCodePosition(Replaces, I->getOffset());
- *I = tooling::Range(ShiftedOffset, I->getLength());
- }
-
- // then generate the new ranges from the replacements
- for (Replacements::iterator I = Replaces.begin(), E = Replaces.end(); I != E;
- ++I) {
- const tooling::Replacement &R = *I;
- unsigned Offset = tooling::shiftedCodePosition(Replaces, R.getOffset());
- unsigned Length = R.getReplacementText().size();
-
- Ranges.push_back(tooling::Range(Offset, Length));
- }
-
- // cleanups unecessary ranges to finish
- coalesceRanges();
-}
-
-void ChangedRanges::coalesceRanges() {
- // sort the ranges by offset and then for each group of adjacent/overlapping
- // ranges the first one in the group is extended to cover the whole group.
- std::sort(Ranges.begin(), Ranges.end(), &rangeLess);
- RangeVec::iterator FirstInGroup = Ranges.begin();
- assert(!Ranges.empty() && "unexpected empty vector");
- for (RangeVec::iterator I = Ranges.begin() + 1, E = Ranges.end(); I != E;
- ++I) {
- unsigned GroupEnd = FirstInGroup->getOffset() + FirstInGroup->getLength();
-
- // no contact
- if (I->getOffset() > GroupEnd)
- FirstInGroup = I;
- else {
- unsigned GrpBegin = FirstInGroup->getOffset();
- unsigned GrpEnd = std::max(GroupEnd, I->getOffset() + I->getLength());
- *FirstInGroup = tooling::Range(GrpBegin, GrpEnd - GrpBegin);
- }
- }
-
- // remove the ranges that are covered by the first member of the group
- Ranges.erase(std::unique(Ranges.begin(), Ranges.end(),
- std::mem_fun_ref(&Range::contains)),
- Ranges.end());
-}
diff --git a/clang-tools-extra/cpp11-migrate/Core/FileOverrides.h b/clang-tools-extra/cpp11-migrate/Core/FileOverrides.h
index 2bb3daea7b0..7f8c8d20011 100644
--- a/clang-tools-extra/cpp11-migrate/Core/FileOverrides.h
+++ b/clang-tools-extra/cpp11-migrate/Core/FileOverrides.h
@@ -29,34 +29,6 @@ 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() {}
@@ -64,7 +36,6 @@ struct HeaderOverride {
std::string FileName;
std::string FileOverride;
- ChangedRanges Changes;
};
/// \brief Container mapping header file names to override information.
@@ -75,18 +46,12 @@ typedef llvm::StringMap<HeaderOverride> HeaderOverrides;
/// which changes have been made.
class SourceOverrides {
public:
- SourceOverrides(llvm::StringRef MainFileName, bool TrackChanges);
+ SourceOverrides(llvm::StringRef MainFileName);
/// \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.
@@ -122,14 +87,8 @@ 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;
};
@@ -139,11 +98,7 @@ public:
typedef llvm::StringMap<SourceOverrides *> SourceOverridesMap;
typedef SourceOverridesMap::const_iterator const_iterator;
- /// \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() {}
~FileOverrides();
const_iterator find(llvm::StringRef Filename) const {
@@ -165,7 +120,6 @@ private:
FileOverrides &operator=(const FileOverrides &) LLVM_DELETED_FUNCTION;
SourceOverridesMap Overrides;
- const bool TrackChanges;
};
/// \brief Generate a unique filename to store the replacements.
diff --git a/clang-tools-extra/cpp11-migrate/Core/Reformatting.cpp b/clang-tools-extra/cpp11-migrate/Core/Reformatting.cpp
deleted file mode 100644
index 3fd77612bbf..00000000000
--- a/clang-tools-extra/cpp11-migrate/Core/Reformatting.cpp
+++ /dev/null
@@ -1,76 +0,0 @@
-//===-- Core/Reformatting.cpp - LibFormat integration ---------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-///
-/// \file
-/// \brief This file provides the LibFormat integration used to reformat
-/// migrated code.
-///
-//===----------------------------------------------------------------------===//
-
-#include "Core/Reformatting.h"
-#include "Core/FileOverrides.h"
-#include "clang/Basic/Diagnostic.h"
-#include "clang/Basic/DiagnosticOptions.h"
-#include "clang/Basic/SourceManager.h"
-#include "clang/Lex/Lexer.h"
-
-using namespace clang;
-
-void Reformatter::reformatChanges(SourceOverrides &Overrides) {
- llvm::IntrusiveRefCntPtr<clang::DiagnosticOptions> DiagOpts(
- new DiagnosticOptions());
- DiagnosticsEngine Diagnostics(
- llvm::IntrusiveRefCntPtr<DiagnosticIDs>(new DiagnosticIDs()),
- DiagOpts.getPtr());
- FileManager Files((FileSystemOptions()));
- SourceManager SM(Diagnostics, Files);
-
- reformatChanges(Overrides, SM);
-}
-
-void Reformatter::reformatChanges(SourceOverrides &Overrides,
- clang::SourceManager &SM) {
- tooling::Replacements Replaces;
- Overrides.applyOverrides(SM);
- if (Overrides.isSourceOverriden())
- Replaces = reformatSingleFile(Overrides.getMainFileName(),
- Overrides.getChangedRanges(), SM);
-
- for (HeaderOverrides::const_iterator I = Overrides.headers_begin(),
- E = Overrides.headers_end();
- I != E; ++I) {
- const HeaderOverride &Header = I->getValue();
- const tooling::Replacements &HeaderReplaces =
- reformatSingleFile(Header.FileName, Header.Changes, SM);
- Replaces.insert(HeaderReplaces.begin(), HeaderReplaces.end());
- }
- Overrides.applyReplacements(Replaces, SM);
-}
-
-tooling::Replacements Reformatter::reformatSingleFile(
- llvm::StringRef FileName, const ChangedRanges &Changes, SourceManager &SM) {
- const clang::FileEntry *Entry = SM.getFileManager().getFile(FileName);
- assert(Entry && "expected an existing file");
-
- FileID ID = SM.translateFile(Entry);
- if (ID.isInvalid())
- ID = SM.createFileID(Entry, SourceLocation(), clang::SrcMgr::C_User);
-
- std::vector<CharSourceRange> ReformatRanges;
- SourceLocation StartOfFile = SM.getLocForStartOfFile(ID);
- for (ChangedRanges::const_iterator I = Changes.begin(), E = Changes.end();
- I != E; ++I) {
- SourceLocation Start = StartOfFile.getLocWithOffset(I->getOffset());
- SourceLocation End = Start.getLocWithOffset(I->getLength());
- ReformatRanges.push_back(CharSourceRange::getCharRange(Start, End));
- }
-
- Lexer Lex(ID, SM.getBuffer(ID), SM, getFormattingLangOpts(Style.Standard));
- return format::reformat(Style, Lex, SM, ReformatRanges);
-}
diff --git a/clang-tools-extra/cpp11-migrate/Core/Reformatting.h b/clang-tools-extra/cpp11-migrate/Core/Reformatting.h
deleted file mode 100644
index ac9fef381c6..00000000000
--- a/clang-tools-extra/cpp11-migrate/Core/Reformatting.h
+++ /dev/null
@@ -1,59 +0,0 @@
-//===-- Core/Reformatting.h - LibFormat integration -------------*- C++ -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-///
-/// \file
-/// \brief This file provides the LibFormat integration used to reformat
-/// migrated code.
-///
-//===----------------------------------------------------------------------===//
-
-#ifndef CPP11_MIGRATE_REFORMATTING_H
-#define CPP11_MIGRATE_REFORMATTING_H
-
-#include "clang/Format/Format.h"
-
-class SourceOverrides;
-class ChangedRanges;
-
-class Reformatter {
-public:
- Reformatter(const clang::format::FormatStyle &Style) : Style(Style) {}
-
- /// \brief Reformat the changes made to the file overrides.
- ///
- /// \param Overrides Overriden source files to reformat. Note that since only
- /// the changes are reformatted, file change tracking has to be enabled.
- /// \param SM A SourceManager where the overridens files can be found.
- ///
- /// \sa \c SourceOverrides::isTrackingFileChanges()
- void reformatChanges(SourceOverrides &Overrides, clang::SourceManager &SM);
-
- /// \brief Overload of \c reformatChanges() providing it's own
- /// \c SourceManager.
- void reformatChanges(SourceOverrides &Overrides);
-
- /// \brief Produce a list of replacements to apply on \p FileName, only the
- /// ranges in \p Changes are replaced.
- ///
- /// Since this routine use \c clang::format::reformat() the rules that applies
- /// on the ranges are identical:
- ///
- /// <blockquote> Each range is extended on either end to its next bigger logic
- /// unit, i.e. everything that might influence its formatting or might be
- /// influenced by its formatting.
- /// -- \c clang::format::reformat()</blockquote>
- clang::tooling::Replacements reformatSingleFile(llvm::StringRef FileName,
- const ChangedRanges &Changes,
- clang::SourceManager &SM);
-
-private:
- clang::format::FormatStyle Style;
-};
-
-#endif // CPP11_MIGRATE_REFORMATTING_H
OpenPOWER on IntegriCloud