File: clang_output_parser_api.h

package info (click to toggle)
codelite 14.0%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 112,816 kB
  • sloc: cpp: 483,662; ansic: 150,144; php: 9,569; lex: 4,186; python: 3,417; yacc: 2,820; sh: 1,147; makefile: 52; xml: 13
file content (90 lines) | stat: -rw-r--r-- 1,934 bytes parent folder | download | duplicates (7)
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