Commit Graph
100 Commits
Author SHA1 Message Date
1grzyb1 0e1dacf287 Preparation to 2.48.0 release 2026-10-30 11:20:04 +01:00
1grzyb1 ebf051d4b5 Sync the release changelog onto the current master
The sync step checked out the master the build started from. Fixes merged
on master while the tests ran made that master stale, so the push of the
"Preparation to X release" commit was rejected as non-fast-forward. The
step only warns about it, so the build stayed green while master missed
the released changelog section and What's New page, and the What's New
GitHub Pages site was not published. This happened for 2.48.0.
2026-10-30 11:20:04 +01:00
1grzyb1 c6167f8c65 VIM-4365 pass Shift+Enter to AIR in chat
IdeaVim took Shift+Enter in the AIR prompt, so AIR's new line action never
ran and Insert mode couldn't break a line. Instead of special-casing single
keys, hand any key bound to an `Air.Chat.Prompt.*` action in the active
keymap to AIR, which also covers Enter, Ctrl+Enter and user rebindings.
2026-10-30 10:27:00 +01:00
1grzyb1 04b3f09145 VIM-4365 run with air ij run configuration 2026-10-30 10:27:00 +01:00
1grzyb1 c1b09f2d55 VIM-4365 don't show line number in chat window 2026-10-30 10:27:00 +01:00
1grzyb1 8004f7fa9d VIM-4365 pass enter to AIR in chat 2026-10-30 10:27:00 +01:00
grzybek bdbb3c424e VIM-4338 fis dot scramble after autocomplete
Action listener was registered project wide so it was getting events from multiple projects which scrambled . repeat eventually
2026-10-29 12:15:56 +01:00
1grzyb1 b9d71811dc VIM-3968 Run Rider backend actions with the asynchronous update
Rider gets the state of a backend action (e.g. MoveElementRight or ReformatCode for C#) from the backend only for a real hotkey: when the last shortcut seen by the key dispatcher belongs to the action, it wraps the action into a composite that asks the backend. The synchronous tryToExecute goes through the same hotkey update but never gets there. After `:action` the last shortcut is Enter, so the action isn't wrapped, and after an `<Action>` mapping it is wrapped, but tryToExecuteNow updates the original action instead of the wrapped one. Either way only the frontend answers, it reports the action as disabled, and tryToExecute rejects it. The asynchronous tryToExecute updates the action the way a menu does, with an asynchronous request to the backend, so it gets the real state without blocking the EDT. The action then runs later, so executeAction can't tell whether it succeeded, but the backend's changes arrive later anyway.

The new Rider tests also cover the action cases fixed earlier (VIM-3376, VIM-3826, VIM-3861, VIM-3881) that had no Rider test. ReformatCode from a mapping no longer freezes Rider, so its disabled test is replaced by RiderReformatCodeTest, which runs in its own Rider in case it does again.
2026-10-29 10:02:09 +01:00
1grzyb1 0640b0a719 VIM-4336 Wait for the backend after Rider's composite hotkey action
For a hotkey, Rider replaces its backend actions with a single RiderBackendCompositeAction, so IdeaVim's action listener sees the composite and not e.g. CommentByLineComment. The composite doesn't implement PossiblyDelegatingToBackendAction, so IdeaVim normalized the caret right away, before the backend applied the comment. The frontend took that caret move for a user change made while the request was pending and replayed it on top of the backend's changes, which put the caret back on the line just commented. The unit test didn't catch it because it simulates an action with the interface. The composite is internal to Rider and not available at compile time, so it's recognized by its class name, the same way the interface is.
2026-10-29 10:02:09 +01:00
Grzybek 39199be1b5 Merge pull request #2162 from JetBrains/VIM-4276/docs
VIM-4276 Document VimEverywhere shortcuts and tool window navigation
2026-10-28 10:34:12 +01:00
1grzyb1andClaude Opus 5.5 0ee22d0efe VIM-4276 Document VimEverywhere shortcuts and tool window navigation
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 10:19:40 +01:00
1grzyb1andClaude Opus 5.5 5c3a80654d Put :help, action ID completion and AI chat editors first in What's New
Also record release commit 38212a243 the page describes, which the
workflow failed to push.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 09:42:54 +01:00
Grzybek cdaf452280 Merge pull request #2161 from JetBrains/fix/whatsnew-record-push
Fix pushing the recorded release commit in Prepare What's New
2026-10-27 12:28:47 +01:00
1grzyb1andClaude Opus 5.5 c9bbb03f0c Push the recorded release commit with the workflow token
claude-code-action sets origin to its GitHub App token and revokes it at
the end of its step, so the following push in "Record the release commit
the page describes" failed with "Invalid username or token".

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 12:12:27 +01:00
Grzybek 14b881fd05 Merge pull request #2159 from JetBrains/VIM-4350/prompt_injection
Fix(VIM-4350): Harden Claude and YouTrack GitHub workflows
2026-10-27 12:06:30 +01:00
1grzyb1andClaude Opus 5.5 ac56c4b379 Fix(VIM-4350): Limit the YouTrack Area Claude run to its YouTrack scripts
The run reads untrusted ticket text, and `Bash(npx tsx:*)` allowed
`npx tsx -e` with YOUTRACK_TOKEN and the Anthropic key in the environment.

- Allow only the youtrack-cli scripts the prompt uses.
- Force every comment from this run to be private, so it can't publish
  anything it read.
- Pass the dispatch input via env instead of interpolating it into `run:`.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 11:49:17 +01:00
1grzyb1andClaude Opus 5.5 a594a245c8 Fix(VIM-4350): Take GitHub write access away from the changelog Claude run
Claude reads untrusted text (PR comments, YouTrack tickets) while updating
the changelog, and its PRs were auto-merged, so a prompt injection could
reach master or leak secrets through `gh`.

- Claude can only edit CHANGES.md and use read-only git/gh commands; the
  push token is not persisted in .git/config.
- A separate step opens the PR with GITHUB_TOKEN only if CHANGES.md is the
  only changed file, dispatches PR verification for it and enables
  auto-merge.
- Remove mergeClaudeChangelogPR.yml, Claude no longer opens these PRs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 11:49:17 +01:00
1grzyb1andClaude Opus 5.5 186c2bf7f5 Fix(VIM-4350): Prevent shell injection and unchecked changelog auto-merge
- youtrackAutoAnalysis: pass step outputs (ticket summary, Claude-generated
  statuses and attention reasons) to run scripts via env instead of
  interpolating them into the script, so a crafted ticket summary can't
  execute shell commands on the runner.
- mergeClaudeChangelogPR: auto-merge only PRs that change CHANGES.md alone,
  and disable auto-merge if a later push touches other files.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 11:49:16 +01:00
1grzyb1andClaude Opus 5.5 3580099c61 Fix(VIM-4350): Restrict What's New Claude workflow to maintainers and allowed files
Anyone could open a fork PR with the What's New title and inject a prompt
via a comment into a Claude run with repository write access.

- Run only for OWNER/MEMBER/COLLABORATOR comments, and verify the PR head is
  JetBrains/ideavim:whatsnew-tbr and the commenter has write access.
- Claude can only edit whatsnew-tbr.html and CHANGES.md and has no
  commit/push access; the push token is not persisted in .git/config.
- A separate step pushes the edits only if no other files changed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 11:49:16 +01:00
1grzyb1 27aabf8301 VIM-4329 Fix k movement scrolling with so=9999
The sticky lines panel's height depends on the scroll position, so an exact middle doesn't always exist, and the old tolerance range let the previous position count as centred after every other k; instead, try the middle for each panel height we find and keep the closest position, staying put on a tie unless the caret moved to another line, so moves always scroll but typing never scrolls back and forth.
2026-10-27 11:40:44 +01:00
1grzyb1 e90c7779cc VIM-4346 Read Surround command asynchronously 2026-10-27 09:21:04 +01:00
1grzyb1 029be52277 Fix(VIM-2796): Finish the surround tag prompt with Enter
ModalEntry now reads keys before the keymap, because pressed Enter used to run the IdeaVim shortcut first and the tag regex required a closing `>`.
2026-10-27 09:21:04 +01:00
1grzyb1 d3a8a00223 VIM-4346 CommandLinePreview: Update preview logic
Extract command line preview logic
2026-10-27 09:21:04 +01:00
1grzyb1 87bd828e2d VIM-4346 new API to open ex entry panel
Now entry panel knows what type of action opened it and can perofrm opartions according to it's type
2026-10-27 09:21:04 +01:00
1grzyb1 0d4ca1d6f0 VIM-4346 don't trigger incsearch from input entry panel
When entry panel was exectued as inputStrin to receive user input it performed incsearch
2026-10-27 09:21:04 +01:00
1grzyb1 ea8e3bd1ae VIM-4349 parse ' and ` keycodes in mappings 2026-10-26 12:57:36 +01:00
1grzyb1 37cac8d930 VIM-2342 Don't open Ggrep matches twice in symlinked repositories
git rev-parse --show-toplevel resolves symlinks, so in /tmp on macOS matches pointed to /private/tmp and opened a second tab for files that were already open
2026-10-26 09:41:18 +01:00
1grzyb1 238a696594 VIM-2342 Document fugitive extension and quickfix commands 2026-10-26 09:41:18 +01:00
1grzyb1 94dc275719 VIM-2342 Allow cancelling a slow Ggrep
Ggrep shows a titled progress dialog, and cancelling it kills the git process instead of leaving it running
2026-10-26 09:41:18 +01:00
1grzyb1 8d9a16d995 VIM-2342 Add cclose command 2026-10-26 09:41:18 +01:00
1grzyb1 97ae43ee55 VIM-2342 Add copen command
Shows the quickfix list in a read-only window that follows the current item. Enter on a line jumps to that item in the window copen was run from
2026-10-26 09:41:18 +01:00
1grzyb1 712adc3093 VIM-2342 Implement cfirst and clast commands 2026-10-26 09:41:18 +01:00
1grzyb1 96d5ca8388 VIM-2342 Implement cpfile command 2026-10-26 09:41:18 +01:00
1grzyb1 3906c8f38f VIM-2342 Implement cnfile command 2026-10-26 09:41:18 +01:00
1grzyb1 57a6952543 VIM-2342 Keep quickfix list per project 2026-10-26 09:41:18 +01:00
1grzyb1 38926e7a3f VIM-2342 Remove unnecessary git version process call 2026-10-26 09:41:18 +01:00
1grzyb1 f1a8ae4789 VIM-2342 Add cprev command 2026-10-26 09:41:18 +01:00
1grzyb1 0f2d81233d VIM-2342 Add cnext to jump to next item in quickfix list
Ggrep works based on quickfix list and we didn't have implementation of that so we need to support it first
2026-10-26 09:41:18 +01:00
1grzyb1 78b82c395f VIM-2342 Add fugitive extension with grep command 2026-10-26 09:41:18 +01:00
1grzyb1andClaude Opus 5.5 27befce788 Drop dependencies on the removed Rhizome kernel modules
IJPL-257728 removed intellij.platform.kernel, kernel.impl and kernel.backend
from the platform. On builds from master, IdeaVIM.ideavim-backend and both
bookmark backend modules declared a dependency on intellij.platform.kernel.backend,
so the platform skipped them silently. None of the remoteApiProvider extensions
got registered, and Commentary, Format and the other RPC calls failed with
"No remote API found".

IdeaVim doesn't use any class from these modules. The backend-only loading in
split mode is still provided by the dependency on intellij.platform.backend.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 11:11:46 +02:00
1grzyb1 0473fe0479 fix(VIM-2200): Keep the output of a command run from the command-line window
The platform reports the editor switch from closing the cmdwin only after the command has run, so redrawing for it closed the output the command had just shown.
2026-10-21 12:01:59 +02:00
1grzyb1 8a183c5159 VIM-2200 Open the command-line window with <C-F> from the command line
Editing a long command or search pattern is easier with Normal mode motions than in the one-line command line.
2026-10-21 12:01:59 +02:00
1grzyb1 516d384836 VIM-4269 speed search on popups with nerdtree
`/` action was running intelij SpeedSearch which didin;t work on popups. to make it work there also we find speedsearch component and activate this one directly
2026-10-20 09:56:52 +00:00
grzybek 1be3fc7af0 VIM-3113 support autoselect option
Add possibility to disable pushing to primary register on selction change. Needed to disable platform primary publishing so mouse selection won't publish too.
2026-10-20 08:25:04 +00:00
grzybek f03d41e2fc VIM-1309 Don't move caret on middle paste in x11 2026-10-20 07:32:23 +00:00
1grzyb1 d22e60e129 VIM-2374 I and A move to begginig/end of multi selection 2026-10-19 10:15:46 +00:00
1grzyb1 ee84325048 VIM-4329 restructure scrolling the caret into view
Decide between centring, scrolling up and scrolling down in one place, and keep how we measure the window, in lines or in pixels when block inlays take up most of it, in WindowLines
2026-10-16 11:58:14 +02:00
1grzyb1 1d78f779b2 VIM-4329 convert EditorHelper to Kotlin
Move the existing EditorHelper.kt top level functions to EditorHelperRt.kt, matching its JVM name, and group the scrolling code that adjusts for the sticky lines panel
2026-10-16 11:58:14 +02:00
1grzyb1 dbcb2187e6 VIM-3301 don't hide caret under sticky lines when scrolling up
Scrolling a line to the top of the screen can make the sticky lines panel taller, which hides the line. Scroll again for the new panel
2026-10-16 11:58:14 +02:00
1grzyb1 6a8d26d6b5 VIM-4329 keep scrolloff at top of screen with block inlays
When block inlays made the line count unreliable, scrolloff was only applied at the bottom of the screen, so the caret could reach the top line
2026-10-16 11:58:14 +02:00
1grzyb1 0784623421 VIM-4329 test scrolling with block inlays taking most of the screen
Cover scrolling up, down and below the screen when block inlays make the visible line count unreliable
2026-10-16 11:58:14 +02:00
1grzyb1 99ff550695 VIM-4329 fix scrolloff=999 behavior with cc
Don't scroll when moving cursor on cc
2026-10-16 11:58:14 +02:00
1grzyb1 44e38b0c5f VIM-4329 fix scrolloff=999 behavior with sticky lines 2026-10-16 11:58:14 +02:00
1grzyb1 c259d64079 VIM-4329 fix scrolloff=999 behavior with doc comments 2026-10-16 11:58:14 +02:00
1grzyb1andClaude Opus 5.5 f4e6a1727c VIM-4228 Fix Rider tests compilation on 2025.3
The driver SDK's SelectionModel has no getSelectedText(Boolean) in 2025.3,
which broke the compilation of the ui-rd-tests module in the 2025.3 and
nvim jobs. Call it through our own remote interface instead.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 15:48:22 +02:00
1grzyb1 f1351f0efe VIM-4343 map key events as keystrokes
Other components were taking mapped actions as keystrokes before our dispatcher so we have to register them as keystrokes also
2026-10-15 15:24:59 +02:00
1grzyb1 a24e2939b8 VIM-4343 Don't add esc to all mappings 2026-10-15 15:24:59 +02:00
1grzyb1 4328ec17da VIM-4343 Don't register shortcuts on modal contexts 2026-10-15 15:24:59 +02:00
1grzyb1 b8f9ad7892 VIM-4228 Postpone caret movement after rider action 2026-10-14 16:28:42 +02:00
1grzyb1 0efcd70c6f VIM-4228 Move Rider tests to teamcity 2026-10-14 16:28:42 +02:00
1grzyb1 a00e382bdf VIM-4228 Refactor rider tests to use RemoteRobot 2026-10-14 16:28:42 +02:00
1grzyb1 713a61e362 Redraw panel only on current document changes
Without that even some random intelij change of gitignroe could redraw our panel what made Large file tests flaky
2026-10-14 11:50:01 +02:00
1grzyb1 398b161704 Wait for rpc modal input before next keystrokes
When rpc call was made and it showed modal dialog keystroke were lost during that time
2026-10-13 15:41:38 +02:00
1grzyb1 2d72b1f083 Restart clear output panel timer on change
Each n after search didn't restart timer so after 10s output panel was closed. It broke new Large file tests this way.
2026-10-13 15:41:38 +02:00
1grzyb1 36ef5574bd Mae sure C-B is handled by ide in large file tests 2026-10-13 15:41:38 +02:00
1grzyb1 06778f5380 Generate ideavim_extensions.json only in root module 2026-10-13 12:16:43 +02:00
1grzyb1 738b73417f Load intellij.platform.rpc dependency from an optional module
intellij.platform.rpc doesn't exist in 2025.3, is embedded in the core
classloader in 2026.1-2026.2 and is a standalone module since 2026.3.
Declaring it as a dependency of the embedded ideavim-common module disables
the whole plugin on 2025.3 and breaks the 2025.3 build.

Move the dependency to a new optional ideavim-rpc module that provides
VimRemoteApiResolver via the IdeaVIM.remoteApiResolver extension point.
When the module is skipped (2025.3), fall back to calling
RemoteApiProviderService from the core classloader.
2026-10-13 12:16:43 +02:00
1grzyb1 81ad363113 VIM-4342 publish metrics for large file tests 2026-10-13 10:37:34 +02:00
1grzyb1 bd0f361afa VIM-4341 Run search count on background thread
For large files running search count blocked edt which caused IDE freezes.
Now we first try to quickly show coutn and if we are not able in given threshold move it to other thread and later on update UI accordingly.
Additionally added tests for large files
2026-10-13 10:37:34 +02:00
1grzyb1 9e142d4401 VIM-1975 implement clever-f extension 2026-10-12 12:06:01 +02:00
1grzyb1 19925409d5 VIM-4340 add standalone rpc module 2026-10-12 10:28:10 +02:00
grzybek 55549efd72 Remove in in notification massage 2026-10-12 08:55:50 +02:00
1grzyb1 21ffd15bdb Add missing function command description 2026-10-09 11:40:31 +02:00
1grzyb1 5fd38b21b3 Improve release process
Our pipeline could mark issues on youtrack as fixed even if they were not in release branch.
Added single script for all pipelines to deremine which commits enetered given release so changelog, whats new and release itself are using exactly same logic
2026-10-09 10:13:18 +02:00
1grzyb1 1e3c671c0c VIM-2524 calculate indent after cc
set proper indent after performing cc. previously we were just using that was already set not from code style
2026-10-09 09:49:32 +02:00
1grzyb1 ca384caae4 VIM-2293 Add visual-multi documentation 2026-10-08 11:25:42 +02:00
1grzyb1 f3003d92ef VIM-2293 Align cursors 2026-10-08 11:25:42 +02:00
1grzyb1 c898281cd9 VIM-2293 Case conversion menu 2026-10-08 11:25:42 +02:00
1grzyb1 e084c387fa VIM-2293 Quit session after leaving insert mode 2026-10-08 11:25:42 +02:00
1grzyb1 52b33469ec VIM-2293 Reselect regions of the last session 2026-10-08 11:25:42 +02:00
1grzyb1 4bc3e56898 VIM-2293 Insert before and after regions 2026-10-08 11:25:42 +02:00
1grzyb1 38489c3177 VIM-2293 Run macro at cursors 2026-10-08 11:25:42 +02:00
1grzyb1 807aa55dcc VIM-2293 Run normal command at cursors 2026-10-08 11:25:42 +02:00
1grzyb1 9062301f21 VIM-2293 Test paste at cursors 2026-10-08 11:25:42 +02:00
1grzyb1 b6e2bc32a9 VIM-2293 Add switch mode <Tab> 2026-10-08 11:25:42 +02:00
1grzyb1 3b92308f9c VIM-2293 Go to next/prev caret 2026-10-08 11:25:42 +02:00
1grzyb1 2295e96509 VIM-2293 Find Prev occurrence 2026-10-08 11:25:42 +02:00
1grzyb1 e4bccc976e VIM-2293 Visual cursors actions 2026-10-08 11:25:42 +02:00
1grzyb1 ae6198400b VIM-2293 C-Up C-Down for line navigation 2026-10-08 11:25:42 +02:00
1grzyb1 b3413f5924 VIM-2293 accepts count in handlers 2026-10-08 11:25:42 +02:00
1grzyb1 5ea29e1a6e VIM-2293 add VM_leader option 2026-10-08 11:25:42 +02:00
1grzyb1 92af7a9b58 VIM-2293 Cleanup visual multi code 2026-10-08 11:25:42 +02:00
1grzyb1 7b9cf20a19 VIM-2293 Add VM session
visual multi keeps track if it has active session and depending on that different mappins are performed
2026-10-08 11:25:42 +02:00
1grzyb1 9ed7a53709 VIM-2293 Add ignore case option 2026-10-08 11:25:42 +02:00
1grzyb1 fd310620e7 VIM-2293 Add VM_maps variable for mapping 2026-10-08 11:25:42 +02:00
1grzyb1 30c876dd59 VIM-2293 Add vim visual multiple extension
Extracted base class to nto duplicated code in both multi cursor extensions. new one has different mappings for some actions
2026-10-08 11:25:42 +02:00
1grzyb1 37aeff64aa VIM-2372 Add missing mappings for navigation keys
Allow users to map missing nerdtree keys like j or k
2026-10-07 09:13:53 +02:00
1grzyb1 543d577bfa VIM-1503 don't type dead keys
Composed text from dead keys and input methods was inserted into the document and replaced the Visual selection before IdeaVim saw the key, so we now drop it in Normal, Visual and Operator-pending modes and only let the committed character through, like Vim in a terminal.
2026-10-06 12:20:18 +02:00
1grzyb1 e0193e6f3b VIM-1948 Scroll caret while mouse scrolling
Move caret while mouse scrolling respecting scrolloff
guarded by ideascrollcursor to preserve old idea behaviour
2026-10-06 12:11:06 +02:00
1grzyb1 f6ee0c0f11 VIM-720 allow pass escape to IDE 2026-10-06 11:46:19 +02:00