mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
Merge pull request #6677 from nathawes/swift-indexing
Add roles and relations for Swift indexing
This commit is contained in:
@@ -83,3 +83,81 @@ SymbolKind index::getSymbolKindForDecl(const Decl *D) {
|
||||
return SymbolKind::Unknown;
|
||||
}
|
||||
}
|
||||
|
||||
StringRef index::getSymbolKindString(SymbolKind K) {
|
||||
switch (K) {
|
||||
case SymbolKind::Unknown: return "<unknown>";
|
||||
case SymbolKind::Module: return "module";
|
||||
case SymbolKind::ClangModule: return "clang-module";
|
||||
case SymbolKind::Enum: return "enum";
|
||||
case SymbolKind::EnumElement: return "enum-element";
|
||||
case SymbolKind::Struct: return "struct";
|
||||
case SymbolKind::Class: return "class";
|
||||
case SymbolKind::Protocol: return "protocol";
|
||||
case SymbolKind::Extension: return "extension";
|
||||
case SymbolKind::TypeAlias: return "type-alias";
|
||||
case SymbolKind::Function: return "function";
|
||||
case SymbolKind::Variable: return "variable";
|
||||
case SymbolKind::InstanceMethod: return "instance-method";
|
||||
case SymbolKind::ClassMethod: return "class-method";
|
||||
case SymbolKind::StaticMethod: return "static-method";
|
||||
case SymbolKind::InstanceProperty: return "instance-property";
|
||||
case SymbolKind::ClassProperty: return "class-property";
|
||||
case SymbolKind::StaticProperty: return "static-property";
|
||||
case SymbolKind::Constructor: return "constructor";
|
||||
case SymbolKind::Destructor: return "destructor";
|
||||
case SymbolKind::PrefixOperator: return "prefix-operator";
|
||||
case SymbolKind::PostfixOperator: return "postfix-operator";
|
||||
case SymbolKind::InfixOperator: return "infix-operator";
|
||||
case SymbolKind::Accessor: return "accessor";
|
||||
case SymbolKind::Subscript: return "subscript";
|
||||
case SymbolKind::AssociatedType: return "associated-type";
|
||||
case SymbolKind::GenericTypeParam: return "generic-type-param";
|
||||
}
|
||||
llvm_unreachable("invalid symbol kind");
|
||||
}
|
||||
|
||||
void index::applyForEachSymbolSubKind(SymbolSubKindSet SubKinds,
|
||||
llvm::function_ref<void(SymbolSubKind)> Fn) {
|
||||
#define APPLY_FOR_SUBKIND(K) \
|
||||
if (SubKinds & (unsigned)SymbolSubKind::K) \
|
||||
Fn(SymbolSubKind::K)
|
||||
|
||||
APPLY_FOR_SUBKIND(AccessorGetter);
|
||||
APPLY_FOR_SUBKIND(AccessorSetter);
|
||||
APPLY_FOR_SUBKIND(AccessorWillSet);
|
||||
APPLY_FOR_SUBKIND(AccessorDidSet);
|
||||
APPLY_FOR_SUBKIND(AccessorAddressor);
|
||||
APPLY_FOR_SUBKIND(AccessorMutableAddressor);
|
||||
APPLY_FOR_SUBKIND(ExtensionOfStruct);
|
||||
APPLY_FOR_SUBKIND(ExtensionOfClass);
|
||||
APPLY_FOR_SUBKIND(ExtensionOfEnum);
|
||||
APPLY_FOR_SUBKIND(ExtensionOfProtocol);
|
||||
APPLY_FOR_SUBKIND(UnitTest);
|
||||
|
||||
#undef APPLY_FOR_SUBKIND
|
||||
}
|
||||
|
||||
void index::printSymbolSubKinds(SymbolSubKindSet SubKinds, raw_ostream &OS) {
|
||||
bool VisitedOnce = false;
|
||||
applyForEachSymbolSubKind(SubKinds, [&](SymbolSubKind SubKind) {
|
||||
if (VisitedOnce)
|
||||
OS << ',';
|
||||
else
|
||||
VisitedOnce = true;
|
||||
switch (SubKind) {
|
||||
case SymbolSubKind::None: OS << "none"; break;
|
||||
case SymbolSubKind::UnitTest: OS << "test"; break;
|
||||
case SymbolSubKind::AccessorGetter: OS << "get"; break;
|
||||
case SymbolSubKind::AccessorSetter: OS << "set"; break;
|
||||
case SymbolSubKind::AccessorWillSet: OS << "willSet"; break;
|
||||
case SymbolSubKind::AccessorDidSet: OS << "didSet"; break;
|
||||
case SymbolSubKind::AccessorAddressor: OS << "addr"; break;
|
||||
case SymbolSubKind::AccessorMutableAddressor: OS << "mutAddr"; break;
|
||||
case SymbolSubKind::ExtensionOfStruct: OS << "extStruct"; break;
|
||||
case SymbolSubKind::ExtensionOfClass: OS << "extClass"; break;
|
||||
case SymbolSubKind::ExtensionOfEnum: OS << "extEnum"; break;
|
||||
case SymbolSubKind::ExtensionOfProtocol: OS << "extProt"; break;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user