Merge remote-tracking branch 'origin/8.0'

Change-Id: Iea4fd2949f5d5345802e2e7d9283d72c6c55f69f
This commit is contained in:
hjk
2022-08-03 10:52:13 +02:00
16 changed files with 180 additions and 65 deletions

View File

@@ -651,6 +651,14 @@ DiagnosticManager *ClangdClient::createDiagnosticManager()
return diagnosticManager;
}
bool ClangdClient::referencesShadowFile(const TextEditor::TextDocument *doc,
const Utils::FilePath &candidate)
{
const QRegularExpression includeRex("#include.*" + candidate.fileName() + R"([>"])");
const QTextCursor includePos = doc->document()->find(includeRex);
return !includePos.isNull();
}
RefactoringChangesData *ClangdClient::createRefactoringChangesBackend() const
{
return new CppEditor::CppRefactoringChangesData(

View File

@@ -145,6 +145,8 @@ private:
const CustomInspectorTabs createCustomInspectorTabs() override;
TextEditor::RefactoringChangesData *createRefactoringChangesBackend() const override;
LanguageClient::DiagnosticManager *createDiagnosticManager() override;
bool referencesShadowFile(const TextEditor::TextDocument *doc,
const Utils::FilePath &candidate) override;
class Private;
class VirtualFunctionAssistProcessor;

View File

@@ -418,16 +418,18 @@ void ClangModelManagerSupport::updateLanguageClient(
bool hasDocuments = false;
const ClangdSettings settings(ClangdProjectSettings(project).settings());
for (TextEditor::TextDocument * const doc : allCppDocuments()) {
const Client * const currentClient = LanguageClientManager::clientForDocument(doc);
Client * const currentClient = LanguageClientManager::clientForDocument(doc);
if (!settings.sizeIsOkay(doc->filePath()))
continue;
const Project * const docProject = SessionManager::projectForFile(doc->filePath());
if (currentClient && currentClient->project()
&& currentClient->project() != project) {
&& currentClient->project() != project
&& currentClient->project() == docProject) {
continue;
}
if (const Project * const docProject
= SessionManager::projectForFile(doc->filePath());
!docProject || docProject == project) {
if (!docProject || docProject == project) {
if (currentClient)
currentClient->closeDocument(doc);
LanguageClientManager::openDocumentWithClient(doc, client);
hasDocuments = true;
}
@@ -532,15 +534,18 @@ void ClangModelManagerSupport::claimNonProjectSources(ClangdClient *client)
if (!client)
return;
for (TextEditor::TextDocument * const doc : allCppDocuments()) {
if (Client * const currentClient = LanguageClientManager::clientForDocument(doc);
currentClient && currentClient->state() == Client::Initialized
Client * const currentClient = LanguageClientManager::clientForDocument(doc);
if (currentClient && currentClient->state() == Client::Initialized
&& (currentClient == client || currentClient->project())) {
continue;
}
if (!ClangdSettings::instance().sizeIsOkay(doc->filePath()))
continue;
if (!ProjectExplorer::SessionManager::projectForFile(doc->filePath()))
if (!ProjectExplorer::SessionManager::projectForFile(doc->filePath())) {
if (currentClient)
currentClient->closeDocument(doc);
LanguageClientManager::openDocumentWithClient(doc, client);
}
}
}