1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | #ifndef LLVM_CLANG_INDEX_INDEXSYMBOL_H |
10 | #define LLVM_CLANG_INDEX_INDEXSYMBOL_H |
11 | |
12 | #include "clang/Basic/LLVM.h" |
13 | #include "clang/Lex/MacroInfo.h" |
14 | #include "llvm/ADT/STLExtras.h" |
15 | #include "llvm/Support/DataTypes.h" |
16 | |
17 | namespace clang { |
18 | class Decl; |
19 | class LangOptions; |
20 | |
21 | namespace index { |
22 | |
23 | enum class SymbolKind : uint8_t { |
24 | Unknown, |
25 | |
26 | Module, |
27 | Namespace, |
28 | NamespaceAlias, |
29 | Macro, |
30 | |
31 | Enum, |
32 | Struct, |
33 | Class, |
34 | Protocol, |
35 | Extension, |
36 | Union, |
37 | TypeAlias, |
38 | |
39 | Function, |
40 | Variable, |
41 | Field, |
42 | EnumConstant, |
43 | |
44 | InstanceMethod, |
45 | ClassMethod, |
46 | StaticMethod, |
47 | InstanceProperty, |
48 | ClassProperty, |
49 | StaticProperty, |
50 | |
51 | Constructor, |
52 | Destructor, |
53 | ConversionFunction, |
54 | |
55 | Parameter, |
56 | Using, |
57 | }; |
58 | |
59 | enum class SymbolLanguage : uint8_t { |
60 | C, |
61 | ObjC, |
62 | CXX, |
63 | Swift, |
64 | }; |
65 | |
66 | |
67 | enum class SymbolSubKind : uint8_t { |
68 | None, |
69 | CXXCopyConstructor, |
70 | CXXMoveConstructor, |
71 | AccessorGetter, |
72 | AccessorSetter, |
73 | UsingTypename, |
74 | UsingValue, |
75 | }; |
76 | |
77 | typedef uint16_t SymbolPropertySet; |
78 | |
79 | enum class SymbolProperty : SymbolPropertySet { |
80 | Generic = 1 << 0, |
81 | TemplatePartialSpecialization = 1 << 1, |
82 | TemplateSpecialization = 1 << 2, |
83 | UnitTest = 1 << 3, |
84 | IBAnnotated = 1 << 4, |
85 | IBOutletCollection = 1 << 5, |
86 | GKInspectable = 1 << 6, |
87 | Local = 1 << 7, |
88 | |
89 | ProtocolInterface = 1 << 8, |
90 | }; |
91 | static const unsigned SymbolPropertyBitNum = 9; |
92 | |
93 | |
94 | |
95 | |
96 | enum class SymbolRole : uint32_t { |
97 | Declaration = 1 << 0, |
98 | Definition = 1 << 1, |
99 | Reference = 1 << 2, |
100 | Read = 1 << 3, |
101 | Write = 1 << 4, |
102 | Call = 1 << 5, |
103 | Dynamic = 1 << 6, |
104 | AddressOf = 1 << 7, |
105 | Implicit = 1 << 8, |
106 | |
107 | |
108 | Undefinition = 1 << 9, |
109 | |
110 | |
111 | RelationChildOf = 1 << 10, |
112 | RelationBaseOf = 1 << 11, |
113 | RelationOverrideOf = 1 << 12, |
114 | RelationReceivedBy = 1 << 13, |
115 | RelationCalledBy = 1 << 14, |
116 | RelationExtendedBy = 1 << 15, |
117 | RelationAccessorOf = 1 << 16, |
118 | RelationContainedBy = 1 << 17, |
119 | RelationIBTypeOf = 1 << 18, |
120 | RelationSpecializationOf = 1 << 19, |
121 | |
122 | |
123 | |
124 | NameReference = 1 << 20, |
125 | }; |
126 | static const unsigned SymbolRoleBitNum = 21; |
127 | typedef unsigned SymbolRoleSet; |
128 | |
129 | |
130 | struct SymbolRelation { |
131 | SymbolRoleSet Roles; |
132 | const Decl *RelatedSymbol; |
133 | |
134 | SymbolRelation(SymbolRoleSet Roles, const Decl *Sym) |
135 | : Roles(Roles), RelatedSymbol(Sym) {} |
136 | }; |
137 | |
138 | struct SymbolInfo { |
139 | SymbolKind Kind; |
140 | SymbolSubKind SubKind; |
141 | SymbolLanguage Lang; |
142 | SymbolPropertySet Properties; |
143 | }; |
144 | |
145 | SymbolInfo getSymbolInfo(const Decl *D); |
146 | |
147 | SymbolInfo getSymbolInfoForMacro(const MacroInfo &MI); |
148 | |
149 | bool isFunctionLocalSymbol(const Decl *D); |
150 | |
151 | void applyForEachSymbolRole(SymbolRoleSet Roles, |
152 | llvm::function_ref<void(SymbolRole)> Fn); |
153 | bool applyForEachSymbolRoleInterruptible(SymbolRoleSet Roles, |
154 | llvm::function_ref<bool(SymbolRole)> Fn); |
155 | void printSymbolRoles(SymbolRoleSet Roles, raw_ostream &OS); |
156 | |
157 | |
158 | bool printSymbolName(const Decl *D, const LangOptions &LO, raw_ostream &OS); |
159 | |
160 | StringRef getSymbolKindString(SymbolKind K); |
161 | StringRef getSymbolSubKindString(SymbolSubKind K); |
162 | StringRef getSymbolLanguageString(SymbolLanguage K); |
163 | |
164 | void applyForEachSymbolProperty(SymbolPropertySet Props, |
165 | llvm::function_ref<void(SymbolProperty)> Fn); |
166 | void printSymbolProperties(SymbolPropertySet Props, raw_ostream &OS); |
167 | |
168 | } |
169 | } |
170 | |
171 | #endif |
172 | |