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

KDE Git Services - Bulk Change <[email protected]> Tue, 4 Aug 2026 12:15:32 +0000 (UTC)
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 67f245f879f9ea706a36d5ea257d95a73143d9cb to 92007fa1180cd5a47994915dca33ec0b253e2721
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 4dd2da8fc0f3fdf357b9d0235fb10ad393b26d50 by hjk on 04/08/2026 at 06:27..
Debugger: Add a start_debug MCP tool

Pair a start_debug tool with the existing stop_debug tool in the
debugger plugin, so an MCP client can start a debug session for the
startup project (DEBUG_RUN_MODE) and drive debugging end to end.

Drop the overlapping debug_project tool from the ProjectExplorer MCP
support; debug-session control now lives solely in the debugger
plugin. Building is left to the separate build tool.

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

Git commit cecbc952de90ba5e621912430857d207a09ac9d4 by hjk on 04/08/2026 at 06:27..
Lua: Add a Mode module

Let Lua plugins contribute a mode (a left-side tab with its own
full-window widget): Mode.create{ id, displayName, widget, priority?,
icon? } creates and shows it, and removes it again when the plugin is
unloaded.

For this ModeManager::addMode() has to work after startup too. It was
startup-only (the initial batch is laid out at extensionsInitialized);
now a mode added later builds its tab as well. IMode's constructor
calls addMode() before the caller sets id/widget/..., so the tab
creation is deferred to the next event-loop turn, when the mode is
fully configured.

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

Git commit 0bdc40bce9779f05dcb7e5fba67383341e6fcf08 by hjk on 04/08/2026 at 06:27..
ProjectExplorer: Report run configuration details in the MCP tool

get_run_configurations returned only the display name and the active
flag. Also report the run configuration's type id and its resolved
runnable: executable, arguments, working directory, and the full run
environment. A client can then see what a run will actually execute
and in which environment (for example whether Qt's bin is on PATH)
without extra round-trips.

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

Git commit 3259f73e1a839ca47467aa1583b2e0c335b4874a by hjk on 04/08/2026 at 06:28..
ProjectExplorer: Add an MCP tool to create a build configuration

The MCP server could list, switch and query build configurations, but
not create one. A CMake project on a freshly set up kit typically has
only a Debug configuration, so there was no way to build or run in
Release over MCP.

Add add_build_config: it creates a build configuration for the active
project's kit from the requested build type (matched against the kit's
available build types), names it, and makes it active unless set_active
is false. On a type mismatch the error lists the available types.

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

Git commit 06d41fb49cb2ea863e71d53006c022bb080c009e by hjk on 04/08/2026 at 06:28..
ProjectExplorer: Report a kit's devices in the MCP tools

Kit entries did not say which device a kit builds for or runs on, so
there was no way to tell which kits belong to a device.

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

Git commit ab80f39b810f202f495c08d3cff10f45d0a74e82 by hjk on 04/08/2026 at 06:28..
ProjectExplorer: Add an MCP tool to remove kits

detect_device_tools creates a kit per toolchain it finds on a device,
and nothing could remove one again, so kits accumulated with no way to
clean up after a device.

remove_kits takes kit ids or display names. It refuses SDK-provided
kits, as the Kits preferences page does, and refuses a display name
that several kits share, since the removal cannot be undone.

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

Git commit 345e1732aa19b0d3ab992970722dc1a2fd65890d by hjk on 04/08/2026 at 06:28..
ProjectExplorer: Respect the Devices page rules in remove_device

That page only offers to remove an auto-detected device while it is
disconnected, which is what keeps the desktop device from being
removed. The MCP tool had no such check.

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

Git commit 190a74ee8ff6f1f30614062d39e3e3d334a99caa by hjk on 04/08/2026 at 06:29..
CMakeProjectManager: Factor out the MCP CMake tool plumbing

Resolving the project to act on and reporting the verdict of a CMake
run are about to be needed by a second tool. No behavior change.

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

