1 | //===- USRGeneration.h - Routines for USR generation ------------*- C++ -*-===// |
2 | // |
3 | // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
4 | // See https://llvm.org/LICENSE.txt for license information. |
5 | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
6 | // |
7 | //===----------------------------------------------------------------------===// |
8 | |
9 | #ifndef LLVM_CLANG_INDEX_USRGENERATION_H |
10 | #define LLVM_CLANG_INDEX_USRGENERATION_H |
11 | |
12 | #include "clang/Basic/LLVM.h" |
13 | #include "llvm/ADT/StringRef.h" |
14 | |
15 | namespace clang { |
16 | class ASTContext; |
17 | class Decl; |
18 | class MacroDefinitionRecord; |
19 | class Module; |
20 | class SourceLocation; |
21 | class SourceManager; |
22 | class QualType; |
23 | |
24 | namespace index { |
25 | |
26 | static inline StringRef getUSRSpacePrefix() { |
27 | return "c:" ; |
28 | } |
29 | |
30 | /// Generate a USR for a Decl, including the USR prefix. |
31 | /// \returns true if the results should be ignored, false otherwise. |
32 | bool generateUSRForDecl(const Decl *D, SmallVectorImpl<char> &Buf); |
33 | |
34 | /// Generate a USR fragment for an Objective-C class. |
35 | void generateUSRForObjCClass(StringRef Cls, raw_ostream &OS, |
36 | StringRef ExtSymbolDefinedIn = "" , |
37 | StringRef CategoryContextExtSymbolDefinedIn = "" ); |
38 | |
39 | /// Generate a USR fragment for an Objective-C class category. |
40 | void generateUSRForObjCCategory(StringRef Cls, StringRef Cat, raw_ostream &OS, |
41 | StringRef ClsExtSymbolDefinedIn = "" , |
42 | StringRef CatExtSymbolDefinedIn = "" ); |
43 | |
44 | /// Generate a USR fragment for an Objective-C instance variable. The |
45 | /// complete USR can be created by concatenating the USR for the |
46 | /// encompassing class with this USR fragment. |
47 | void generateUSRForObjCIvar(StringRef Ivar, raw_ostream &OS); |
48 | |
49 | /// Generate a USR fragment for an Objective-C method. |
50 | void generateUSRForObjCMethod(StringRef Sel, bool IsInstanceMethod, |
51 | raw_ostream &OS); |
52 | |
53 | /// Generate a USR fragment for an Objective-C property. |
54 | void generateUSRForObjCProperty(StringRef Prop, bool isClassProp, raw_ostream &OS); |
55 | |
56 | /// Generate a USR fragment for an Objective-C protocol. |
57 | void generateUSRForObjCProtocol(StringRef Prot, raw_ostream &OS, |
58 | StringRef ExtSymbolDefinedIn = "" ); |
59 | |
60 | /// Generate USR fragment for a global (non-nested) enum. |
61 | void generateUSRForGlobalEnum(StringRef EnumName, raw_ostream &OS, |
62 | StringRef ExtSymbolDefinedIn = "" ); |
63 | |
64 | /// Generate a USR fragment for an enum constant. |
65 | void generateUSRForEnumConstant(StringRef EnumConstantName, raw_ostream &OS); |
66 | |
67 | /// Generate a USR for a macro, including the USR prefix. |
68 | /// |
69 | /// \returns true on error, false on success. |
70 | bool generateUSRForMacro(const MacroDefinitionRecord *MD, |
71 | const SourceManager &SM, SmallVectorImpl<char> &Buf); |
72 | bool generateUSRForMacro(StringRef MacroName, SourceLocation Loc, |
73 | const SourceManager &SM, SmallVectorImpl<char> &Buf); |
74 | |
75 | /// Generates a USR for a type. |
76 | /// |
77 | /// \return true on error, false on success. |
78 | bool generateUSRForType(QualType T, ASTContext &Ctx, SmallVectorImpl<char> &Buf); |
79 | |
80 | /// Generate a USR for a module, including the USR prefix. |
81 | /// \returns true on error, false on success. |
82 | bool generateFullUSRForModule(const Module *Mod, raw_ostream &OS); |
83 | |
84 | /// Generate a USR for a top-level module name, including the USR prefix. |
85 | /// \returns true on error, false on success. |
86 | bool generateFullUSRForTopLevelModuleName(StringRef ModName, raw_ostream &OS); |
87 | |
88 | /// Generate a USR fragment for a module. |
89 | /// \returns true on error, false on success. |
90 | bool generateUSRFragmentForModule(const Module *Mod, raw_ostream &OS); |
91 | |
92 | /// Generate a USR fragment for a module name. |
93 | /// \returns true on error, false on success. |
94 | bool generateUSRFragmentForModuleName(StringRef ModName, raw_ostream &OS); |
95 | |
96 | |
97 | } // namespace index |
98 | } // namespace clang |
99 | |
100 | #endif // LLVM_CLANG_INDEX_USRGENERATION_H |
101 | |
102 | |