diff options
Diffstat (limited to 'src/plugins/cpptools')
27 files changed, 346 insertions, 91 deletions
diff --git a/src/plugins/cpptools/CMakeLists.txt b/src/plugins/cpptools/CMakeLists.txt new file mode 100644 index 0000000000..e810c379f8 --- /dev/null +++ b/src/plugins/cpptools/CMakeLists.txt @@ -0,0 +1,131 @@ +add_qtc_plugin(CppTools + DEPENDS Qt5::Network Qt5::Xml + PUBLIC_DEPENDS CPlusPlus + PLUGIN_DEPENDS Core ProjectExplorer TextEditor + SOURCES + abstracteditorsupport.cpp abstracteditorsupport.h + abstractoverviewmodel.h + baseeditordocumentparser.cpp baseeditordocumentparser.h + baseeditordocumentprocessor.cpp baseeditordocumentprocessor.h + builtincursorinfo.cpp builtincursorinfo.h + builtineditordocumentparser.cpp builtineditordocumentparser.h + builtineditordocumentprocessor.cpp builtineditordocumentprocessor.h + builtinindexingsupport.cpp builtinindexingsupport.h + clangbasechecks.ui + clangdiagnosticconfig.cpp clangdiagnosticconfig.h + clangdiagnosticconfigsmodel.cpp clangdiagnosticconfigsmodel.h + clangdiagnosticconfigsselectionwidget.cpp clangdiagnosticconfigsselectionwidget.h + clangdiagnosticconfigswidget.cpp clangdiagnosticconfigswidget.h clangdiagnosticconfigswidget.ui + clazychecks.ui + compileroptionsbuilder.cpp compileroptionsbuilder.h + cppbuiltinmodelmanagersupport.cpp cppbuiltinmodelmanagersupport.h + cppcanonicalsymbol.cpp cppcanonicalsymbol.h + cppchecksymbols.cpp cppchecksymbols.h + cppclassesfilter.cpp cppclassesfilter.h + cppcodeformatter.cpp cppcodeformatter.h + cppcodemodelinspectordumper.cpp cppcodemodelinspectordumper.h + cppcodemodelsettings.cpp cppcodemodelsettings.h + cppcodemodelsettingspage.cpp cppcodemodelsettingspage.h cppcodemodelsettingspage.ui + cppcodestylepreferences.cpp cppcodestylepreferences.h + cppcodestylepreferencesfactory.cpp cppcodestylepreferencesfactory.h + cppcodestylesettings.cpp cppcodestylesettings.h + cppcodestylesettingspage.cpp cppcodestylesettingspage.h cppcodestylesettingspage.ui + cppcodestylesnippets.h + cppcompletionassist.cpp cppcompletionassist.h + cppcompletionassistprocessor.cpp cppcompletionassistprocessor.h + cppcompletionassistprovider.cpp cppcompletionassistprovider.h + cppcurrentdocumentfilter.cpp cppcurrentdocumentfilter.h + cppcursorinfo.h + cppdoxygen.cpp cppdoxygen.h + cppeditoroutline.cpp cppeditoroutline.h + cppeditorwidgetinterface.h + cppelementevaluator.cpp cppelementevaluator.h + cppfileiterationorder.cpp cppfileiterationorder.h + cppfilesettingspage.cpp cppfilesettingspage.h cppfilesettingspage.ui + cppfindreferences.cpp cppfindreferences.h + cppfollowsymbolundercursor.cpp cppfollowsymbolundercursor.h + cppfunctionsfilter.cpp cppfunctionsfilter.h + cpphoverhandler.cpp cpphoverhandler.h + cppincludesfilter.cpp cppincludesfilter.h + cppindexingsupport.cpp cppindexingsupport.h + cppkitinfo.cpp cppkitinfo.h + cpplocalsymbols.cpp cpplocalsymbols.h + cpplocatordata.cpp cpplocatordata.h + cpplocatorfilter.cpp cpplocatorfilter.h + cppmodelmanager.cpp cppmodelmanager.h + cppmodelmanagerinterface.h + cppmodelmanagersupport.cpp cppmodelmanagersupport.h + cppoverviewmodel.cpp cppoverviewmodel.h + cpppointerdeclarationformatter.cpp cpppointerdeclarationformatter.h + cppprojectfile.cpp cppprojectfile.h + cppprojectfilecategorizer.cpp cppprojectfilecategorizer.h + cppprojectinfogenerator.cpp cppprojectinfogenerator.h + cppprojectpartchooser.cpp cppprojectpartchooser.h + cppprojectupdater.cpp cppprojectupdater.h + cppqtstyleindenter.cpp cppqtstyleindenter.h + cpprawprojectpart.cpp cpprawprojectpart.h + cpprefactoringchanges.cpp cpprefactoringchanges.h + cpprefactoringengine.cpp cpprefactoringengine.h + cppselectionchanger.cpp cppselectionchanger.h + cppsemanticinfo.h + cppsemanticinfoupdater.cpp cppsemanticinfoupdater.h + cppsourceprocessor.cpp cppsourceprocessor.h + cppsymbolinfo.h + cpptools.qrc + cpptools_clangtidychecks.h + cpptools_clazychecks.h + cpptools_global.h + cpptools_utils.h + cpptoolsbridge.cpp cpptoolsbridge.h + cpptoolsbridgeinterface.h + cpptoolsbridgeqtcreatorimplementation.cpp cpptoolsbridgeqtcreatorimplementation.h + cpptoolsconstants.h + cpptoolsjsextension.cpp cpptoolsjsextension.h + cpptoolsplugin.cpp cpptoolsplugin.h + cpptoolsreuse.cpp cpptoolsreuse.h + cpptoolssettings.cpp cpptoolssettings.h + cppvirtualfunctionassistprovider.cpp cppvirtualfunctionassistprovider.h + cppvirtualfunctionproposalitem.cpp cppvirtualfunctionproposalitem.h + cppworkingcopy.cpp cppworkingcopy.h + cursorineditor.h + doxygengenerator.cpp doxygengenerator.h + editordocumenthandle.cpp editordocumenthandle.h + followsymbolinterface.h + functionutils.cpp functionutils.h + generatedcodemodelsupport.cpp generatedcodemodelsupport.h + headerpathfilter.cpp headerpathfilter.h + includeutils.cpp includeutils.h + indexitem.cpp indexitem.h + insertionpointlocator.cpp insertionpointlocator.h + projectinfo.cpp projectinfo.h + projectpart.cpp projectpart.h + refactoringengineinterface.h + searchsymbols.cpp searchsymbols.h + semantichighlighter.cpp semantichighlighter.h + senddocumenttracker.cpp senddocumenttracker.h + stringtable.cpp stringtable.h + symbolfinder.cpp symbolfinder.h + symbolsfindfilter.cpp symbolsfindfilter.h + tidychecks.ui + typehierarchybuilder.cpp typehierarchybuilder.h + usages.h + wrappablelineedit.cpp wrappablelineedit.h +) + +extend_qtc_plugin(CppTools + CONDITION WITH_TESTS + SOURCES + cppcodegen_test.cpp + cppcompletion_test.cpp + cppheadersource_test.cpp + cpplocalsymbols_test.cpp + cpplocatorfilter_test.cpp + cppmodelmanager_test.cpp + cpppointerdeclarationformatter_test.cpp + cppsourceprocessertesthelper.cpp cppsourceprocessertesthelper.h + cppsourceprocessor_test.cpp + cpptoolstestcase.cpp cpptoolstestcase.h + modelmanagertesthelper.cpp modelmanagertesthelper.h + symbolsearcher_test.cpp + typehierarchybuilder_test.cpp +) diff --git a/src/plugins/cpptools/builtinindexingsupport.cpp b/src/plugins/cpptools/builtinindexingsupport.cpp index ff21e85500..ddde5699a1 100644 --- a/src/plugins/cpptools/builtinindexingsupport.cpp +++ b/src/plugins/cpptools/builtinindexingsupport.cpp @@ -310,7 +310,7 @@ public: item.path = scope.split(QLatin1String("::"), QString::SkipEmptyParts); item.text = text; item.icon = info->icon(); - item.userData = qVariantFromValue(info); + item.userData = QVariant::fromValue(info); resultItems << item; } diff --git a/src/plugins/cpptools/clangdiagnosticconfigswidget.cpp b/src/plugins/cpptools/clangdiagnosticconfigswidget.cpp index ea0386239f..4f03a681f0 100644 --- a/src/plugins/cpptools/clangdiagnosticconfigswidget.cpp +++ b/src/plugins/cpptools/clangdiagnosticconfigswidget.cpp @@ -910,7 +910,7 @@ void ClangDiagnosticConfigsWidget::updateValidityWidgets(const QString &errorMes void ClangDiagnosticConfigsWidget::connectClangTidyItemChanged() { connect(m_tidyChecks->tidyMode, - static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), + QOverload<int>::of(&QComboBox::currentIndexChanged), this, &ClangDiagnosticConfigsWidget::onClangTidyModeChanged); connect(m_tidyTreeModel.get(), &TidyChecksTreeModel::dataChanged, @@ -920,7 +920,7 @@ void ClangDiagnosticConfigsWidget::connectClangTidyItemChanged() void ClangDiagnosticConfigsWidget::disconnectClangTidyItemChanged() { disconnect(m_tidyChecks->tidyMode, - static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), + QOverload<int>::of(&QComboBox::currentIndexChanged), this, &ClangDiagnosticConfigsWidget::onClangTidyModeChanged); disconnect(m_tidyTreeModel.get(), &TidyChecksTreeModel::dataChanged, diff --git a/src/plugins/cpptools/compileroptionsbuilder.cpp b/src/plugins/cpptools/compileroptionsbuilder.cpp index 8dfe0c7977..7d12b33f05 100644 --- a/src/plugins/cpptools/compileroptionsbuilder.cpp +++ b/src/plugins/cpptools/compileroptionsbuilder.cpp @@ -455,6 +455,8 @@ void CompilerOptionsBuilder::addLanguageVersionAndExtensions() case LanguageVersion::CXX2a: option = (gnuExtensions ? QLatin1String("-std=gnu++2a") : QLatin1String("-std=c++2a")); break; + case LanguageVersion::None: + break; } add(option, /*gccOnlyOption=*/true); @@ -522,6 +524,7 @@ static QStringList languageFeatureMacros() "__cpp_guaranteed_copy_elision", "__cpp_hex_float", "__cpp_if_constexpr", + "__cpp_impl_destroying_delete", "__cpp_inheriting_constructors", "__cpp_init_captures", "__cpp_initializer_lists", diff --git a/src/plugins/cpptools/cppclassesfilter.cpp b/src/plugins/cpptools/cppclassesfilter.cpp index 1306a155a4..ee691ba98b 100644 --- a/src/plugins/cpptools/cppclassesfilter.cpp +++ b/src/plugins/cpptools/cppclassesfilter.cpp @@ -43,7 +43,7 @@ CppClassesFilter::~CppClassesFilter() = default; Core::LocatorFilterEntry CppClassesFilter::filterEntryFromIndexItem(IndexItem::Ptr info) { - const QVariant id = qVariantFromValue(info); + const QVariant id = QVariant::fromValue(info); Core::LocatorFilterEntry filterEntry(this, info->symbolName(), id, info->icon()); filterEntry.extraInfo = info->symbolScope().isEmpty() ? info->shortNativeFilePath() diff --git a/src/plugins/cpptools/cppcodemodelinspectordumper.cpp b/src/plugins/cpptools/cppcodemodelinspectordumper.cpp index e05c6c5eb3..692d8a8634 100644 --- a/src/plugins/cpptools/cppcodemodelinspectordumper.cpp +++ b/src/plugins/cpptools/cppcodemodelinspectordumper.cpp @@ -107,17 +107,18 @@ QString Utils::toString(::Utils::LanguageVersion languageVersion) { #define CASE_LANGUAGEVERSION(x) case ::Utils::LanguageVersion::x: return QLatin1String(#x) switch (languageVersion) { - CASE_LANGUAGEVERSION(C89); - CASE_LANGUAGEVERSION(C99); - CASE_LANGUAGEVERSION(C11); - CASE_LANGUAGEVERSION(C18); - CASE_LANGUAGEVERSION(CXX98); - CASE_LANGUAGEVERSION(CXX03); - CASE_LANGUAGEVERSION(CXX11); - CASE_LANGUAGEVERSION(CXX14); - CASE_LANGUAGEVERSION(CXX17); - CASE_LANGUAGEVERSION(CXX2a); - // no default to get a compiler warning if anything is added + CASE_LANGUAGEVERSION(None); + CASE_LANGUAGEVERSION(C89); + CASE_LANGUAGEVERSION(C99); + CASE_LANGUAGEVERSION(C11); + CASE_LANGUAGEVERSION(C18); + CASE_LANGUAGEVERSION(CXX98); + CASE_LANGUAGEVERSION(CXX03); + CASE_LANGUAGEVERSION(CXX11); + CASE_LANGUAGEVERSION(CXX14); + CASE_LANGUAGEVERSION(CXX17); + CASE_LANGUAGEVERSION(CXX2a); + // no default to get a compiler warning if anything is added } #undef CASE_LANGUAGEVERSION return QString(); @@ -383,6 +384,17 @@ QString Utils::toString(CPlusPlus::Kind kind) return QString(); } +QString Utils::toString(ProjectPart::ToolChainWordWidth width) +{ + switch (width) { + case ProjectPart::ToolChainWordWidth::WordWidth32Bit: + return QString("32"); + case ProjectPart::ToolChainWordWidth::WordWidth64Bit: + return QString("64"); + } + return QString(); +} + QString Utils::partsForFile(const QString &fileName) { const QList<ProjectPart::Ptr> parts @@ -502,16 +514,20 @@ void Dumper::dumpProjectInfos( const QList<ProjectInfo> &projectInfos) if (!part->projectConfigFile.isEmpty()) m_out << i3 << "Project Config File: " << part->projectConfigFile << "\n"; m_out << i2 << "Project Part \"" << part->id() << "\"{{{3\n"; - m_out << i3 << "Project Part Name : " << part->displayName << "\n"; - m_out << i3 << "Project Name : " << projectName << "\n"; - m_out << i3 << "Project File : " << projectFilePath << "\n"; - m_out << i3 << "Compiler Flags : " << part->compilerFlags.join(", ") << "\n"; - m_out << i3 << "Selected For Building: " << part->selectedForBuilding << "\n"; - m_out << i3 << "Build Target Type : " << Utils::toString(part->buildTargetType) << "\n"; - m_out << i3 << "Lanugage Version : " << Utils::toString(part->languageVersion)<<"\n"; - m_out << i3 << "Lanugage Extensions : " << Utils::toString(part->languageExtensions) + m_out << i3 << "Project Part Name : " << part->displayName << "\n"; + m_out << i3 << "Project Name : " << projectName << "\n"; + m_out << i3 << "Project File : " << projectFilePath << "\n"; + m_out << i3 << "ToolChain Type : " << part->toolchainType.toString() << "\n"; + m_out << i3 << "ToolChain Target Triple: " << part->toolChainTargetTriple << "\n"; + m_out << i3 << "ToolChain Word Width : " << part->toolChainWordWidth << "\n"; + m_out << i3 << "Compiler Flags : " << part->compilerFlags.join(", ") << "\n"; + m_out << i3 << "Selected For Building : " << part->selectedForBuilding << "\n"; + m_out << i3 << "Build System Target : " << part->buildSystemTarget << "\n"; + m_out << i3 << "Build Target Type : " << Utils::toString(part->buildTargetType) << "\n"; + m_out << i3 << "Language Version : " << Utils::toString(part->languageVersion)<<"\n"; + m_out << i3 << "Language Extensions : " << Utils::toString(part->languageExtensions) << "\n"; - m_out << i3 << "Qt Version : " << Utils::toString(part->qtVersion) << "\n"; + m_out << i3 << "Qt Version : " << Utils::toString(part->qtVersion) << "\n"; if (!part->files.isEmpty()) { m_out << i3 << "Files:{{{4\n"; diff --git a/src/plugins/cpptools/cppcodemodelinspectordumper.h b/src/plugins/cpptools/cppcodemodelinspectordumper.h index c3100d8b33..41d294e817 100644 --- a/src/plugins/cpptools/cppcodemodelinspectordumper.h +++ b/src/plugins/cpptools/cppcodemodelinspectordumper.h @@ -54,6 +54,7 @@ struct CPPTOOLS_EXPORT Utils static QString toString(const QVector<CppTools::ProjectFile> &projectFiles); static QString toString(CppTools::ProjectFile::Kind kind); static QString toString(CPlusPlus::Kind kind); + static QString toString(ProjectPart::ToolChainWordWidth width); static QString partsForFile(const QString &fileName); static QString unresolvedFileNameWithDelimiters(const CPlusPlus::Document::Include &include); static QString pathListToString(const QStringList &pathList); diff --git a/src/plugins/cpptools/cppcompletionassist.cpp b/src/plugins/cpptools/cppcompletionassist.cpp index 12b226f756..b51f833afe 100644 --- a/src/plugins/cpptools/cppcompletionassist.cpp +++ b/src/plugins/cpptools/cppcompletionassist.cpp @@ -92,7 +92,10 @@ public: void keepCompletionOperator(unsigned compOp) { m_completionOperator = compOp; } void keepTypeOfExpression(const QSharedPointer<TypeOfExpression> &typeOfExp) { m_typeOfExpression = typeOfExp; } - + bool isKeyword() const final + { return m_isKeyword; } + void setIsKeyword(bool isKeyword) + { m_isKeyword = isKeyword; } quint64 hash() const override; @@ -101,6 +104,7 @@ private: unsigned m_completionOperator = T_EOF_SYMBOL; mutable QChar m_typedChar; bool m_isOverloaded = false; + bool m_isKeyword = false; }; } // Internal @@ -1531,6 +1535,16 @@ bool InternalCppCompletionAssistProcessor::globalCompletion(Scope *currentScope) return !m_completions.isEmpty(); } +void InternalCppCompletionAssistProcessor::addKeywordCompletionItem(const QString &text) +{ + auto item = new CppAssistProposalItem; + item->setText(text); + item->setIcon(Icons::keywordIcon()); + item->setOrder(KeywordsOrder); + item->setIsKeyword(true); + m_completions.append(item); +} + bool InternalCppCompletionAssistProcessor::completeMember(const QList<LookupItem> &baseResults) { const LookupContext &context = m_model->m_typeOfExpression->context(); @@ -1859,16 +1873,16 @@ void InternalCppCompletionAssistProcessor::addKeywords() // keyword completion items. for (int i = T_FIRST_KEYWORD; i < keywordLimit; ++i) - addCompletionItem(QLatin1String(Token::name(i)), Icons::keywordIcon(), KeywordsOrder); + addKeywordCompletionItem(QLatin1String(Token::name(i))); // primitive type completion items. for (int i = T_FIRST_PRIMITIVE; i <= T_LAST_PRIMITIVE; ++i) - addCompletionItem(QLatin1String(Token::name(i)), Icons::keywordIcon(), KeywordsOrder); + addKeywordCompletionItem(QLatin1String(Token::name(i))); // "Identifiers with special meaning" if (m_interface->languageFeatures().cxx11Enabled) { - addCompletionItem(QLatin1String("override"), Icons::keywordIcon(), KeywordsOrder); - addCompletionItem(QLatin1String("final"), Icons::keywordIcon(), KeywordsOrder); + addKeywordCompletionItem(QLatin1String("override")); + addKeywordCompletionItem(QLatin1String("final")); } } diff --git a/src/plugins/cpptools/cppcompletionassist.h b/src/plugins/cpptools/cppcompletionassist.h index e22ea38607..7213271263 100644 --- a/src/plugins/cpptools/cppcompletionassist.h +++ b/src/plugins/cpptools/cppcompletionassist.h @@ -138,6 +138,7 @@ private: CPlusPlus::Scope *cursorScope); bool globalCompletion(CPlusPlus::Scope *scope); + void addKeywordCompletionItem(const QString &text); void addCompletionItem(const QString &text, const QIcon &icon = QIcon(), int order = 0, diff --git a/src/plugins/cpptools/cppcurrentdocumentfilter.cpp b/src/plugins/cpptools/cppcurrentdocumentfilter.cpp index be1163d168..fdd4920504 100644 --- a/src/plugins/cpptools/cppcurrentdocumentfilter.cpp +++ b/src/plugins/cpptools/cppcurrentdocumentfilter.cpp @@ -83,7 +83,7 @@ QList<Core::LocatorFilterEntry> CppCurrentDocumentFilter::matchesFor( QRegularExpressionMatch match = regexp.match(matchString); if (match.hasMatch()) { const bool betterMatch = match.capturedStart() == 0; - QVariant id = qVariantFromValue(info); + QVariant id = QVariant::fromValue(info); QString name = matchString; QString extraInfo = info->symbolScope(); if (info->type() == IndexItem::Function) { diff --git a/src/plugins/cpptools/cppeditoroutline.cpp b/src/plugins/cpptools/cppeditoroutline.cpp index d7840016d5..627385f107 100644 --- a/src/plugins/cpptools/cppeditoroutline.cpp +++ b/src/plugins/cpptools/cppeditoroutline.cpp @@ -124,9 +124,9 @@ CppEditorOutline::CppEditorOutline(TextEditor::TextEditorWidget *editorWidget) &CppTools::CppToolsSettings::setSortedEditorDocumentOutline); m_combo->addAction(m_sortAction); - connect(m_combo, static_cast<void (QComboBox::*)(int)>(&QComboBox::activated), + connect(m_combo, QOverload<int>::of(&QComboBox::activated), this, &CppEditorOutline::gotoSymbolInEditor); - connect(m_combo, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), + connect(m_combo, QOverload<int>::of(&QComboBox::currentIndexChanged), this, &CppEditorOutline::updateToolTip); // Set up timers diff --git a/src/plugins/cpptools/cppfindreferences.cpp b/src/plugins/cpptools/cppfindreferences.cpp index 867b3d395a..b42796c194 100644 --- a/src/plugins/cpptools/cppfindreferences.cpp +++ b/src/plugins/cpptools/cppfindreferences.cpp @@ -351,7 +351,7 @@ void CppFindReferences::findUsages(CPlusPlus::Symbol *symbol, parameters.prettySymbolName = overview.prettyName(context.path(symbol).constLast()); } - search->setUserData(qVariantFromValue(parameters)); + search->setUserData(QVariant::fromValue(parameters)); findAll_helper(search, symbol, context); } @@ -571,7 +571,7 @@ static void displayResults(SearchResult *search, QFutureWatcher<CPlusPlus::Usage parameters.filesToRename.append(node); } - search->setUserData(qVariantFromValue(parameters)); + search->setUserData(QVariant::fromValue(parameters)); } static void searchFinished(SearchResult *search, QFutureWatcher<CPlusPlus::Usage> *watcher) diff --git a/src/plugins/cpptools/cppfunctionsfilter.cpp b/src/plugins/cpptools/cppfunctionsfilter.cpp index f2897215df..9e023b2c64 100644 --- a/src/plugins/cpptools/cppfunctionsfilter.cpp +++ b/src/plugins/cpptools/cppfunctionsfilter.cpp @@ -45,7 +45,7 @@ CppFunctionsFilter::~CppFunctionsFilter() = default; Core::LocatorFilterEntry CppFunctionsFilter::filterEntryFromIndexItem(IndexItem::Ptr info) { - const QVariant id = qVariantFromValue(info); + const QVariant id = QVariant::fromValue(info); QString name = info->symbolName(); QString extraInfo = info->symbolScope(); diff --git a/src/plugins/cpptools/cppkitinfo.cpp b/src/plugins/cpptools/cppkitinfo.cpp index 6cdf7d52df..e57a4dbd73 100644 --- a/src/plugins/cpptools/cppkitinfo.cpp +++ b/src/plugins/cpptools/cppkitinfo.cpp @@ -48,12 +48,12 @@ KitInfo::KitInfo(Project *project) // Toolchains if (kit) { - cToolChain = ToolChainKitInformation::toolChain(kit, Constants::C_LANGUAGE_ID); - cxxToolChain = ToolChainKitInformation::toolChain(kit, Constants::CXX_LANGUAGE_ID); + cToolChain = ToolChainKitAspect::toolChain(kit, Constants::C_LANGUAGE_ID); + cxxToolChain = ToolChainKitAspect::toolChain(kit, Constants::CXX_LANGUAGE_ID); } // Sysroot - sysRootPath = ProjectExplorer::SysRootKitInformation::sysRoot(kit).toString(); + sysRootPath = ProjectExplorer::SysRootKitAspect::sysRoot(kit).toString(); } bool KitInfo::isValid() const diff --git a/src/plugins/cpptools/cpplocatorfilter.cpp b/src/plugins/cpptools/cpplocatorfilter.cpp index 6865cbe5a2..aa85f8d33f 100644 --- a/src/plugins/cpptools/cpplocatorfilter.cpp +++ b/src/plugins/cpptools/cpplocatorfilter.cpp @@ -50,7 +50,7 @@ CppLocatorFilter::~CppLocatorFilter() = default; Core::LocatorFilterEntry CppLocatorFilter::filterEntryFromIndexItem(IndexItem::Ptr info) { - const QVariant id = qVariantFromValue(info); + const QVariant id = QVariant::fromValue(info); Core::LocatorFilterEntry filterEntry(this, info->scopedSymbolName(), id, info->icon()); if (info->type() == IndexItem::Class || info->type() == IndexItem::Enum) filterEntry.extraInfo = info->shortNativeFilePath(); diff --git a/src/plugins/cpptools/cpplocatorfilter_test.cpp b/src/plugins/cpptools/cpplocatorfilter_test.cpp index 8c6f50390f..da6a154360 100644 --- a/src/plugins/cpptools/cpplocatorfilter_test.cpp +++ b/src/plugins/cpptools/cpplocatorfilter_test.cpp @@ -166,8 +166,8 @@ void CppToolsPlugin::test_cpplocatorfilters_CppLocatorFilter_data() MyTestDataDir testDirectory("testdata_basic"); const QString testFile = testDirectory.file("file1.cpp"); const QString objTestFile = testDirectory.file("file1.mm"); - const QString testFileShort = FileUtils::shortNativePath(FileName::fromString(testFile)); - const QString objTestFileShort = FileUtils::shortNativePath(FileName::fromString(objTestFile)); + const QString testFileShort = FileName::fromString(testFile).shortNativePath(); + const QString objTestFileShort = FileName::fromString(objTestFile).shortNativePath(); QTest::newRow("CppFunctionsFilter") << testFile diff --git a/src/plugins/cpptools/cppprojectinfogenerator.cpp b/src/plugins/cpptools/cppprojectinfogenerator.cpp index c177c7a7d9..18c7d4fb76 100644 --- a/src/plugins/cpptools/cppprojectinfogenerator.cpp +++ b/src/plugins/cpptools/cppprojectinfogenerator.cpp @@ -89,10 +89,13 @@ QVector<ProjectPart::Ptr> ProjectInfoGenerator::createProjectParts(const RawProj rawProjectPart.files, rawProjectPart.fileClassifier); - if (cat.hasParts()) { - const ProjectPart::Ptr part = projectPartFromRawProjectPart(rawProjectPart, - m_projectUpdateInfo.project); + if (!cat.hasParts()) + return result; + const ProjectPart::Ptr part = projectPartFromRawProjectPart(rawProjectPart, + m_projectUpdateInfo.project); + + if (m_projectUpdateInfo.cxxToolChain) { if (cat.hasCxxSources()) { result << createProjectPart(rawProjectPart, part, @@ -101,7 +104,6 @@ QVector<ProjectPart::Ptr> ProjectInfoGenerator::createProjectParts(const RawProj Language::Cxx, LanguageExtension::None); } - if (cat.hasObjcxxSources()) { result << createProjectPart(rawProjectPart, part, @@ -110,7 +112,9 @@ QVector<ProjectPart::Ptr> ProjectInfoGenerator::createProjectParts(const RawProj Language::Cxx, LanguageExtension::ObjectiveC); } + } + if (m_projectUpdateInfo.cToolChain) { if (cat.hasCSources()) { result << createProjectPart(rawProjectPart, part, @@ -129,6 +133,7 @@ QVector<ProjectPart::Ptr> ProjectInfoGenerator::createProjectParts(const RawProj LanguageExtension::ObjectiveC); } } + return result; } @@ -182,7 +187,9 @@ ProjectPart::Ptr ProjectInfoGenerator::createProjectPart( // Header paths if (tcInfo.headerPathsRunner) { const ProjectExplorer::HeaderPaths builtInHeaderPaths - = tcInfo.headerPathsRunner(flags.commandLineFlags, tcInfo.sysRootPath); + = tcInfo.headerPathsRunner(flags.commandLineFlags, + tcInfo.sysRootPath, + tcInfo.targetTriple); ProjectExplorer::HeaderPaths &headerPaths = part->headerPaths; for (const ProjectExplorer::HeaderPath &header : builtInHeaderPaths) { diff --git a/src/plugins/cpptools/cpptools_clangtidychecks.h b/src/plugins/cpptools/cpptools_clangtidychecks.h index 20dcbdf120..813e9b9ed5 100644 --- a/src/plugins/cpptools/cpptools_clangtidychecks.h +++ b/src/plugins/cpptools/cpptools_clangtidychecks.h @@ -50,7 +50,33 @@ static const TidyNode CLANG_TIDY_CHECKS_ROOT { "android-", { + { + "uration-", + { + "comparison", + "division", + { + "factory-", + { + "float", + "scale" + } + }, + "subtraction" + } + }, + "aster-strsplit-delimiter", + { + "o-", + { + "internal-dependencies", + "namespace" + } + }, + "edundant-strcat-calls", + "tr-cat-append", "tring-find-startswith", + "pgrade-duration-conversions", { "cloexec-", { @@ -149,6 +175,7 @@ static const TidyNode CLANG_TIDY_CHECKS_ROOT "swapped-arguments", "terminating-continue", "throw-keyword-missing", + "too-small-loop-variable", "undefined-memory-manipulation", "undelegated-constructor", { @@ -166,6 +193,7 @@ static const TidyNode CLANG_TIDY_CHECKS_ROOT "cert-", { "dcl03-c", + "dcl16-c", "dcl21-cpp", "dcl50-cpp", "dcl54-cpp", @@ -193,6 +221,7 @@ static const TidyNode CLANG_TIDY_CHECKS_ROOT { "apiModeling.", { + "StdCLibraryFunctions", "TrustNonnull", "google.GTest" } @@ -232,13 +261,13 @@ static const TidyNode CLANG_TIDY_CHECKS_ROOT "cplusplus.", { "InnerPointer", + "Move", "NewDelete", "NewDeleteLeaks", "SelfAssignment" } }, "deadcode.DeadStores", - "llvm.Conventions", { "nullability.", { @@ -286,6 +315,7 @@ static const TidyNode CLANG_TIDY_CHECKS_ROOT { "API", "NumberObjectConversion", + "OSObjectRetainCount", "ObjCProperty", "SecKeychainAPI", { @@ -357,7 +387,6 @@ static const TidyNode CLANG_TIDY_CHECKS_ROOT "Malloc", "MallocSizeof", "MismatchedDeallocator", - "StdCLibraryFunctions", "Vfork", { "cstring.", @@ -381,11 +410,20 @@ static const TidyNode CLANG_TIDY_CHECKS_ROOT { "cppcoreguidelines-", { - "avoid-goto", + { + "avoid-", + { + "c-arrays", + "goto", + "magic-numbers" + } + }, "c-copy-assignment-signature", "interfaces-global-init", + "macro-usage", "narrowing-conversions", "no-malloc", + "non-private-member-variables-in-classes", "owning-memory", { "pro-", @@ -447,6 +485,7 @@ static const TidyNode CLANG_TIDY_CHECKS_ROOT "objc-", { "avoid-throwing-exception", + "function-naming", "global-variable-declaration" } }, @@ -473,7 +512,13 @@ static const TidyNode CLANG_TIDY_CHECKS_ROOT { "hicpp-", { - "avoid-goto", + { + "avoid-", + { + "c-arrays", + "goto" + } + }, "braces-around-statements", "deprecated-headers", "exception-baseclass", @@ -498,6 +543,7 @@ static const TidyNode CLANG_TIDY_CHECKS_ROOT "special-member-functions", "static-assert", "undelegated-constructor", + "uppercase-literal-suffix", { "use-", { @@ -533,7 +579,13 @@ static const TidyNode CLANG_TIDY_CHECKS_ROOT "definitions-in-headers", "misplaced-const", "new-delete-overloads", - "non-copyable-objects", + { + "non-", + { + "copyable-objects", + "private-member-variables-in-classes" + } + }, "redundant-expression", "static-assert", "throw-by-value-catch-by-reference", @@ -552,8 +604,21 @@ static const TidyNode CLANG_TIDY_CHECKS_ROOT { "modernize-", { - "avoid-bind", - "deprecated-headers", + { + "avoid-", + { + "bind", + "c-arrays" + } + }, + "concat-nested-namespaces", + { + "deprecated-", + { + "headers", + "ios-base-aliases" + } + }, "loop-convert", { "make-", @@ -589,6 +654,7 @@ static const TidyNode CLANG_TIDY_CHECKS_ROOT "delete" } }, + "nodiscard", "noexcept", "nullptr", "override", @@ -658,6 +724,7 @@ static const TidyNode CLANG_TIDY_CHECKS_ROOT { "avoid-const-params-in-decls", "braces-around-statements", + "const-return-type", "container-size-empty", "delete-null-pointer", "deleted-default", @@ -666,6 +733,8 @@ static const TidyNode CLANG_TIDY_CHECKS_ROOT "identifier-naming", "implicit-bool-conversion", "inconsistent-declaration-parameter-name", + "isolate-declaration", + "magic-numbers", "misleading-indentation", "misplaced-array-index", "named-parameter", @@ -677,6 +746,7 @@ static const TidyNode CLANG_TIDY_CHECKS_ROOT "declaration", "function-ptr-dereference", "member-init", + "preprocessor", "smartptr-get", { "string-", @@ -703,6 +773,7 @@ static const TidyNode CLANG_TIDY_CHECKS_ROOT }, "string-compare", "uniqueptr-delete-release", + "uppercase-literal-suffix", "rary-objects" } } diff --git a/src/plugins/cpptools/cpptoolsconstants.h b/src/plugins/cpptools/cpptoolsconstants.h index 2e1aebfd43..8490f2ccf5 100644 --- a/src/plugins/cpptools/cpptoolsconstants.h +++ b/src/plugins/cpptools/cpptoolsconstants.h @@ -100,7 +100,7 @@ const char SYMBOLS_FIND_FILTER_DISPLAY_NAME[] = QT_TRANSLATE_NOOP("CppTools", "C // CLANG_VERSION here because it might denote a version that was not yet // released (e.g. 6.0.1, but only 6.0.0 was released). constexpr const char TIDY_DOCUMENTATION_URL_TEMPLATE[] - = "https://releases.llvm.org/7.0.0/tools/clang/tools/extra/docs/clang-tidy/checks/%1.html"; + = "https://releases.llvm.org/8.0.0/tools/clang/tools/extra/docs/clang-tidy/checks/%1.html"; constexpr const char CLAZY_DOCUMENTATION_URL_TEMPLATE[] = "https://github.com/KDE/clazy/blob/master/docs/checks/README-%1.md"; diff --git a/src/plugins/cpptools/cpptoolsjsextension.cpp b/src/plugins/cpptools/cpptoolsjsextension.cpp index d5efc1db6d..d25448f304 100644 --- a/src/plugins/cpptools/cpptoolsjsextension.cpp +++ b/src/plugins/cpptools/cpptoolsjsextension.cpp @@ -38,33 +38,16 @@ namespace CppTools { namespace Internal { -QString CppToolsJsExtension::headerGuard(const QString &in) const +static QString fileName(const QString &path, const QString &extension) { - return Utils::headerGuard(in); + return Utils::FileName::fromStringWithExtension(path, extension).toString(); } -QString CppToolsJsExtension::fileName(const QString &path, const QString &extension) const +QString CppToolsJsExtension::headerGuard(const QString &in) const { - QString raw = Utils::FileName::fromString(path, extension).toString(); - CppFileSettings settings; - settings.fromSettings(Core::ICore::settings()); - if (!settings.lowerCaseFiles) - return raw; - - QFileInfo fi = QFileInfo(raw); - QString finalPath = fi.path(); - if (finalPath == QStringLiteral(".")) - finalPath.clear(); - if (!finalPath.isEmpty() && !finalPath.endsWith(QLatin1Char('/'))) - finalPath += QLatin1Char('/'); - QString name = fi.baseName().toLower(); - QString ext = fi.completeSuffix(); - if (!ext.isEmpty()) - ext = QString(QLatin1Char('.')) + ext; - return finalPath + name + ext; + return Utils::headerGuard(in); } - static QStringList parts(const QString &klass) { return klass.split(QStringLiteral("::")); @@ -77,6 +60,11 @@ QStringList CppToolsJsExtension::namespaces(const QString &klass) const return result; } +bool CppToolsJsExtension::hasNamespaces(const QString &klass) const +{ + return !namespaces(klass).empty(); +} + QString CppToolsJsExtension::className(const QString &klass) const { QStringList result = parts(klass); @@ -85,7 +73,23 @@ QString CppToolsJsExtension::className(const QString &klass) const QString CppToolsJsExtension::classToFileName(const QString &klass, const QString &extension) const { - return fileName(className(klass), extension); + const QString raw = fileName(className(klass), extension); + CppFileSettings settings; + settings.fromSettings(Core::ICore::settings()); + if (!settings.lowerCaseFiles) + return raw; + + QFileInfo fi = QFileInfo(raw); + QString finalPath = fi.path(); + if (finalPath == QStringLiteral(".")) + finalPath.clear(); + if (!finalPath.isEmpty() && !finalPath.endsWith(QLatin1Char('/'))) + finalPath += QLatin1Char('/'); + QString name = fi.baseName().toLower(); + QString ext = fi.completeSuffix(); + if (!ext.isEmpty()) + ext = QString(QLatin1Char('.')) + ext; + return finalPath + name + ext; } QString CppToolsJsExtension::classToHeaderGuard(const QString &klass, const QString &extension) const diff --git a/src/plugins/cpptools/cpptoolsjsextension.h b/src/plugins/cpptools/cpptoolsjsextension.h index 16a4010f78..b528191033 100644 --- a/src/plugins/cpptools/cpptoolsjsextension.h +++ b/src/plugins/cpptools/cpptoolsjsextension.h @@ -45,12 +45,11 @@ public: // Generate header guard: Q_INVOKABLE QString headerGuard(const QString &in) const; - // Fix the filename casing as configured in C++/File Naming: - Q_INVOKABLE QString fileName(const QString &path, const QString &extension) const; - // Work with classes: Q_INVOKABLE QStringList namespaces(const QString &klass) const; + Q_INVOKABLE bool hasNamespaces(const QString &klass) const; Q_INVOKABLE QString className(const QString &klass) const; + // Fix the filename casing as configured in C++/File Naming: Q_INVOKABLE QString classToFileName(const QString &klass, const QString &extension) const; Q_INVOKABLE QString classToHeaderGuard(const QString &klass, const QString &extension) const; diff --git a/src/plugins/cpptools/cpptoolsplugin.cpp b/src/plugins/cpptools/cpptoolsplugin.cpp index d2ca6d5d0b..4d7599b24b 100644 --- a/src/plugins/cpptools/cpptoolsplugin.cpp +++ b/src/plugins/cpptools/cpptoolsplugin.cpp @@ -172,7 +172,7 @@ bool CppToolsPlugin::initialize(const QStringList &arguments, QString *error) d = new CppToolsPluginPrivate; - JsExpander::registerQObjectForJs(QLatin1String("Cpp"), new CppToolsJsExtension); + JsExpander::registerGlobalObject<CppToolsJsExtension>("Cpp"); // Menus ActionContainer *mtools = ActionManager::actionContainer(Core::Constants::M_TOOLS); diff --git a/src/plugins/cpptools/cpptoolsreuse.cpp b/src/plugins/cpptools/cpptoolsreuse.cpp index 9bcf806b7d..da1c79b4c0 100644 --- a/src/plugins/cpptools/cpptoolsreuse.cpp +++ b/src/plugins/cpptools/cpptoolsreuse.cpp @@ -323,18 +323,9 @@ bool fileSizeExceedsLimit(const QFileInfo &fileInfo, int sizeLimitInMb) "C++ Indexer: Skipping file \"%1\" because it is too big.") .arg(absoluteFilePath); -#if (QT_VERSION >= QT_VERSION_CHECK(5, 10, 0)) QMetaObject::invokeMethod(Core::MessageManager::instance(), [msg]() { Core::MessageManager::write(msg, Core::MessageManager::Silent); }); -#else - QMetaObject::invokeMethod(Core::MessageManager::instance(), - "write", - Qt::QueuedConnection, - Q_ARG(QString, msg), - Q_ARG(Core::MessageManager::PrintToOutputPaneFlags, - Core::MessageManager::Silent)); -#endif qWarning().noquote() << msg; return true; diff --git a/src/plugins/cpptools/headerpathfilter.cpp b/src/plugins/cpptools/headerpathfilter.cpp index b514c468d7..83ad478b0c 100644 --- a/src/plugins/cpptools/headerpathfilter.cpp +++ b/src/plugins/cpptools/headerpathfilter.cpp @@ -29,6 +29,8 @@ #include <coreplugin/icore.h> #endif +#include <projectexplorer/project.h> + #include <QRegularExpression> namespace CppTools { @@ -41,6 +43,8 @@ void HeaderPathFilter::process() { const HeaderPaths &headerPaths = projectPart.headerPaths; + addPreIncludesPath(); + for (const HeaderPath &headerPath : headerPaths) filterHeaderPath(headerPath); @@ -141,6 +145,17 @@ void HeaderPathFilter::tweakHeaderPaths() } } +void HeaderPathFilter::addPreIncludesPath() +{ + if (projectDirectory.size()) { + const Utils::FileName rootProjectDirectory = Utils::FileName::fromString(projectDirectory) + .pathAppended(".pre_includes"); + + systemHeaderPaths.push_back( + {rootProjectDirectory.toString(), ProjectExplorer::HeaderPathType::System}); + } +} + QString HeaderPathFilter::ensurePathWithSlashEnding(const QString &path) { QString pathWithSlashEnding = path; diff --git a/src/plugins/cpptools/headerpathfilter.h b/src/plugins/cpptools/headerpathfilter.h index 8b4e771994..20fbc020e8 100644 --- a/src/plugins/cpptools/headerpathfilter.h +++ b/src/plugins/cpptools/headerpathfilter.h @@ -53,6 +53,8 @@ private: void tweakHeaderPaths(); + void addPreIncludesPath(); + bool isProjectHeaderPath(const QString &path) const; static QString ensurePathWithSlashEnding(const QString &path); diff --git a/src/plugins/cpptools/indexitem.cpp b/src/plugins/cpptools/indexitem.cpp index 1a07d9eada..b9fb4cdcc5 100644 --- a/src/plugins/cpptools/indexitem.cpp +++ b/src/plugins/cpptools/indexitem.cpp @@ -88,7 +88,7 @@ QString IndexItem::representDeclaration() const QString IndexItem::shortNativeFilePath() const { - return Utils::FileUtils::shortNativePath(Utils::FileName::fromString(m_fileName)); + return Utils::FileName::fromString(m_fileName).shortNativePath(); } void IndexItem::squeeze() diff --git a/src/plugins/cpptools/symbolsfindfilter.cpp b/src/plugins/cpptools/symbolsfindfilter.cpp index f6bc1f52ba..dd8dc4694d 100644 --- a/src/plugins/cpptools/symbolsfindfilter.cpp +++ b/src/plugins/cpptools/symbolsfindfilter.cpp @@ -119,7 +119,7 @@ void SymbolsFindFilter::findAll(const QString &txt, FindFlags findFlags) parameters.flags = findFlags; parameters.types = m_symbolsToSearch; parameters.scope = m_scope; - search->setUserData(qVariantFromValue(parameters)); + search->setUserData(QVariant::fromValue(parameters)); startSearch(search); } |