mirror of
https://github.com/MaskRay/ccls.git
synced 2025-02-01 02:10:26 +00:00
Better insert text for STL types
This commit is contained in:
parent
b727fc5a36
commit
83f8c7afa8
@ -125,22 +125,7 @@ lsCompletionItemKind GetCompletionKind(CXCursorKind cursor_kind) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string BuildLabelString(CXCompletionString completion_string) {
|
void BuildDetailString(CXCompletionString completion_string, std::string& label, std::string& detail, std::string& insert, std::vector<std::string>* parameters) {
|
||||||
std::string label;
|
|
||||||
|
|
||||||
int num_chunks = clang_getNumCompletionChunks(completion_string);
|
|
||||||
for (int i = 0; i < num_chunks; ++i) {
|
|
||||||
CXCompletionChunkKind kind = clang_getCompletionChunkKind(completion_string, i);
|
|
||||||
if (kind == CXCompletionChunk_TypedText) {
|
|
||||||
label += clang::ToString(clang_getCompletionChunkText(completion_string, i));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return label;
|
|
||||||
}
|
|
||||||
|
|
||||||
void BuildDetailString(CXCompletionString completion_string, std::string& detail, std::string& insert, std::vector<std::string>* parameters) {
|
|
||||||
int num_chunks = clang_getNumCompletionChunks(completion_string);
|
int num_chunks = clang_getNumCompletionChunks(completion_string);
|
||||||
for (int i = 0; i < num_chunks; ++i) {
|
for (int i = 0; i < num_chunks; ++i) {
|
||||||
CXCompletionChunkKind kind = clang_getCompletionChunkKind(completion_string, i);
|
CXCompletionChunkKind kind = clang_getCompletionChunkKind(completion_string, i);
|
||||||
@ -148,7 +133,7 @@ void BuildDetailString(CXCompletionString completion_string, std::string& detail
|
|||||||
switch (kind) {
|
switch (kind) {
|
||||||
case CXCompletionChunk_Optional: {
|
case CXCompletionChunk_Optional: {
|
||||||
CXCompletionString nested = clang_getCompletionChunkCompletionString(completion_string, i);
|
CXCompletionString nested = clang_getCompletionChunkCompletionString(completion_string, i);
|
||||||
BuildDetailString(nested, detail, insert, parameters);
|
BuildDetailString(nested, label, detail, insert, parameters);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -165,15 +150,26 @@ void BuildDetailString(CXCompletionString completion_string, std::string& detail
|
|||||||
// to be very reliable.
|
// to be very reliable.
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CXCompletionChunk_TypedText:
|
case CXCompletionChunk_TypedText: {
|
||||||
case CXCompletionChunk_Text:
|
std::string text = clang::ToString(clang_getCompletionChunkText(completion_string, i));
|
||||||
case CXCompletionChunk_Informative: {
|
label = text;
|
||||||
|
detail += text;
|
||||||
|
insert += text;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case CXCompletionChunk_Text: {
|
||||||
std::string text = clang::ToString(clang_getCompletionChunkText(completion_string, i));
|
std::string text = clang::ToString(clang_getCompletionChunkText(completion_string, i));
|
||||||
detail += text;
|
detail += text;
|
||||||
insert += text;
|
insert += text;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case CXCompletionChunk_Informative: {
|
||||||
|
detail += clang::ToString(clang_getCompletionChunkText(completion_string, i));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case CXCompletionChunk_ResultType: {
|
case CXCompletionChunk_ResultType: {
|
||||||
CXString text = clang_getCompletionChunkText(completion_string, i);
|
CXString text = clang_getCompletionChunkText(completion_string, i);
|
||||||
std::string new_detail = clang::ToString(text) + detail + " ";
|
std::string new_detail = clang::ToString(text) + detail + " ";
|
||||||
@ -334,8 +330,7 @@ void CompletionQueryMain(CompletionManager* completion_manager) {
|
|||||||
|
|
||||||
// kind/label/detail/docs/sortText
|
// kind/label/detail/docs/sortText
|
||||||
ls_completion_item.kind = GetCompletionKind(result.CursorKind);
|
ls_completion_item.kind = GetCompletionKind(result.CursorKind);
|
||||||
ls_completion_item.label = BuildLabelString(result.CompletionString);
|
BuildDetailString(result.CompletionString, ls_completion_item.label, ls_completion_item.detail, ls_completion_item.insertText, &ls_completion_item.parameters_);
|
||||||
BuildDetailString(result.CompletionString, ls_completion_item.detail, ls_completion_item.insertText, &ls_completion_item.parameters_);
|
|
||||||
ls_completion_item.documentation = clang::ToString(clang_getCompletionBriefComment(result.CompletionString));
|
ls_completion_item.documentation = clang::ToString(clang_getCompletionBriefComment(result.CompletionString));
|
||||||
ls_completion_item.sortText = uint64_t(GetCompletionPriority(result.CompletionString, result.CursorKind, ls_completion_item.label));
|
ls_completion_item.sortText = uint64_t(GetCompletionPriority(result.CompletionString, result.CursorKind, ls_completion_item.label));
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user