/
ClangScope.cpp
59 lines (51 loc) · 1.92 KB
/
ClangScope.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include "clang/Tooling/CommonOptionsParser.h"
#include "clang/Frontend/CompilerInstance.h"
#include <iostream>
#include "Indexer.h"
#include "CrossReference.h"
llvm::cl::opt<std::string> Path("p", llvm::cl::desc("Project path"),
llvm::cl::Optional);
llvm::cl::opt<int> LogLevel("l", llvm::cl::desc("Log level (0-3)"),
llvm::cl::Optional);
llvm::cl::opt<std::string> DbFile("db", llvm::cl::desc("Database file"),
llvm::cl::Optional);
llvm::cl::opt<ReferenceType> QueryType(llvm::cl::desc("Set the query type:"),
llvm::cl::values(
clEnumValN(Declaration, "d", "Declaration"),
clEnumValN(Definition, "D", "Definition"),
clEnumValN(Override, "o", "Override"),
clEnumValN(Use, "u", "Use"),
clEnumValEnd));
llvm::cl::opt<IdentifierType> IdType(llvm::cl::desc("Set the identifier type:"),
llvm::cl::values(
clEnumValN(Enum, "e", "Enum"),
clEnumValN(Function, "f", "Function"),
clEnumValN(Namespace, "ns", "Namespace"),
clEnumValN(Type, "t", "Type"),
clEnumValN(Typedef, "td", "Typedef"),
clEnumValN(Variable, "v", "Variable"),
clEnumValEnd));
llvm::cl::opt<std::string> Query("q",
llvm::cl::desc("<filename:line:col>"),
llvm::cl::Optional);
// FIXME: This needs to be made externally available so that IndexASTAction can
// access what it needs.
Indexer *Index;
int main(int argc, const char *argv[]) {
llvm::cl::ParseCommandLineOptions(argc, argv);
if (LogLevel < 0 || LogLevel > 3) {
std::cerr << "Log level must be 0-3";
return 1;
}
if (!DbFile.length())
DbFile = "clscope.db";
CrossReference CrossRef(DbFile);
if (Query.length() > 0) {
CrossRef.ListReferences(Query, QueryType, IdType);
} else {
// Index
Index = new Indexer(Path, CrossRef);
Index->Run();
}
return 0;
}