1
0
mirror of https://github.com/chylex/IntelliJ-IdeaVim.git synced 2026-05-25 22:52:14 +02:00
Commit Graph

2151 Commits

Author SHA1 Message Date
Alex Plate
3e0b3f5598 Refactor: Migrate MiniAI extension to new VimApi
- Replace old VimExtensionFacade/ExtensionHandler pattern with
  VimApi.textObjects { register(...) } API
- Use Range.Simple from API module instead of internal TextRange
- Remove PortedMiniAiAction, addAction helper, and PLUG/KEY constants
- Simplify findQuoteRange and findBracketRange as VimApi extensions

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-02 17:24:54 +02:00
Alex Plate
5c0ca43cf0 Refactor: Replace FLAG_TEXT_BLOCK with preserveSelectionAnchor property
Replace the FLAG_TEXT_BLOCK command flag with a more descriptive
`preserveSelectionAnchor` property in TextObjectActionHandler.

This property controls what happens when the selection anchor is outside
the target text object range in visual mode:
- true (default): extends selection from current anchor
- false: jumps to select only the text object

Commands like iw/aw preserve anchor (extend), while structural text
objects like i(/a(, i"/a", is/as reset anchor (jump).

Also adds comprehensive documentation with examples to both the
internal handler and the public API.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-02 16:28:22 +02:00
Alex Plate
76bd4387ac Add text object registration API to VimApi
Introduce TextObjectScope for registering custom text objects via the
plugin API. Text objects can be used with operators (d, c, y) or in
visual mode.

- Add TextObjectScope interface with register() method
- Add TextObjectRange sealed interface (CharacterWise/LineWise)
- Implement TextObjectScopeImpl using IdeaVim's internal mechanisms
- Migrate VimTextObjEntireExtension from Java to Kotlin using new API
- Add textObjects() function to VimApi

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-02 10:59:07 +02:00
Alex Plate
82d4ef26e0 Refactor(VIM-2871): Migrate ParagraphMotion to new VimApi
Rewrite ParagraphMotion extension using the new VimApi DSL instead of
the legacy VimExtensionFacade API. The functionality remains identical.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-19 14:14:51 +01:00
Alex Plate
5c143e9951 Fix(VIM-4097): NextOccurrence ignores backslash in selected text
In very nomagic mode (\V), backslash still has special meaning and
introduces escape sequences. When selected text contained a backslash
(e.g., \IntegerField), it was interpreted as a regex atom instead of
a literal character.

The fix escapes backslashes in the search text before building the
pattern, ensuring literal matching.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-19 13:29:35 +01:00
Alex Plate
f3de0d647d Refactor Range.Block API to use start/end offsets instead of array
Change Range.Block from storing an array of per-line ranges to using
simple start/end offsets, matching how block selection is stored
internally in VimBlockSelection. The conversion to per-line ranges
now happens internally in CaretTransactionImpl.

Changes:
- Range.Block now uses (start: Int, end: Int) like Range.Simple
- Add replaceTextBlockwise(Range.Block, String) overload for single text
- Update CaretReadImpl to return block start/end from primary caret
- Add blockToLineRanges() helper in CaretTransactionImpl
- Update ReplaceWithRegisterNewApi to use simplified API
- Add 17 new tests for block selection and replacement

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-12 15:24:57 +02:00
Alex Plate
8ee28a3f10 Update the minimal supported intellij platform version to 253 2025-12-03 12:03:00 +02:00
Alex Plate
5bb4a69d88 Fix(VIM-2143): Add env variables expansion for the source command 2025-11-21 23:48:42 +02:00
Alex Plate
2a56f50767 Fix(VIM-4073): Fix off-by-one error in inline element position check 2025-11-21 23:48:42 +02:00
claude[bot]
50d0422b10 Fix tab selection after :tabclose command
The removeTabAt method was incorrectly passing indexToDelete twice
instead of using the indexToSelect parameter. This caused the wrong
tab to be selected after closing a tab.

The TabCloseCommand calculates which tab should be selected after
deletion (either index + 1 if closing current tab, or keep current
selection), but this information was being ignored.

This fix ensures the correct tab is selected after :tabclose, matching
expected Vim behavior.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-21 15:32:47 +02:00
Alex Plate
b01040fb44 Create a function for warn log with an exception 2025-11-21 15:16:25 +02:00
claude[bot]
16eb382dfa Maintenance: Statistics - Fix thread safety issues
Fix potential ConcurrentModificationException in statistics collection by using thread-safe collections.

Issues found:
- VimscriptState.Util and PluginState.Util used non-thread-safe HashSets
- Collections were modified from EDT/user actions but read from getMetrics()
- IntelliJ's ApplicationUsagesCollector.getMetrics() may be called on background threads
- Race conditions could cause ConcurrentModificationException or data corruption

Changes:
- Replace HashSet with ConcurrentHashMap.newKeySet() for thread-safe add/read operations
- Add @Volatile annotations to boolean flags to ensure visibility across threads
- This ensures safe concurrent access between statistics writers and collectors

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-07 16:36:30 +02:00
Matt Ellis
fc6f2905be Fix is and isnot operators
The parser was treating `is` and `isnot` as identifiers instead of operators
2025-11-07 15:56:39 +02:00
Alex Plate
e71e9714c2 Remove incorrect 3-argument mapping functions from API
The 3-argument mapping functions (e.g., nmap(keys, actionName, action)) had
incorrect implementation that used recursive mappings for both sub-mappings.
Also, this approach makes it impossible to implement other mapping features
such as skipping mapping registration if the mapping is already defined in
.ideavimrc.

A different solution for convenient mapping patterns will be implemented later.

Changes:
- Remove 16 three-argument function declarations from MappingScope interface
- Remove 16 three-argument function implementations from MappingScopeImpl
- Update ReplaceWithRegister plugins to use correct 2-step pattern:
  1. nnoremap("<Plug>...") for non-recursive <Plug> → action
  2. nmap("key", "<Plug>...") for recursive key → <Plug>

Total: 374 lines deleted, 18 lines added
2025-10-27 11:00:03 +02:00
Xinhe Wang
7b561bc275 Support hints for status bar widgets
The project switching and version control menus in the top-left corner remain unavailable due to accessibility issues (failure to implement the Accessible interface, specifically) with the ToolbarComboButton component in the IntelliJ platform.
2025-10-24 15:41:30 +03:00
Xinhe Wang
057a54c63d Specify hint action in HintGenerator instead of actionPerformed 2025-10-24 15:41:30 +03:00
Xinhe Wang
5893718c1b Click target center instead of invoking accessible action if hint is selected 2025-10-24 15:41:30 +03:00
1a8d5e0b66 Improve support for recording macros with code completion (#1332)
Fixes wrong recorded inputs when code completion introduces an import.

Fixes wrong recorded inputs when completing a static member with a partial type name. Example: `WiE.A` -> `WindowEvent.ACTION_EVENT_MASK`

Co-authored-by: Alex Plãte <aleksei.plate@jetbrains.com>
2025-10-24 15:24:43 +03:00
Matt Ellis
b4915d08cd Remove redundant code
The template listener is called immediately for the first variable, which will do the same thing.
2025-10-24 14:29:58 +03:00
Matt Ellis
6b7b18d947 Switch to Normal when accepting an inline rename
The 'idearefactormode' default of Select would leave an inline rename in Insert mode, and hitting Escape to return to Normal frequently cancelled the rename.

Also fixes various edge cases when moving between template variables. Often, this works due to a change in selection, but if there's an empty template variable and no current selection, there's no change in selection, and the mode isn't updated.
2025-10-24 14:29:58 +03:00
Matt Ellis
54cc89f641 Fix missing read action exceptions 2025-10-24 14:29:58 +03:00
Matt Ellis
1048d06586 Remove no longer used 'ideaglobalmode' text 2025-10-24 14:29:58 +03:00
claude[bot]
0bb3524118 Maintenance: IjVimMessages - Fix redundant toString() call and improve null safety
In clearStatusBarMessage(), the mutable 'message' property was being
accessed multiple times without capturing it in a local variable. This
could theoretically cause issues if the property changed between the
null check and the usage. Additionally, calling toString() on a String
is redundant and creates an unnecessary allocation.

Fixed by capturing the message in a local variable at the start of the
method, which allows Kotlin's smart cast to work properly and removes
the need for the redundant toString() call.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-20 08:45:45 +03:00
claude[bot]
244d13a3cc Maintenance: HintGenerator - Fix variable shadowing and remove wildcard import
Fixed a variable shadowing bug in the hint generation logic where the lambda
parameter name 'it' was being shadowed in nested lambda, causing incorrect
logic when checking for hint conflicts. The code now uses explicit parameter
names 'candidateHint' and 'existingHint' to make the logic clear and correct.

Also replaced wildcard import (java.util.*) with explicit import of
WeakHashMap, following project conventions.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-14 10:23:36 +03:00
claude[bot]
9a069e5ef8 Maintenance: ExPanelBorder - Update copyright and remove redundant modifier
- Update copyright year from 2023 to 2025
- Remove redundant 'internal constructor()' modifier (already implied by internal class)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-09 15:51:32 +03:00
Alex Plate
fdcb954e31 Remove the VimSelectionModel as it's not used anywhere 2025-10-09 13:14:49 +02:00
Alex Plate
62de460264 Execute the processor with a proper mode after closing the exEntryPanel
Now, the inputProcessor will be called after all closing is finished. This includes the mode that won't be CMD_LINE anymore, but the one that was used before entering CMD_LINE
2025-10-03 15:33:27 +03:00
Alex Plate
2d02327665 Rename method to get the panel
Kotlin has some hard incremental compilation issues when keeping the old name. No other reason for the rename
2025-10-03 15:32:53 +03:00
Alex Plate
91b5a705d4 Fix issues with null variables during swing initialization 2025-10-03 15:16:04 +03:00
Alex Plate
b7c3bc2875 Migrate ExOutputPanel from Java to Kotlin and update related references 2025-10-03 13:30:20 +03:00
Alex Plate
70922f5fc5 Rename .java to .kt 2025-10-03 13:30:19 +03:00
Alex Plate
13e4d0ce2b Migrate ExTextField from Java to Kotlin and update related references 2025-10-03 13:30:19 +03:00
Alex Plate
3990b6475e Rename .java to .kt 2025-10-03 13:30:19 +03:00
Alex Plate
63c65c8b93 Migrate ExEntryPanel from Java to Kotlin and update related references 2025-10-03 13:30:19 +03:00
Alex Plate
ba2ffa6955 Rename .java to .kt 2025-10-03 13:30:19 +03:00
Alex Plate
411b6eaf48 Refactor ExDocument: Migrate from Java to Kotlin 2025-10-03 13:30:18 +03:00
Alex Plate
b5ecb05382 Rename .java to .kt 2025-10-03 13:30:18 +03:00
Matt Ellis
a916b4de9c Rename Variable to VariableExpression 2025-10-02 17:26:38 +03:00
Matt Ellis
8c9df332aa Add tests for let command with variable lvalue 2025-10-02 17:26:38 +03:00
Xinhe Wang
f25b9fd9bf Fix uppercase keys in NERDTree 2025-10-02 17:12:23 +03:00
Alex Plate
2c6638fe37 Introduce a common getChar implementation in the injector 2025-10-02 17:05:06 +03:00
Matt Ellis
b6ffc7a357 Use injector instead of directly using helper 2025-09-16 16:33:40 +03:00
Matt Ellis
6f259f5207 Extract E474 error message 2025-09-16 16:33:40 +03:00
Matt Ellis
a9e503d13f Extract error messages from code 2025-09-16 16:33:40 +03:00
Matt Ellis
c0f9f0bcbc Rename cryptic error messages to error codes 2025-09-16 16:33:40 +03:00
Matt Ellis
c725447c00 Refactor messages for ActionListCommand 2025-09-16 16:33:40 +03:00
Matt Ellis
920ac0546e Replace custom errors with error codes 2025-09-16 16:33:40 +03:00
Matt Ellis
c5e3c9ccf1 Rename messages to be more consistent 2025-09-16 16:33:40 +03:00
Matt Ellis
5c45c62c5b Rename some error message identifiers 2025-09-16 16:33:40 +03:00
Matt Ellis
e00960ebbc Tidy up host message bundle 2025-09-16 16:33:40 +03:00