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::CompilerOptionsBuilder optionsBuilder = clangOptionsBuilder(
*CppEditor::CppModelManager::fallbackProjectPart(), *CppEditor::CppModelManager::fallbackProjectPart(),
warningsConfigForProject(nullptr), includeDir, {}); warningsConfigForProject(nullptr), includeDir, {});
const CppEditor::UsePrecompiledHeaders usePch = CppEditor::getPchUsage(); const CppEditor::UsePrecompiledHeaders usePch
= CppEditor::CppCodeModelSettings::instance().usePrecompiledHeaders();
const QJsonArray projectPartOptions = fullProjectPartOptions( const QJsonArray projectPartOptions = fullProjectPartOptions(
optionsBuilder, globalClangOptions()); optionsBuilder, globalClangOptions());
const QJsonArray clangOptions = clangOptionsForFile({}, optionsBuilder.projectPart(), 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 it's a "normal" symbol, go right ahead.
if (searchTerm != "operator" && Utils::allOf(searchTerm, [](const QChar &c) { 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())); CppEditor::ProjectFile::classify(filePath.toString()));
const QJsonArray projectPartOptions = fullProjectPartOptions( const QJsonArray projectPartOptions = fullProjectPartOptions(
optionsBuilder, globalClangOptions()); optionsBuilder, globalClangOptions());
addToCompilationDb(cdbChanges, *projectPart, CppEditor::getPchUsage(), projectPartOptions, addToCompilationDb(cdbChanges,
filePath.parentDir(), file, optionsBuilder.isClStyle()); *projectPart,
CppEditor::CppCodeModelSettings::instance().usePrecompiledHeaders(),
projectPartOptions,
filePath.parentDir(),
file,
optionsBuilder.isClStyle());
QJsonObject settings; QJsonObject settings;
addCompilationDb(settings, cdbChanges); addCompilationDb(settings, cdbChanges);
DidChangeConfigurationParams configChangeParams; DidChangeConfigurationParams configChangeParams;

View File

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

View File

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

View File

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

View File

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

View File

@@ -143,16 +143,17 @@ QList<TextEditor::BlockRange> toTextEditorBlocks(
BuiltinEditorDocumentProcessor::BuiltinEditorDocumentProcessor(TextEditor::TextDocument *document) BuiltinEditorDocumentProcessor::BuiltinEditorDocumentProcessor(TextEditor::TextDocument *document)
: BaseEditorDocumentProcessor(document->document(), document->filePath()) : 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_codeWarningsUpdated(false)
, m_semanticHighlighter(new SemanticHighlighter(document)) , m_semanticHighlighter(new SemanticHighlighter(document))
{ {
using namespace Internal; using namespace Internal;
const CppCodeModelSettings *cms = &cppCodeModelSettings();
BaseEditorDocumentParser::Configuration config = m_parser->configuration(); 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_parser->setConfiguration(config);
m_semanticHighlighter->setHighlightingRunner( m_semanticHighlighter->setHighlightingRunner(

View File

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

View File

@@ -4,6 +4,7 @@
#include "cppcodemodelsettings.h" #include "cppcodemodelsettings.h"
#include "clangdiagnosticconfigsmodel.h" #include "clangdiagnosticconfigsmodel.h"
#include "compileroptionsbuilder.h"
#include "cppeditorconstants.h" #include "cppeditorconstants.h"
#include "cppeditortr.h" #include "cppeditortr.h"
#include "cpptoolsreuse.h" #include "cpptoolsreuse.h"
@@ -125,6 +126,12 @@ void CppCodeModelSettings::toSettings(QtcSettings *s)
emit changed(); // TODO: Why? emit changed(); // TODO: Why?
} }
CppCodeModelSettings &CppCodeModelSettings::instance()
{
static CppCodeModelSettings theCppCodeModelSettings(Core::ICore::settings());
return theCppCodeModelSettings;
}
void CppCodeModelSettings::setData(const Data &data) void CppCodeModelSettings::setData(const Data &data)
{ {
if (m_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) void CppCodeModelSettings::setCategorizeFindReferences(bool categorize)
{ {
Data d = data(); Data d = data();
@@ -578,10 +597,4 @@ int ClangdSettings::Data::defaultCompletionResults()
return ok ? userValue : 100; return ok ? userValue : 100;
} }
CppCodeModelSettings &cppCodeModelSettings()
{
static CppCodeModelSettings theCppCodeModelSettings(Core::ICore::settings());
return theCppCodeModelSettings;
}
} // namespace CppEditor } // namespace CppEditor

View File

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

View File

@@ -54,7 +54,7 @@ public:
CppCodeModelSettingsWidget(const CppCodeModelSettings::Data &data); CppCodeModelSettingsWidget(const CppCodeModelSettings::Data &data);
private: private:
void apply() final { codeModelSettings()->setData(data()); } void apply() final { CppCodeModelSettings::instance().setData(data()); }
CppCodeModelSettings::Data data() const; CppCodeModelSettings::Data data() const;
@@ -152,7 +152,8 @@ public:
setCategory(Constants::CPP_SETTINGS_CATEGORY); setCategory(Constants::CPP_SETTINGS_CATEGORY);
setDisplayCategory(Tr::tr("C++")); setDisplayCategory(Tr::tr("C++"));
setCategoryIconPath(":/projectexplorer/images/settingscategory_cpp.png"); 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.addToContainers(menus, Constants::G_SYMBOL);
findRefsCategorized.addOnTriggered(this, [] { findRefsCategorized.addOnTriggered(this, [] {
if (const auto w = currentCppEditorWidget()) { if (const auto w = currentCppEditorWidget()) {
codeModelSettings()->setCategorizeFindReferences(true); CppCodeModelSettings::instance().setCategorizeFindReferences(true);
w->findUsages(); w->findUsages();
codeModelSettings()->setCategorizeFindReferences(false); CppCodeModelSettings::instance().setCategorizeFindReferences(false);
} }
}); });

View File

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

View File

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

View File

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

View File

@@ -357,22 +357,6 @@ CppCompletionAssistProcessor *getCppCompletionAssistProcessor()
return new Internal::InternalCppCompletionAssistProcessor(); 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) bool fileSizeExceedsLimit(const FilePath &filePath, int sizeLimitInMb)
{ {
if (sizeLimitInMb <= 0) if (sizeLimitInMb <= 0)
@@ -392,14 +376,6 @@ bool fileSizeExceedsLimit(const FilePath &filePath, int sizeLimitInMb)
return false; 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) static void addBuiltinConfigs(ClangDiagnosticConfigsModel &model)
{ {
ClangDiagnosticConfig config; ClangDiagnosticConfig config;

View File

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