summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/cpp11-migrate/AddOverride
diff options
context:
space:
mode:
authorChandler Carruth <chandlerc@gmail.com>2013-09-04 17:35:07 +0000
committerChandler Carruth <chandlerc@gmail.com>2013-09-04 17:35:07 +0000
commitd9063c46f59f4bec47bcbeddca8ca2f789348c03 (patch)
tree76505542df7a05016dc71ffe44ed3ba264fb54be /clang-tools-extra/cpp11-migrate/AddOverride
parent6a23d212897d5402035cfaea82260f6dae1c8f2a (diff)
downloadbcm5719-llvm-d9063c46f59f4bec47bcbeddca8ca2f789348c03.tar.gz
bcm5719-llvm-d9063c46f59f4bec47bcbeddca8ca2f789348c03.zip
Rename cpp11-migrate to clang-modernize.
There is no reason to expect this tool to be limited to C++11, it seems very likely to be of on-going interest. It seems likely to be useful for modernizing even as new libraries come out in TSes and other formats than a complete standard. Fundamentally, we need something a bit more general. After some discussion on the list, going with 'clang-modernize'. I've tried to do a reasonably comprehensive job of fixing up the names, but I may still have missed some. Feel free to poke me if you spot any fallout here. Things I've tried reasonably hard to find and fix: - cpp11-migrate -> clang-modernize - Migrator -> Modernizer - Clean up the introductory documentation that was C++11 specific. I'll also point out that this tool continues to delight me. =] Also, a huge thanks to those who have so carefully, thoroughly documented the tool. The docs here are simply phenomenal. Every tool should be this well documented. I hope I have updated the documentation reasonably well, but I'm not very good at documentation, so review much appreciated. llvm-svn: 189960
Diffstat (limited to 'clang-tools-extra/cpp11-migrate/AddOverride')
-rw-r--r--clang-tools-extra/cpp11-migrate/AddOverride/AddOverride.cpp87
-rw-r--r--clang-tools-extra/cpp11-migrate/AddOverride/AddOverride.h45
-rw-r--r--clang-tools-extra/cpp11-migrate/AddOverride/AddOverrideActions.cpp101
-rw-r--r--clang-tools-extra/cpp11-migrate/AddOverride/AddOverrideActions.h45
-rw-r--r--clang-tools-extra/cpp11-migrate/AddOverride/AddOverrideMatchers.cpp29
-rw-r--r--clang-tools-extra/cpp11-migrate/AddOverride/AddOverrideMatchers.h28
6 files changed, 0 insertions, 335 deletions
diff --git a/clang-tools-extra/cpp11-migrate/AddOverride/AddOverride.cpp b/clang-tools-extra/cpp11-migrate/AddOverride/AddOverride.cpp
deleted file mode 100644
index 9a13c044e5d..00000000000
--- a/clang-tools-extra/cpp11-migrate/AddOverride/AddOverride.cpp
+++ /dev/null
@@ -1,87 +0,0 @@
-//===-- AddOverride/AddOverride.cpp - add C++11 override ------------------===//
-//
-// 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 implementation of the AddOverrideTransform
-/// class.
-///
-//===----------------------------------------------------------------------===//
-
-#include "AddOverride.h"
-#include "AddOverrideActions.h"
-#include "AddOverrideMatchers.h"
-
-#include "clang/Frontend/CompilerInstance.h"
-
-using clang::ast_matchers::MatchFinder;
-using namespace clang::tooling;
-using namespace clang;
-namespace cl = llvm::cl;
-
-static cl::opt<bool> DetectMacros(
- "override-macros",
- cl::desc("Detect and use macros that expand to the 'override' keyword."),
- cl::cat(TransformsOptionsCategory));
-
-int AddOverrideTransform::apply(const FileOverrides &InputStates,
- const CompilationDatabase &Database,
- const std::vector<std::string> &SourcePaths) {
- ClangTool AddOverrideTool(Database, SourcePaths);
- unsigned AcceptedChanges = 0;
- MatchFinder Finder;
- AddOverrideFixer Fixer(AcceptedChanges, DetectMacros,
- /*Owner=*/ *this);
- Finder.addMatcher(makeCandidateForOverrideAttrMatcher(), &Fixer);
-
- // Make Fixer available to handleBeginSource().
- this->Fixer = &Fixer;
-
- setOverrides(InputStates);
-
- if (int result = AddOverrideTool.run(createActionFactory(Finder))) {
- llvm::errs() << "Error encountered during translation.\n";
- return result;
- }
-
- setAcceptedChanges(AcceptedChanges);
- return 0;
-}
-
-bool AddOverrideTransform::handleBeginSource(clang::CompilerInstance &CI,
- llvm::StringRef Filename) {
- assert(Fixer != NULL && "Fixer must be set");
- Fixer->setPreprocessor(CI.getPreprocessor());
- return Transform::handleBeginSource(CI, Filename);
-}
-
-struct AddOverrideFactory : TransformFactory {
- AddOverrideFactory() {
- // if detecting macros is enabled, do not impose requirements on the
- // compiler. It is assumed that the macros use is "C++11-aware", meaning it
- // won't expand to override if the compiler doesn't support the specifier.
- if (!DetectMacros) {
- Since.Clang = Version(3, 0);
- Since.Gcc = Version(4, 7);
- Since.Icc = Version(14);
- Since.Msvc = Version(8);
- }
- }
-
- Transform *createTransform(const TransformOptions &Opts) LLVM_OVERRIDE {
- return new AddOverrideTransform(Opts);
- }
-};
-
-// Register the factory using this statically initialized variable.
-static TransformFactoryRegistry::Add<AddOverrideFactory>
-X("add-override", "Make use of override specifier where possible");
-
-// This anchor is used to force the linker to link in the generated object file
-// and thus register the factory.
-volatile int AddOverrideTransformAnchorSource = 0;
diff --git a/clang-tools-extra/cpp11-migrate/AddOverride/AddOverride.h b/clang-tools-extra/cpp11-migrate/AddOverride/AddOverride.h
deleted file mode 100644
index 8c39775e48d..00000000000
--- a/clang-tools-extra/cpp11-migrate/AddOverride/AddOverride.h
+++ /dev/null
@@ -1,45 +0,0 @@
-//===-- AddOverride/AddOverride.h - add C++11 override ----------*- 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 definition of the AddOverrideTransform
-/// class which is the main interface to the transform that tries to add the
-/// override keyword to declarations of member function that override virtual
-/// functions in a base class.
-///
-//===----------------------------------------------------------------------===//
-
-#ifndef CPP11_MIGRATE_ADD_OVERRIDE_H
-#define CPP11_MIGRATE_ADD_OVERRIDE_H
-
-#include "Core/Transform.h"
-#include "llvm/Support/Compiler.h"
-
-class AddOverrideFixer;
-
-/// \brief Subclass of Transform that adds the C++11 override keyword to
-/// member functions overriding base class virtual functions.
-class AddOverrideTransform : public Transform {
-public:
- AddOverrideTransform(const TransformOptions &Options)
- : Transform("AddOverride", Options) {}
-
- /// \see Transform::run().
- virtual int apply(const FileOverrides &InputStates,
- const clang::tooling::CompilationDatabase &Database,
- const std::vector<std::string> &SourcePaths) LLVM_OVERRIDE;
-
- virtual bool handleBeginSource(clang::CompilerInstance &CI,
- llvm::StringRef Filename) LLVM_OVERRIDE;
-
-private:
- AddOverrideFixer *Fixer;
-};
-
-#endif // CPP11_MIGRATE_ADD_OVERRIDE_H
diff --git a/clang-tools-extra/cpp11-migrate/AddOverride/AddOverrideActions.cpp b/clang-tools-extra/cpp11-migrate/AddOverride/AddOverrideActions.cpp
deleted file mode 100644
index 134318ed386..00000000000
--- a/clang-tools-extra/cpp11-migrate/AddOverride/AddOverrideActions.cpp
+++ /dev/null
@@ -1,101 +0,0 @@
-//===-- AddOverride/AddOverrideActions.cpp - add C++11 override -----------===//
-//
-// 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 contains the definition of the AddOverrideFixer class
-/// which is used as an ASTMatcher callback.
-///
-//===----------------------------------------------------------------------===//
-
-#include "AddOverrideActions.h"
-#include "AddOverrideMatchers.h"
-#include "Core/Transform.h"
-
-#include "clang/Basic/CharInfo.h"
-#include "clang/AST/ASTContext.h"
-#include "clang/AST/Attr.h"
-#include "clang/AST/RecursiveASTVisitor.h"
-#include "clang/Lex/Lexer.h"
-#include "clang/Lex/Preprocessor.h"
-
-using namespace clang::ast_matchers;
-using namespace clang::tooling;
-using namespace clang;
-
-namespace {
-
-SourceLocation
-backwardSkipWhitespacesAndComments(const SourceManager &SM,
- const clang::ASTContext &Context,
- SourceLocation Loc) {
- for (;;) {
- do {
- Loc = Loc.getLocWithOffset(-1);
- } while (isWhitespace(*FullSourceLoc(Loc, SM).getCharacterData()));
-
- Token Tok;
- SourceLocation Beginning =
- Lexer::GetBeginningOfToken(Loc, SM, Context.getLangOpts());
- const bool Invalid =
- Lexer::getRawToken(Beginning, Tok, SM, Context.getLangOpts());
-
- assert(!Invalid && "Expected a valid token.");
- if (Invalid || Tok.getKind() != tok::comment)
- return Loc.getLocWithOffset(1);
- }
-}
-
-} // end anonymous namespace
-
-void AddOverrideFixer::run(const MatchFinder::MatchResult &Result) {
- SourceManager &SM = *Result.SourceManager;
-
- const CXXMethodDecl *M = Result.Nodes.getDeclAs<CXXMethodDecl>(MethodId);
- assert(M && "Bad Callback. No node provided");
-
- if (const FunctionDecl *TemplateMethod = M->getTemplateInstantiationPattern())
- M = cast<CXXMethodDecl>(TemplateMethod);
-
- if (!Owner.isFileModifiable(SM, M->getLocStart()))
- return;
-
- // First check that there isn't already an override attribute.
- if (M->hasAttr<OverrideAttr>())
- return;
-
- // FIXME: Pure methods are not supported yet as it is difficult to track down
- // the location of '= 0'.
- if (M->isPure())
- return;
-
- if (M->getParent()->hasAnyDependentBases())
- return;
-
- SourceLocation StartLoc;
- if (M->hasInlineBody()) {
- // Insert the override specifier before the function body.
- StartLoc = backwardSkipWhitespacesAndComments(SM, *Result.Context,
- M->getBody()->getLocStart());
- } else {
- StartLoc = SM.getSpellingLoc(M->getLocEnd());
- StartLoc = Lexer::getLocForEndOfToken(StartLoc, 0, SM, LangOptions());
- }
-
- std::string ReplacementText = " override";
- if (DetectMacros) {
- assert(PP != 0 && "No access to Preprocessor object for macro detection");
- clang::TokenValue Tokens[] = { PP->getIdentifierInfo("override") };
- llvm::StringRef MacroName = PP->getLastMacroWithSpelling(StartLoc, Tokens);
- if (!MacroName.empty())
- ReplacementText = (" " + MacroName).str();
- }
- Owner.addReplacementForCurrentTU(
- tooling::Replacement(SM, StartLoc, 0, ReplacementText));
- ++AcceptedChanges;
-}
diff --git a/clang-tools-extra/cpp11-migrate/AddOverride/AddOverrideActions.h b/clang-tools-extra/cpp11-migrate/AddOverride/AddOverrideActions.h
deleted file mode 100644
index afcebeffd4b..00000000000
--- a/clang-tools-extra/cpp11-migrate/AddOverride/AddOverrideActions.h
+++ /dev/null
@@ -1,45 +0,0 @@
-//===-- AddOverride/AddOverrideActions.h - add C++11 override ---*- 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 contains the declaration of the AddOverrideFixer class
-/// which is used as a ASTMatcher callback.
-///
-//===----------------------------------------------------------------------===//
-
-#ifndef CPP11_MIGRATE_ADD_OVERRIDE_ACTIONS_H
-#define CPP11_MIGRATE_ADD_OVERRIDE_ACTIONS_H
-
-#include "clang/ASTMatchers/ASTMatchFinder.h"
-#include "clang/Tooling/Refactoring.h"
-
-class Transform;
-
-/// \brief The callback to be used for add-override migration matchers.
-///
-class AddOverrideFixer : public clang::ast_matchers::MatchFinder::MatchCallback {
-public:
- AddOverrideFixer(unsigned &AcceptedChanges, bool DetectMacros,
- Transform &Owner)
- : AcceptedChanges(AcceptedChanges), DetectMacros(DetectMacros),
- Owner(Owner) {}
-
- /// \brief Entry point to the callback called when matches are made.
- virtual void run(const clang::ast_matchers::MatchFinder::MatchResult &Result);
-
- void setPreprocessor(clang::Preprocessor &PP) { this->PP = &PP; }
-
-private:
- clang::Preprocessor *PP;
- unsigned &AcceptedChanges;
- bool DetectMacros;
- Transform &Owner;
-};
-
-#endif // CPP11_MIGRATE_ADD_OVERRIDE_ACTIONS_H
diff --git a/clang-tools-extra/cpp11-migrate/AddOverride/AddOverrideMatchers.cpp b/clang-tools-extra/cpp11-migrate/AddOverride/AddOverrideMatchers.cpp
deleted file mode 100644
index e323b5d5726..00000000000
--- a/clang-tools-extra/cpp11-migrate/AddOverride/AddOverrideMatchers.cpp
+++ /dev/null
@@ -1,29 +0,0 @@
-//===-- AddOverride/AddOverrideMatchers.cpp - C++11 override --------------===//
-//
-// 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 contains the definitions for matcher-generating functions
-/// and a custom AST_MATCHER for identifying casts of type CK_NullTo*.
-///
-//===----------------------------------------------------------------------===//
-
-#include "AddOverrideMatchers.h"
-#include "clang/AST/ASTContext.h"
-
-using namespace clang::ast_matchers;
-using namespace clang;
-
-const char *MethodId = "method";
-
-DeclarationMatcher makeCandidateForOverrideAttrMatcher() {
- return methodDecl(hasParent(recordDecl()),
- isOverride(),
- unless(destructorDecl())).bind(MethodId);
-}
-
diff --git a/clang-tools-extra/cpp11-migrate/AddOverride/AddOverrideMatchers.h b/clang-tools-extra/cpp11-migrate/AddOverride/AddOverrideMatchers.h
deleted file mode 100644
index 0a81e546e85..00000000000
--- a/clang-tools-extra/cpp11-migrate/AddOverride/AddOverrideMatchers.h
+++ /dev/null
@@ -1,28 +0,0 @@
-//===-- AddOverride/AddOverrideMatchers.h - add C++11 override --*- 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 contains the declarations for matcher-generating functions
-/// and names for bound nodes found by AST matchers.
-///
-//===----------------------------------------------------------------------===//
-
-#ifndef CPP11_MIGRATE_ADD_OVERRIDE_MATCHERS_H
-#define CPP11_MIGRATE_ADD_OVERRIDE_MATCHERS_H
-
-#include "clang/ASTMatchers/ASTMatchers.h"
-
-/// Name to bind with matched expressions.
-extern const char *MethodId;
-
-/// \brief Create a matcher that finds member function declarations that are
-/// candidates for adding the override attribute.
-clang::ast_matchers::DeclarationMatcher makeCandidateForOverrideAttrMatcher();
-
-#endif // CPP11_MIGRATE_ADD_OVERRIDE_MATCHERS_H
OpenPOWER on IntegriCloud