#include "clang/Tooling/ASTDiff/ASTDiff.h"
#include "clang/Tooling/CommonOptionsParser.h"
#include "clang/Tooling/Tooling.h"
#include "llvm/Support/CommandLine.h"
usingnamespacellvm;
usingnamespaceclang;
usingnamespaceclang::tooling;
static cl::OptionCategory ClangDiffCategory("clang-diff options");
static cl::opt<bool>
ASTDump("ast-dump",
cl::desc("Print the internal representation of the AST."),
cl::init(false), cl::cat(ClangDiffCategory));
static cl::opt<bool> ASTDumpJson(
"ast-dump-json",
cl::desc("Print the internal representation of the AST as JSON."),
cl::init(false), cl::cat(ClangDiffCategory));
static cl::opt<bool> PrintMatches("dump-matches",
cl::desc("Print the matched nodes."),
cl::init(false), cl::cat(ClangDiffCategory));
static cl::opt<bool> HtmlDiff("html",
cl::desc("Output a side-by-side diff in HTML."),
cl::init(false), cl::cat(ClangDiffCategory));
static cl::opt<std::string> SourcePath(cl::Positional, cl::desc("<source>"),
cl::Required,
cl::cat(ClangDiffCategory));
static cl::opt<std::string> DestinationPath(cl::Positional,
cl::desc("<destination>"),
cl::Optional,
cl::cat(ClangDiffCategory));
static cl::opt<std::string> StopAfter("stop-diff-after",
cl::desc("<topdown|bottomup>"),
cl::Optional, cl::init(""),
cl::cat(ClangDiffCategory));
static cl::opt<int> MaxSize("s", cl::desc("<maxsize>"), cl::Optional,
cl::init(-1), cl::cat(ClangDiffCategory));
static cl::opt<std::string> BuildPath("p", cl::desc("Build path"), cl::init(""),
cl::Optional, cl::cat(ClangDiffCategory));
static cl::list<std::string> ArgsAfter(
"extra-arg",
cl::desc("Additional argument to append to the compiler command line"),
cl::cat(ClangDiffCategory));
static cl::list<std::string> ArgsBefore(
"extra-arg-before",
cl::desc("Additional argument to prepend to the compiler command line"),
cl::cat(ClangDiffCategory));
static void addExtraArgs(std::unique_ptr<CompilationDatabase> &Compilations) { … }
static std::unique_ptr<ASTUnit>
getAST(const std::unique_ptr<CompilationDatabase> &CommonCompilations,
const StringRef Filename) { … }
static char hexdigit(int N) { … }
static const char HtmlDiffHeader[] = …;
static void printHtml(raw_ostream &OS, char C) { … }
static void printHtml(raw_ostream &OS, const StringRef Str) { … }
static std::string getChangeKindAbbr(diff::ChangeKind Kind) { … }
static unsigned printHtmlForNode(raw_ostream &OS, const diff::ASTDiff &Diff,
diff::SyntaxTree &Tree, bool IsLeft,
diff::NodeId Id, unsigned Offset) { … }
static void printJsonString(raw_ostream &OS, const StringRef Str) { … }
static void printNodeAttributes(raw_ostream &OS, diff::SyntaxTree &Tree,
diff::NodeId Id) { … }
static void printNodeAsJson(raw_ostream &OS, diff::SyntaxTree &Tree,
diff::NodeId Id) { … }
static void printNode(raw_ostream &OS, diff::SyntaxTree &Tree,
diff::NodeId Id) { … }
static void printTree(raw_ostream &OS, diff::SyntaxTree &Tree) { … }
static void printDstChange(raw_ostream &OS, diff::ASTDiff &Diff,
diff::SyntaxTree &SrcTree, diff::SyntaxTree &DstTree,
diff::NodeId Dst) { … }
int main(int argc, const char **argv) { … }