| //===--- IndexSymbol.h - Index symbol data types ----------------*- C++ -*-===// |
| // |
| // This source file is part of the Swift.org open source project |
| // |
| // Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors |
| // Licensed under Apache License v2.0 with Runtime Library Exception |
| // |
| // See https://swift.org/LICENSE.txt for license information |
| // See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef SWIFT_INDEX_INDEXSYMBOL_H |
| #define SWIFT_INDEX_INDEXSYMBOL_H |
| |
| #include "swift/Basic/LLVM.h" |
| #include "clang/Index/IndexSymbol.h" |
| #include "llvm/ADT/SmallString.h" |
| |
| namespace swift { |
| class Decl; |
| class ValueDecl; |
| enum class AccessorKind; |
| |
| namespace index { |
| |
| using clang::index::SymbolKind; |
| using clang::index::SymbolLanguage; |
| using clang::index::SymbolSubKind; |
| using clang::index::SymbolProperty; |
| using clang::index::SymbolPropertySet; |
| using clang::index::SymbolRole; |
| using clang::index::SymbolRoleSet; |
| using clang::index::SymbolRelation; |
| using clang::index::SymbolInfo; |
| |
| inline SymbolPropertySet operator&(SymbolPropertySet SKSet, SymbolProperty SK) { |
| return SKSet & (SymbolPropertySet)SK; |
| } |
| inline SymbolPropertySet operator|(SymbolPropertySet SKSet, SymbolProperty SK) { |
| return SKSet | (SymbolPropertySet)SK; |
| } |
| inline SymbolPropertySet &operator|=(SymbolPropertySet &SKSet, SymbolProperty SK) { |
| return SKSet = SKSet | SK; |
| } |
| |
| struct IndexRelation { |
| const Decl *decl; |
| SymbolInfo symInfo; |
| SymbolRoleSet roles = SymbolRoleSet(0); |
| |
| // The following strings are guaranteed to live at least as long as the |
| // current indexing action. |
| StringRef name; |
| StringRef USR; // USR may be safely compared by pointer. |
| StringRef group; |
| |
| IndexRelation(SymbolRoleSet Roles, const Decl *Sym, SymbolInfo SymInfo, StringRef Name, StringRef USR) |
| : decl(Sym), symInfo(SymInfo), roles(Roles), name(Name), USR(USR) {} |
| |
| IndexRelation() = default; |
| }; |
| |
| struct IndexSymbol : IndexRelation { |
| SmallVector<IndexRelation, 3> Relations; |
| unsigned line = 0; |
| unsigned column = 0; |
| |
| IndexSymbol() = default; |
| |
| StringRef getReceiverUSR() const { |
| for (auto Relation: Relations) { |
| if (Relation.roles & (SymbolRoleSet) SymbolRole::RelationReceivedBy) |
| return Relation.USR; |
| } |
| return StringRef(); |
| } |
| }; |
| |
| SymbolInfo getSymbolInfoForDecl(const Decl *D); |
| SymbolSubKind getSubKindForAccessor(AccessorKind AK); |
| bool isLocalSymbol(const Decl *D); |
| |
| using clang::index::printSymbolProperties; |
| |
| } // end namespace index |
| } // end namespace swift |
| |
| #endif // SWIFT_INDEX_INDEXSYMBOL_H |