123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188 |
- #pragma once
- #ifdef __GNUC__
- #pragma GCC diagnostic push
- #pragma GCC diagnostic ignored "-Wunused-parameter"
- #endif
- //===- 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
- #ifdef __GNUC__
- #pragma GCC diagnostic pop
- #endif
|