forked from qt-creator/qt-creator
LSP: simplify codeassistant
Use TextEditor namespace globally in languageclientcodeassist.cpp instead of just some functions. Change-Id: I34b71a2a4a38d8ee0158705f1b279fa5eb0386cb Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
@@ -48,10 +48,11 @@
|
|||||||
static Q_LOGGING_CATEGORY(LOGLSPCOMPLETION, "qtc.languageclient.completion", QtWarningMsg);
|
static Q_LOGGING_CATEGORY(LOGLSPCOMPLETION, "qtc.languageclient.completion", QtWarningMsg);
|
||||||
|
|
||||||
using namespace LanguageServerProtocol;
|
using namespace LanguageServerProtocol;
|
||||||
|
using namespace TextEditor;
|
||||||
|
|
||||||
namespace LanguageClient {
|
namespace LanguageClient {
|
||||||
|
|
||||||
class LanguageClientCompletionItem : public TextEditor::AssistProposalItemInterface
|
class LanguageClientCompletionItem : public AssistProposalItemInterface
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
LanguageClientCompletionItem(CompletionItem item);
|
LanguageClientCompletionItem(CompletionItem item);
|
||||||
@@ -60,7 +61,7 @@ public:
|
|||||||
QString text() const override;
|
QString text() const override;
|
||||||
bool implicitlyApplies() const override;
|
bool implicitlyApplies() const override;
|
||||||
bool prematurelyApplies(const QChar &typedCharacter) const override;
|
bool prematurelyApplies(const QChar &typedCharacter) const override;
|
||||||
void apply(TextEditor::TextDocumentManipulatorInterface &manipulator, int basePosition) const override;
|
void apply(TextDocumentManipulatorInterface &manipulator, int basePosition) const override;
|
||||||
QIcon icon() const override;
|
QIcon icon() const override;
|
||||||
QString detail() const override;
|
QString detail() const override;
|
||||||
bool isSnippet() const override;
|
bool isSnippet() const override;
|
||||||
@@ -91,7 +92,7 @@ bool LanguageClientCompletionItem::implicitlyApplies() const
|
|||||||
bool LanguageClientCompletionItem::prematurelyApplies(const QChar &/*typedCharacter*/) const
|
bool LanguageClientCompletionItem::prematurelyApplies(const QChar &/*typedCharacter*/) const
|
||||||
{ return false; }
|
{ return false; }
|
||||||
|
|
||||||
void LanguageClientCompletionItem::apply(TextEditor::TextDocumentManipulatorInterface &manipulator,
|
void LanguageClientCompletionItem::apply(TextDocumentManipulatorInterface &manipulator,
|
||||||
int /*basePosition*/) const
|
int /*basePosition*/) const
|
||||||
{
|
{
|
||||||
const int pos = manipulator.currentPosition();
|
const int pos = manipulator.currentPosition();
|
||||||
@@ -207,7 +208,7 @@ bool LanguageClientCompletionItem::isPerfectMatch(int pos, QTextDocument *doc) c
|
|||||||
return textToInsert == textAt(QTextCursor(doc), pos - length, length);
|
return textToInsert == textAt(QTextCursor(doc), pos - length, length);
|
||||||
}
|
}
|
||||||
|
|
||||||
class LanguageClientCompletionModel : public TextEditor::GenericProposalModel
|
class LanguageClientCompletionModel : public GenericProposalModel
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
// GenericProposalModel interface
|
// GenericProposalModel interface
|
||||||
@@ -221,7 +222,6 @@ public:
|
|||||||
|
|
||||||
void LanguageClientCompletionModel::sort(const QString &/*prefix*/)
|
void LanguageClientCompletionModel::sort(const QString &/*prefix*/)
|
||||||
{
|
{
|
||||||
using namespace TextEditor;
|
|
||||||
std::sort(m_currentItems.begin(), m_currentItems.end(),
|
std::sort(m_currentItems.begin(), m_currentItems.end(),
|
||||||
[] (AssistProposalItemInterface *a, AssistProposalItemInterface *b){
|
[] (AssistProposalItemInterface *a, AssistProposalItemInterface *b){
|
||||||
return *(dynamic_cast<LanguageClientCompletionItem *>(a)) < *(
|
return *(dynamic_cast<LanguageClientCompletionItem *>(a)) < *(
|
||||||
@@ -229,16 +229,16 @@ void LanguageClientCompletionModel::sort(const QString &/*prefix*/)
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
class LanguageClientCompletionProposal : public TextEditor::GenericProposal
|
class LanguageClientCompletionProposal : public GenericProposal
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
LanguageClientCompletionProposal(int cursorPos, LanguageClientCompletionModel *model)
|
LanguageClientCompletionProposal(int cursorPos, LanguageClientCompletionModel *model)
|
||||||
: TextEditor::GenericProposal(cursorPos, TextEditor::GenericProposalModelPtr(model))
|
: GenericProposal(cursorPos, GenericProposalModelPtr(model))
|
||||||
, m_model(model)
|
, m_model(model)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
// IAssistProposal interface
|
// IAssistProposal interface
|
||||||
bool hasItemsToPropose(const QString &/*text*/, TextEditor::AssistReason reason) const override
|
bool hasItemsToPropose(const QString &/*text*/, AssistReason reason) const override
|
||||||
{
|
{
|
||||||
if (m_model->size() <= 0 || m_document.isNull())
|
if (m_model->size() <= 0 || m_document.isNull())
|
||||||
return false;
|
return false;
|
||||||
@@ -255,11 +255,11 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
class LanguageClientCompletionAssistProcessor : public TextEditor::IAssistProcessor
|
class LanguageClientCompletionAssistProcessor : public IAssistProcessor
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
LanguageClientCompletionAssistProcessor(BaseClient *client);
|
LanguageClientCompletionAssistProcessor(BaseClient *client);
|
||||||
TextEditor::IAssistProposal *perform(const TextEditor::AssistInterface *interface) override;
|
IAssistProposal *perform(const AssistInterface *interface) override;
|
||||||
bool running() override;
|
bool running() override;
|
||||||
bool needsRestart() const override { return true; }
|
bool needsRestart() const override { return true; }
|
||||||
|
|
||||||
@@ -276,22 +276,21 @@ LanguageClientCompletionAssistProcessor::LanguageClientCompletionAssistProcessor
|
|||||||
: m_client(client)
|
: m_client(client)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
static QString assistReasonString(TextEditor::AssistReason reason)
|
static QString assistReasonString(AssistReason reason)
|
||||||
{
|
{
|
||||||
switch (reason) {
|
switch (reason) {
|
||||||
case TextEditor::IdleEditor: return QString("idle editor");
|
case IdleEditor: return QString("idle editor");
|
||||||
case TextEditor::ActivationCharacter: return QString("activation character");
|
case ActivationCharacter: return QString("activation character");
|
||||||
case TextEditor::ExplicitlyInvoked: return QString("explicitly invoking");
|
case ExplicitlyInvoked: return QString("explicitly invoking");
|
||||||
}
|
}
|
||||||
return QString("unknown reason");
|
return QString("unknown reason");
|
||||||
}
|
}
|
||||||
|
|
||||||
TextEditor::IAssistProposal *LanguageClientCompletionAssistProcessor::perform(
|
IAssistProposal *LanguageClientCompletionAssistProcessor::perform(const AssistInterface *interface)
|
||||||
const TextEditor::AssistInterface *interface)
|
|
||||||
{
|
{
|
||||||
QTC_ASSERT(m_client, return nullptr);
|
QTC_ASSERT(m_client, return nullptr);
|
||||||
m_pos = interface->position();
|
m_pos = interface->position();
|
||||||
if (interface->reason() == TextEditor::IdleEditor) {
|
if (interface->reason() == IdleEditor) {
|
||||||
// Trigger an automatic completion request only when we are on a word with more than 2 "identifier" character
|
// Trigger an automatic completion request only when we are on a word with more than 2 "identifier" character
|
||||||
const QRegExp regexp("[_a-zA-Z0-9]*");
|
const QRegExp regexp("[_a-zA-Z0-9]*");
|
||||||
int delta = 0;
|
int delta = 0;
|
||||||
@@ -302,7 +301,7 @@ TextEditor::IAssistProposal *LanguageClientCompletionAssistProcessor::perform(
|
|||||||
}
|
}
|
||||||
CompletionRequest completionRequest;
|
CompletionRequest completionRequest;
|
||||||
CompletionParams::CompletionContext context;
|
CompletionParams::CompletionContext context;
|
||||||
context.setTriggerKind(interface->reason() == TextEditor::ActivationCharacter
|
context.setTriggerKind(interface->reason() == ActivationCharacter
|
||||||
? CompletionParams::TriggerCharacter
|
? CompletionParams::TriggerCharacter
|
||||||
: CompletionParams::Invoked);
|
: CompletionParams::Invoked);
|
||||||
auto params = completionRequest.params().value_or(CompletionParams());
|
auto params = completionRequest.params().value_or(CompletionParams());
|
||||||
@@ -336,7 +335,6 @@ bool LanguageClientCompletionAssistProcessor::running()
|
|||||||
void LanguageClientCompletionAssistProcessor::handleCompletionResponse(
|
void LanguageClientCompletionAssistProcessor::handleCompletionResponse(
|
||||||
const CompletionRequest::Response &response)
|
const CompletionRequest::Response &response)
|
||||||
{
|
{
|
||||||
using namespace TextEditor;
|
|
||||||
qCDebug(LOGLSPCOMPLETION) << QTime::currentTime() << " : got completions";
|
qCDebug(LOGLSPCOMPLETION) << QTime::currentTime() << " : got completions";
|
||||||
m_running = false;
|
m_running = false;
|
||||||
QTC_ASSERT(m_client, return);
|
QTC_ASSERT(m_client, return);
|
||||||
@@ -373,14 +371,14 @@ LanguageClientCompletionAssistProvider::LanguageClientCompletionAssistProvider(B
|
|||||||
: m_client(client)
|
: m_client(client)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
TextEditor::IAssistProcessor *LanguageClientCompletionAssistProvider::createProcessor() const
|
IAssistProcessor *LanguageClientCompletionAssistProvider::createProcessor() const
|
||||||
{
|
{
|
||||||
return new LanguageClientCompletionAssistProcessor(m_client);
|
return new LanguageClientCompletionAssistProcessor(m_client);
|
||||||
}
|
}
|
||||||
|
|
||||||
TextEditor::IAssistProvider::RunType LanguageClientCompletionAssistProvider::runType() const
|
IAssistProvider::RunType LanguageClientCompletionAssistProvider::runType() const
|
||||||
{
|
{
|
||||||
return TextEditor::IAssistProvider::Asynchronous;
|
return IAssistProvider::Asynchronous;
|
||||||
}
|
}
|
||||||
|
|
||||||
int LanguageClientCompletionAssistProvider::activationCharSequenceLength() const
|
int LanguageClientCompletionAssistProvider::activationCharSequenceLength() const
|
||||||
|
Reference in New Issue
Block a user