diff options
author | Chandler Carruth <chandlerc@gmail.com> | 2013-09-04 17:35:07 +0000 |
---|---|---|
committer | Chandler Carruth <chandlerc@gmail.com> | 2013-09-04 17:35:07 +0000 |
commit | d9063c46f59f4bec47bcbeddca8ca2f789348c03 (patch) | |
tree | 76505542df7a05016dc71ffe44ed3ba264fb54be /clang-tools-extra/cpp11-migrate/AddOverride/AddOverrideActions.cpp | |
parent | 6a23d212897d5402035cfaea82260f6dae1c8f2a (diff) | |
download | bcm5719-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/AddOverrideActions.cpp')
-rw-r--r-- | clang-tools-extra/cpp11-migrate/AddOverride/AddOverrideActions.cpp | 101 |
1 files changed, 0 insertions, 101 deletions
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; -} |