Merge pull request #6677 from nathawes/swift-indexing

Add roles and relations for Swift indexing
This commit is contained in:
Nathan Hawes
2017-01-09 14:48:35 -08:00
committed by GitHub
14 changed files with 928 additions and 189 deletions

View File

@@ -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;
}
});
}