[qt/qt-creator/qt-creator]: Summary of bulk changes made

KDE Git Services - Bulk Change <[email protected]>
Newsgroups gmane.comp.kde.cvs
Message-ID <[email protected]>
Git repository change summary for qt/qt-creator/qt-creator
Pushed by mirror-service into branch 'master'.
Changed from baad440bfbb84dd8a1d816ce8e6a4f953cb38cfd to 972fbb68627dea4f3db63b7d076bb1543a63acd3
Acknowledgement was received that this change introduces only existing code that has been pushed to another public open source repository.

This change contains the following new commits:

Git commit 230b676516c091659430c4f24492c77a03ea29e0 by hjk on 06/08/2026 at 09:07..
Qnx: Show application output when running, not only when debugging

On QNX, qDebug()/console.log() output goes to the slog2 system log. The
Debug and QML Profiler workers already capture it via slog2InfoRecipe,
but the plain run worker was a bare ProcessRunnerFactory, so running an
application (Ctrl+R) produced no output while debugging it (F5) did.

Give the run worker the same recipe: run the process in parallel with
slog2InfoRecipe, so slog2 output reaches the Application Output.

Fixes: QTCREATORBUG-18906
Assisted-by: Claude Code
Change-Id: I2e6366cfc6435edb6e25fc6be6def7d5f805701c
Reviewed-by: Cristian Adam <[email protected]>
https://invent.kde.org/qt/qt-creator/qt-creator/-/commit/230b676516c091659430c4f24492c77a03ea29e0

Git commit decaf54a624e5c839f35a8f66677b73238d66857 by Cristian Adam on 06/08/2026 at 09:46..
CmdBridge: Port Go implementation to C11

With `zig cc` the code can be cross-compiled to all platforms like the
Go version.

In order to use this you have to set `BUILD_CMDBRIDGE_C=ON`, and to
cross-compile all targets set `CMDBRIDGE_USE_ZIG=ON` in the CMake
configuration of Qt Creator.

The wire format follows what the client actually reads. Every packet
carries exactly one CBOR value, because Client::readPacket() decodes one
and ignores whatever follows it. Arrays are encodable, which the
environment reply needs. A command split across several reads is held
until it is complete rather than resynchronised away, so writefile is
not limited to what fits in one read. Options are accepted in the
spelling the client uses ("-watchdogTimeout 60"), which also means the
watchdog is armed by default as it is in Go.

Commands run on a worker pool that grows on demand, so a handful of
long-running exec or find calls cannot starve the cancel that would end
them. Nothing is bounded by a compile-time constant: the command queue,
the cancellation registry, the process and watcher tables and the socket
forwarding maps all grow as needed.

Temporary names are generated from the platform CSPRNG and created
exclusively, rather than through mkstemp() or GetTempFileNameW(). musl's
mkstemp() leaves the last two of its six characters effectively constant
within a process, and GetTempFileNameW() truncates the prefix to three
characters and reuses a deleted name.

The two implementations live in go/ and c/, with the CMakeLists.txt in
server/ selecting between them. Within the C one, platform specific code
lives in one file per platform, included by the module that owns it, so
the handlers themselves are free of #ifdef.

Values the client parses are reported the way it reads them. "Mode" is a
Go io/fs.FileMode, not a POSIX st_mode: the client takes the file type
from Go's high bits, so a raw st_mode made every directory look like a
plain file, which listed folders as files and opened them instead of
descending. A non-recursive find reports its subdirectories and only
declines to walk them, as filepath.SkipDir does. Entry paths are joined
with a single separator, since a leading "//" is read as a
host-qualified path and leaves the entry with no path at all.

cmdbridge_py_test.py exercises the protocol through a reader that
mirrors Client::readPacket(), including cases that used to be capped or
dropped. cmdbridge_fuzz.c includes cbor.c instead of carrying its own
copy of the decoder, and its structural self-tests run as a test.

Assisted-by: Opencode (Qwen 3.6 35b)
Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
Change-Id: I44b572316dcacd1071adb5c11f7b3088581fb217
Reviewed-by: hjk <[email protected]>
Reviewed-by: Marcus Tillmanns <[email protected]>
https://invent.kde.org/qt/qt-creator/qt-creator/-/commit/decaf54a624e5c839f35a8f66677b73238d66857

