summaryrefslogtreecommitdiff
path: root/clang-tools-extra/change-namespace
diff options
context:
space:
mode:
authorEric Liu <ioeric@google.com>2017-02-13 17:24:14 +0000
committerEric Liu <ioeric@google.com>2017-02-13 17:24:14 +0000
commit0b3afa3ff0b6e9df6a7d897ea4ef09b991b45e3a (patch)
tree288f0b2db5e0281a091893eb84384f5ffca1d4c5 /clang-tools-extra/change-namespace
parent3c61ec521bc47c228c97611ba5bb22b30a0b7a75 (diff)
[change-namespace] add an option to dump changed files in YAML.
Reviewers: hokein Reviewed By: hokein Subscribers: fhahn, cfe-commits Differential Revision: https://reviews.llvm.org/D29893
Diffstat (limited to 'clang-tools-extra/change-namespace')
-rw-r--r--clang-tools-extra/change-namespace/ChangeNamespace.cpp2
-rw-r--r--clang-tools-extra/change-namespace/tool/ClangChangeNamespace.cpp37
2 files changed, 36 insertions, 3 deletions
diff --git a/clang-tools-extra/change-namespace/ChangeNamespace.cpp b/clang-tools-extra/change-namespace/ChangeNamespace.cpp
index 5c9067f0991..ebd6daeebc5 100644
--- a/clang-tools-extra/change-namespace/ChangeNamespace.cpp
+++ b/clang-tools-extra/change-namespace/ChangeNamespace.cpp
@@ -275,7 +275,7 @@ bool isNestedDeclContext(const DeclContext *D, const DeclContext *Context) {
// Returns true if \p D is visible at \p Loc with DeclContext \p DeclCtx.
bool isDeclVisibleAtLocation(const SourceManager &SM, const Decl *D,
const DeclContext *DeclCtx, SourceLocation Loc) {
- SourceLocation DeclLoc = SM.getSpellingLoc(D->getLocation());
+ SourceLocation DeclLoc = SM.getSpellingLoc(D->getLocStart());
Loc = SM.getSpellingLoc(Loc);
return SM.isBeforeInTranslationUnit(DeclLoc, Loc) &&
(SM.getFileID(DeclLoc) == SM.getFileID(Loc) &&
diff --git a/clang-tools-extra/change-namespace/tool/ClangChangeNamespace.cpp b/clang-tools-extra/change-namespace/tool/ClangChangeNamespace.cpp
index 1cfec1288cf..b49a78d6e87 100644
--- a/clang-tools-extra/change-namespace/tool/ClangChangeNamespace.cpp
+++ b/clang-tools-extra/change-namespace/tool/ClangChangeNamespace.cpp
@@ -39,6 +39,7 @@
#include "clang/Tooling/Tooling.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Signals.h"
+#include "llvm/Support/YAMLTraits.h"
using namespace clang;
using namespace llvm;
@@ -63,6 +64,11 @@ cl::opt<std::string> FilePattern(
cl::opt<bool> Inplace("i", cl::desc("Inplace edit <file>s, if specified."),
cl::cat(ChangeNamespaceCategory));
+cl::opt<bool>
+ DumpYAML("dump_result",
+ cl::desc("Dump new file contents in YAML, if specified."),
+ cl::cat(ChangeNamespaceCategory));
+
cl::opt<std::string> Style("style",
cl::desc("The style name used for reformatting."),
cl::init("LLVM"), cl::cat(ChangeNamespaceCategory));
@@ -101,14 +107,41 @@ int main(int argc, const char **argv) {
if (Inplace)
return Rewrite.overwriteChangedFiles();
- for (const auto &File : Files) {
+ std::set<llvm::StringRef> ChangedFiles;
+ for (const auto &it : Tool.getReplacements())
+ ChangedFiles.insert(it.first);
+
+ if (DumpYAML) {
+ auto WriteToYAML = [&](llvm::raw_ostream &OS) {
+ OS << "[\n";
+ for (auto I = ChangedFiles.begin(), E = ChangedFiles.end(); I != E; ++I) {
+ OS << " {\n";
+ OS << " \"FilePath\": \"" << *I << "\",\n";
+ const auto *Entry = FileMgr.getFile(*I);
+ auto ID = Sources.getOrCreateFileID(Entry, SrcMgr::C_User);
+ std::string Content;
+ llvm::raw_string_ostream ContentStream(Content);
+ Rewrite.getEditBuffer(ID).write(ContentStream);
+ OS << " \"SourceText\": \""
+ << llvm::yaml::escape(ContentStream.str()) << "\"\n";
+ OS << " }";
+ if (I != std::prev(E))
+ OS << ",\n";
+ }
+ OS << "\n]\n";
+ };
+ WriteToYAML(llvm::outs());
+ return 0;
+ }
+
+ for (const auto &File : ChangedFiles) {
const auto *Entry = FileMgr.getFile(File);
auto ID = Sources.getOrCreateFileID(Entry, SrcMgr::C_User);
- // FIXME: print results in parsable format, e.g. JSON.
outs() << "============== " << File << " ==============\n";
Rewrite.getEditBuffer(ID).write(llvm::outs());
outs() << "\n============================================\n";
}
+
return 0;
}