ClangModelManagerSupport: Drop namespace scopes

Change-Id: Id8d9474a35e367469b435d10b3eba0700dffc304
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
This commit is contained in:
Jarek Kobus
2023-04-05 08:24:14 +02:00
parent 663bbbfb0e
commit e22d79fbb5

View File

@@ -52,6 +52,7 @@
#include <QTimer>
#include <QtDebug>
using namespace Core;
using namespace CppEditor;
using namespace LanguageClient;
using namespace ProjectExplorer;
@@ -59,16 +60,16 @@ using namespace Utils;
namespace ClangCodeModel::Internal {
static CppEditor::CppModelManager *cppModelManager()
static CppModelManager *cppModelManager()
{
return CppEditor::CppModelManager::instance();
return CppModelManager::instance();
}
static ProjectExplorer::Project *fallbackProject()
static Project *fallbackProject()
{
if (ProjectExplorer::Project * const p = ProjectExplorer::ProjectTree::currentProject())
if (Project * const p = ProjectTree::currentProject())
return p;
return ProjectExplorer::ProjectManager::startupProject();
return ProjectManager::startupProject();
}
static bool sessionModeEnabled()
@@ -78,18 +79,17 @@ static bool sessionModeEnabled()
static const QList<TextEditor::TextDocument *> allCppDocuments()
{
const auto isCppDocument = Utils::equal(&Core::IDocument::id,
Utils::Id(CppEditor::Constants::CPPEDITOR_ID));
const QList<Core::IDocument *> documents
= Utils::filtered(Core::DocumentModel::openedDocuments(), isCppDocument);
const auto isCppDocument = Utils::equal(&IDocument::id, Id(CppEditor::Constants::CPPEDITOR_ID));
const QList<IDocument *> documents = Utils::filtered(DocumentModel::openedDocuments(),
isCppDocument);
return Utils::qobject_container_cast<TextEditor::TextDocument *>(documents);
}
static const QList<ProjectExplorer::Project *> projectsForClient(const Client *client)
static const QList<Project *> projectsForClient(const Client *client)
{
QList<ProjectExplorer::Project *> projects;
QList<Project *> projects;
if (sessionModeEnabled()) {
for (ProjectExplorer::Project * const p : ProjectExplorer::ProjectManager::projects()) {
for (Project * const p : ProjectManager::projects()) {
if (ClangdProjectSettings(p).settings().useClangd)
projects << p;
}
@@ -101,7 +101,7 @@ static const QList<ProjectExplorer::Project *> projectsForClient(const Client *c
static bool fileIsProjectBuildArtifact(const Client *client, const FilePath &filePath)
{
for (const ProjectExplorer::Project * const p : projectsForClient(client)) {
for (const Project * const p : projectsForClient(client)) {
if (const auto t = p->activeTarget()) {
if (const auto bc = t->activeBuildConfiguration()) {
if (filePath.isChildOf(bc->buildDirectory()))
@@ -146,15 +146,15 @@ static void checkSystemForClangdSuitability()
"You can enable/disable and fine-tune clangd <a href=\"dummy\">here</a>."));
label->setWordWrap(true);
QObject::connect(label, &QLabel::linkActivated, [] {
Core::ICore::showOptionsDialog(CppEditor::Constants::CPP_CLANGD_SETTINGS_ID);
ICore::showOptionsDialog(CppEditor::Constants::CPP_CLANGD_SETTINGS_ID);
});
return label;
});
info.addCustomButton(Tr::tr("Enable Anyway"), [clangdWarningSetting] {
ClangdSettings::setUseClangdAndSave(true);
Core::ICore::infoBar()->removeInfo(clangdWarningSetting);
ICore::infoBar()->removeInfo(clangdWarningSetting);
});
Core::ICore::infoBar()->addInfo(info);
ICore::infoBar()->addInfo(info);
}
static void updateParserConfig(ClangdClient *client)
@@ -172,8 +172,8 @@ static void updateParserConfig(ClangdClient *client)
static bool projectIsParsing(const ClangdClient *client)
{
for (const ProjectExplorer::Project * const p : projectsForClient(client)) {
const ProjectExplorer::BuildSystem * const bs = p && p->activeTarget()
for (const Project * const p : projectsForClient(client)) {
const BuildSystem * const bs = p && p->activeTarget()
? p->activeTarget()->buildSystem() : nullptr;
if (bs && (bs->isParsing() || bs->isWaitingForParse()))
return true;
@@ -181,7 +181,6 @@ static bool projectIsParsing(const ClangdClient *client)
return false;
}
ClangModelManagerSupport::ClangModelManagerSupport()
: m_clientRestartTimer(new QTimer(this))
{
@@ -206,20 +205,20 @@ ClangModelManagerSupport::ClangModelManagerSupport()
cppModelManager()->setClassesFilter(std::make_unique<ClangClassesFilter>());
cppModelManager()->setFunctionsFilter(std::make_unique<ClangFunctionsFilter>());
Core::EditorManager *editorManager = Core::EditorManager::instance();
connect(editorManager, &Core::EditorManager::editorOpened,
EditorManager *editorManager = EditorManager::instance();
connect(editorManager, &EditorManager::editorOpened,
this, &ClangModelManagerSupport::onEditorOpened);
connect(editorManager, &Core::EditorManager::currentEditorChanged,
connect(editorManager, &EditorManager::currentEditorChanged,
this, &ClangModelManagerSupport::onCurrentEditorChanged);
CppEditor::CppModelManager *modelManager = cppModelManager();
connect(modelManager, &CppEditor::CppModelManager::abstractEditorSupportContentsUpdated,
CppModelManager *modelManager = cppModelManager();
connect(modelManager, &CppModelManager::abstractEditorSupportContentsUpdated,
this, &ClangModelManagerSupport::onAbstractEditorSupportContentsUpdated);
connect(modelManager, &CppEditor::CppModelManager::abstractEditorSupportRemoved,
connect(modelManager, &CppModelManager::abstractEditorSupportRemoved,
this, &ClangModelManagerSupport::onAbstractEditorSupportRemoved);
connect(modelManager, &CppEditor::CppModelManager::projectPartsUpdated,
connect(modelManager, &CppModelManager::projectPartsUpdated,
this, &ClangModelManagerSupport::onProjectPartsUpdated);
connect(modelManager, &CppEditor::CppModelManager::projectPartsRemoved,
connect(modelManager, &CppModelManager::projectPartsRemoved,
this, &ClangModelManagerSupport::onProjectPartsRemoved);
connect(modelManager, &CppModelManager::fallbackProjectPartUpdated, this, [this] {
if (sessionModeEnabled())
@@ -230,9 +229,8 @@ ClangModelManagerSupport::ClangModelManagerSupport()
}
});
auto projectManager = ProjectExplorer::ProjectManager::instance();
connect(projectManager, &ProjectExplorer::ProjectManager::projectRemoved,
this, [this] {
auto projectManager = ProjectManager::instance();
connect(projectManager, &ProjectManager::projectRemoved, this, [this] {
if (!sessionModeEnabled())
claimNonProjectSources(clientForProject(fallbackProject()));
});
@@ -241,11 +239,11 @@ ClangModelManagerSupport::ClangModelManagerSupport()
onClangdSettingsChanged();
});
CppEditor::ClangdSettings::setDefaultClangdPath(Core::ICore::clangdExecutable(CLANG_BINDIR));
connect(&CppEditor::ClangdSettings::instance(), &CppEditor::ClangdSettings::changed,
ClangdSettings::setDefaultClangdPath(ICore::clangdExecutable(CLANG_BINDIR));
connect(&ClangdSettings::instance(), &ClangdSettings::changed,
this, &ClangModelManagerSupport::onClangdSettingsChanged);
if (CppEditor::ClangdSettings::instance().useClangd())
if (ClangdSettings::instance().useClangd())
new ClangdClient(nullptr, {});
m_generatorSynchronizer.setCancelOnWait(true);
@@ -257,9 +255,9 @@ ClangModelManagerSupport::~ClangModelManagerSupport()
m_generatorSynchronizer.waitForFinished();
}
void ClangModelManagerSupport::followSymbol(const CppEditor::CursorInEditor &data,
const LinkHandler &processLinkCallback, bool resolveTarget,
bool inNextSplit)
void ClangModelManagerSupport::followSymbol(const CursorInEditor &data,
const LinkHandler &processLinkCallback,
bool resolveTarget, bool inNextSplit)
{
if (ClangdClient * const client = clientForFile(data.filePath());
client && client->isFullyIndexed()) {
@@ -272,7 +270,7 @@ void ClangModelManagerSupport::followSymbol(const CppEditor::CursorInEditor &dat
CppModelManager::Backend::Builtin);
}
void ClangModelManagerSupport::followSymbolToType(const CppEditor::CursorInEditor &data,
void ClangModelManagerSupport::followSymbolToType(const CursorInEditor &data,
const LinkHandler &processLinkCallback,
bool inNextSplit)
{
@@ -285,8 +283,8 @@ void ClangModelManagerSupport::followSymbolToType(const CppEditor::CursorInEdito
CppModelManager::Backend::Builtin);
}
void ClangModelManagerSupport::switchDeclDef(const CppEditor::CursorInEditor &data,
const LinkHandler &processLinkCallback)
void ClangModelManagerSupport::switchDeclDef(const CursorInEditor &data,
const LinkHandler &processLinkCallback)
{
if (ClangdClient * const client = clientForFile(data.filePath());
client && client->isFullyIndexed()) {
@@ -298,9 +296,9 @@ void ClangModelManagerSupport::switchDeclDef(const CppEditor::CursorInEditor &da
CppModelManager::switchDeclDef(data, processLinkCallback, CppModelManager::Backend::Builtin);
}
void ClangModelManagerSupport::startLocalRenaming(const CppEditor::CursorInEditor &data,
const CppEditor::ProjectPart *projectPart,
RenameCallback &&renameSymbolsCallback)
void ClangModelManagerSupport::startLocalRenaming(const CursorInEditor &data,
const ProjectPart *projectPart,
RenameCallback &&renameSymbolsCallback)
{
if (ClangdClient * const client = clientForFile(data.filePath());
client && client->reachable()) {
@@ -313,7 +311,7 @@ void ClangModelManagerSupport::startLocalRenaming(const CppEditor::CursorInEdito
std::move(renameSymbolsCallback), CppModelManager::Backend::Builtin);
}
void ClangModelManagerSupport::globalRename(const CppEditor::CursorInEditor &cursor,
void ClangModelManagerSupport::globalRename(const CursorInEditor &cursor,
const QString &replacement,
const std::function<void()> &callback)
{
@@ -327,7 +325,7 @@ void ClangModelManagerSupport::globalRename(const CppEditor::CursorInEditor &cur
CppModelManager::globalRename(cursor, replacement, callback, CppModelManager::Backend::Builtin);
}
void ClangModelManagerSupport::findUsages(const CppEditor::CursorInEditor &cursor) const
void ClangModelManagerSupport::findUsages(const CursorInEditor &cursor) const
{
if (ClangdClient * const client = clientForFile(cursor.filePath());
client && client->isFullyIndexed()) {
@@ -348,11 +346,10 @@ void ClangModelManagerSupport::switchHeaderSource(const FilePath &filePath, bool
CppModelManager::switchHeaderSource(inNextSplit, CppModelManager::Backend::Builtin);
}
void ClangModelManagerSupport::checkUnused(const Link &link, Core::SearchResult *search,
void ClangModelManagerSupport::checkUnused(const Link &link, SearchResult *search,
const LinkHandler &callback)
{
if (const ProjectExplorer::Project * const project
= ProjectExplorer::ProjectManager::projectForFile(link.targetFilePath)) {
if (const Project * const project = ProjectManager::projectForFile(link.targetFilePath)) {
if (ClangdClient * const client = clientWithProject(project);
client && client->isFullyIndexed()) {
client->checkUnused(link, search, callback);
@@ -369,7 +366,7 @@ bool ClangModelManagerSupport::usesClangd(const TextEditor::TextDocument *docume
return clientForFile(document->filePath());
}
CppEditor::BaseEditorDocumentProcessor *ClangModelManagerSupport::createEditorDocumentProcessor(
BaseEditorDocumentProcessor *ClangModelManagerSupport::createEditorDocumentProcessor(
TextEditor::TextDocument *baseTextDocument)
{
const auto processor = new ClangEditorDocumentProcessor(baseTextDocument);
@@ -383,10 +380,10 @@ CppEditor::BaseEditorDocumentProcessor *ClangModelManagerSupport::createEditorDo
return processor;
}
void ClangModelManagerSupport::onCurrentEditorChanged(Core::IEditor *editor)
void ClangModelManagerSupport::onCurrentEditorChanged(IEditor *editor)
{
// Update task hub issues for current CppEditorDocument
ProjectExplorer::TaskHub::clearTasks(Constants::TASK_CATEGORY_DIAGNOSTICS);
TaskHub::clearTasks(Constants::TASK_CATEGORY_DIAGNOSTICS);
if (!editor || !editor->document() || !cppModelManager()->isCppEditor(editor))
return;
@@ -409,28 +406,25 @@ void ClangModelManagerSupport::connectToWidgetsMarkContextMenuRequested(QWidget
}
}
static FilePath getJsonDbDir(const ProjectExplorer::Project *project)
static FilePath getJsonDbDir(const Project *project)
{
static const QString dirName(".qtc_clangd");
if (!project) {
const QString sessionDirName = FileUtils::fileSystemFriendlyName(
ProjectExplorer::SessionManager::activeSession());
return Core::ICore::userResourcePath() / dirName / sessionDirName; // TODO: Make configurable?
SessionManager::activeSession());
return ICore::userResourcePath() / dirName / sessionDirName; // TODO: Make configurable?
}
if (const ProjectExplorer::Target * const target = project->activeTarget()) {
if (const ProjectExplorer::BuildConfiguration * const bc
= target->activeBuildConfiguration()) {
if (const Target * const target = project->activeTarget()) {
if (const BuildConfiguration * const bc = target->activeBuildConfiguration())
return bc->buildDirectory() / dirName;
}
}
return {};
}
static bool isProjectDataUpToDate(
ProjectExplorer::Project *project, ProjectInfoList projectInfo,
const FilePath &jsonDbDir)
static bool isProjectDataUpToDate(Project *project, ProjectInfoList projectInfo,
const FilePath &jsonDbDir)
{
if (project && !ProjectExplorer::ProjectManager::hasProject(project))
if (project && !ProjectManager::hasProject(project))
return false;
const ClangdSettings settings(ClangdProjectSettings(project).settings());
if (!settings.useClangd())
@@ -459,7 +453,7 @@ static bool isProjectDataUpToDate(
return true;
}
void ClangModelManagerSupport::updateLanguageClient(ProjectExplorer::Project *project)
void ClangModelManagerSupport::updateLanguageClient(Project *project)
{
const ClangdSettings settings(ClangdProjectSettings(project).settings());
if (!settings.useClangd())
@@ -485,12 +479,12 @@ void ClangModelManagerSupport::updateLanguageClient(ProjectExplorer::Project *pr
return;
const GenerateCompilationDbResult result = generatorWatcher->result();
if (!result.error.isEmpty()) {
Core::MessageManager::writeDisrupting(
MessageManager::writeDisrupting(
Tr::tr("Cannot use clangd: Failed to generate compilation database:\n%1")
.arg(result.error));
return;
}
Utils::Id previousId;
Id previousId;
if (Client * const oldClient = clientForProject(project)) {
previousId = oldClient->id();
LanguageClientManager::shutdownClient(oldClient);
@@ -593,18 +587,17 @@ void ClangModelManagerSupport::updateLanguageClient(ProjectExplorer::Project *pr
m_generatorSynchronizer.addFuture(future);
}
ClangdClient *ClangModelManagerSupport::clientForProject(const ProjectExplorer::Project *project)
ClangdClient *ClangModelManagerSupport::clientForProject(const Project *project)
{
if (sessionModeEnabled())
project = nullptr;
return clientWithProject(project);
}
ClangdClient *ClangModelManagerSupport::clientWithProject(const ProjectExplorer::Project *project)
ClangdClient *ClangModelManagerSupport::clientWithProject(const Project *project)
{
const QList<Client *> clients = Utils::filtered(
LanguageClientManager::clientsForProject(project),
[](const LanguageClient::Client *c) {
LanguageClientManager::clientsForProject(project), [](const Client *c) {
return qobject_cast<const ClangdClient *>(c)
&& c->state() != Client::ShutdownRequested
&& c->state() != Client::Shutdown;
@@ -642,7 +635,7 @@ void ClangModelManagerSupport::claimNonProjectSources(ClangdClient *client)
}
if (!ClangdSettings::instance().sizeIsOkay(doc->filePath()))
continue;
if (ProjectExplorer::ProjectManager::projectForFile(doc->filePath()))
if (ProjectManager::projectForFile(doc->filePath()))
continue;
if (client->project() && !ProjectFile::isHeader(doc->filePath()))
continue;
@@ -658,7 +651,7 @@ void ClangModelManagerSupport::claimNonProjectSources(ClangdClient *client)
// workflow, e.g. a git branch switch will hit at least one open file.
void ClangModelManagerSupport::watchForExternalChanges()
{
connect(Core::DocumentManager::instance(), &Core::DocumentManager::filesChangedExternally,
connect(DocumentManager::instance(), &DocumentManager::filesChangedExternally,
this, [this](const QSet<FilePath> &files) {
if (!LanguageClientManager::hasClients<ClangdClient>())
return;
@@ -666,8 +659,7 @@ void ClangModelManagerSupport::watchForExternalChanges()
const ProjectFile::Kind kind = ProjectFile::classify(file.toString());
if (!ProjectFile::isSource(kind) && !ProjectFile::isHeader(kind))
continue;
ProjectExplorer::Project * const project
= ProjectExplorer::ProjectManager::projectForFile(file);
Project * const project = ProjectManager::projectForFile(file);
if (!project)
continue;
@@ -686,14 +678,13 @@ void ClangModelManagerSupport::watchForExternalChanges()
// restart clangd for reliable re-parsing and re-indexing.
void ClangModelManagerSupport::watchForInternalChanges()
{
connect(Core::DocumentManager::instance(), &Core::DocumentManager::filesChangedInternally,
connect(DocumentManager::instance(), &DocumentManager::filesChangedInternally,
this, [this](const FilePaths &filePaths) {
for (const FilePath &fp : filePaths) {
const ProjectFile::Kind kind = ProjectFile::classify(fp.toString());
if (!ProjectFile::isSource(kind) && !ProjectFile::isHeader(kind))
continue;
ProjectExplorer::Project * const project
= ProjectExplorer::ProjectManager::projectForFile(fp);
Project * const project = ProjectManager::projectForFile(fp);
if (!project)
continue;
if (ClangdClient * const client = clientForProject(project);
@@ -719,18 +710,17 @@ void ClangModelManagerSupport::scheduleClientRestart(ClangdClient *client)
m_clientRestartTimer->start();
}
void ClangModelManagerSupport::onEditorOpened(Core::IEditor *editor)
void ClangModelManagerSupport::onEditorOpened(IEditor *editor)
{
QTC_ASSERT(editor, return);
Core::IDocument *document = editor->document();
IDocument *document = editor->document();
QTC_ASSERT(document, return);
auto textDocument = qobject_cast<TextEditor::TextDocument *>(document);
if (textDocument && cppModelManager()->isCppEditor(editor)) {
connectToWidgetsMarkContextMenuRequested(editor->widget());
ProjectExplorer::Project * project
= ProjectExplorer::ProjectManager::projectForFile(document->filePath());
Project * project = ProjectManager::projectForFile(document->filePath());
const ClangdSettings settings(ClangdProjectSettings(project).settings());
if (!settings.sizeIsOkay(textDocument->filePath()))
return;
@@ -825,17 +815,17 @@ static ClangEditorDocumentProcessors clangProcessors()
return result;
}
void ClangModelManagerSupport::onProjectPartsUpdated(ProjectExplorer::Project *project)
void ClangModelManagerSupport::onProjectPartsUpdated(Project *project)
{
QTC_ASSERT(project, return);
updateLanguageClient(project);
QStringList projectPartIds;
const CppEditor::ProjectInfo::ConstPtr projectInfo = cppModelManager()->projectInfo(project);
const ProjectInfo::ConstPtr projectInfo = cppModelManager()->projectInfo(project);
QTC_ASSERT(projectInfo, return);
for (const CppEditor::ProjectPart::ConstPtr &projectPart : projectInfo->projectParts())
for (const ProjectPart::ConstPtr &projectPart : projectInfo->projectParts())
projectPartIds.append(projectPart->id());
onProjectPartsRemoved(projectPartIds);
}
@@ -850,9 +840,8 @@ void ClangModelManagerSupport::onClangdSettingsChanged()
{
const bool sessionMode = sessionModeEnabled();
for (ProjectExplorer::Project * const project : ProjectExplorer::ProjectManager::projects()) {
const CppEditor::ClangdSettings settings(
CppEditor::ClangdProjectSettings(project).settings());
for (Project * const project : ProjectManager::projects()) {
const ClangdSettings settings(ClangdProjectSettings(project).settings());
ClangdClient * const client = clientWithProject(project);
if (sessionMode) {
if (client && client->project())