//===- USRGeneration.h - Routines for USR generation ------------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #ifndef LLVM_CLANG_INDEX_USRGENERATION_H #define LLVM_CLANG_INDEX_USRGENERATION_H #include "clang/Basic/LLVM.h" #include "llvm/ADT/StringRef.h" namespace clang { class ASTContext; class Decl; class MacroDefinitionRecord; class Module; class SourceLocation; class SourceManager; class QualType; namespace index { static inline StringRef getUSRSpacePrefix() { return "c:"; } /// Generate a USR for a Decl, including the USR prefix. /// \returns true if the results should be ignored, false otherwise. bool generateUSRForDecl(const Decl *D, SmallVectorImpl &Buf); /// Generate a USR fragment for an Objective-C class. void generateUSRForObjCClass(StringRef Cls, raw_ostream &OS, StringRef ExtSymbolDefinedIn = "", StringRef CategoryContextExtSymbolDefinedIn = ""); /// Generate a USR fragment for an Objective-C class category. void generateUSRForObjCCategory(StringRef Cls, StringRef Cat, raw_ostream &OS, StringRef ClsExtSymbolDefinedIn = "", StringRef CatExtSymbolDefinedIn = ""); /// Generate a USR fragment for an Objective-C instance variable. The /// complete USR can be created by concatenating the USR for the /// encompassing class with this USR fragment. void generateUSRForObjCIvar(StringRef Ivar, raw_ostream &OS); /// Generate a USR fragment for an Objective-C method. void generateUSRForObjCMethod(StringRef Sel, bool IsInstanceMethod, raw_ostream &OS); /// Generate a USR fragment for an Objective-C property. void generateUSRForObjCProperty(StringRef Prop, bool isClassProp, raw_ostream &OS); /// Generate a USR fragment for an Objective-C protocol. void generateUSRForObjCProtocol(StringRef Prot, raw_ostream &OS, StringRef ExtSymbolDefinedIn = ""); /// Generate USR fragment for a global (non-nested) enum. void generateUSRForGlobalEnum(StringRef EnumName, raw_ostream &OS, StringRef ExtSymbolDefinedIn = ""); /// Generate a USR fragment for an enum constant. void generateUSRForEnumConstant(StringRef EnumConstantName, raw_ostream &OS); /// Generate a USR for a macro, including the USR prefix. /// /// \returns true on error, false on success. bool generateUSRForMacro(const MacroDefinitionRecord *MD, const SourceManager &SM, SmallVectorImpl &Buf); bool generateUSRForMacro(StringRef MacroName, SourceLocation Loc, const SourceManager &SM, SmallVectorImpl &Buf); /// Generates a USR for a type. /// /// \return true on error, false on success. bool generateUSRForType(QualType T, ASTContext &Ctx, SmallVectorImpl &Buf); /// Generate a USR for a module, including the USR prefix. /// \returns true on error, false on success. bool generateFullUSRForModule(const Module *Mod, raw_ostream &OS); /// Generate a USR for a top-level module name, including the USR prefix. /// \returns true on error, false on success. bool generateFullUSRForTopLevelModuleName(StringRef ModName, raw_ostream &OS); /// Generate a USR fragment for a module. /// \returns true on error, false on success. bool generateUSRFragmentForModule(const Module *Mod, raw_ostream &OS); /// Generate a USR fragment for a module name. /// \returns true on error, false on success. bool generateUSRFragmentForModuleName(StringRef ModName, raw_ostream &OS); } // namespace index } // namespace clang #endif // LLVM_CLANG_INDEX_USRGENERATION_H