Git commit 57a8b1beac3a15142c0d3e20bd3b96b04158ae8d by hjk on 04/08/2026 at 06:30..
CMakeProjectManager: Add an MCP tool to reset the configuration

A build directory whose first configure failed keeps a CMakeCache
without the initial arguments, and re-running CMake reuses that cache,
so the project cannot be brought back over MCP - the recovery, Build >
Clear CMake Configuration, had no tool.

reset_cmake_configuration clears the active build configuration and,
unless reconfigure is false, configures it again from scratch. Like the
action, it refuses to run while the project is building.

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

Git commit 9e6dac5ff80fa7da2369b0463609069631fa05dd by hjk on 04/08/2026 at 06:30..
CMakeProjectManager: Don't report a failed CMake run as succeeded

When CMake fails while the build directory still holds the file-api
reply of an earlier successful run, Creator parses that stale data and
reports a successful parse, so the MCP reconfigure tool answered
succeeded: true next to the errors it had just produced - and its output
schema tells callers to trust that field over the issues array.

Take the build system's error into account, which is set just before the
parse finishes, and name it in the summary.

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

Git commit 6c236ffb497541b5e8a2fc0254c6208f201610e4 by hjk on 04/08/2026 at 06:30..
Process stub: Suspend the inferior on FreeBSD for debugging

In "Run in Terminal" debug mode the stub must suspend the inferior so
the debugger can attach to it. That was implemented for Windows
(CREATE_SUSPENDED), macOS (raise(SIGSTOP)) and Linux (PTRACE_TRACEME),
but there was no path for FreeBSD, so the inferior ran unsuspended and
gdb's attach raced it: the launch hung in "Launching Debugger" and
timed out (non-terminal debugging was unaffected).

FreeBSD can use the same approach as macOS: the child raises SIGSTOP,
and since QProcess does not report the pid when the child stops before
execve, the pid is passed via shared memory and a poll timer. Route
FreeBSD through that code with a shared STUB_SIGSTOP_SUSPEND guard.

Assisted-by: Claude Code
Fixes: QTCREATORBUG-14894
Change-Id: I374d7db69fc965e03a05877825e0e8585536ba85
Reviewed-by: Cristian Adam <[email protected]>
https://invent.kde.org/qt/qt-creator/qt-creator/-/commit/6c236ffb497541b5e8a2fc0254c6208f201610e4

Git commit b542f77d9cd221e8d8beef04958182862a63ee49 by hjk on 04/08/2026 at 06:30..
Debugger: Do not steal terminal focus on transient startup stop

When debugging a console application "in terminal", the inferior is
launched suspended by the process stub, so the debugger sees an initial
spontaneous stop right after start-up. notifyInferiorSpontaneousStop()
then raised Qt Creator to the foreground (RaiseOnInterrupt), stealing
focus from the just-opened terminal before immediately continuing the
inferior.

Defer the raise by one event loop cycle and skip it if the engine has
meanwhile left InferiorStopOk. A genuine stop (breakpoint, signal, user
interrupt) stays stopped and still raises; a transient start-up stop
that is immediately continued no longer does.

Fixes: QTCREATORBUG-15818
Assisted-by: Claude Code
Change-Id: I4853c0d1e0b3caf90189a246a70b7c56c49fc3b7
Reviewed-by: Marcus Tillmanns <[email protected]>
https://invent.kde.org/qt/qt-creator/qt-creator/-/commit/b542f77d9cd221e8d8beef04958182862a63ee49

Git commit 8b1c939f7cad76e8234efe2b80355754ab405d70 by hjk on 04/08/2026 at 06:30..
Valgrind: Note filtered issues in the Memcheck status message

The "N issues were found" message counted all issues from the source
model, while the result view shows only the ones passing the current
filter (external-issue and error-kind filters). With the default "Show
Project Costs Only" filter this could report issues while the table
stayed empty, with no hint why.

Append the number of issues hidden by the filter, mirroring the Clang
static analyzer's "(M suppressed)" message.

