From 67ec9bbce0d8d6545ac48db45d378da81030e0fd Mon Sep 17 00:00:00 2001 From: hjk Date: Thu, 22 Jun 2023 13:18:46 +0200 Subject: [PATCH 01/25] QmlProjectManager: Compile fix after Qt source compatibility break error: operands to '?:' have different types 'QStringBuilder' and 'QStringBuilder' Caused by af8f9a2a6e3dbc8. Change-Id: Ia3dfca2cb5f1cb1855f25d178f63898eb6745c46 Reviewed-by: Eike Ziller --- src/plugins/qmlprojectmanager/cmakegen/generatecmakelists.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/plugins/qmlprojectmanager/cmakegen/generatecmakelists.cpp b/src/plugins/qmlprojectmanager/cmakegen/generatecmakelists.cpp index a9f35c2c5e2..5a3bedf098a 100644 --- a/src/plugins/qmlprojectmanager/cmakegen/generatecmakelists.cpp +++ b/src/plugins/qmlprojectmanager/cmakegen/generatecmakelists.cpp @@ -360,8 +360,8 @@ void CmakeFileGenerator::generateImportCmake(const FilePath &dir, const QString continue; fileContent.append(QString(ADD_SUBDIR).arg(subDir.fileName())); QString prefix = modulePrefix.isEmpty() ? - modulePrefix % subDir.fileName() : - QString(modulePrefix + '.') + subDir.fileName(); + QString(modulePrefix % subDir.fileName()) : + QString(QString(modulePrefix + '.') + subDir.fileName()); if (getDirectoryQmls(subDir).isEmpty()) { generateImportCmake(subDir, prefix); } else { From f29b54d8a1a0a71c7cc19795029c872e39f98404 Mon Sep 17 00:00:00 2001 From: Marcus Tillmanns Date: Tue, 20 Jun 2023 10:42:07 +0200 Subject: [PATCH 02/25] Autotest: Use FilePath::searchInDirectories FilePath::searchInDirectories handles absolute paths on devices better unlike Environment::searchInPath() which requires a QString argument. Previously the device:// part was dropped when trying to run remote tests. Fixes: QTCREATORBUG-29183 Change-Id: Idd04cdb8798d04abf88ab6cb4b68eb73d890a482 Reviewed-by: Reviewed-by: Christian Stenger --- src/plugins/autotest/testconfiguration.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/plugins/autotest/testconfiguration.cpp b/src/plugins/autotest/testconfiguration.cpp index c095e9e0f6a..5f225db1972 100644 --- a/src/plugins/autotest/testconfiguration.cpp +++ b/src/plugins/autotest/testconfiguration.cpp @@ -57,9 +57,10 @@ FilePath ITestConfiguration::executableFilePath() const if (!hasExecutable()) return {}; - const Environment env = m_runnable.environment.hasChanges() - ? m_runnable.environment : Environment::systemEnvironment(); - return env.searchInPath(m_runnable.command.executable().path()); + const Environment env = m_runnable.environment.appliedToEnvironment( + m_runnable.command.executable().deviceEnvironment()); + + return m_runnable.command.executable().searchInDirectories(env.path()); } Environment ITestConfiguration::filteredEnvironment(const Environment &original) const From 3ff21fe3e15e9228c47e1bf248dd379cdb0e9d40 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Thu, 22 Jun 2023 14:04:32 +0200 Subject: [PATCH 03/25] Bump version to 11.0.0-rc1 Change-Id: I7b6fa9105858996a82584a417520d8e241c9c1e8 Reviewed-by: Eike Ziller --- cmake/QtCreatorIDEBranding.cmake | 6 +++--- qbs/modules/qtc/qtc.qbs | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/cmake/QtCreatorIDEBranding.cmake b/cmake/QtCreatorIDEBranding.cmake index d0ab4a4e380..8f985e5986b 100644 --- a/cmake/QtCreatorIDEBranding.cmake +++ b/cmake/QtCreatorIDEBranding.cmake @@ -1,6 +1,6 @@ -set(IDE_VERSION "10.0.83") # The IDE version. -set(IDE_VERSION_COMPAT "10.0.83") # The IDE Compatibility version. -set(IDE_VERSION_DISPLAY "11.0.0-beta2") # The IDE display version. +set(IDE_VERSION "10.0.84") # The IDE version. +set(IDE_VERSION_COMPAT "10.0.84") # The IDE Compatibility version. +set(IDE_VERSION_DISPLAY "11.0.0-rc1") # The IDE display version. set(IDE_COPYRIGHT_YEAR "2023") # The IDE current copyright year. set(IDE_SETTINGSVARIANT "QtProject") # The IDE settings variation. diff --git a/qbs/modules/qtc/qtc.qbs b/qbs/modules/qtc/qtc.qbs index 138ff9a7c75..01dd13cc9de 100644 --- a/qbs/modules/qtc/qtc.qbs +++ b/qbs/modules/qtc/qtc.qbs @@ -6,16 +6,16 @@ import qbs.Utilities Module { Depends { name: "cpp"; required: false } - property string qtcreator_display_version: '11.0.0-beta2' + property string qtcreator_display_version: '11.0.0-rc1' property string ide_version_major: '10' property string ide_version_minor: '0' - property string ide_version_release: '83' + property string ide_version_release: '84' property string qtcreator_version: ide_version_major + '.' + ide_version_minor + '.' + ide_version_release property string ide_compat_version_major: '10' property string ide_compat_version_minor: '0' - property string ide_compat_version_release: '83' + property string ide_compat_version_release: '84' property string qtcreator_compat_version: ide_compat_version_major + '.' + ide_compat_version_minor + '.' + ide_compat_version_release From 596be71a89ceb032619e853058ff8c28f8f08091 Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Thu, 22 Jun 2023 14:00:40 +0200 Subject: [PATCH 04/25] Doc: Rewrite known issue about Ctrl+Shift+U on Linux MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: Ia14c89097b06f25649bc155c0c31734fd612b603 Reviewed-by: Robert Löhning --- doc/qtcreator/src/overview/creator-only/creator-issues.qdoc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/qtcreator/src/overview/creator-only/creator-issues.qdoc b/doc/qtcreator/src/overview/creator-only/creator-issues.qdoc index 80b7466214f..ca3b44304f7 100644 --- a/doc/qtcreator/src/overview/creator-only/creator-issues.qdoc +++ b/doc/qtcreator/src/overview/creator-only/creator-issues.qdoc @@ -70,14 +70,14 @@ \li When developing on Linux, the \key {Ctrl+Shift+U} keyboard shortcut might not work because it conflicts with a shortcut of the - Intelligent Input Bus (ibus). You can change the shortcut for finding - references to the symbol under the cursor either in \QC or in ibus. + Intelligent Input Bus (ibus). You can change either the shortcut in + \QC or the conflicting shortcut in ibus. To set another \l {Keyboard Shortcuts}{keyboard shortcut} in \QC, select \uicontrol Edit > \uicontrol Preferences > \uicontrol Environment > \uicontrol Keyboard. - To change the shortcut in ibus, enter the following command on the + To change the ibus shortcut, enter the following command on the command line to start ibus setup: \badcode ibus-setup From c3fd118c6222d568b9455c1a7bca1271be79502f Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Thu, 22 Jun 2023 12:36:29 +0200 Subject: [PATCH 05/25] ProjectExplorer: Bring back auto-detection of ccache toolchains ... and other special toolchains not in PATH. Amends cacc4aeede245ddc92a196e99fb1e66458d4403c. Change-Id: I300f7d719c9e101c24e3750dd7afd54dd338b58d Reviewed-by: hjk Reviewed-by: Qt CI Bot --- src/plugins/projectexplorer/gcctoolchain.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/projectexplorer/gcctoolchain.cpp b/src/plugins/projectexplorer/gcctoolchain.cpp index 4012fbd6690..f69ab0afc8f 100644 --- a/src/plugins/projectexplorer/gcctoolchain.cpp +++ b/src/plugins/projectexplorer/gcctoolchain.cpp @@ -1107,7 +1107,7 @@ static FilePaths findCompilerCandidates(const ToolchainDetector &detector, FilePaths compilerPaths; - if (!device.isNull()) { + if (device && device->type() != ProjectExplorer::Constants::DESKTOP_DEVICE_TYPE) { // FIXME: Merge with block below FilePaths searchPaths = detector.searchPaths; if (searchPaths.isEmpty()) From e419dbbb78ddee47305b131aa5f11d2e1efb9179 Mon Sep 17 00:00:00 2001 From: hjk Date: Tue, 13 Jun 2023 08:39:56 +0200 Subject: [PATCH 06/25] Meson: Emit parsing finished when done Also, trigger build button re-check the hard way This should not really be necessary, but the code paths on the core side are still quite twisted. The extra notification here is harmless in price, and removes the showstopper of not getting a buildbutton. Change-Id: If4bec892b4ebea533a95033629df60fa564985f3 Reviewed-by: Alessandro Portale --- src/plugins/mesonprojectmanager/mesonbuildsystem.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/plugins/mesonprojectmanager/mesonbuildsystem.cpp b/src/plugins/mesonprojectmanager/mesonbuildsystem.cpp index 6d3e5f20c4f..d140a468e34 100644 --- a/src/plugins/mesonprojectmanager/mesonbuildsystem.cpp +++ b/src/plugins/mesonprojectmanager/mesonbuildsystem.cpp @@ -87,6 +87,9 @@ void MesonBuildSystem::parsingCompleted(bool success) UNLOCK(false); emitBuildSystemUpdated(); } + emitParsingFinished(success); + + emit buildConfiguration()->enabledChanged(); // HACK. Should not be needed. } ProjectExplorer::Kit *MesonBuildSystem::MesonBuildSystem::kit() From e2f957b184bf97676b663a50713a5a5c00095fe6 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Wed, 21 Jun 2023 15:21:36 +0200 Subject: [PATCH 07/25] ClangTools: lower priority of warning marks In order to not overwrite errors reported by clangd lower the priority of clang tool marks if they only contain a warning. Change-Id: Ida1c39ab11aaeb0c70f674c53762fa2707bec766 Reviewed-by: Eike Ziller --- src/plugins/clangtools/diagnosticmark.cpp | 25 +++++++++++------------ 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/src/plugins/clangtools/diagnosticmark.cpp b/src/plugins/clangtools/diagnosticmark.cpp index bc92e1d17e3..a6e779ccaf3 100644 --- a/src/plugins/clangtools/diagnosticmark.cpp +++ b/src/plugins/clangtools/diagnosticmark.cpp @@ -15,6 +15,7 @@ #include using namespace TextEditor; +using namespace Utils; namespace ClangTools { namespace Internal { @@ -22,37 +23,35 @@ namespace Internal { DiagnosticMark::DiagnosticMark(const Diagnostic &diagnostic, TextDocument *document) : TextMark(document, diagnostic.location.line, - {Tr::tr("Clang Tools"), Utils::Id(Constants::DIAGNOSTIC_MARK_ID)}) + {Tr::tr("Clang Tools"), Id(Constants::DIAGNOSTIC_MARK_ID)}) , m_diagnostic(diagnostic) { setSettingsPage(Constants::SETTINGS_PAGE_ID); - if (diagnostic.type == "error" || diagnostic.type == "fatal") - setColor(Utils::Theme::CodeModel_Error_TextMarkColor); - else - setColor(Utils::Theme::CodeModel_Warning_TextMarkColor); - setPriority(TextEditor::TextMark::HighPriority); + const bool isError = diagnostic.type == "error" || diagnostic.type == "fatal"; + setColor(isError ? Theme::CodeModel_Error_TextMarkColor : Theme::CodeModel_Error_TextMarkColor); + setPriority(isError ? TextEditor::TextMark::HighPriority : TextEditor::TextMark::NormalPriority); QIcon markIcon = diagnostic.icon(); - setIcon(markIcon.isNull() ? Utils::Icons::CODEMODEL_WARNING.icon() : markIcon); + setIcon(markIcon.isNull() ? Icons::CODEMODEL_WARNING.icon() : markIcon); setToolTip(createDiagnosticToolTipString(diagnostic, std::nullopt, true)); setLineAnnotation(diagnostic.description); setActionsProvider([diagnostic] { // Copy to clipboard action QList actions; QAction *action = new QAction(); - action->setIcon(QIcon::fromTheme("edit-copy", Utils::Icons::COPY.icon())); + action->setIcon(QIcon::fromTheme("edit-copy", Icons::COPY.icon())); action->setToolTip(Tr::tr("Copy to Clipboard")); QObject::connect(action, &QAction::triggered, [diagnostic] { const QString text = createFullLocationString(diagnostic.location) + ": " + diagnostic.description; - Utils::setClipboardAndSelection(text); + setClipboardAndSelection(text); }); actions << action; // Disable diagnostic action action = new QAction(); - action->setIcon(Utils::Icons::BROKEN.icon()); + action->setIcon(Icons::BROKEN.icon()); action->setToolTip(Tr::tr("Disable Diagnostic")); QObject::connect(action, &QAction::triggered, [diagnostic] { disableChecks({diagnostic}); }); actions << action; @@ -70,10 +69,10 @@ void DiagnosticMark::disable() return; m_enabled = false; if (m_diagnostic.type == "error" || m_diagnostic.type == "fatal") - setIcon(Utils::Icons::CODEMODEL_DISABLED_ERROR.icon()); + setIcon(Icons::CODEMODEL_DISABLED_ERROR.icon()); else - setIcon(Utils::Icons::CODEMODEL_DISABLED_WARNING.icon()); - setColor(Utils::Theme::Color::IconsDisabledColor); + setIcon(Icons::CODEMODEL_DISABLED_WARNING.icon()); + setColor(Theme::Color::IconsDisabledColor); } bool DiagnosticMark::enabled() const From 9452c433a225a20584b77d7fd528173f8a6f80fd Mon Sep 17 00:00:00 2001 From: David Schulz Date: Fri, 23 Jun 2023 07:37:46 +0200 Subject: [PATCH 08/25] ClangTools: fix warning text mark color Change-Id: I37e45990a3bcb23b16ccdeee5886c5d80f55cc43 Reviewed-by: Christian Stenger --- src/plugins/clangtools/diagnosticmark.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/clangtools/diagnosticmark.cpp b/src/plugins/clangtools/diagnosticmark.cpp index a6e779ccaf3..3802ee325cf 100644 --- a/src/plugins/clangtools/diagnosticmark.cpp +++ b/src/plugins/clangtools/diagnosticmark.cpp @@ -29,7 +29,7 @@ DiagnosticMark::DiagnosticMark(const Diagnostic &diagnostic, TextDocument *docum setSettingsPage(Constants::SETTINGS_PAGE_ID); const bool isError = diagnostic.type == "error" || diagnostic.type == "fatal"; - setColor(isError ? Theme::CodeModel_Error_TextMarkColor : Theme::CodeModel_Error_TextMarkColor); + setColor(isError ? Theme::CodeModel_Error_TextMarkColor : Theme::CodeModel_Warning_TextMarkColor); setPriority(isError ? TextEditor::TextMark::HighPriority : TextEditor::TextMark::NormalPriority); QIcon markIcon = diagnostic.icon(); setIcon(markIcon.isNull() ? Icons::CODEMODEL_WARNING.icon() : markIcon); From 0f2fbe4f6f7fc1bd6f826950c8005d5faca7684f Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Fri, 23 Jun 2023 07:34:25 +0200 Subject: [PATCH 09/25] McuSupport: Fix qbs build Change-Id: Icd881dfaabcf8d4ed8bd63d4c6653348234ac77c Reviewed-by: David Schulz --- src/plugins/mcusupport/mcusupport.qbs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/plugins/mcusupport/mcusupport.qbs b/src/plugins/mcusupport/mcusupport.qbs index 173fe55e6e8..36c8bdbd47b 100644 --- a/src/plugins/mcusupport/mcusupport.qbs +++ b/src/plugins/mcusupport/mcusupport.qbs @@ -14,6 +14,7 @@ QtcPlugin { Depends { name: "ProjectExplorer" } Depends { name: "Debugger" } Depends { name: "CMakeProjectManager" } + Depends { name: "QmlJS" } Depends { name: "QtSupport" } Depends { name: "qtc_gtest_gmock"; condition: qtc.testsEnabled; required: false } From 4625d9e87e3c83e93a323ed3734cc9a7d47f6fc5 Mon Sep 17 00:00:00 2001 From: hjk Date: Thu, 22 Jun 2023 09:44:08 +0200 Subject: [PATCH 10/25] Copilot: Add a warning in the settings page ... about copilot operation. Change-Id: I9187f1759f183f4df393e057dc0cdb3307665afc Reviewed-by: Eike Ziller --- src/plugins/copilot/copilotoptionspage.cpp | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/plugins/copilot/copilotoptionspage.cpp b/src/plugins/copilot/copilotoptionspage.cpp index f37042b2d12..38c1869445f 100644 --- a/src/plugins/copilot/copilotoptionspage.cpp +++ b/src/plugins/copilot/copilotoptionspage.cpp @@ -27,9 +27,22 @@ public: { using namespace Layouting; + auto warningLabel = new QLabel; + warningLabel->setWordWrap(true); + warningLabel->setTextInteractionFlags(Qt::LinksAccessibleByMouse + | Qt::LinksAccessibleByKeyboard + | Qt::TextSelectableByMouse); + warningLabel->setText(Tr::tr( + "Enabling %1 is subject to your agreement and abidance with your applicable " + "%1 terms. It is your responsibility to know and accept the requirements and " + "parameters of using tools like %1. This may include, but is not limited to, " + "ensuring you have the rights to allow %1 access to your code, as well as " + "understanding any implications of your use of %1 and suggestions produced " + "(like copyright, accuracy, etc.)." ).arg("Copilot")); + auto authWidget = new AuthWidget(); - QLabel *helpLabel = new QLabel(); + auto helpLabel = new QLabel(); helpLabel->setTextFormat(Qt::MarkdownText); helpLabel->setWordWrap(true); helpLabel->setTextInteractionFlags(Qt::LinksAccessibleByMouse @@ -52,6 +65,8 @@ public: "[agent.js](https://github.com/github/copilot.vim/tree/release/copilot/dist)")); Column { + QString("" + Tr::tr("Note:") + ""), br, + warningLabel, br, authWidget, br, CopilotSettings::instance().enableCopilot, br, CopilotSettings::instance().nodeJsPath, br, From c9521b294fb1ee7c19b2385759052c36fcbd73bf Mon Sep 17 00:00:00 2001 From: hjk Date: Fri, 23 Jun 2023 08:44:49 +0200 Subject: [PATCH 11/25] Copilot: Disable by default also in the settings ... and make the enabling more prominent. Change-Id: I77e236a1aec2d3ced3280aa8af322a02b8a14dd1 Reviewed-by: Eike Ziller --- src/plugins/copilot/copilotoptionspage.cpp | 2 +- src/plugins/copilot/copilotsettings.cpp | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/plugins/copilot/copilotoptionspage.cpp b/src/plugins/copilot/copilotoptionspage.cpp index 38c1869445f..2ac25de03b7 100644 --- a/src/plugins/copilot/copilotoptionspage.cpp +++ b/src/plugins/copilot/copilotoptionspage.cpp @@ -67,8 +67,8 @@ public: Column { QString("" + Tr::tr("Note:") + ""), br, warningLabel, br, - authWidget, br, CopilotSettings::instance().enableCopilot, br, + authWidget, br, CopilotSettings::instance().nodeJsPath, br, CopilotSettings::instance().distPath, br, CopilotSettings::instance().autoComplete, br, diff --git a/src/plugins/copilot/copilotsettings.cpp b/src/plugins/copilot/copilotsettings.cpp index b8567f2feb4..5bdd3a54c3f 100644 --- a/src/plugins/copilot/copilotsettings.cpp +++ b/src/plugins/copilot/copilotsettings.cpp @@ -20,7 +20,7 @@ static void initEnableAspect(BoolAspect &enableCopilot) enableCopilot.setDisplayName(Tr::tr("Enable Copilot")); enableCopilot.setLabelText(Tr::tr("Enable Copilot")); enableCopilot.setToolTip(Tr::tr("Enables the Copilot integration.")); - enableCopilot.setDefaultValue(true); + enableCopilot.setDefaultValue(false); } CopilotSettings &CopilotSettings::instance() @@ -52,6 +52,7 @@ CopilotSettings::CopilotSettings() nodeJsPath.setLabelText(Tr::tr("Node.js path:")); nodeJsPath.setHistoryCompleter("Copilot.NodePath.History"); nodeJsPath.setDisplayName(Tr::tr("Node.js Path")); + nodeJsPath.setEnabler(&enableCopilot); nodeJsPath.setToolTip( Tr::tr("Select path to node.js executable. See https://nodejs.org/en/download/" "for installation instructions.")); @@ -62,6 +63,7 @@ CopilotSettings::CopilotSettings() distPath.setLabelText(Tr::tr("Path to agent.js:")); distPath.setHistoryCompleter("Copilot.DistPath.History"); distPath.setDisplayName(Tr::tr("Agent.js path")); + distPath.setEnabler(&enableCopilot); distPath.setToolTip(Tr::tr( "Select path to agent.js in Copilot Neovim plugin. See " "https://github.com/github/copilot.vim#getting-started for installation instructions.")); @@ -70,6 +72,7 @@ CopilotSettings::CopilotSettings() autoComplete.setSettingsKey("Copilot.Autocomplete"); autoComplete.setLabelText(Tr::tr("Request completions automatically")); autoComplete.setDefaultValue(true); + autoComplete.setEnabler(&enableCopilot); autoComplete.setToolTip(Tr::tr("Automatically request suggestions for the current text cursor " "position after changes to the document.")); From ffffb18f8f8bb551901adf0f42c82f3f1994a8f5 Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Thu, 22 Jun 2023 13:53:01 +0200 Subject: [PATCH 12/25] Copilot: Fix compile Change-Id: If9e2c6486e2ac9b80069947063e80336567fbdbe Reviewed-by: hjk (cherry picked from commit eb7d0727e6f62d61d1fb81ce931aacf147b82794) --- src/plugins/copilot/copilotoptionspage.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/plugins/copilot/copilotoptionspage.cpp b/src/plugins/copilot/copilotoptionspage.cpp index 2ac25de03b7..1d9a516d662 100644 --- a/src/plugins/copilot/copilotoptionspage.cpp +++ b/src/plugins/copilot/copilotoptionspage.cpp @@ -60,9 +60,9 @@ public: "the plugin will find the agent.js file automatically.\n\n" "Otherwise you need to specify the path to the %2 " "file from the Copilot neovim plugin.", - "Markdown text for the copilot instruction label").arg( - "[README.md](https://github.com/github/copilot.vim)", - "[agent.js](https://github.com/github/copilot.vim/tree/release/copilot/dist)")); + "Markdown text for the copilot instruction label") + .arg("[README.md](https://github.com/github/copilot.vim)") + .arg("[agent.js](https://github.com/github/copilot.vim/tree/release/copilot/dist)")); Column { QString("" + Tr::tr("Note:") + ""), br, From 1532986f10004fa606f8a73e32a6bfcb9903601b Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Thu, 22 Jun 2023 16:44:14 +0200 Subject: [PATCH 13/25] ClangTools: Do not require a valid clazy executable to run clang-tidy ... and vice versa. Change-Id: I85114c778f97e04299d4b66a3ad99abdb503185f Reviewed-by: David Schulz Reviewed-by: Reviewed-by: Qt CI Bot --- src/plugins/clangtools/clangtool.cpp | 34 +++++++++++----------------- src/plugins/clangtools/clangtool.h | 3 ++- 2 files changed, 15 insertions(+), 22 deletions(-) diff --git a/src/plugins/clangtools/clangtool.cpp b/src/plugins/clangtools/clangtool.cpp index 2ce4373b7f7..d5a3e6f202f 100644 --- a/src/plugins/clangtools/clangtool.cpp +++ b/src/plugins/clangtools/clangtool.cpp @@ -350,8 +350,8 @@ static RunSettings runSettings() return ClangToolsSettings::instance()->runSettings(); } -ClangTool::ClangTool(const QString &name, Utils::Id id) - : m_name(name), m_perspective{id.toString(), name} +ClangTool::ClangTool(const QString &name, Utils::Id id, ClangToolType type) + : m_name(name), m_perspective{id.toString(), name}, m_type(type) { setObjectName(name); m_diagnosticModel = new ClangToolsDiagnosticModel(this); @@ -830,8 +830,7 @@ static bool canAnalyzeProject(Project *project) struct CheckResult { enum { - InvalidTidyExecutable, - InvalidClazyExecutable, + InvalidExecutable, ProjectNotOpen, ProjectNotSuitable, ReadyToAnalyze, @@ -839,20 +838,13 @@ struct CheckResult { QString errorText; }; -static CheckResult canAnalyze() +static CheckResult canAnalyze(ClangToolType type, const QString &name) { const ClangDiagnosticConfig config = diagnosticConfig(runSettings().diagnosticConfigId()); - if (toolEnabled(ClangToolType::Tidy, config, runSettings()) - && !toolExecutable(ClangToolType::Tidy).isExecutableFile()) { - return {CheckResult::InvalidTidyExecutable, - Tr::tr("Set a valid Clang-Tidy executable.")}; - } - - if (toolEnabled(ClangToolType::Clazy, config, runSettings()) - && !toolExecutable(ClangToolType::Clazy).isExecutableFile()) { - return {CheckResult::InvalidClazyExecutable, - Tr::tr("Set a valid Clazy-Standalone executable.")}; + if (toolEnabled(type, config, runSettings()) + && !toolExecutable(type).isExecutableFile()) { + return {CheckResult::InvalidExecutable, Tr::tr("Set a valid %1 executable.").arg(name)}; } if (Project *project = ProjectManager::startupProject()) { @@ -876,10 +868,9 @@ void ClangTool::updateForInitialState() m_infoBarWidget->reset(); - const CheckResult result = canAnalyze(); + const CheckResult result = canAnalyze(m_type, m_name); switch (result.kind) - case CheckResult::InvalidTidyExecutable: { - case CheckResult::InvalidClazyExecutable: + case CheckResult::InvalidExecutable: { m_infoBarWidget->setError(InfoBarWidget::Warning, makeLink(result.errorText), [] { ICore::showOptionsDialog(Constants::SETTINGS_PAGE_ID); }); break; @@ -1084,7 +1075,7 @@ void ClangTool::updateForCurrentState() QString startActionToolTip = m_startAction->text(); QString startOnCurrentToolTip = m_startOnCurrentFileAction->text(); if (!isRunning) { - const CheckResult result = canAnalyze(); + const CheckResult result = canAnalyze(m_type, m_name); canStart = result.kind == CheckResult::ReadyToAnalyze; if (!canStart) { startActionToolTip = result.errorText; @@ -1171,11 +1162,12 @@ void ClangTool::updateForCurrentState() m_infoBarWidget->setDiagText(diagText); } -ClangTidyTool::ClangTidyTool() : ClangTool(Tr::tr("Clang-Tidy"), "ClangTidy.Perspective") +ClangTidyTool::ClangTidyTool() : ClangTool(Tr::tr("Clang-Tidy"), "ClangTidy.Perspective", + ClangToolType::Tidy) { m_instance = this; } -ClazyTool::ClazyTool() : ClangTool(Tr::tr("Clazy"), "Clazy.Perspective") +ClazyTool::ClazyTool() : ClangTool(Tr::tr("Clazy"), "Clazy.Perspective", ClangToolType::Clazy) { m_instance = this; } diff --git a/src/plugins/clangtools/clangtool.h b/src/plugins/clangtools/clangtool.h index fad280a17f1..87497e87066 100644 --- a/src/plugins/clangtools/clangtool.h +++ b/src/plugins/clangtools/clangtool.h @@ -82,7 +82,7 @@ signals: void finished(const QString &errorText); // For testing. protected: - ClangTool(const QString &name, Utils::Id id); + ClangTool(const QString &name, Utils::Id id, CppEditor::ClangToolType type); private: enum class State { @@ -154,6 +154,7 @@ private: QAction *m_expandCollapse = nullptr; Utils::Perspective m_perspective; + const CppEditor::ClangToolType m_type; }; class ClangTidyTool : public ClangTool From c510689fe49419339cfa6c7551e2a1f57aeb069a Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Thu, 22 Jun 2023 16:18:37 +0200 Subject: [PATCH 14/25] ClangToolRunner: Move finishAllAndDone one level up When the onSetup() handler returns StopWithError, the group stops immediately with an error, regardless of its workflow policy. Our intention is to report an error only if the initial onSetup() handler returned StopWithError. Otherwise, regardless on how the subgroup execution went, we want to report success to the parent. That's why the finishAllAndDone is an appropriate policy for the top group. In case the ProcessTask fails, we don't want to continue executing AsyncTask, that's why the finishAllAndDone got removed from the subgroup, leaving it with the default workflow policy of stopOnError. Change-Id: I86ac18f062cd431e5138f87cdb01ef59e3d77d7e Reviewed-by: David Schulz Reviewed-by: Qt CI Bot --- src/plugins/clangtools/clangtoolrunner.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/clangtools/clangtoolrunner.cpp b/src/plugins/clangtools/clangtoolrunner.cpp index 666f07963b2..ecace1c7d36 100644 --- a/src/plugins/clangtools/clangtoolrunner.cpp +++ b/src/plugins/clangtools/clangtoolrunner.cpp @@ -218,11 +218,11 @@ GroupItem clangToolTask(const AnalyzeInputData &input, }; const Group group { + finishAllAndDone, Storage(storage), onGroupSetup(onSetup), Group { sequential, - finishAllAndDone, ProcessTask(onProcessSetup, onProcessDone, onProcessError), AsyncTask>(onReadSetup, onReadDone, onReadError) } From 98b341b7cc921c5f0328f588f1cbf875dc38da14 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Mon, 19 Jun 2023 17:42:19 +0200 Subject: [PATCH 15/25] CppEditor: Do not assume an opening brace starts a block ... when generating doxygen comments. Otherwise, we will not properly parse declarations such as void f(int i = {}); or int m_member{}; Fixes: QTCREATORBUG-29198 Change-Id: I744041d2cd5438e4b64161bba04a088a8910024b Reviewed-by: Christian Stenger Reviewed-by: --- src/plugins/cppeditor/doxygengenerator.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/plugins/cppeditor/doxygengenerator.cpp b/src/plugins/cppeditor/doxygengenerator.cpp index 3d88ddd0f55..5a57fdc3a3f 100644 --- a/src/plugins/cppeditor/doxygengenerator.cpp +++ b/src/plugins/cppeditor/doxygengenerator.cpp @@ -61,7 +61,7 @@ QString DoxygenGenerator::generate(QTextCursor cursor, const QString &text = block.text(); const Tokens &tks = lexer(text); for (const Token &tk : tks) { - if (tk.is(T_SEMICOLON) || tk.is(T_LBRACE)) { + if (tk.is(T_SEMICOLON)) { // No need to continue beyond this, we might already have something meaningful. cursor.setPosition(block.position() + tk.utf16charsEnd(), QTextCursor::KeepAnchor); break; @@ -74,6 +74,11 @@ QString DoxygenGenerator::generate(QTextCursor cursor, block = block.next(); } + // For the edge case of no semicolons at all, which can e.g. happen if the file + // consists only of empty function definitions. + if (!cursor.hasSelection()) + cursor.setPosition(cursor.document()->characterCount() - 1, QTextCursor::KeepAnchor); + if (!cursor.hasSelection()) return QString(); From b42bdc0e4f1b6862df25e5be2c1a817734bc437f Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Fri, 23 Jun 2023 10:54:13 +0200 Subject: [PATCH 16/25] Update qbs submodule to HEAD of 2.1 branch Change-Id: I66789d70fb1379eadc614ed629fadde69ae729c9 Reviewed-by: Reviewed-by: Christian Stenger Reviewed-by: Qt CI Bot --- src/shared/qbs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/shared/qbs b/src/shared/qbs index f8335f02f26..1af935aec68 160000 --- a/src/shared/qbs +++ b/src/shared/qbs @@ -1 +1 @@ -Subproject commit f8335f02f263d69d81d2557c0c4f87b7148cbe9d +Subproject commit 1af935aec680a3e2df3919807f631a6ee2c21e35 From 4da2d288d877390e42181643b55bb3451b400521 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Tue, 20 Jun 2023 15:00:08 +0200 Subject: [PATCH 17/25] Editor: avoid relayouting of annotation text for each paint event Change-Id: Icabf033a43922bb9ebafd1a7973dcac851e9369e Reviewed-by: Christian Stenger --- src/plugins/texteditor/textmark.cpp | 4 +++- src/plugins/texteditor/textmark.h | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/plugins/texteditor/textmark.cpp b/src/plugins/texteditor/textmark.cpp index 6f30ac233ba..b817541b019 100644 --- a/src/plugins/texteditor/textmark.cpp +++ b/src/plugins/texteditor/textmark.cpp @@ -138,6 +138,8 @@ void TextMark::paintAnnotation(QPainter &painter, painter.fontMetrics(), fadeInOffset, fadeOutOffset); + if (m_staticAnnotationText.text() != rects.text) + m_staticAnnotationText.setText(rects.text); annotationRect->setRight(rects.fadeOutRect.right()); const QRectF eventRectF(eventRect); if (!(rects.fadeInRect.intersects(eventRectF) || rects.annotationRect.intersects(eventRectF) @@ -161,7 +163,7 @@ void TextMark::paintAnnotation(QPainter &painter, painter.fillRect(rects.annotationRect, colors.rectColor); painter.setPen(colors.textColor); paintIcon(&painter, rects.iconRect.toAlignedRect()); - painter.drawText(rects.textRect, Qt::AlignLeft, rects.text); + painter.drawStaticText(rects.textRect.topLeft(), m_staticAnnotationText); if (rects.fadeOutRect.isValid()) { grad = QLinearGradient(rects.fadeOutRect.topLeft() - contentOffset, rects.fadeOutRect.topRight() - contentOffset); diff --git a/src/plugins/texteditor/textmark.h b/src/plugins/texteditor/textmark.h index 7603dae5d6d..b04e98ba5c3 100644 --- a/src/plugins/texteditor/textmark.h +++ b/src/plugins/texteditor/textmark.h @@ -11,6 +11,7 @@ #include #include +#include #include #include @@ -139,6 +140,7 @@ private: bool m_visible = false; TextMarkCategory m_category; QString m_lineAnnotation; + mutable QStaticText m_staticAnnotationText; QString m_toolTip; std::function m_toolTipProvider; QString m_defaultToolTip; From 41c3a4aad640bcfb31d6b4718bf6e64233c13cd4 Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Thu, 22 Jun 2023 16:52:05 +0200 Subject: [PATCH 18/25] Doc: Describe the "Default array size" field In Preferences > Debugger > Locals & Expressions. Task-number: QTCREATORBUG-28996 Change-Id: I5a54e7a33aa65dc63d91ec0bf977e60e96314a58 Reviewed-by: Alessandro Portale --- .../qtcreator-debugging-helper-options.png | Bin 13283 -> 0 bytes .../qtcreator-debugging-helper-options.webp | Bin 0 -> 6800 bytes .../debugger/creator-only/creator-debugger.qdoc | 15 ++++++++++----- 3 files changed, 10 insertions(+), 5 deletions(-) delete mode 100644 doc/qtcreator/images/qtcreator-debugging-helper-options.png create mode 100644 doc/qtcreator/images/qtcreator-debugging-helper-options.webp diff --git a/doc/qtcreator/images/qtcreator-debugging-helper-options.png b/doc/qtcreator/images/qtcreator-debugging-helper-options.png deleted file mode 100644 index 43a106aed5cbd0db5009dd183d5d14a3e671b7fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13283 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
3{WiX) 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 literal 0 HcmV?d00001 diff --git a/doc/qtcreator/src/debugger/creator-only/creator-debugger.qdoc b/doc/qtcreator/src/debugger/creator-only/creator-debugger.qdoc index 53daebd104f..391618cc698 100644 --- a/doc/qtcreator/src/debugger/creator-only/creator-debugger.qdoc +++ b/doc/qtcreator/src/debugger/creator-only/creator-debugger.qdoc @@ -842,6 +842,11 @@ extensions. It uses this deeper understanding to present objects of such classes in a useful way. + To change the number of array elements that are + requested when expanding entries, select \uicontrol Edit > + \uicontrol Preferences > \uicontrol {Debugger} > + \uicontrol {Locals & Expressions} > \uicontrol {Default array size}. + \section1 Stepping Through Code The following table summarizes the functions that you can use to step through @@ -984,7 +989,7 @@ > \uicontrol {Debugger} > \uicontrol {Locals & Expressions} > \uicontrol {Use Debugging Helpers}. - \image qtcreator-debugging-helper-options.png "Locals & Expressions preferences" + \image qtcreator-debugging-helper-options.webp {Locals & Expressions preferences} In the \uicontrol Locals view, expand the object's entry and open the slot in the \e slots subitem. The view shows the objects connected to this slot @@ -1365,7 +1370,7 @@ \uicontrol Debugger > \uicontrol GDB > \uicontrol {Load system GDB pretty printers}. For more information, see \l{Specifying GDB Settings}. - \image qtcreator-gdb-options.png "GDB preferences" + \image qtcreator-gdb-options.png {GDB preferences} \section2 Customizing Built-In Debugging Helpers @@ -1375,7 +1380,7 @@ \uicontrol Debugger > \uicontrol {Locals & Expressions}, and enter the commands in the \uicontrol {Debugging Helper Customization} field. - \image qtcreator-debugging-helper-options.png "Locals & Expressions preferences" + \image qtcreator-debugging-helper-options.webp {Locals & Expressions preferences} If you receive error messages about receiving signals when using GDB, you can specify \l{https://sourceware.org/gdb/onlinedocs/gdb/Signals.html} @@ -1586,7 +1591,7 @@ selecting \uicontrol Edit > \uicontrol Preferences > \uicontrol Debugger > \uicontrol CDB > \uicontrol {Use Python dumper}. - \image qtcreator-cdb-options.png "CDB preferences" + \image qtcreator-cdb-options.png {CDB preferences} The following sections describe some of the widely-used Dumper classes and members specified in \c qtcreator\share\qtcreator\debugger\dumper.py. @@ -2036,7 +2041,7 @@ > \uicontrol Preferences > \uicontrol Debugger > \uicontrol GDB > \uicontrol {Use automatic symbol cache}. - \image qtcreator-gdb-options.png "GDB preferences" + \image qtcreator-gdb-options.png {GDB preferences} \section2 Minimizing Number of Breakpoints From fdf3feaf0beae6045fb704bb43cc81ac484dea87 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Mon, 26 Jun 2023 08:18:27 +0200 Subject: [PATCH 19/25] TaskTree: Readd networkquery.h into the SOURCES section In this way the networkquery.h is still reachable from the project explorer. Change-Id: I49646a077a5a6fe72bf81234c6111cdf0f371699 Reviewed-by: Christian Stenger --- src/libs/solutions/tasking/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libs/solutions/tasking/CMakeLists.txt b/src/libs/solutions/tasking/CMakeLists.txt index 926343e9c8b..ae51b12a7bd 100644 --- a/src/libs/solutions/tasking/CMakeLists.txt +++ b/src/libs/solutions/tasking/CMakeLists.txt @@ -5,7 +5,7 @@ add_qtc_library(Tasking OBJECT SOURCES barrier.cpp barrier.h concurrentcall.h - networkquery.cpp + networkquery.cpp networkquery.h tasking_global.h tasktree.cpp tasktree.h EXPLICIT_MOC From 12bcdee8099a066e7f97553229f8aedfae20ec26 Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Thu, 22 Jun 2023 14:16:59 +0200 Subject: [PATCH 20/25] Doc: Fix instructions for previewing QML files Change-Id: Ifbc0df8d64ab84adc05d427c0c925221533ea973 Reviewed-by: Reviewed-by: Thomas Hartmann --- doc/qtcreator/src/qtquick/qtquick-live-preview-desktop.qdoc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/qtcreator/src/qtquick/qtquick-live-preview-desktop.qdoc b/doc/qtcreator/src/qtquick/qtquick-live-preview-desktop.qdoc index ca76ac369b2..01706aa950e 100644 --- a/doc/qtcreator/src/qtquick/qtquick-live-preview-desktop.qdoc +++ b/doc/qtcreator/src/qtquick/qtquick-live-preview-desktop.qdoc @@ -26,8 +26,8 @@ \image studio-live-preview.png \endif - To preview any QML file that belongs to the project, right-click the project - name in the \l Projects view, and select \uicontrol {Preview File}. + To preview any QML file that belongs to the project, right-click the + filename in the \l Projects view, and select \uicontrol {Preview File}. \if defined(qtdesignstudio) To preview the whole UI, select \uicontrol {Show Live Preview} From 7642ce34b00eb44bbd807774b091bdff50d2b7f6 Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Fri, 23 Jun 2023 16:21:23 +0200 Subject: [PATCH 21/25] Doc: Mention qmake support for building apps in Docker containers Task-number: QTCREATORBUG-28996 Change-Id: I0f5394fa7a4e7ba986c66df8dc73c098186903a9 Reviewed-by: Marcus Tillmanns --- doc/qtcreator/src/docker/creator-docker.qdoc | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/doc/qtcreator/src/docker/creator-docker.qdoc b/doc/qtcreator/src/docker/creator-docker.qdoc index c6b62b6dd83..33c358a5bed 100644 --- a/doc/qtcreator/src/docker/creator-docker.qdoc +++ b/doc/qtcreator/src/docker/creator-docker.qdoc @@ -16,15 +16,14 @@ While Linux, \macos, and Windows hosts are supported in principle, Linux is the recommended platform. - Currently, only CMake is supported for building applications in the Docker - container. - To build, run, and debug applications on Docker devices, you must install and configure \c docker-cli on the development host. \QC automatically detects \l{Adding Kits}{build and run kit} items, such \l{Adding Debuggers} {debuggers} and \l{Adding Qt Versions}{Qt versions}, in the Docker container and creates kits for the devices. + You can use CMake or qmake to build applications in the Docker container. + To pull images from Docker hub or other registries, use the \l{https://docs.docker.com/engine/reference/commandline/pull/}{docker pull} command. From 9edb1f524e98b24cb51586ad510fa3352155f33d Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Fri, 23 Jun 2023 16:35:28 +0200 Subject: [PATCH 22/25] Doc: Update change log - Added paths to new options - Added links to documentation - Added some articles - Rephrased an entry Change-Id: Ifeea256714f307963789535f199a2e2733f56276 Reviewed-by: Eike Ziller --- dist/changelog/changes-11.0.0.md | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/dist/changelog/changes-11.0.0.md b/dist/changelog/changes-11.0.0.md index a637950a445..ebfc6584875 100644 --- a/dist/changelog/changes-11.0.0.md +++ b/dist/changelog/changes-11.0.0.md @@ -118,7 +118,7 @@ Editing * Fixed that generated functions did not have a `const` qualifier when required ([QTCREATORBUG-29274](https://bugreports.qt.io/browse/QTCREATORBUG-29274)) -* Fixed that locator showed both the declaration and the definition of symbols +* Fixed that the locator showed both the declaration and the definition of symbols ([QTCREATORBUG-13894](https://bugreports.qt.io/browse/QTCREATORBUG-13894)) * Fixed the handling of C++20 keywords and concepts * Clangd @@ -154,8 +154,9 @@ Editing ### Python -* Added the option to create a virtual environment (`venv`) to the Python - interpreter selector and the wizard +* Added the `Create Virtual Environment` option to the Python interpreter + selector on the editor toolbar and to the wizards in `File > New Project > + > Application (Qt for Python)` ([PYSIDE-2152](https://bugreports.qt.io/browse/PYSIDE-2152)) * Fixed that too many progress indicators could be created ([QTCREATORBUG-29224](https://bugreports.qt.io/browse/QTCREATORBUG-29224)) @@ -167,10 +168,11 @@ Projects * Made it possible to add devices in `Preferences > Devices > Add` without going through the wizard + ([Documentation](https://doc.qt.io/qtcreator/creator-developing-b2qt.html)) + ([Documentation](https://doc.qt.io/qtcreator/creator-developing-generic-linux.html)) * Added support for moving files to a different directory when renaming them in the `File System` view ([QTCREATORBUG-15981](https://bugreports.qt.io/browse/QTCREATORBUG-15981)) - ([Documentation](https://doc.qt.io/qtcreator/creator-file-system-view.html)) ### CMake @@ -184,10 +186,13 @@ Projects [QTCREATORBUG-28904](https://bugreports.qt.io/browse/QTCREATORBUG-28904), [QTCREATORBUG-28985](https://bugreports.qt.io/browse/QTCREATORBUG-28985), [QTCREATORBUG-29006](https://bugreports.qt.io/browse/QTCREATORBUG-29006)) + ([Documentation](https://doc.qt.io/qtcreator/creator-project-cmake.html)) * Added `Build > Reload CMake Presets` to reload CMake presets after making changes to them -* Added support for `block()` and `endblock()` -* Fixed that CMake Presets were not visible in `Projects` view + ([Documentation](https://doc-snapshots.qt.io/qtcreator-11.0/creator-build-settings-cmake-presets.html)) +* Added support for the `block()` and `endblock()` CMake commands + ([CMake documentation](https://cmake.org/cmake/help/latest/command/block.html#command:block)) +* Fixed that CMake Presets were not visible in the `Projects` view ([QTCREATORBUG-28966](https://bugreports.qt.io/browse/QTCREATORBUG-28966)) * Fixed issues with detecting a configured Qt version when importing a build ([QTCREATORBUG-29075](https://bugreports.qt.io/browse/QTCREATORBUG-29075)) @@ -196,6 +201,7 @@ Projects * Added an option for selecting the interpreter to the wizards in `File > New Project > Application (Qt for Python)` + ([Documentation](https://doc.qt.io/qtcreator/creator-project-creating.html)) Debugging --------- @@ -203,6 +209,7 @@ Debugging * Improved the UI for enabling and disabling debuggers in `Projects > Run > Debugger settings` ([QTCREATORBUG-28627](https://bugreports.qt.io/browse/QTCREATORBUG-28627)) + ([Documentation](https://doc.qt.io/qtcreator/creator-debugging-qml.html)) * Fixed the automatic source mapping for Qt versions from an installer ([QTCREATORBUG-28950](https://bugreports.qt.io/browse/QTCREATORBUG-28950)) * Fixed pretty printer for `std::string` for recent `libc++` @@ -210,8 +217,8 @@ Debugging ### C++ -* Added an option for the default number of array elements to show - (`Preferences > Debugger > Locals & Expressions > Default array size`) +* Added the `Default array size` option for setting the default number of array + elements to show in `Preferences > Debugger > Locals & Expressions` * Fixed debugging in a terminal as the root user ([QTCREATORBUG-27519](https://bugreports.qt.io/browse/QTCREATORBUG-27519)) * CDB @@ -225,11 +232,12 @@ Debugging ### Qt Quick -* Improved the auto-detection if QML debugging is required +* Improved the auto-detection of whether QML debugging is required ([QTCREATORBUG-28627](https://bugreports.qt.io/browse/QTCREATORBUG-28627)) -* Added an option for disabling static analyzer messages to - `Qt Quick > QML/JS Editing` +* Added the `Use customized static analyzer` option for disabling static analyzer + messages to `Preferences > Qt Quick > QML/JS Editing` ([QTCREATORBUG-29095](https://bugreports.qt.io/browse/QTCREATORBUG-29095)) + ([Documentation](https://doc.qt.io/qtcreator/creator-checking-code-syntax.html)) Analyzer -------- From ae85af34beea6d88179c9b5641e5a9fb8391e709 Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Fri, 23 Jun 2023 15:25:14 +0200 Subject: [PATCH 23/25] Doc: Describe the "Use customized static analyzer" option In Preferences > Qt Quick > QML/JS Editing. Task-number: QTCREATORBUG-28996 Change-Id: I0e6945ac7fe82e3c8125438772214fe362da89c8 Reviewed-by: Reviewed-by: Christian Stenger --- ...tor-preferences-qtquick-qmljs-editing.webp | Bin 0 -> 5204 bytes .../images/qtcreator-qml-js-editing.webp | Bin 6992 -> 14272 bytes .../src/editors/creator-code-syntax.qdoc | 15 ++++++++++++++- 3 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 doc/qtcreator/images/qtcreator-preferences-qtquick-qmljs-editing.webp diff --git a/doc/qtcreator/images/qtcreator-preferences-qtquick-qmljs-editing.webp b/doc/qtcreator/images/qtcreator-preferences-qtquick-qmljs-editing.webp new file mode 100644 index 0000000000000000000000000000000000000000..622c80a3883316b234b3e862b73c43c1820622cb GIT binary patch literal 5204 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 literal 0 HcmV?d00001 diff --git a/doc/qtcreator/images/qtcreator-qml-js-editing.webp b/doc/qtcreator/images/qtcreator-qml-js-editing.webp index ab9a9f48422b32447096eff9ea2a254091fffc0d..7e759cf2da686bc283be4719150ff4b29c0bc850 100644 GIT binary patch literal 14272 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 OudFg_?TyM|R~Z32I=1)# literal 6992 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 XKKwhw&g$Rvm$OAre|dZ5JUasbPi4G8 diff --git a/doc/qtcreator/src/editors/creator-code-syntax.qdoc b/doc/qtcreator/src/editors/creator-code-syntax.qdoc index 791bb4fc295..87203f8bd3a 100644 --- a/doc/qtcreator/src/editors/creator-code-syntax.qdoc +++ b/doc/qtcreator/src/editors/creator-code-syntax.qdoc @@ -1,4 +1,4 @@ -// Copyright (C) 2022 The Qt Company Ltd. +// Copyright (C) 2023 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only /*! @@ -699,6 +699,19 @@ \endtable + \section1 Enabling and Disabling Messages + + To enable and disable QML and JavaScript messages, select \uicontrol Edit > + \uicontrol Preferences > \uicontrol {Qt Quick} > \uicontrol {QML/JS Editing} + > \uicontrol {Use customized static analyzer}. + + \image qtcreator-preferences-qtquick-qmljs-editing.webp {QML/JS Editing tab in Qt Quick preferences} + + In \uicontrol Enabled, select the messages that you want to see. + To disable messages for non-Qt Quick UI files, select them in + \uicontrol {Disable messages for non Qt Quick UI}. You cannot + enable messages just for non-Qt Quick UI files. + \section1 Resetting the Code Model If you change the build and run kit when you have QML files open in the code From 42a62a3a5ded2cfe07af60dbfab4e162c1d9a4d4 Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Sun, 25 Jun 2023 22:42:15 +0200 Subject: [PATCH 24/25] Android: Obtain values for AndroidRunnerWorker from settings data The members of AndroidRunnerWorker are supposed to be initialized with aspect values from the AndroidRunConfiguration. But they were instead unsuccessfully obtained from the RunControl's aspects. This obtains the values from the RunControl's settings, instead. Fixes: QTCREATORBUG-29160 Change-Id: I124184c32d158e0648a0ee1d23dfe8707d18eab8 Reviewed-by: hjk --- src/plugins/android/androidrunnerworker.cpp | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/src/plugins/android/androidrunnerworker.cpp b/src/plugins/android/androidrunnerworker.cpp index 2f52d694f3c..c50129aac25 100644 --- a/src/plugins/android/androidrunnerworker.cpp +++ b/src/plugins/android/androidrunnerworker.cpp @@ -263,15 +263,17 @@ AndroidRunnerWorker::AndroidRunnerWorker(RunWorker *runner, const QString &packa if (target->buildConfigurations().first()->buildType() != BuildConfiguration::BuildType::Release) m_extraAppParams = runControl->commandLine().arguments(); - if (auto aspect = runControl->aspect(Constants::ANDROID_AM_START_ARGS)) { - QTC_CHECK(aspect->value.typeId() == QVariant::String); - const QString startArgs = aspect->value.toString(); + if (const QVariantMap sd = runControl->settingsData(Constants::ANDROID_AM_START_ARGS); + !sd.values().isEmpty()) { + QTC_CHECK(sd.first().type() == QVariant::String); + const QString startArgs = sd.first().toString(); m_amStartExtraArgs = ProcessArgs::splitArgs(startArgs, OsTypeOtherUnix); } - if (auto aspect = runControl->aspect(Constants::ANDROID_PRESTARTSHELLCMDLIST)) { - QTC_CHECK(aspect->value.typeId() == QVariant::String); - const QStringList commands = aspect->value.toString().split('\n', Qt::SkipEmptyParts); + if (const QVariantMap sd = runControl->settingsData(Constants::ANDROID_PRESTARTSHELLCMDLIST); + !sd.values().isEmpty()) { + QTC_CHECK(sd.first().type() == QVariant::String); + const QStringList commands = sd.first().toString().split('\n', Qt::SkipEmptyParts); for (const QString &shellCmd : commands) m_beforeStartAdbCommands.append(QString("shell %1").arg(shellCmd)); } @@ -279,9 +281,10 @@ AndroidRunnerWorker::AndroidRunnerWorker(RunWorker *runner, const QString &packa for (const QString &shellCmd : preStartCmdList.toStringList()) m_beforeStartAdbCommands.append(QString("shell %1").arg(shellCmd)); - if (auto aspect = runControl->aspect(Constants::ANDROID_POSTFINISHSHELLCMDLIST)) { - QTC_CHECK(aspect->value.typeId() == QVariant::String); - const QStringList commands = aspect->value.toString().split('\n', Qt::SkipEmptyParts); + if (const QVariantMap sd = runControl->settingsData(Constants::ANDROID_POSTFINISHSHELLCMDLIST); + !sd.values().isEmpty()) { + QTC_CHECK(sd.first().type() == QVariant::String); + const QStringList commands = sd.first().toString().split('\n', Qt::SkipEmptyParts); for (const QString &shellCmd : commands) m_afterFinishAdbCommands.append(QString("shell %1").arg(shellCmd)); } From 456a019f2d563a86644fde0ab15fc957bad8e9e8 Mon Sep 17 00:00:00 2001 From: Marcus Tillmanns Date: Mon, 26 Jun 2023 09:23:45 +0200 Subject: [PATCH 25/25] Debugger: Don't spam app output Only errors should be displayed in the App output. Everything else is just noise. To keep the information for debugging purpose we log it to the Debugger Output View instead. Fixes: QTCREATORBUG-27160 Change-Id: I37301edd2f6638e2b4152d1bf7b89a40c9c3c0af Reviewed-by: Marcus Tillmanns --- share/qtcreator/debugger/lldbbridge.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/share/qtcreator/debugger/lldbbridge.py b/share/qtcreator/debugger/lldbbridge.py index bef97482af6..3cef9f22c9d 100644 --- a/share/qtcreator/debugger/lldbbridge.py +++ b/share/qtcreator/debugger/lldbbridge.py @@ -755,15 +755,15 @@ class Dumper(DumperBase): qtVersionAndNamespace = None try: qtVersionAndNamespace = self.fetchQtVersionAndNamespace() - DumperBase.warn("Detected Qt Version: 0x%0x (namespace='%s')" % - (qtVersionAndNamespace[1], qtVersionAndNamespace[0] or "no namespace")) + self.report("Detected Qt Version: 0x%0x (namespace='%s')" % + (qtVersionAndNamespace[1], qtVersionAndNamespace[0] or "no namespace")) except Exception as e: DumperBase.warn('[lldb] Error detecting Qt version: %s' % e) try: self.fetchInternalFunctions() - DumperBase.warn('Found function QObject::property: 0x%0x' % self.qtPropertyFunc) - DumperBase.warn('Found function QObject::customEvent: 0x%0x' % self.qtCustomEventFunc) + self.report('Found function QObject::property: 0x%0x' % self.qtPropertyFunc) + self.report('Found function QObject::customEvent: 0x%0x' % self.qtCustomEventFunc) except Exception as e: DumperBase.warn('[lldb] Error fetching internal Qt functions: %s' % e)