1//===- USRGeneration.h - Routines for USR generation ----------------------===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10#ifndef LLVM_CLANG_INDEX_USRGENERATION_H
11#define LLVM_CLANG_INDEX_USRGENERATION_H
12
13#include "clang/Basic/LLVM.h"
14#include "llvm/ADT/StringRef.h"
15
16namespace clang {
17class Decl;
18class MacroDefinition;
19class SourceManager;
20
21namespace index {
22
23static inline StringRef getUSRSpacePrefix() {
24  return "c:";
25}
26
27/// \brief Generate a USR for a Decl, including the USR prefix.
28/// \returns true if the results should be ignored, false otherwise.
29bool generateUSRForDecl(const Decl *D, SmallVectorImpl<char> &Buf);
30
31/// \brief Generate a USR fragment for an Objective-C class.
32void generateUSRForObjCClass(StringRef Cls, raw_ostream &OS);
33
34/// \brief Generate a USR fragment for an Objective-C class category.
35void generateUSRForObjCCategory(StringRef Cls, StringRef Cat, raw_ostream &OS);
36
37/// \brief Generate a USR fragment for an Objective-C instance variable.  The
38/// complete USR can be created by concatenating the USR for the
39/// encompassing class with this USR fragment.
40void generateUSRForObjCIvar(StringRef Ivar, raw_ostream &OS);
41
42/// \brief Generate a USR fragment for an Objective-C method.
43void generateUSRForObjCMethod(StringRef Sel, bool IsInstanceMethod,
44                              raw_ostream &OS);
45
46/// \brief Generate a USR fragment for an Objective-C property.
47void generateUSRForObjCProperty(StringRef Prop, raw_ostream &OS);
48
49/// \brief Generate a USR fragment for an Objective-C protocol.
50void generateUSRForObjCProtocol(StringRef Prot, raw_ostream &OS);
51
52/// \brief Generate a USR for a macro, including the USR prefix.
53///
54/// \returns true on error, false on success.
55bool generateUSRForMacro(const MacroDefinition *MD, const SourceManager &SM,
56                         SmallVectorImpl<char> &Buf);
57
58} // namespace index
59} // namespace clang
60
61#endif // LLVM_CLANG_IDE_USRGENERATION_H
62
63