forked from eranif/codelite
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathclang_output_parser_api.h
90 lines (77 loc) · 1.89 KB
/
clang_output_parser_api.h
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#ifndef CLANG_OUTPUT_PARSER_API_H
#define CLANG_OUTPUT_PARSER_API_H
#include <string>
#include <vector>
struct ClangEntry
{
enum {
TypeUnknown = -1,
TypeEnum, // 0
TypeMethod, // 1
TypeCtor, // 2
TypeDtor, // 3
TypeVariable, // 4
TypeClass
};
std::string name;
std::string return_value;
std::string signature; // function's signature
std::string parent;
std::string type_name; // variable type
int type;
std::string func_suffix;
std::string tmp;
void reset() {
name.clear();
return_value.clear();
signature.clear();
parent.clear();
type_name.clear();
tmp.clear();
func_suffix.clear();
type = TypeUnknown;
}
std::string pattern() const {
std::string p;
p += "/^ ";
if(return_value.empty() == false) {
p += return_value;
p += " ";
}
if(type_name.empty() == false) {
p += type_name;
p += " ";
}
if(parent.empty() == false) {
p += parent;
p += "::";
}
if(name.empty() == false) {
p += name;
}
if(signature.empty() == false) {
p += signature;
}
if(func_suffix.empty() == false) {
p += " ";
p += func_suffix;
}
p += " $/";
return p;
}
void print() const {
printf("----\n");
printf("name : %s\n", name.c_str());
printf("return value: %s\n", return_value.c_str());
printf("signature : %s\n", signature.c_str());
printf("parent : %s\n", parent.c_str());
printf("type : %d\n", type);
printf("type_name : %s\n", type_name.c_str());
printf("func_suffix : %s\n", func_suffix.c_str());
printf("pattern : %s\n", pattern().c_str());
}
};
typedef std::vector<ClangEntry> ClangEntryVector;
extern "C" void clang_parse_string(const std::string& str);
extern "C" const ClangEntryVector& clang_results();
#endif // CLANG_OUTPUT_PARSER_API_H