Git commit a7356157d4d851b4b31cc54ed9c6aa6b1cb28747 by hjk on 06/08/2026 at 10:06..
Qnx: Cross-compile CMake projects with the QNX toolchain

An auto-detected QNX kit did not configure CMake for cross-compilation,
so CMake fell back to the host cc/g++ and the QNX headers were not found.

Let a toolchain contribute a CMake toolchain file via a new
Toolchain::cmakeToolchainFile() hook. QnxToolchain returns the SDP's
qnx-toolchain-<arch>.cmake, which sets CMAKE_SYSTEM_NAME=QNX, the qcc
target and CMAKE_SYSROOT. The initial CMake configuration passes it as
CMAKE_TOOLCHAIN_FILE for a non-desktop kit that has no Qt version (the
Qt case is already covered by qt.toolchain.cmake), mirroring how the
Android toolchain file is added; the kit keeps its compilers.

The toolchain file invokes the compiler by name, so also put qcc's
directory on PATH in QnxToolchain::addToEnvironment().

Assisted-by: Claude Code
Change-Id: Icbd1f09166f567aa392af97ab42318ba0655fdb4
Reviewed-by: Cristian Adam <[email protected]>
https://invent.kde.org/qt/qt-creator/qt-creator/-/commit/a7356157d4d851b4b31cc54ed9c6aa6b1cb28747

Git commit fa300a767c7850d88037c842119b4d9ccd0b9769 by hjk on 06/08/2026 at 10:06..
FakeVim: Make Vim's editorconfig plugin work

Vim 9.1's own editorconfig plugin runs unchanged now: a stock plugin and
a .editorconfig give the same 'tabstop', 'shiftwidth', 'expandtab' and
'textwidth' Vim gives. Each gap was found by running the plugin and
looking at what it did, not by reading it.

It needed the name of every Vim option, so that "exists('+ssl') &&
!&ssl" stops aborting the line it stands in; the "\_x" patterns; a split
on a separator that matches nothing; ":messages", because only one
message fits the mini buffer and the rest of what a script says was
lost; ":lockvar"; a "\=" read literally where very magic gives "=" a
meaning; and an error that reaches the ":try" wrapped around it, which
is how a plugin asks whether what it did worked.

Task-number: QTCREATORBUG-34817
Assisted-by: Claude Code
Change-Id: Iffe89f54ef51d381b279bdadfba9db6fd55afd20
Reviewed-by: Cristian Adam <[email protected]>
https://invent.kde.org/qt/qt-creator/qt-creator/-/commit/fa300a767c7850d88037c842119b4d9ccd0b9769

Git commit ae5039c854667a5d7d64cc303ab4a5172a807de6 by hjk on 06/08/2026 at 10:06..
FakeVim: Read more patterns, and write ":set" values as Vim does

A character named by its number ("\%d98"), a sequence of optional
characters ("a\%[bc]"), the look-around patterns ("\@=" and its kin) and
the places a pattern may match ("\%23l", "\%V").

On the option side: a backslash in a ":set" value takes the next
character literally, which is how every ftplugin writes 'commentstring';
"+=" joins with a comma for a list option and side by side for a flag-
style one; 'cpoptions' was reachable under a name Vim does not know; and
"sm" belongs to Vim's 'showmatch'.

v:throwpoint and "<stack>" now name the statement each frame is at,
which is what a plugin cuts its own function name out of.

Task-number: QTCREATORBUG-34817
Assisted-by: Claude Code
Change-Id: I9bd80f460edd61eccccae40cb914ea2de34988f7
Reviewed-by: Cristian Adam <[email protected]>
https://invent.kde.org/qt/qt-creator/qt-creator/-/commit/ae5039c854667a5d7d64cc303ab4a5172a807de6

Git commit b5950801dfe2772c1ec2e42a448f13ef9a7f9776 by hjk on 06/08/2026 at 10:06..
FakeVim: Make Vim's matchit plugin work

Vim 9.1's matchit plugin runs unchanged: "%" walks the words of a pair
round and "g%" walks them the other way, matching Vim over the same
lines.

