summaryrefslogtreecommitdiff
path: root/src/plugins/languageclient/languageclientcompletionassist.cpp
diff options
context:
space:
mode:
authorDavid Schulz <david.schulz@qt.io>2021-05-11 13:37:52 +0200
committerDavid Schulz <david.schulz@qt.io>2021-06-10 11:46:37 +0000
commitd729835c24f22392ddd193746f59c5db91596d4f (patch)
tree85c06161c55ba0a329e325f26f161af74aeafe7b /src/plugins/languageclient/languageclientcompletionassist.cpp
parenta80546593d65779173d97360e98e474aa96caf19 (diff)
downloadqt-creator-d729835c24f22392ddd193746f59c5db91596d4f.tar.gz
LanguageClient: add snippet parsing
Task-number: QTCREATORBUG-22406 Change-Id: I5b3a65984f1b4a9198bcbfec24aaa920dcb6dbf1 Reviewed-by: Christian Stenger <christian.stenger@qt.io>
Diffstat (limited to 'src/plugins/languageclient/languageclientcompletionassist.cpp')
-rw-r--r--src/plugins/languageclient/languageclientcompletionassist.cpp16
1 files changed, 11 insertions, 5 deletions
diff --git a/src/plugins/languageclient/languageclientcompletionassist.cpp b/src/plugins/languageclient/languageclientcompletionassist.cpp
index 3e6c4e883a..97c02a6b8d 100644
--- a/src/plugins/languageclient/languageclientcompletionassist.cpp
+++ b/src/plugins/languageclient/languageclientcompletionassist.cpp
@@ -27,6 +27,7 @@
#include "client.h"
#include "languageclientutils.h"
+#include "snippet.h"
#include <languageserverprotocol/completion.h>
#include <texteditor/codeassist/assistinterface.h>
@@ -108,7 +109,7 @@ void LanguageClientCompletionItem::apply(TextDocumentManipulatorInterface &manip
{
const int pos = manipulator.currentPosition();
if (auto edit = m_item.textEdit()) {
- applyTextEdit(manipulator, *edit);
+ applyTextEdit(manipulator, *edit, isSnippet());
} else {
const QString textToInsert(m_item.insertText().value_or(text()));
int length = 0;
@@ -126,7 +127,12 @@ void LanguageClientCompletionItem::apply(TextDocumentManipulatorInterface &manip
QRegularExpressionMatch match = identifier.match(blockTextUntilPosition);
int matchLength = match.hasMatch() ? match.capturedLength(0) : 0;
length = qMax(length, matchLength);
- manipulator.replace(pos - length, length, textToInsert);
+ if (isSnippet()) {
+ manipulator.replace(pos - length, length, {});
+ manipulator.insertCodeSnippet(pos - length, textToInsert, &parseSnippet);
+ } else {
+ manipulator.replace(pos - length, length, textToInsert);
+ }
}
if (auto additionalEdits = m_item.additionalTextEdits()) {
@@ -182,9 +188,7 @@ QString LanguageClientCompletionItem::detail() const
bool LanguageClientCompletionItem::isSnippet() const
{
- // FIXME add lsp > creator snippet converter
- // return m_item.insertTextFormat().value_or(CompletionItem::PlainText);
- return false;
+ return m_item.insertTextFormat().value_or(CompletionItem::PlainText);
}
bool LanguageClientCompletionItem::isValid() const
@@ -226,6 +230,8 @@ bool LanguageClientCompletionItem::isPerfectMatch(int pos, QTextDocument *doc) c
if (!additionalEdits.value().isEmpty())
return false;
}
+ if (isSnippet())
+ return false;
if (auto edit = m_item.textEdit()) {
auto range = edit->range();
const int start = positionInText(doc, range.start().line() + 1, range.start().character() + 1);