Home | History | Annotate | Line # | Download | only in Index
      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