17 #include "clang/AST/ASTConsumer.h"
18 #include "clang/AST/ASTContext.h"
19 #include "clang/Basic/FileManager.h"
20 #include "clang/Frontend/CompilerInstance.h"
21 #include "clang/Frontend/FrontendAction.h"
22 #include "clang/Lex/Lexer.h"
23 #include "clang/Lex/Preprocessor.h"
24 #include "clang/Tooling/CommonOptionsParser.h"
25 #include "clang/Tooling/Refactoring.h"
26 #include "clang/Tooling/Tooling.h"
39 const std::vector<std::string> &USRs,
40 tooling::Replacements &Replaces,
42 : NewName(NewName), PrevName(PrevName), USRs(USRs), Replaces(Replaces),
43 PrintLocations(PrintLocations) {
47 const auto &
SourceMgr = Context.getSourceManager();
48 std::vector<SourceLocation> RenamingCandidates;
49 std::vector<SourceLocation> NewCandidates;
51 for (
const auto &
USR : USRs) {
53 Context.getTranslationUnitDecl());
54 RenamingCandidates.insert(RenamingCandidates.end(), NewCandidates.begin(),
56 NewCandidates.clear();
59 auto PrevNameLen =
PrevName.length();
61 for (
const auto &
Loc : RenamingCandidates) {
63 errs() <<
"clang-rename: renamed at: " <<
SourceMgr.getFilename(
Loc)
64 <<
":" << FullLoc.getSpellingLineNumber() <<
":"
65 << FullLoc.getSpellingColumnNumber() <<
"\n";
66 Replaces.insert(tooling::Replacement(
SourceMgr,
Loc, PrevNameLen,
70 for (
const auto &
Loc : RenamingCandidates)
71 Replaces.insert(tooling::Replacement(
SourceMgr,
Loc, PrevNameLen,
77 const std::vector<std::string> &USRs;
78 tooling::Replacements &Replaces;
82 std::unique_ptr<ASTConsumer> RenamingAction::newASTConsumer() {
SourceLocation Loc
'#' location in the include directive
RenamingASTConsumer(const std::string &NewName, const std::string &PrevName, const std::vector< std::string > &USRs, tooling::Replacements &Replaces, bool PrintLocations)
static cl::opt< bool > PrintLocations("pl", cl::desc("Print the locations affected by renaming to stderr."), cl::cat(ClangRenameCategory))
void HandleTranslationUnit(ASTContext &Context) override
static cl::opt< std::string > NewName("new-name", cl::desc("The new name to change the symbol to."), cl::cat(ClangRenameCategory))
const std::string PrevName
Provides functionality for finding all instances of a USR in a given AST.
std::vector< SourceLocation > getLocationsOfUSR(StringRef USR, StringRef PrevName, Decl *Decl)
ClangTidyContext & Context
Provides an action to rename every symbol at a point.