mirror of
https://github.com/MaskRay/ccls.git
synced 2025-02-21 07:59:27 +00:00
Stop appending to insert
after a placeholder if snippetSupport is false
This commit is contained in:
parent
d4a4e15976
commit
ce49a5c8d9
@ -149,10 +149,13 @@ lsCompletionItemKind GetCompletionKind(CXCursorKind cursor_kind) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// |do_insert|: if |!do_insert|, do not append strings to |insert| after
|
||||||
|
// a placeholder.
|
||||||
void BuildDetailString(CXCompletionString completion_string,
|
void BuildDetailString(CXCompletionString completion_string,
|
||||||
std::string& label,
|
std::string& label,
|
||||||
std::string& detail,
|
std::string& detail,
|
||||||
std::string& insert,
|
std::string& insert,
|
||||||
|
bool& do_insert,
|
||||||
lsInsertTextFormat& format,
|
lsInsertTextFormat& format,
|
||||||
std::vector<std::string>* parameters,
|
std::vector<std::string>* parameters,
|
||||||
bool include_snippets) {
|
bool include_snippets) {
|
||||||
@ -165,8 +168,8 @@ void BuildDetailString(CXCompletionString completion_string,
|
|||||||
case CXCompletionChunk_Optional: {
|
case CXCompletionChunk_Optional: {
|
||||||
CXCompletionString nested =
|
CXCompletionString nested =
|
||||||
clang_getCompletionChunkCompletionString(completion_string, i);
|
clang_getCompletionChunkCompletionString(completion_string, i);
|
||||||
BuildDetailString(nested, label, detail, insert, format, parameters,
|
BuildDetailString(nested, label, detail, insert, do_insert, format,
|
||||||
include_snippets);
|
parameters, include_snippets);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -180,7 +183,8 @@ void BuildDetailString(CXCompletionString completion_string,
|
|||||||
insert +=
|
insert +=
|
||||||
"${" + std::to_string(parameters->size()) + ":" + text + "}";
|
"${" + std::to_string(parameters->size()) + ":" + text + "}";
|
||||||
format = lsInsertTextFormat::Snippet;
|
format = lsInsertTextFormat::Snippet;
|
||||||
}
|
} else
|
||||||
|
do_insert = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -194,6 +198,7 @@ void BuildDetailString(CXCompletionString completion_string,
|
|||||||
ToString(clang_getCompletionChunkText(completion_string, i));
|
ToString(clang_getCompletionChunkText(completion_string, i));
|
||||||
label = text;
|
label = text;
|
||||||
detail += text;
|
detail += text;
|
||||||
|
if (do_insert)
|
||||||
insert += text;
|
insert += text;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -202,6 +207,7 @@ void BuildDetailString(CXCompletionString completion_string,
|
|||||||
std::string text =
|
std::string text =
|
||||||
ToString(clang_getCompletionChunkText(completion_string, i));
|
ToString(clang_getCompletionChunkText(completion_string, i));
|
||||||
detail += text;
|
detail += text;
|
||||||
|
if (do_insert)
|
||||||
insert += text;
|
insert += text;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -220,63 +226,68 @@ void BuildDetailString(CXCompletionString completion_string,
|
|||||||
|
|
||||||
case CXCompletionChunk_LeftParen:
|
case CXCompletionChunk_LeftParen:
|
||||||
detail += "(";
|
detail += "(";
|
||||||
|
if (do_insert)
|
||||||
insert += "(";
|
insert += "(";
|
||||||
// Put cursor between parentheses if snippets are not enabled
|
|
||||||
if (!include_snippets) {
|
|
||||||
insert += "$1";
|
|
||||||
format = lsInsertTextFormat::Snippet;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case CXCompletionChunk_RightParen:
|
case CXCompletionChunk_RightParen:
|
||||||
detail += ")";
|
detail += ")";
|
||||||
|
if (do_insert)
|
||||||
insert += ")";
|
insert += ")";
|
||||||
break;
|
break;
|
||||||
case CXCompletionChunk_LeftBracket:
|
case CXCompletionChunk_LeftBracket:
|
||||||
detail += "[";
|
detail += "[";
|
||||||
|
if (do_insert)
|
||||||
insert += "[";
|
insert += "[";
|
||||||
break;
|
break;
|
||||||
case CXCompletionChunk_RightBracket:
|
case CXCompletionChunk_RightBracket:
|
||||||
detail += "]";
|
detail += "]";
|
||||||
|
if (do_insert)
|
||||||
insert += "]";
|
insert += "]";
|
||||||
break;
|
break;
|
||||||
case CXCompletionChunk_LeftBrace:
|
case CXCompletionChunk_LeftBrace:
|
||||||
detail += "{";
|
detail += "{";
|
||||||
|
if (do_insert)
|
||||||
insert += "{";
|
insert += "{";
|
||||||
break;
|
break;
|
||||||
case CXCompletionChunk_RightBrace:
|
case CXCompletionChunk_RightBrace:
|
||||||
detail += "}";
|
detail += "}";
|
||||||
|
if (do_insert)
|
||||||
insert += "}";
|
insert += "}";
|
||||||
break;
|
break;
|
||||||
case CXCompletionChunk_LeftAngle:
|
case CXCompletionChunk_LeftAngle:
|
||||||
detail += "<";
|
detail += "<";
|
||||||
|
if (do_insert)
|
||||||
insert += "<";
|
insert += "<";
|
||||||
break;
|
break;
|
||||||
case CXCompletionChunk_RightAngle:
|
case CXCompletionChunk_RightAngle:
|
||||||
detail += ">";
|
detail += ">";
|
||||||
|
if (do_insert)
|
||||||
insert += ">";
|
insert += ">";
|
||||||
break;
|
break;
|
||||||
case CXCompletionChunk_Comma:
|
case CXCompletionChunk_Comma:
|
||||||
detail += ", ";
|
detail += ", ";
|
||||||
// Only put comma's between parentheses if snippets are enabled
|
if (do_insert)
|
||||||
if (include_snippets) {
|
|
||||||
insert += ", ";
|
insert += ", ";
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case CXCompletionChunk_Colon:
|
case CXCompletionChunk_Colon:
|
||||||
detail += ":";
|
detail += ":";
|
||||||
|
if (do_insert)
|
||||||
insert += ":";
|
insert += ":";
|
||||||
break;
|
break;
|
||||||
case CXCompletionChunk_SemiColon:
|
case CXCompletionChunk_SemiColon:
|
||||||
detail += ";";
|
detail += ";";
|
||||||
|
if (do_insert)
|
||||||
insert += ";";
|
insert += ";";
|
||||||
break;
|
break;
|
||||||
case CXCompletionChunk_Equal:
|
case CXCompletionChunk_Equal:
|
||||||
detail += "=";
|
detail += "=";
|
||||||
|
if (do_insert)
|
||||||
insert += "=";
|
insert += "=";
|
||||||
break;
|
break;
|
||||||
case CXCompletionChunk_HorizontalSpace:
|
case CXCompletionChunk_HorizontalSpace:
|
||||||
case CXCompletionChunk_VerticalSpace:
|
case CXCompletionChunk_VerticalSpace:
|
||||||
detail += " ";
|
detail += " ";
|
||||||
|
if (do_insert)
|
||||||
insert += " ";
|
insert += " ";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -440,12 +451,13 @@ void CompletionQueryMain(ClangCompleteManager* completion_manager) {
|
|||||||
// TODO: fill in more data
|
// TODO: fill in more data
|
||||||
lsCompletionItem ls_completion_item;
|
lsCompletionItem ls_completion_item;
|
||||||
|
|
||||||
|
bool do_insert = true;
|
||||||
// kind/label/detail/docs/sortText
|
// kind/label/detail/docs/sortText
|
||||||
ls_completion_item.kind = GetCompletionKind(result.CursorKind);
|
ls_completion_item.kind = GetCompletionKind(result.CursorKind);
|
||||||
BuildDetailString(
|
BuildDetailString(
|
||||||
result.CompletionString, ls_completion_item.label,
|
result.CompletionString, ls_completion_item.label,
|
||||||
ls_completion_item.detail, ls_completion_item.insertText,
|
ls_completion_item.detail, ls_completion_item.insertText,
|
||||||
ls_completion_item.insertTextFormat,
|
do_insert, ls_completion_item.insertTextFormat,
|
||||||
&ls_completion_item.parameters_,
|
&ls_completion_item.parameters_,
|
||||||
completion_manager->config_->client.snippetSupport);
|
completion_manager->config_->client.snippetSupport);
|
||||||
if (completion_manager->config_->client.snippetSupport &&
|
if (completion_manager->config_->client.snippetSupport &&
|
||||||
|
Loading…
Reference in New Issue
Block a user