CppEditor: Move some convenience functions to CppCodeModelSettings class

Change-Id: I0af8560c23374ce4f6c46f98d498d44f7cb50db3
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
Christian Kandeler
2024-02-26 16:34:32 +01:00
parent db4aa77237
commit 1de045f687
16 changed files with 66 additions and 67 deletions

View File

@@ -418,7 +418,8 @@ ClangdClient::ClangdClient(Project *project, const Utils::FilePath &jsonDbDir, c
CppEditor::CompilerOptionsBuilder optionsBuilder = clangOptionsBuilder(
*CppEditor::CppModelManager::fallbackProjectPart(),
warningsConfigForProject(nullptr), includeDir, {});
const CppEditor::UsePrecompiledHeaders usePch = CppEditor::getPchUsage();
const CppEditor::UsePrecompiledHeaders usePch
= CppEditor::CppCodeModelSettings::instance().usePrecompiledHeaders();
const QJsonArray projectPartOptions = fullProjectPartOptions(
optionsBuilder, globalClangOptions());
const QJsonArray clangOptions = clangOptionsForFile({}, optionsBuilder.projectPart(),
@@ -599,7 +600,7 @@ void ClangdClient::findUsages(const CppEditor::CursorInEditor &cursor,
}
}
const bool categorize = CppEditor::codeModelSettings()->categorizeFindReferences();
const bool categorize = CppEditor::CppCodeModelSettings::instance().categorizeFindReferences();
// If it's a "normal" symbol, go right ahead.
if (searchTerm != "operator" && Utils::allOf(searchTerm, [](const QChar &c) {
@@ -919,8 +920,13 @@ void ClangdClient::updateParserConfig(const Utils::FilePath &filePath,
CppEditor::ProjectFile::classify(filePath.toString()));
const QJsonArray projectPartOptions = fullProjectPartOptions(
optionsBuilder, globalClangOptions());
addToCompilationDb(cdbChanges, *projectPart, CppEditor::getPchUsage(), projectPartOptions,
filePath.parentDir(), file, optionsBuilder.isClStyle());
addToCompilationDb(cdbChanges,
*projectPart,
CppEditor::CppCodeModelSettings::instance().usePrecompiledHeaders(),
projectPartOptions,
filePath.parentDir(),
file,
optionsBuilder.isClStyle());
QJsonObject settings;
addCompilationDb(settings, cdbChanges);
DidChangeConfigurationParams configChangeParams;

View File

@@ -166,7 +166,7 @@ GenerateCompilationDbResult generateCompilationDB(QList<ProjectInfo::ConstPtr> p
}
compileCommandsFile.write("[");
const UsePrecompiledHeaders usePch = getPchUsage();
const UsePrecompiledHeaders usePch = CppCodeModelSettings::instance().usePrecompiledHeaders();
const QJsonArray jsonProjectOptions = QJsonArray::fromStringList(projectOptions);
for (const ProjectInfo::ConstPtr &projectInfo : std::as_const(projectInfoList)) {
QTC_ASSERT(projectInfo, continue);

View File

@@ -249,7 +249,7 @@ private:
void ClangdTestFindReferences::initTestCase()
{
ClangdTest::initTestCase();
CppEditor::codeModelSettings()->setCategorizeFindReferences(true);
CppEditor::CppCodeModelSettings::instance().setCategorizeFindReferences(true);
connect(client(), &ClangdClient::foundReferences, this,
[this](const SearchResultItems &results) {
if (results.isEmpty())

View File

@@ -10,6 +10,7 @@
#include <coreplugin/icore.h>
#include <cppeditor/clangdiagnosticconfigsmodel.h>
#include <cppeditor/cppcodemodelsettings.h>
#include <cppeditor/cppprojectfile.h>
#include <cppeditor/cpptoolsreuse.h>
@@ -25,7 +26,6 @@
#include <QFileInfo>
#include <QLoggingCategory>
static Q_LOGGING_CATEGORY(LOG, "qtc.clangtools.runner", QtWarningMsg)
using namespace CppEditor;
@@ -49,7 +49,9 @@ AnalyzeUnit::AnalyzeUnit(const FileInfo &fileInfo,
actualClangIncludeDir);
file = fileInfo.file;
arguments = extraClangToolsPrependOptions();
arguments.append(optionsBuilder.build(fileInfo.kind, CppEditor::getPchUsage()));
arguments.append(
optionsBuilder.build(fileInfo.kind,
CppEditor::CppCodeModelSettings::instance().usePrecompiledHeaders()));
arguments.append(extraClangToolsAppendOptions());
}

View File

@@ -35,8 +35,8 @@ BaseEditorDocumentProcessor::~BaseEditorDocumentProcessor() = default;
void BaseEditorDocumentProcessor::run(bool projectsUpdated)
{
const Utils::Language languagePreference = codeModelSettings()->interpretAmbigiousHeadersAsC()
? Utils::Language::C
const Utils::Language languagePreference
= CppCodeModelSettings::instance().interpretAmbigiousHeadersAsC() ? Utils::Language::C
: Utils::Language::Cxx;
runImpl({CppModelManager::workingCopy(),

View File

@@ -143,16 +143,17 @@ QList<TextEditor::BlockRange> toTextEditorBlocks(
BuiltinEditorDocumentProcessor::BuiltinEditorDocumentProcessor(TextEditor::TextDocument *document)
: BaseEditorDocumentProcessor(document->document(), document->filePath())
, m_parser(new BuiltinEditorDocumentParser(document->filePath(), indexerFileSizeLimitInMb()))
, m_parser(new BuiltinEditorDocumentParser(document->filePath(),
CppCodeModelSettings::instance()
.effectiveIndexerFileSizeLimitInMb()))
, m_codeWarningsUpdated(false)
, m_semanticHighlighter(new SemanticHighlighter(document))
{
using namespace Internal;
const CppCodeModelSettings *cms = &cppCodeModelSettings();
BaseEditorDocumentParser::Configuration config = m_parser->configuration();
config.usePrecompiledHeaders = cms->pchUsage() != CppCodeModelSettings::PchUse_None;
config.usePrecompiledHeaders = CppCodeModelSettings::instance().pchUsage()
!= CppCodeModelSettings::PchUse_None;
m_parser->setConfiguration(config);
m_semanticHighlighter->setHighlightingRunner(

View File

@@ -9,7 +9,7 @@
namespace CppEditor {
enum class UsePrecompiledHeaders : char { Yes, No };
enum class UsePrecompiledHeaders { Yes, No };
enum class UseSystemHeader : char { Yes, No };
enum class UseTweakedHeaderPaths : char { Yes, Tools, No };
enum class UseToolchainMacros : char { Yes, No };

View File

@@ -4,6 +4,7 @@
#include "cppcodemodelsettings.h"
#include "clangdiagnosticconfigsmodel.h"
#include "compileroptionsbuilder.h"
#include "cppeditorconstants.h"
#include "cppeditortr.h"
#include "cpptoolsreuse.h"
@@ -125,6 +126,12 @@ void CppCodeModelSettings::toSettings(QtcSettings *s)
emit changed(); // TODO: Why?
}
CppCodeModelSettings &CppCodeModelSettings::instance()
{
static CppCodeModelSettings theCppCodeModelSettings(Core::ICore::settings());
return theCppCodeModelSettings;
}
void CppCodeModelSettings::setData(const Data &data)
{
if (m_data != data) {
@@ -134,6 +141,18 @@ void CppCodeModelSettings::setData(const Data &data)
}
}
UsePrecompiledHeaders CppCodeModelSettings::usePrecompiledHeaders() const
{
if (instance().pchUsage() == CppCodeModelSettings::PchUse_None)
return UsePrecompiledHeaders::No;
return UsePrecompiledHeaders::Yes;
}
int CppCodeModelSettings::effectiveIndexerFileSizeLimitInMb() const
{
return instance().skipIndexingBigFiles() ? instance().indexerFileSizeLimitInMb() : -1;
}
void CppCodeModelSettings::setCategorizeFindReferences(bool categorize)
{
Data d = data();
@@ -578,10 +597,4 @@ int ClangdSettings::Data::defaultCompletionResults()
return ok ? userValue : 100;
}
CppCodeModelSettings &cppCodeModelSettings()
{
static CppCodeModelSettings theCppCodeModelSettings(Core::ICore::settings());
return theCppCodeModelSettings;
}
} // namespace CppEditor

View File

@@ -22,6 +22,7 @@ class MacroExpander;
} // namespace Utils
namespace CppEditor {
enum class UsePrecompiledHeaders;
class CPPEDITOR_EXPORT CppCodeModelSettings : public QObject
{
@@ -52,16 +53,18 @@ public:
QString ignorePattern;
};
CppCodeModelSettings(Utils::QtcSettings *s) { fromSettings(s); }
static CppCodeModelSettings &instance();
void setData(const Data &data);
Data data() const { return m_data; }
PCHUsage pchUsage() const { return m_data.pchUsage; }
UsePrecompiledHeaders usePrecompiledHeaders() const;
bool interpretAmbigiousHeadersAsC() const { return m_data.interpretAmbigiousHeadersAsC; }
bool skipIndexingBigFiles() const { return m_data.skipIndexingBigFiles; }
bool useBuiltinPreprocessor() const { return m_data.useBuiltinPreprocessor; }
int indexerFileSizeLimitInMb() const { return m_data.indexerFileSizeLimitInMb; }
int effectiveIndexerFileSizeLimitInMb() const;
bool categorizeFindReferences() const { return m_data.categorizeFindReferences; }
bool ignoreFiles() const { return m_data.ignoreFiles; }
QString ignorePattern() const { return m_data.ignorePattern; }
@@ -73,6 +76,7 @@ signals:
private:
CppCodeModelSettings() = default;
CppCodeModelSettings(Utils::QtcSettings *s) { fromSettings(s); }
void toSettings(Utils::QtcSettings *s);
void fromSettings(Utils::QtcSettings *s);
@@ -224,6 +228,4 @@ private:
bool m_blockIndexing = false;
};
CppCodeModelSettings &cppCodeModelSettings();
} // namespace CppEditor

View File

@@ -54,7 +54,7 @@ public:
CppCodeModelSettingsWidget(const CppCodeModelSettings::Data &data);
private:
void apply() final { codeModelSettings()->setData(data()); }
void apply() final { CppCodeModelSettings::instance().setData(data()); }
CppCodeModelSettings::Data data() const;
@@ -152,7 +152,8 @@ public:
setCategory(Constants::CPP_SETTINGS_CATEGORY);
setDisplayCategory(Tr::tr("C++"));
setCategoryIconPath(":/projectexplorer/images/settingscategory_cpp.png");
setWidgetCreator([] { return new CppCodeModelSettingsWidget(codeModelSettings()->data()); });
setWidgetCreator(
[] { return new CppCodeModelSettingsWidget(CppCodeModelSettings::instance().data()); });
}
};

View File

@@ -348,9 +348,9 @@ void CppEditorPlugin::addPerSymbolActions()
findRefsCategorized.addToContainers(menus, Constants::G_SYMBOL);
findRefsCategorized.addOnTriggered(this, [] {
if (const auto w = currentCppEditorWidget()) {
codeModelSettings()->setCategorizeFindReferences(true);
CppCodeModelSettings::instance().setCategorizeFindReferences(true);
w->findUsages();
codeModelSettings()->setCategorizeFindReferences(false);
CppCodeModelSettings::instance().setCategorizeFindReferences(false);
}
});

View File

@@ -388,7 +388,7 @@ void CppFindReferences::findUsages(CPlusPlus::Symbol *symbol,
search->setTextToReplace(replacement);
if (callback)
search->makeNonInteractive(callback);
if (codeModelSettings()->categorizeFindReferences())
if (CppCodeModelSettings::instance().categorizeFindReferences())
search->setFilter(new CppSearchResultFilter);
setupSearch(search);
search->setSearchAgainSupported(true);
@@ -397,7 +397,7 @@ void CppFindReferences::findUsages(CPlusPlus::Symbol *symbol,
CppFindReferencesParameters parameters;
parameters.symbolId = fullIdForSymbol(symbol);
parameters.symbolFilePath = symbol->filePath();
parameters.categorize = codeModelSettings()->categorizeFindReferences();
parameters.categorize = CppCodeModelSettings::instance().categorizeFindReferences();
parameters.preferLowerCaseFileNames = preferLowerCaseFileNames(
ProjectManager::projectForFile(symbol->filePath()));
@@ -408,7 +408,8 @@ void CppFindReferences::findUsages(CPlusPlus::Symbol *symbol,
}
search->setUserData(QVariant::fromValue(parameters));
findAll_helper(search, symbol, context, codeModelSettings()->categorizeFindReferences());
findAll_helper(search, symbol, context,
CppCodeModelSettings::instance().categorizeFindReferences());
}
void CppFindReferences::renameUsages(CPlusPlus::Symbol *symbol,

View File

@@ -5,6 +5,7 @@
#include "builtineditordocumentparser.h"
#include "cppchecksymbols.h"
#include "cppcodemodelsettings.h"
#include "cppeditorconstants.h"
#include "cppeditortr.h"
#include "cppsourceprocessor.h"

View File

@@ -407,7 +407,7 @@ void CppModelManager::showPreprocessedFile(bool inNextSplit)
saveAndOpen(outFilePath, content.append(preprocessedDoc->utf8Source()), inNextSplit);
};
if (codeModelSettings()->useBuiltinPreprocessor()) {
if (CppCodeModelSettings::instance().useBuiltinPreprocessor()) {
useBuiltinPreprocessor();
return;
}
@@ -1349,10 +1349,12 @@ QFuture<void> CppModelManager::updateSourceFiles(const QSet<FilePath> &sourceFil
if (sourceFiles.isEmpty() || !d->m_indexerEnabled)
return QFuture<void>();
const QSet<QString> filteredFiles = filteredFilesRemoved(transform(sourceFiles, &FilePath::toString),
indexerFileSizeLimitInMb(),
codeModelSettings()->ignoreFiles(),
codeModelSettings()->ignorePattern());
const CppCodeModelSettings &settings = CppCodeModelSettings::instance();
const QSet<QString> filteredFiles
= filteredFilesRemoved(transform(sourceFiles, &FilePath::toString),
settings.effectiveIndexerFileSizeLimitInMb(),
settings.ignoreFiles(),
settings.ignorePattern());
return d->m_internalIndexingSupport->refreshSourceFiles(filteredFiles, mode);
}

View File

@@ -357,22 +357,6 @@ CppCompletionAssistProcessor *getCppCompletionAssistProcessor()
return new Internal::InternalCppCompletionAssistProcessor();
}
CppCodeModelSettings *codeModelSettings()
{
return &cppCodeModelSettings();
}
int indexerFileSizeLimitInMb()
{
const CppCodeModelSettings *settings = codeModelSettings();
QTC_ASSERT(settings, return -1);
if (settings->skipIndexingBigFiles())
return settings->indexerFileSizeLimitInMb();
return -1;
}
bool fileSizeExceedsLimit(const FilePath &filePath, int sizeLimitInMb)
{
if (sizeLimitInMb <= 0)
@@ -392,14 +376,6 @@ bool fileSizeExceedsLimit(const FilePath &filePath, int sizeLimitInMb)
return false;
}
UsePrecompiledHeaders getPchUsage()
{
const CppCodeModelSettings *cms = codeModelSettings();
if (cms->pchUsage() == CppCodeModelSettings::PchUse_None)
return UsePrecompiledHeaders::No;
return UsePrecompiledHeaders::Yes;
}
static void addBuiltinConfigs(ClangDiagnosticConfigsModel &model)
{
ClangDiagnosticConfig config;

View File

@@ -73,14 +73,11 @@ Utils::FilePath CPPEDITOR_EXPORT correspondingHeaderOrSource(
void CPPEDITOR_EXPORT openEditor(const Utils::FilePath &filePath, bool inNextSplit,
Utils::Id editorId = {});
class CppCodeModelSettings;
CppCodeModelSettings CPPEDITOR_EXPORT *codeModelSettings();
QString CPPEDITOR_EXPORT preferredCxxHeaderSuffix(ProjectExplorer::Project *project);
QString CPPEDITOR_EXPORT preferredCxxSourceSuffix(ProjectExplorer::Project *project);
bool CPPEDITOR_EXPORT preferLowerCaseFileNames(ProjectExplorer::Project *project);
QList<Utils::Text::Range> CPPEDITOR_EXPORT symbolOccurrencesInText(
const QTextDocument &doc, QStringView text, int offset, const QString &symbolName);
Utils::SearchResultItems CPPEDITOR_EXPORT
@@ -88,9 +85,6 @@ symbolOccurrencesInDeclarationComments(const Utils::SearchResultItems &symbolOcc
QList<Utils::Text::Range> CPPEDITOR_EXPORT symbolOccurrencesInDeclarationComments(
CppEditorWidget *editorWidget, const QTextCursor &cursor);
UsePrecompiledHeaders CPPEDITOR_EXPORT getPchUsage();
int indexerFileSizeLimitInMb();
bool fileSizeExceedsLimit(const Utils::FilePath &filePath, int sizeLimitInMb);
ProjectExplorer::Project CPPEDITOR_EXPORT *projectForProjectInfo(const ProjectInfo &info);