[clang-tools-extra] r334323 - [clangd] Deduplicate CompletionItemKind conversion.
Sam McCall via cfe-commits
cfe-commits at lists.llvm.org
Fri Jun 8 14:17:19 PDT 2018
Author: sammccall
Date: Fri Jun 8 14:17:19 2018
New Revision: 334323
URL: http://llvm.org/viewvc/llvm-project?rev=334323&view=rev
Log:
[clangd] Deduplicate CompletionItemKind conversion.
Modified:
clang-tools-extra/trunk/clangd/CodeComplete.cpp
Modified: clang-tools-extra/trunk/clangd/CodeComplete.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/CodeComplete.cpp?rev=334323&r1=334322&r2=334323&view=diff
==============================================================================
--- clang-tools-extra/trunk/clangd/CodeComplete.cpp (original)
+++ clang-tools-extra/trunk/clangd/CodeComplete.cpp Fri Jun 8 14:17:19 2018
@@ -44,69 +44,6 @@ namespace clang {
namespace clangd {
namespace {
-CompletionItemKind toCompletionItemKind(CXCursorKind CursorKind) {
- switch (CursorKind) {
- case CXCursor_MacroInstantiation:
- case CXCursor_MacroDefinition:
- return CompletionItemKind::Text;
- case CXCursor_CXXMethod:
- case CXCursor_Destructor:
- return CompletionItemKind::Method;
- case CXCursor_FunctionDecl:
- case CXCursor_FunctionTemplate:
- return CompletionItemKind::Function;
- case CXCursor_Constructor:
- return CompletionItemKind::Constructor;
- case CXCursor_FieldDecl:
- return CompletionItemKind::Field;
- case CXCursor_VarDecl:
- case CXCursor_ParmDecl:
- return CompletionItemKind::Variable;
- // FIXME(ioeric): use LSP struct instead of class when it is suppoted in the
- // protocol.
- case CXCursor_StructDecl:
- case CXCursor_ClassDecl:
- case CXCursor_UnionDecl:
- case CXCursor_ClassTemplate:
- case CXCursor_ClassTemplatePartialSpecialization:
- return CompletionItemKind::Class;
- case CXCursor_Namespace:
- case CXCursor_NamespaceAlias:
- case CXCursor_NamespaceRef:
- return CompletionItemKind::Module;
- case CXCursor_EnumConstantDecl:
- return CompletionItemKind::Value;
- case CXCursor_EnumDecl:
- return CompletionItemKind::Enum;
- // FIXME(ioeric): figure out whether reference is the right type for aliases.
- case CXCursor_TypeAliasDecl:
- case CXCursor_TypeAliasTemplateDecl:
- case CXCursor_TypedefDecl:
- case CXCursor_MemberRef:
- case CXCursor_TypeRef:
- return CompletionItemKind::Reference;
- default:
- return CompletionItemKind::Missing;
- }
-}
-
-CompletionItemKind
-toCompletionItemKind(CodeCompletionResult::ResultKind ResKind,
- CXCursorKind CursorKind) {
- switch (ResKind) {
- case CodeCompletionResult::RK_Declaration:
- return toCompletionItemKind(CursorKind);
- case CodeCompletionResult::RK_Keyword:
- return CompletionItemKind::Keyword;
- case CodeCompletionResult::RK_Macro:
- return CompletionItemKind::Text; // unfortunately, there's no 'Macro'
- // completion items in LSP.
- case CodeCompletionResult::RK_Pattern:
- return CompletionItemKind::Snippet;
- }
- llvm_unreachable("Unhandled CodeCompletionResult::ResultKind.");
-}
-
CompletionItemKind toCompletionItemKind(index::SymbolKind Kind) {
using SK = index::SymbolKind;
switch (Kind) {
@@ -160,6 +97,25 @@ CompletionItemKind toCompletionItemKind(
llvm_unreachable("Unhandled clang::index::SymbolKind.");
}
+CompletionItemKind
+toCompletionItemKind(CodeCompletionResult::ResultKind ResKind,
+ const NamedDecl *Decl) {
+ if (Decl)
+ return toCompletionItemKind(index::getSymbolInfo(Decl).Kind);
+ switch (ResKind) {
+ case CodeCompletionResult::RK_Declaration:
+ llvm_unreachable("RK_Declaration without Decl");
+ case CodeCompletionResult::RK_Keyword:
+ return CompletionItemKind::Keyword;
+ case CodeCompletionResult::RK_Macro:
+ return CompletionItemKind::Text; // unfortunately, there's no 'Macro'
+ // completion items in LSP.
+ case CodeCompletionResult::RK_Pattern:
+ return CompletionItemKind::Snippet;
+ }
+ llvm_unreachable("Unhandled CodeCompletionResult::ResultKind.");
+}
+
/// Get the optional chunk as a string. This function is possibly recursive.
///
/// The parameter info for each parameter is appended to the Parameters.
@@ -238,7 +194,7 @@ struct CompletionCandidate {
CompletionItem I;
bool ShouldInsertInclude = true;
if (SemaResult) {
- I.kind = toCompletionItemKind(SemaResult->Kind, SemaResult->CursorKind);
+ I.kind = toCompletionItemKind(SemaResult->Kind, SemaResult->Declaration);
getLabelAndInsertText(*SemaCCS, &I.label, &I.insertText,
Opts.EnableSnippets);
I.filterText = getFilterText(*SemaCCS);
More information about the cfe-commits
mailing list