Along the way, three things that were wrong on their own account: a
search that wrapped did not come back to the word under the cursor, a
walk over the positions of a pattern did not stop at the end of the
buffer and hung, and an expression looked at what an "&&" had already
passed over.

Added for the plugin: searchpair() and searchpairpos(), mode(), the
shortened spellings of the block commands, CTRL-U on the command line, a
"<Cmd>" that keys come before, several options in one ":set",
'softtabstop', and a look-behind that says how far back to look.

Task-number: QTCREATORBUG-34817
Assisted-by: Claude Code
Change-Id: If49b176c4c8621fe382822800a7275ffd09a1e6d
Reviewed-by: Cristian Adam <[email protected]>
https://invent.kde.org/qt/qt-creator/qt-creator/-/commit/b5950801dfe2772c1ec2e42a448f13ef9a7f9776

Git commit 9ffdfcbdf2afb6c7fc524635040eaafd425a6142 by hjk on 06/08/2026 at 10:06..
FakeVim: Make Vim's justify plugin work

Vim's own justify plugin runs unchanged and lays out a paragraph the way
Vim lays it out.

It wanted a function handed the whole range at once when it asks for one
- without "range" Vim calls the function once per line, which is what a
plugin counts on - ":retab", strdisplaywidth(), strwidth(), getline()
over several lines, and the questions a plugin asks about registers and
mappings.

Task-number: QTCREATORBUG-34817
Assisted-by: Claude Code
Change-Id: Iacc6d771608bf9d3f201d43971b982372647813c
Reviewed-by: Cristian Adam <[email protected]>
https://invent.kde.org/qt/qt-creator/qt-creator/-/commit/9ffdfcbdf2afb6c7fc524635040eaafd425a6142

Git commit debbabfc4618d4f59dc0dc9aecd4f77b4fd003e2 by hjk on 06/08/2026 at 10:07..
FakeVim: Make ReplaceWithRegister work

Ingo Karkat's plugin, the one behind the "gr" emulation, runs unchanged:
the operator, the line and the visual mapping all replace what Vim
replaces, with a named register and with a count.

The engine gaps were elsewhere: a motion to a mark started a new
selection in Visual mode instead of reaching over what lies between; a
List or a Dictionary compared equal to any other, since both went
through toNumber(); 'ignorecase' had no say in what "==" does;
v:register did not exist, so the plugin was left with no register at
all; a comment behind a ":set" looked like more options; and a linewise
selection was replaced by charwise text.

Also: a mapping can reach a function of its own script, an operator
takes what a ":" command selects, the unnamed register answers to "@@",
and a character named by number or key is read inside a string.

Task-number: QTCREATORBUG-34817
Assisted-by: Claude Code
Change-Id: Icee31d9b48faf3d124060fd9d7d9e2e551bcd60f
Reviewed-by: Cristian Adam <[email protected]>
https://invent.kde.org/qt/qt-creator/qt-creator/-/commit/debbabfc4618d4f59dc0dc9aecd4f77b4fd003e2

Git commit 487c4f9ce4fb66e84d283bcaec3876d981033e67 by hjk on 06/08/2026 at 10:07..
FakeVim: Make vim-exchange work

Tom McDonald's plugin, the one behind the "cx" emulation, runs
unchanged: words, lines and visual regions swap where Vim swaps them,
and the indent stays where it was.

What it needed: "<SID>" and "<SNR>42_" read as names that can be called,
because a plugin points 'operatorfunc' at its own function that way; "_"
made the linewise motion it is, so that "g@_" hands an operator a line;
line(), col() and virtcol() taking a "[lnum, col]" list; a linewise yank
of the last line without the break in front of it, which also answers
for ":w", ":!" and ":g" over such a range; and nextnonblank() with
prevnonblank().

Pasting whole lines into a charwise selection breaks the line open, as
Vim does it.

Task-number: QTCREATORBUG-34817
Assisted-by: Claude Code
Change-Id: I5d12d7b55a410c66bd82c688715d8a08349f825c
Reviewed-by: Cristian Adam <[email protected]>
https://invent.kde.org/qt/qt-creator/qt-creator/-/commit/487c4f9ce4fb66e84d283bcaec3876d981033e67

Git commit d6a416a0389d62e410f8a41f47b6db76442f46fb by hjk on 06/08/2026 at 10:07..
FakeVim: Add ":put", getchar() and more of what a plugin asks for