Fixes: QTCREATORBUG-16390
Assisted-by: Claude Code
Change-Id: Ib861875358c8f9efca0e19a089b7baddc523ede9
Reviewed-by: Cristian Adam <[email protected]>
https://invent.kde.org/qt/qt-creator/qt-creator/-/commit/8b1c939f7cad76e8234efe2b80355754ab405d70

Git commit de858cafbb0d83e2527ab07a5b4ea2a1349a76f9 by hjk on 04/08/2026 at 06:30..
FakeVim: Fix :map dropping options after <silent>

The option loop left no way back after eating "<silent>", so any option
behind it stayed in the argument string. With the usual order in
"nnoremap <silent> <expr> lhs rhs" the "<expr>" was never recognized and
became the left-hand side of the mapping.

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

Git commit b312cb0334942002a3d0e4dbee309a3d3bce0cff by hjk on 04/08/2026 at 06:31..
FakeVim: Make x-mode mappings apply in visual mode

":xmap" and friends registered under mode code 'x', which
currentModeCode() never returns, so the mappings were never found.
Vim's "x" is Visual mode and "v" is Visual plus Select mode; there is no
Select mode here, so both have to use the code a visual selection
reports.

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

Git commit e71cea4f26181ebe6f7515c223938e4e3651d860 by hjk on 04/08/2026 at 06:31..
FakeVim: Support \zs and \ze in patterns

"\zs" and "\ze" move the start and end of what a pattern reports as the
match; they translate to "\K" and to a lookahead around the rest.

A trailing "[" opens no character class, so pass it on escaped: Vim
matches it literally, while the bare bracket made the translated pattern
invalid and it then matched nothing.

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

Git commit fc98f879d8149fcc2d23d3bc9771bdce461e3309 by hjk on 04/08/2026 at 06:31..
FakeVim: Accept every documented ex-command abbreviation

Vim takes any prefix of a command name down to a documented minimum, so
":source" is also ":so", ":sou", ":sour" and ":sourc". The checks here
compared against the shortest and the longest spelling only and rejected
everything between. ExCommand::matches() already expresses the rule.

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

Git commit 70c02e634e18bce236a7dae56d1ccd2779b22a57 by hjk on 04/08/2026 at 06:31..
FakeVim: Grow the runtime surface Vim9 plugins expect

Enough for Vim 9.1's bundled comment.vim to load and run unchanged:
"gc{motion}", "gcc", "gC" and the visual-mode "gc" toggle comments, and
toggling twice restores the text.

Vim9 parsing: ":def" nests, since a nested one is defined when the outer
function runs and the body has to be collected up to the matching end.
"...name: type" binds the extra arguments under that name. A statement
may be a bare call to a lowercase function such as add(), so only the
statement keywords are excluded now. What follows a command modifier is
a statement too and is rewritten the same way.

New commands and builtins: the mark- and jump-preserving modifiers
(":noautocmd", ":keepjumps" and friends), "import autoload" resolved
against the autoload directory next to the importing script, a guard
against a script sourcing itself (which recursed until the stack was
gone), expand() with <stack>/<sfile>/<cword>, escape(), indent(),
setline() taking a list, a bare scope name as a dictionary so
get(g:, ...) works, and the 'commentstring' and 'modifiable' options.

expand('<stack>') has to report a name that can be called again: plugins
pull one out of it to install their own 'operatorfunc'.

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

Git commit 76f595be207ad8e82daea0810db25b13e505bb1e by hjk on 04/08/2026 at 06:31..
FakeVim: Keep Vimscript session state across handlers

Functions, user commands, autocommands, module exports and the g:/s:/v:
variables belong to the session, not to a buffer, so they move to the
shared state. The vimrc is read into a throwaway handler, which meant a
plugin's functions died with it while the mappings it had installed
lived on and then could not find them. b:/w:/t: stay with the handler.

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

