#include "Basic/SymbolKind.h" #include "Compiler/Compilation.h" namespace clice { SymbolKind SymbolKind::from(const clang::Decl* decl) { if(llvm::isa(decl)) { return SymbolKind::Namespace; } else if(llvm::isa(decl)) { return SymbolKind::Type; } else if(auto TD = llvm::dyn_cast(decl)) { return TD->isEnum() ? SymbolKind::Enum : TD->isStruct() ? SymbolKind::Struct : TD->isUnion() ? SymbolKind::Union : SymbolKind::Class; } else if(llvm::isa(decl)) { return SymbolKind::Field; } else if(llvm::isa(decl)) { return SymbolKind::EnumMember; } else if(auto FD = llvm::dyn_cast(decl)) { return FD->isOverloadedOperator() ? SymbolKind::Operator : FD->isCXXClassMember() ? SymbolKind::Method : SymbolKind::Function; } else if(llvm::isa(decl)) { return SymbolKind::Parameter; } else if(llvm::isa(decl)) { return SymbolKind::Variable; } else if(llvm::isa(decl)) { return SymbolKind::Label; } else if(llvm::isa(decl)) { return SymbolKind::Concept; } else { return SymbolKind::Invalid; } } SymbolKind SymbolKind::from(const clang::tok::TokenKind kind) { return {}; } } // namespace clice