":put" was not there at all: it puts what a register or an expression
holds as whole lines, which is how a script writes lines without
touching a register. A line address of 0 is not representable in a range
here, so ":0put" puts after the first line; ":1put!" does what it means.

getchar() and getcharstr() hand out the keys already typed ahead - what
is left of a mapping being expanded, or of a register being run. Waiting
for a key that has not been typed is another matter: the engine cannot
suspend a running script, so the form without an argument answers like
getchar(0).

Also: eval(), ":let [a, b; rest] = list", ":set inv{option}", CTRL-R =
in a command line, "\<Left>" read as the key it names, and a carriage
return taken for the Return key - a register a script fills with
":s/a/b/\r" left the command standing on the command line before.

Task-number: QTCREATORBUG-34817
Assisted-by: Claude Code
Change-Id: I7d321e74a924d33660c148bb150a8be6e2b07ba2
Reviewed-by: Cristian Adam <[email protected]>
https://invent.kde.org/qt/qt-creator/qt-creator/-/commit/d6a416a0389d62e410f8a41f47b6db76442f46fb

Git commit fa4e527b9feecdb174a0e876b0474e72e7311906 by hjk on 06/08/2026 at 10:07..
FakeVim: Make vim-unimpaired work

tpope's plugin, the one behind the "[q"/"]q" emulation, runs unchanged
as far as it does not want a window, a buffer list or a quickfix list: a
blank line above or below, exchanging a line with its neighbour, turning
an option on, off or around, and the transform operators for XML, URL
and string escaping, over a motion and over a line.

The count typed in front of a mapping reaches v:count inside it now; a
mapping to a ":" command is expanded after the pending count has been
taken, so "2[<Space>" made one blank line. A script-local function is
named "<SNR>42_Name" in the frame chain, which is where the plugin reads
the prefix it builds 'operatorfunc' from. A name may hold "{expr}", tr()
is there, and a string is read as a number the way str2nr() does,
without which nr2char('0x26') gave nothing.

maparg() takes the keys written in "<>" notation as well as typed out; a
plugin asks that way before putting a mapping of its own in, and was
told the user has none.

Task-number: QTCREATORBUG-34817
Assisted-by: Claude Code
Change-Id: I31abd4582b1d015a77d74de94f6c4f7c073d7600
Reviewed-by: Cristian Adam <[email protected]>
https://invent.kde.org/qt/qt-creator/qt-creator/-/commit/fa4e527b9feecdb174a0e876b0474e72e7311906

Git commit d0b7e3bde1c0f22b1e55f6db6825fcb9efa262c4 by Marcus Tillmanns on 06/08/2026 at 10:15..
CmdBridge: Add FreeBSD, OpenBSD and NetBSD targets

Both implementations now build for the three BSDs on amd64 and arm64,
which brings each of them to 13 binaries.

Only free space differs per system, so it moved into its own files. Go
needs a cast on FreeBSD, where Statfs_t's fields are signed; OpenBSD
keeps the C prefix on their names; and NetBSD has no statfs() at all,
only the POSIX statvfs(), whose Bavail counts Frsize units rather than
Bsize ones. The C implementation needs the same statvfs() on NetBSD and
compiles unchanged everywhere else.

The C targets need zig 0.16 or newer, since earlier versions ship no BSD
libc. Rather than fail the build there, they are skipped: a missing
binary is not fatal, because the client falls back to its slow file
access when it cannot find or start one.

The client could not have asked for those binaries. "uname -s" prints
FreeBSD, OpenBSD or NetBSD, none of which osTypeFromString() knew, so
such a device gave up before the bridge was ever looked up and quietly
took that slow path. They get one OsType each rather than a shared one,
because the binaries are named after GOOS and are not interchangeable,
and because CMAKE_HOST_SYSTEM_NAME spells them out. The checks for
whether an OS is unix-like now count them, so these devices keep the
behaviour they had back when they were just another "other unix".

The server also raises RLIMIT_NOFILE to the hard limit, as the Go
runtime has done since Go 1.19. This is not BSD specific, but OpenBSD is
where it showed: the kqueue watcher spends a descriptor per watched
path, and the default login class allows 128 against a hard limit of
1024, which capped a device at 124 watches.

