forked from qt-creator/qt-creator
LanguageClient: enable commit characters for completion items
While a completion is currently active a commit character can automatically apply the current item and close the current completion widget. Change-Id: Ia962eed69684f8f13f54b88934c63700532103e7 Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
@@ -191,6 +191,7 @@ static ClientCapabilities generateClientCapabilities()
|
||||
TextDocumentClientCapabilities::CompletionCapabilities::CompletionItemCapbilities
|
||||
completionItemCapbilities;
|
||||
completionItemCapbilities.setSnippetSupport(false);
|
||||
completionItemCapbilities.setCommitCharacterSupport(true);
|
||||
completionCapabilities.setCompletionItem(completionItemCapbilities);
|
||||
documentCapabilities.setCompletion(completionCapabilities);
|
||||
|
||||
|
||||
@@ -76,6 +76,7 @@ public:
|
||||
|
||||
private:
|
||||
CompletionItem m_item;
|
||||
mutable QChar m_triggeredCommitCharacter;
|
||||
mutable QString m_sortText;
|
||||
};
|
||||
|
||||
@@ -89,8 +90,14 @@ QString LanguageClientCompletionItem::text() const
|
||||
bool LanguageClientCompletionItem::implicitlyApplies() const
|
||||
{ return false; }
|
||||
|
||||
bool LanguageClientCompletionItem::prematurelyApplies(const QChar &/*typedCharacter*/) const
|
||||
{ return false; }
|
||||
bool LanguageClientCompletionItem::prematurelyApplies(const QChar &typedCharacter) const
|
||||
{
|
||||
if (m_item.commitCharacters().has_value() && m_item.commitCharacters().value().contains(typedCharacter)) {
|
||||
m_triggeredCommitCharacter = typedCharacter;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void LanguageClientCompletionItem::apply(TextDocumentManipulatorInterface &manipulator,
|
||||
int /*basePosition*/) const
|
||||
@@ -110,6 +117,8 @@ void LanguageClientCompletionItem::apply(TextDocumentManipulatorInterface &manip
|
||||
for (const auto &edit : *additionalEdits)
|
||||
applyTextEdit(manipulator, edit);
|
||||
}
|
||||
if (!m_triggeredCommitCharacter.isNull())
|
||||
manipulator.insertCodeSnippet(manipulator.currentPosition(), m_triggeredCommitCharacter);
|
||||
}
|
||||
|
||||
QIcon LanguageClientCompletionItem::icon() const
|
||||
|
||||
Reference in New Issue
Block a user