CppTools: Add dedicated settings and settings page for clangd

We plan to add more clangd settings, and it makes sense to have a
dedicated place for them both in the code and the UI.

Change-Id: Ideb92935b7a5a6a98e07980f4011736fb82042d1
Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
Christian Kandeler
2021-06-25 16:50:52 +02:00
parent cd20ad8ff4
commit ba138a1855
11 changed files with 168 additions and 87 deletions

View File

@@ -382,7 +382,7 @@ public:
static BaseClientInterface *clientInterface(const Utils::FilePath &jsonDbDir)
{
Utils::CommandLine cmd{CppTools::codeModelSettings()->clangdFilePath(),
Utils::CommandLine cmd{CppTools::ClangdSettings::clangdFilePath(),
{"--background-index", "--limit-results=0"}};
if (!jsonDbDir.isEmpty())
cmd.addArg("--compile-commands-dir=" + jsonDbDir.toString());

View File

@@ -119,7 +119,7 @@ ClangModelManagerSupport::ClangModelManagerSupport()
connect(sessionManager, &ProjectExplorer::SessionManager::aboutToRemoveProject,
this, &ClangModelManagerSupport::onAboutToRemoveProject);
CppTools::CppCodeModelSettings::setDefaultClangdPath(Utils::FilePath::fromString(
CppTools::ClangdSettings::setDefaultClangdPath(Utils::FilePath::fromString(
Core::ICore::clangdExecutable(CLANG_BINDIR)));
CppTools::CppCodeModelSettings *settings = CppTools::codeModelSettings();
connect(settings, &CppTools::CppCodeModelSettings::clangDiagnosticConfigsInvalidated,
@@ -245,7 +245,7 @@ void ClangModelManagerSupport::connectToWidgetsMarkContextMenuRequested(QWidget
void ClangModelManagerSupport::updateLanguageClient(ProjectExplorer::Project *project,
const CppTools::ProjectInfo &projectInfo)
{
if (!CppTools::codeModelSettings()->useClangd())
if (!CppTools::ClangdSettings::useClangd())
return;
const auto getJsonDbDir = [project] {
if (const ProjectExplorer::Target * const target = project->activeTarget()) {
@@ -264,7 +264,7 @@ void ClangModelManagerSupport::updateLanguageClient(ProjectExplorer::Project *pr
connect(generatorWatcher, &QFutureWatcher<GenerateCompilationDbResult>::finished,
[this, project, projectInfo, getJsonDbDir, jsonDbDir, generatorWatcher] {
generatorWatcher->deleteLater();
if (!CppTools::codeModelSettings()->useClangd())
if (!CppTools::ClangdSettings::useClangd())
return;
if (!ProjectExplorer::SessionManager::hasProject(project))
return;
@@ -284,7 +284,7 @@ void ClangModelManagerSupport::updateLanguageClient(ProjectExplorer::Project *pr
ClangdClient * const client = createClient(project, jsonDbDir);
connect(client, &Client::initialized, this, [client, project, projectInfo, jsonDbDir] {
using namespace ProjectExplorer;
if (!CppTools::codeModelSettings()->useClangd())
if (!CppTools::ClangdSettings::useClangd())
return;
if (!SessionManager::hasProject(project))
return;

View File

@@ -85,14 +85,13 @@ Utils::FilePath ClangdTest::filePath(const QString &fileName) const
void ClangdTest::initTestCase()
{
const auto settings = CppTools::codeModelSettings();
const QString clangdFromEnv = qEnvironmentVariable("QTC_CLANGD");
if (!clangdFromEnv.isEmpty())
settings->setClangdFilePath(Utils::FilePath::fromString(clangdFromEnv));
const auto clangd = settings->clangdFilePath();
CppTools::ClangdSettings::setClangdFilePath(Utils::FilePath::fromString(clangdFromEnv));
const auto clangd = CppTools::ClangdSettings::clangdFilePath();
if (clangd.isEmpty() || !clangd.exists())
QSKIP("clangd binary not found");
settings->setUseClangd(true);
CppTools::ClangdSettings::setUseClangd(true);
// Find suitable kit.
m_kit = Utils::findOr(KitManager::kits(), nullptr, [](const Kit *k) {