test_freespace checks the value against what the OS reports instead of
only that a reply arrived, since picking the wrong block size still
yields a plausible-looking number. That needed 8-byte integers in the
test's CBOR reader, without which the free space of any modern disk was
invisible to it.

HostOsInfo::hostOs() still reports OsTypeOtherUnix when Qt Creator
itself runs on a BSD. Nothing there needs the distinction, and it is the
one part of this that cannot be tested from another host.

Abi::abiOsToOsType() likewise keeps mapping BsdOS to OsTypeOtherUnix: it
only receives the OS, not the flavor, so it cannot tell the BSDs apart.

The protocol test suite passes on FreeBSD 15.1, OpenBSD 7.9 and NetBSD
11.0, all amd64.

Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
Change-Id: I107026de29f7c391445513f4f14ad978fcc11cee
Reviewed-by: Cristian Adam <[email protected]>
https://invent.kde.org/qt/qt-creator/qt-creator/-/commit/d0b7e3bde1c0f22b1e55f6db6825fcb9efa262c4

Git commit cb9bb5702d049bae5ca21f3456cffde36468bbe3 by hjk on 06/08/2026 at 10:52..
Debugger: Add MCP tool to set a variable's display format

Add a set_display_format tool to the debugger MCP interface, mirroring
the Locals view context menu, and report the formatted display value
(display_value) next to the raw value so a client can observe the
effect of a display format. Back it with a small WatchHandler::setFormat
accessor.

Assisted-by: Claude Code
Change-Id: If10652fafe25ad8ee2c1ac7121ec904e234433cb
Reviewed-by: Marcus Tillmanns <[email protected]>
https://invent.kde.org/qt/qt-creator/qt-creator/-/commit/cb9bb5702d049bae5ca21f3456cffde36468bbe3

Git commit 444f9d642f330acae41552a5bcd44ef68f0eee06 by hjk on 06/08/2026 at 10:52..
ProjectExplorer: Explain why a remote run has no executable

A run configuration for a device that differs from the build device
derives its executable from the deployment data. When nothing maps the
built target to a remote path (e.g. a CMake project without install()
rules), the remote executable comes out empty, and the run then fails
with an unhelpful error instead of pointing at the missing deployment.

Report an actionable issue in that case from the base
RunConfiguration::checkForIssues(), with build-system-specific advice
supplied by a new BuildSystem::deploymentHint() (CMake/qmake/qbs).

Fixes: QTCREATORBUG-28981
Assisted-by: Claude Code
Change-Id: I579556d192c761771921ee88421c95c124e7ebb7
Reviewed-by: Christian Kandeler <[email protected]>
https://invent.kde.org/qt/qt-creator/qt-creator/-/commit/444f9d642f330acae41552a5bcd44ef68f0eee06

Git commit e302ed3ae17186137184c59c6492e88ae54b35d7 by Christian Kandeler on 06/08/2026 at 10:58..
CmdBridge: Fix qbs build

Change-Id: Ic0503bbee6378cbd547bd3ef3b2db7273b7a9508
Reviewed-by: Cristian Adam <[email protected]>
https://invent.kde.org/qt/qt-creator/qt-creator/-/commit/e302ed3ae17186137184c59c6492e88ae54b35d7

Git commit ea70bb137dff68d0c30219464a3b10ce5e1a63c2 by Christian Kandeler on 06/08/2026 at 12:04..
FakeVim: Fix warning

Change-Id: Ice61c80107f7a18ba5d4c004f5aaf55905d4f4d1
Reviewed-by: hjk <[email protected]>
https://invent.kde.org/qt/qt-creator/qt-creator/-/commit/ea70bb137dff68d0c30219464a3b10ce5e1a63c2

Git commit 972fbb68627dea4f3db63b7d076bb1543a63acd3 by Christian Kandeler on 06/08/2026 at 12:04..
Utils: Move Aggregation into the namespace

Change-Id: Iec4849d7575e3e9ac3f79917cdda5e30605f4325
Reviewed-by: hjk <[email protected]>
https://invent.kde.org/qt/qt-creator/qt-creator/-/commit/972fbb68627dea4f3db63b7d076bb1543a63acd3
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.