Git commit c42134ea8b40f32eb072002adc62722605fa7db8 by hjk on 04/08/2026 at 06:31..
FakeVim: Derive 'commentstring' from the file type

The option held one global value, so a script commenting a .pro or .py
file inserted "//". It is now buffer-local as in Vim and resolved from
the file type set with ":setf", falling back to the file name extension
and then to the configured default. An explicit ":set commentstring="
still wins and stays with its buffer.

"gc" reads the same value instead of keeping a second table of comment
leaders, and honors a trailing part, so it comments an HTML file with
"<!-- ... -->" rather than "//".

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

Git commit e0713bc8417a4efff57c511a7e3dcfd80a0b71f0 by hjk on 04/08/2026 at 06:31..
FakeVim: Detect the file type of an opened buffer

The buffer read autocommands were accepted by ":autocmd" but never
fired, so the usual "autocmd BufRead,BufNewFile *.py setf python" never
ran and 'filetype' stayed empty unless someone typed ":setf". Fire
BufReadPost or BufNewFile when an editor opens, and BufEnter/BufLeave
when one becomes or stops being current. "BufRead" and "BufReadPost"
name the same event and now match each other.

The type itself comes from Qt Creator's MIME database rather than from a
copy of Vim's filetype.vim: it already matches file names and file
contents to pick an editor and a highlighter, which also settles cases
an extension cannot, such as CMakeLists.txt. Only a rule that no read
autocommand claimed is filled in, so a vimrc keeps the last word.

'filetype' is readable as &ft now, which scripts test to decide what a
buffer holds, and 'commentstring' follows the detected type.

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

Git commit 91197506bc1b371e049caed4298e9165f585e8ce by hjk on 04/08/2026 at 06:31..
FakeVim: Follow Vim's did_filetype() rule in :setf

":setf" claimed a buffer unconditionally, so with two detection rules
matching it the last one won instead of the first. It now sets the type
only when did_filetype() is false, which Vim defines as "the FileType
event has fired for this buffer while autocommands are running": the
first rule to recognize a buffer wins, reading it again starts over, and
an interactive ":setf" still applies because no autocommand is running.
"setf FALLBACK {name}" marks a guess that a later ":setf" may replace,
which is how the type derived from the MIME database is installed.

did_filetype() is available to scripts, since detection scripts test it
before doing work.

The FileType event may now fire from within another autocommand, so a
":setf" in a buffer read rule reaches the FileType rules as it does in
Vim. Deeper chains are still cut off. ":noautocmd" no longer shares its
flag with the nesting guard, which had made it mean two things at once.

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

Git commit 91229d1f6aa6f47eb5d333c9ef910c8542603093 by hjk on 04/08/2026 at 06:31..
FakeVim: Obey modelines

A "vim:" line in the first or last lines of a file was ignored, so a
file could not state how it wants to be edited. Both documented forms
are read, the one whose options run to the end of the line and the
"set ... :" one that fits inside a comment, along with the version
requirements ("vim>702:") and the rule that the marker has to start a
line or follow a blank so that a word ending in "vim:" is not one.

'modeline' and 'modelines' control it, as in Vim.

Modelines are applied after the file type has been established, so a
file saying "ft=python" wins over what was detected for it.

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

Git commit 92007fa1180cd5a47994915dca33ec0b253e2721 by hjk on 04/08/2026 at 11:51..
CppEditor: Open include hierarchy for the #include under the cursor

Open Include Hierarchy always inspected the current file. When the
cursor is on a #include line, inspect the included file instead, so it
can be used to find which files include a given header (directly or
indirectly) via the "Included by" branch.

Fixes: QTCREATORBUG-2311
Assisted-by: Claude Code
Change-Id: Ib6d1c6477b2941cd7deda3283d894419d0ad74f3
Reviewed-by: Christian Kandeler <[email protected]>
https://invent.kde.org/qt/qt-creator/qt-creator/-/commit/92007fa1180cd5a47994915dca33ec0b253e2721