Viewing file: IndexSymbol.h (4.43 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
//===- IndexSymbol.h - Types and functions for indexing symbols -*- 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_INDEXSYMBOL_H #define LLVM_CLANG_INDEX_INDEXSYMBOL_H
#include "clang/Basic/LLVM.h" #include "clang/Lex/MacroInfo.h" #include "llvm/ADT/STLExtras.h" #include "llvm/Support/DataTypes.h"
namespace clang { class Decl; class LangOptions;
namespace index {
enum class SymbolKind : uint8_t { Unknown,
Module, Namespace, NamespaceAlias, Macro,
Enum, Struct, Class, Protocol, Extension, Union, TypeAlias,
Function, Variable, Field, EnumConstant,
InstanceMethod, ClassMethod, StaticMethod, InstanceProperty, ClassProperty, StaticProperty,
Constructor, Destructor, ConversionFunction,
Parameter, Using, TemplateTypeParm, TemplateTemplateParm, NonTypeTemplateParm,
Concept, /// C++20 concept. };
enum class SymbolLanguage : uint8_t { C, ObjC, CXX, Swift, };
/// Language specific sub-kinds. enum class SymbolSubKind : uint8_t { None, CXXCopyConstructor, CXXMoveConstructor, AccessorGetter, AccessorSetter, UsingTypename, UsingValue, UsingEnum, };
typedef uint16_t SymbolPropertySet; /// Set of properties that provide additional info about a symbol. enum class SymbolProperty : SymbolPropertySet { Generic = 1 << 0, TemplatePartialSpecialization = 1 << 1, TemplateSpecialization = 1 << 2, UnitTest = 1 << 3, IBAnnotated = 1 << 4, IBOutletCollection = 1 << 5, GKInspectable = 1 << 6, Local = 1 << 7, /// Symbol is part of a protocol interface. ProtocolInterface = 1 << 8, }; static const unsigned SymbolPropertyBitNum = 9;
/// Set of roles that are attributed to symbol occurrences. /// /// Low 9 bits of clang-c/include/Index.h CXSymbolRole mirrors this enum. enum class SymbolRole : uint32_t { Declaration = 1 << 0, Definition = 1 << 1, Reference = 1 << 2, Read = 1 << 3, Write = 1 << 4, Call = 1 << 5, Dynamic = 1 << 6, AddressOf = 1 << 7, Implicit = 1 << 8, // FIXME: this is not mirrored in CXSymbolRole. // Note that macro occurrences aren't currently supported in libclang. Undefinition = 1 << 9, // macro #undef
// Relation roles. RelationChildOf = 1 << 10, RelationBaseOf = 1 << 11, RelationOverrideOf = 1 << 12, RelationReceivedBy = 1 << 13, RelationCalledBy = 1 << 14, RelationExtendedBy = 1 << 15, RelationAccessorOf = 1 << 16, RelationContainedBy = 1 << 17, RelationIBTypeOf = 1 << 18, RelationSpecializationOf = 1 << 19,
// Symbol only references the name of the object as written. For example, a // constructor references the class declaration using that role. NameReference = 1 << 20, }; static const unsigned SymbolRoleBitNum = 21; typedef unsigned SymbolRoleSet;
/// Represents a relation to another symbol for a symbol occurrence. struct SymbolRelation { SymbolRoleSet Roles; const Decl *RelatedSymbol;
SymbolRelation(SymbolRoleSet Roles, const Decl *Sym) : Roles(Roles), RelatedSymbol(Sym) {} };
struct SymbolInfo { SymbolKind Kind; SymbolSubKind SubKind; SymbolLanguage Lang; SymbolPropertySet Properties; };
SymbolInfo getSymbolInfo(const Decl *D);
SymbolInfo getSymbolInfoForMacro(const MacroInfo &MI);
bool isFunctionLocalSymbol(const Decl *D);
void applyForEachSymbolRole(SymbolRoleSet Roles, llvm::function_ref<void(SymbolRole)> Fn); bool applyForEachSymbolRoleInterruptible(SymbolRoleSet Roles, llvm::function_ref<bool(SymbolRole)> Fn); void printSymbolRoles(SymbolRoleSet Roles, raw_ostream &OS);
/// \returns true if no name was printed, false otherwise. bool printSymbolName(const Decl *D, const LangOptions &LO, raw_ostream &OS);
StringRef getSymbolKindString(SymbolKind K); StringRef getSymbolSubKindString(SymbolSubKind K); StringRef getSymbolLanguageString(SymbolLanguage K);
void applyForEachSymbolProperty(SymbolPropertySet Props, llvm::function_ref<void(SymbolProperty)> Fn); void printSymbolProperties(SymbolPropertySet Props, raw_ostream &OS);
} // namespace index } // namespace clang
#endif
|