forked from qt-creator/qt-creator
LanguageClient: remember opened documents by TextEditor::TextDocument
... instead of Utils::FilePath Change-Id: I4ca38ca127fbb1a503a0cb9b5228cab325519550 Reviewed-by: David Schulz <david.schulz@qt.io> Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
@@ -115,14 +115,12 @@ Client::Client(BaseClientInterface *clientInterface)
|
|||||||
&Client::rehighlight);
|
&Client::rehighlight);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void updateEditorToolBar(QList<Utils::FilePath> files)
|
static void updateEditorToolBar(QList<TextEditor::TextDocument *> documents)
|
||||||
{
|
{
|
||||||
QList<Core::IEditor *> editors = Core::DocumentModel::editorsForDocuments(
|
for (TextEditor::TextDocument *document : documents) {
|
||||||
Utils::transform(files, [](Utils::FilePath &file) {
|
for (Core::IEditor *editor : Core::DocumentModel::editorsForDocument(document))
|
||||||
return Core::DocumentModel::documentForFilePath(file.toString());
|
updateEditorToolBar(editor);
|
||||||
}));
|
}
|
||||||
for (auto editor : editors)
|
|
||||||
updateEditorToolBar(editor);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Client::~Client()
|
Client::~Client()
|
||||||
@@ -327,7 +325,7 @@ bool Client::openDocument(TextEditor::TextDocument *document)
|
|||||||
m_resetAssistProvider.remove(document);
|
m_resetAssistProvider.remove(document);
|
||||||
});
|
});
|
||||||
const QString &text = document->plainText();
|
const QString &text = document->plainText();
|
||||||
m_openedDocument.insert(document->filePath(), text);
|
m_openedDocument.insert(document, text);
|
||||||
|
|
||||||
TextDocumentItem item;
|
TextDocumentItem item;
|
||||||
item.setLanguageId(TextDocumentItem::mimeTypeToLanguageId(document->mimeType()));
|
item.setLanguageId(TextDocumentItem::mimeTypeToLanguageId(document->mimeType()));
|
||||||
@@ -352,9 +350,11 @@ void Client::sendContent(const IContent &content)
|
|||||||
|
|
||||||
void Client::sendContent(const DocumentUri &uri, const IContent &content)
|
void Client::sendContent(const DocumentUri &uri, const IContent &content)
|
||||||
{
|
{
|
||||||
if (!m_openedDocument.contains(uri.toFileName()))
|
if (!Utils::anyOf(m_openedDocument.keys(), [uri](TextEditor::TextDocument *documnent) {
|
||||||
return;
|
return uri.toFileName() == documnent->filePath();
|
||||||
sendContent(content);
|
})) {
|
||||||
|
sendContent(content);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Client::cancelRequest(const MessageId &id)
|
void Client::cancelRequest(const MessageId &id)
|
||||||
@@ -365,7 +365,8 @@ void Client::cancelRequest(const MessageId &id)
|
|||||||
|
|
||||||
void Client::closeDocument(TextEditor::TextDocument *document)
|
void Client::closeDocument(TextEditor::TextDocument *document)
|
||||||
{
|
{
|
||||||
m_openedDocument.remove(document->filePath());
|
if (m_openedDocument.remove(document) == 0)
|
||||||
|
return;
|
||||||
const DocumentUri &uri = DocumentUri::fromFileName(document->filePath());
|
const DocumentUri &uri = DocumentUri::fromFileName(document->filePath());
|
||||||
const DidCloseTextDocumentParams params(TextDocumentIdentifier{uri});
|
const DidCloseTextDocumentParams params(TextDocumentIdentifier{uri});
|
||||||
m_highlights[uri].clear();
|
m_highlights[uri].clear();
|
||||||
@@ -373,14 +374,14 @@ void Client::closeDocument(TextEditor::TextDocument *document)
|
|||||||
resetAssistProviders(document);
|
resetAssistProviders(document);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Client::documentOpen(const Core::IDocument *document) const
|
bool Client::documentOpen(TextEditor::TextDocument *document) const
|
||||||
{
|
{
|
||||||
return m_openedDocument.contains(document->filePath());
|
return m_openedDocument.contains(document);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Client::documentContentsSaved(TextEditor::TextDocument *document)
|
void Client::documentContentsSaved(TextEditor::TextDocument *document)
|
||||||
{
|
{
|
||||||
if (!m_openedDocument.contains(document->filePath()))
|
if (!m_openedDocument.contains(document))
|
||||||
return;
|
return;
|
||||||
bool sendMessage = true;
|
bool sendMessage = true;
|
||||||
bool includeText = false;
|
bool includeText = false;
|
||||||
@@ -415,7 +416,8 @@ void Client::documentContentsSaved(TextEditor::TextDocument *document)
|
|||||||
void Client::documentWillSave(Core::IDocument *document)
|
void Client::documentWillSave(Core::IDocument *document)
|
||||||
{
|
{
|
||||||
const FilePath &filePath = document->filePath();
|
const FilePath &filePath = document->filePath();
|
||||||
if (!m_openedDocument.contains(filePath))
|
auto textDocument = qobject_cast<TextEditor::TextDocument *>(document);
|
||||||
|
if (!m_openedDocument.contains(textDocument))
|
||||||
return;
|
return;
|
||||||
bool sendMessage = true;
|
bool sendMessage = true;
|
||||||
const QString method(WillSaveTextDocumentNotification::methodName);
|
const QString method(WillSaveTextDocumentNotification::methodName);
|
||||||
@@ -436,7 +438,7 @@ void Client::documentWillSave(Core::IDocument *document)
|
|||||||
if (!sendMessage)
|
if (!sendMessage)
|
||||||
return;
|
return;
|
||||||
const WillSaveTextDocumentParams params(
|
const WillSaveTextDocumentParams params(
|
||||||
TextDocumentIdentifier(DocumentUri::fromFileName(document->filePath())));
|
TextDocumentIdentifier(DocumentUri::fromFileName(filePath)));
|
||||||
sendContent(WillSaveTextDocumentNotification(params));
|
sendContent(WillSaveTextDocumentNotification(params));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -445,7 +447,7 @@ void Client::documentContentsChanged(TextEditor::TextDocument *document,
|
|||||||
int charsRemoved,
|
int charsRemoved,
|
||||||
int charsAdded)
|
int charsAdded)
|
||||||
{
|
{
|
||||||
if (!m_openedDocument.contains(document->filePath()))
|
if (!m_openedDocument.contains(document))
|
||||||
return;
|
return;
|
||||||
const QString method(DidChangeTextDocumentNotification::methodName);
|
const QString method(DidChangeTextDocumentNotification::methodName);
|
||||||
TextDocumentSyncKind syncKind = m_serverCapabilities.textDocumentSyncKindHelper();
|
TextDocumentSyncKind syncKind = m_serverCapabilities.textDocumentSyncKindHelper();
|
||||||
@@ -468,7 +470,7 @@ void Client::documentContentsChanged(TextEditor::TextDocument *document,
|
|||||||
params.setTextDocument(docId);
|
params.setTextDocument(docId);
|
||||||
if (syncKind == TextDocumentSyncKind::Incremental) {
|
if (syncKind == TextDocumentSyncKind::Incremental) {
|
||||||
DidChangeTextDocumentParams::TextDocumentContentChangeEvent change;
|
DidChangeTextDocumentParams::TextDocumentContentChangeEvent change;
|
||||||
QTextDocument oldDoc(m_openedDocument[document->filePath()]);
|
QTextDocument oldDoc(m_openedDocument[document]);
|
||||||
QTextCursor cursor(&oldDoc);
|
QTextCursor cursor(&oldDoc);
|
||||||
cursor.setPosition(position + charsRemoved);
|
cursor.setPosition(position + charsRemoved);
|
||||||
cursor.setPosition(position, QTextCursor::KeepAnchor);
|
cursor.setPosition(position, QTextCursor::KeepAnchor);
|
||||||
@@ -479,7 +481,7 @@ void Client::documentContentsChanged(TextEditor::TextDocument *document,
|
|||||||
} else {
|
} else {
|
||||||
params.setContentChanges({document->plainText()});
|
params.setContentChanges({document->plainText()});
|
||||||
}
|
}
|
||||||
m_openedDocument[document->filePath()] = document->plainText();
|
m_openedDocument[document] = document->plainText();
|
||||||
sendContent(DidChangeTextDocumentNotification(params));
|
sendContent(DidChangeTextDocumentNotification(params));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -97,7 +97,7 @@ public:
|
|||||||
// document synchronization
|
// document synchronization
|
||||||
bool openDocument(TextEditor::TextDocument *document);
|
bool openDocument(TextEditor::TextDocument *document);
|
||||||
void closeDocument(TextEditor::TextDocument *document);
|
void closeDocument(TextEditor::TextDocument *document);
|
||||||
bool documentOpen(const Core::IDocument *document) const;
|
bool documentOpen(TextEditor::TextDocument *document) const;
|
||||||
void documentContentsSaved(TextEditor::TextDocument *document);
|
void documentContentsSaved(TextEditor::TextDocument *document);
|
||||||
void documentWillSave(Core::IDocument *document);
|
void documentWillSave(Core::IDocument *document);
|
||||||
void documentContentsChanged(TextEditor::TextDocument *document,
|
void documentContentsChanged(TextEditor::TextDocument *document,
|
||||||
@@ -203,7 +203,7 @@ private:
|
|||||||
QHash<QByteArray, ContentHandler> m_contentHandler;
|
QHash<QByteArray, ContentHandler> m_contentHandler;
|
||||||
QString m_displayName;
|
QString m_displayName;
|
||||||
LanguageFilter m_languagFilter;
|
LanguageFilter m_languagFilter;
|
||||||
QMap<Utils::FilePath, QString> m_openedDocument;
|
QMap<TextEditor::TextDocument *, QString> m_openedDocument;
|
||||||
Core::Id m_id;
|
Core::Id m_id;
|
||||||
LanguageServerProtocol::ServerCapabilities m_serverCapabilities;
|
LanguageServerProtocol::ServerCapabilities m_serverCapabilities;
|
||||||
DynamicCapabilities m_dynamicCapabilities;
|
DynamicCapabilities m_dynamicCapabilities;
|
||||||
|
Reference in New Issue
Block a user