Commit Graph
100 Commits
Author SHA1 Message Date
Matt EllisandAlex Pláte fb7a2de07b Encapsulate the command builder's state flag
This also gets rid of BAD_COMMAND, which was set but never checked - the function that set the flag would immediately reset the command builder
2024-08-30 16:36:24 +03:00
Matt EllisandAlex Pláte def9ca479b Ensure builder resets to a root command trie node
Also refactors command nodes a bit for better debug/trace output
2024-08-30 16:36:24 +03:00
Matt EllisandAlex Pláte 0936e0761f Reorder CommandBuilder methods
Try to keep related functions together: awaiting arguments, count, registers, adding action/argument, processing keystrokes, build, reset.
2024-08-30 16:36:24 +03:00
Matt EllisandAlex Pláte 09a335bcfe Start to encapsulate setting command builder state
Also rename `pushCommandPart` and `completeCommandPart`
2024-08-30 16:36:24 +03:00
Matt EllisandAlex Pláte 37b8d69bac Remove unused EMPTY_COMMAND 2024-08-30 16:36:24 +03:00
Matt EllisandAlex Pláte 13308050a8 Remove unnecessary OperatorArguments parameters 2024-08-30 16:36:24 +03:00
Matt EllisandAlex Pláte a1a553ebc9 Deprecate OperatorArguments.mode 2024-08-30 16:36:24 +03:00
Matt EllisandAlex Pláte 5bb0c4f7cb Use editor.mode instead of OperatorArguments.mode
`OperatorArguments.mode` is the mode *before* the command was completed, rather than the current mode, which is non-obvious. E.g. for a command in Insert mode, it will still be Insert, and for a (simple) command in Normal, it will still be Normal. The only difference is that a command such as `dw` would be in Operator-pending before the command is completed. That logic is not required for this method, so it's safe to use the current mode.

This allows us to start to deprecate `OperatorArguments.mode`.
2024-08-30 16:36:24 +03:00
Matt EllisandAlex Pláte da6736f24a Simplify the logic when yanking during delete 2024-08-30 16:36:24 +03:00
Matt EllisandAlex Pláte 4df1ce2ae8 Remove OperatorArguments.mode usage in block insert
`OperatorArguments.mode` is the mode *before* the command is completed, so might be Visual, Operator-pending, Insert, etc. It's not immediately obvious this is the case, so we're going to deprecate `OperatorArguments.mode` to avoid confusion with `editor.mode`.

It's not required for this method because it's only called for Visual-block mode.
2024-08-30 16:36:24 +03:00
Matt EllisandAlex Pláte 00fd4cd491 Handle op-pending for space and backspace 2024-08-30 16:36:24 +03:00
Matt EllisandAlex Pláte d185672e2f Deprecate OperatorArguments.isOperatorPending
Register specific handlers for Operator-pending mode instead of relying on a runtime flag for behaviour. Also refactors and renames some arrow motion handlers.
2024-08-30 16:36:24 +03:00
Matt EllisandAlex Pláte 55fef03a4a Add 'whichwrap' to dictionary 2024-08-30 16:36:24 +03:00
Matt EllisandAlex Pláte 69b3e4f782 Start to refactor OperatorArguments 2024-08-30 16:36:24 +03:00
Matt EllisandAlex Pláte 6be29b0378 Remove KeyHandler.isOperatorPending
It's easier to just look at mode. We don't need the additional check on command builder, because we can't be in OP_PENDING without pushing an operator action to the command builder
2024-08-30 16:36:24 +03:00
Matt EllisandAlex Pláte 9965c863a6 Encapsulate command node state in builder 2024-08-30 16:36:24 +03:00
Matt EllisandAlex Pláte 3f11ae512c Move register pending state to command builder 2024-08-30 16:36:24 +03:00
Matt EllisandAlex Pláte 1c842eb3d8 Avoid exposing misleading count on command builder 2024-08-30 16:36:24 +03:00
Matt EllisandAlex Pláte c7fbce675b Update comment 2024-08-30 16:36:24 +03:00
Matt EllisandAlex Pláte d7e68488c8 Make Command.rawCount immutable 2024-08-30 16:36:24 +03:00
Matt EllisandAlex Pláte 69d13a74e6 Remove unnecessary copy method 2024-08-30 16:36:24 +03:00
Matt EllisandAlex Pláte 5a83df34a7 Replace var properties with read only 2024-08-30 16:36:24 +03:00
Matt EllisandAlex Pláte 0a18c388e0 Simplify CommandBuilder
Fixes selecting last register if multiple registers are used in a command
2024-08-30 16:36:24 +03:00
Matt EllisandAlex Pláte 1a3409e7df Remove count from motion argument
Only Command has a count. The motion argument is now a sealed class hierarchy, and consists only of the motion action and optional argument. This is to reduce confusion over which count to use, and potential incorrect calculation of the count
2024-08-30 16:36:24 +03:00
Matt EllisandAlex Pláte e93db961a0 Wrap offsets argument as an external action 2024-08-30 16:36:24 +03:00
Matt EllisandAlex Pláte 8fd76bd08f Refactor properties for sealed Argument classes 2024-08-30 16:36:24 +03:00
Matt EllisandAlex Pláte 0eea4a5b2c Introduce sealed classes to represent an argument 2024-08-30 16:36:24 +03:00
Matt EllisandAlex Pláte 18a0c533e2 Remove unused OperatedRange type 2024-08-30 16:36:24 +03:00
Matt EllisandAlex Pláte 0bd8d8f4d2 Remove unused digraph command flag 2024-08-30 16:36:24 +03:00
Matt EllisandAlex Pláte dfebe542d8 Fix incsearch highlight in multiple Rider instances
Unlike other IDEs, Rider has multiple client sessions. The IDE itself is the "local" session, while the external ReSharper process is treated as a "frontend" process. The code to get local editors was erroneously getting `ALL` sessions, rather than just `LOCAL` sessions, and assuming that the first was the local session. In Rider, opening three instances would add three additional clients, and that would change the order.

I don't know why I changed `LOCAL` to `ALL` when previously changing this bit of code. AIUI, using `LOCAL` should work fine. If it turns out that CWM or remote dev require `ALL`, please document why.

Fixes VIM-3549
2024-08-05 18:58:45 +03:00
Matt EllisandAlex Pláte 7fde47c08b Update README.md
Added links to POSIX spec
2024-08-01 14:04:58 +03:00
Matt Ellisandlippfi 13426915f4 Remove special case handling for macro recording 2024-07-23 23:08:24 +03:00
Matt Ellisandlippfi d766c3b8ee Add test for nested insert literal action 2024-07-23 23:08:24 +03:00
Matt Ellisandlippfi 844bc01537 Make functions protected 2024-07-23 23:08:24 +03:00
Matt Ellisandlippfi 3d2d32b022 Move special case code to actions 2024-07-23 23:08:24 +03:00
Matt Ellisandlippfi a8677d3dd7 Refactor expected argument type
We no longer need to track a previous fallback argument type, since we don't support nested commands inside a command builder. We can just return the current argument type, or its fallback
2024-07-23 23:08:24 +03:00
Matt Ellisandlippfi 7217fdf734 Remove unused special case check
This was to handle nested commands, e.g. inserting a digraph inside a search `d/foo<C-K>OK<CR>`. The command line now has its own command builder, so this check is no longer needed
2024-07-23 23:08:24 +03:00
Matt Ellisandlippfi 0c867b3869 Make some CommandBuilder properties immutable 2024-07-23 23:08:24 +03:00
Matt Ellisandlippfi b3bcab4336 Refactor DigraphResult to sealed classes 2024-07-23 23:08:24 +03:00
Matt Ellisandlippfi fe1b48a9b3 Refactor digraph prompt handling 2024-07-23 23:08:24 +03:00
Matt Ellisandlippfi b5a0862520 The last command part is the current one 2024-07-23 23:08:24 +03:00
Matt Ellisandlippfi babc1f54e5 Return the last valid register if it exists
The last command part is not guaranteed to be a "select register" part. The user might have selected a register then typed an operator, and we might be waiting for a motion.
2024-07-23 23:08:24 +03:00
Matt Ellisandlippfi 32b910a65b Remove unused functions and properties 2024-07-23 23:08:24 +03:00
Matt EllisandAlex Pláte e07a16863e Show possible IDs based on the action's shortcuts
Fixes VIM-3499
2024-07-12 15:09:02 +03:00
Matt EllisandAlex Pláte afceecadbe Disable the configuration cache for GitHub actions
These tasks should be rewritten to work nicely with Gradle's configuration cache. In the meantime, this allows them to still run as actions.
2024-07-03 19:39:55 +03:00
Matt EllisandAlex Pláte b2a4e59571 Update gradle plugin to beta 8
Fixes an issue with resetting the sandbox after killing the IDE instead of quitting gracefully
2024-07-03 19:39:55 +03:00
Matt EllisandAlex Pláte 6b4e4bacd7 Fix null reference initialising output panel fonts
Fixes VIM-3515
2024-07-03 09:43:48 +03:00
Matt EllisandAlex Pláte e748b7b265 Fix soft wrap inconsistency in run console
IntelliJ has multiple soft wrap options. One for main editors, another for consoles and a third for previews. This can lead to inconsistencies if initialising a console based on a main editor when both have default values, versus the same scenario when the main editor has an explicit value. Furthermore, the run console's soft-wraps toggle button uses the global value, so can get out of sync if the local value is initialised to an explicit value. This change will only copy the soft wrap value over during initialisation for similar editors (main editor, preview, diff) and not for different editors (console).

Fixes VIM-3450
2024-06-28 16:50:25 +03:00
Matt EllisandAlex Pláte c2401ec013 Protect against recursion when opening editors
Fixes VIM-3066
2024-06-28 16:50:25 +03:00
Matt EllisandAlex Pláte 8073d7ecd0 Fix copying 'fileencoding' during window opening
The option should be "local-noglobal", and reset to default. Copying the value could cause the file to be converted immediately, possibly with a warning dialog

Fixes VIM-3467
2024-06-28 16:50:25 +03:00
Matt EllisandAlex Pláte 64f7859ba7 Fix switching to insert for non-file backed diff
Fixes VIM-3442
2024-06-28 16:50:25 +03:00
Matt EllisandAlex Pláte f1b94d7026 Fix regression ignoring case in global command
Regression in new regex engine
2024-06-28 16:50:25 +03:00
Matt EllisandAlex Pláte 79653b6048 Update ex output asserts to remove trailing newline
The trailing newline was never necessary. The text field always stripped it, but the test code didn't. The previous commit pulled this behaviour out of the UI code, so the test code behaves the same as the UI.

This commit fixes all of the tests that were broken by that change. No other logic has been changed.
2024-06-28 16:50:25 +03:00
Matt EllisandAlex Pláte b0e6b72281 Fix regression missing newlines in :print output 2024-06-28 16:50:25 +03:00
Matt EllisandAlex Pláte e6220e5e53 Fix regression clearing output instead of closing 2024-06-28 16:50:25 +03:00
Matt EllisandAlex Pláte 3c064845b1 Fix ex text field handling of zoom and font size
The ex text field and output pane will correctly resize and reposition if visible when the IDE zoom value changes. If the editor's font size is zoomed with the mouse wheel, the panels are hidden, so they do not obscure the font zoom indicator widget

Fixes VIM-3417
2024-06-28 16:50:25 +03:00
Matt EllisandAlex Pláte 750db8e71c Fix 'incsearch'+'wrapscan' at bottom of file
If all results are before the caret, make sure it's still possible to highlight the closest match if 'wrapscan' is enabled

Fixes VIM-3505
2024-06-28 13:55:57 +03:00
Matt EllisandAlex Pláte 135518ee39 Enable Gradle caching
Without this, running tests could take up to 1 minute, mostly spent configuring Gradle. It appears that the extractor transformer would extract the IDE on each run.
2024-06-26 17:52:50 +03:00
Matt EllisandAlex Pláte 58715ecb5f Remove obsolete build feature
Binary releases can be used again now that the latest builds of 241 (2024.1.4) and 242 (EAP) include updates to the Plugin DevKit plugin that can download sources for binary releases. (Binary releases mean the referenced IDE is extracted and run from the same binaries as consumer releases).

This fixes verifyPlugin, which didn't support binary releases being disabled.
2024-06-26 17:52:50 +03:00
Matt EllisandAlex Pláte 0765118ce2 Stop mapping negative 'scrolljump' to IntelliJ setting 2024-06-21 17:22:36 +03:00
Matt EllisandAlex Pláte efd4c7b617 Fix incorrect scrolling due to 'scrolloff' mapping
If IntelliJ's vertical scroll offset is set to the value of the 'scrolloff' option, IntelliJ's own implementation kicks in. This implementation includes virtual space at the bottom of the file in its calculation, scrolling to a different offset to IdeaVim's. In some circumstances, IdeaVim no longer scrolls, so the last line would no longer stick to the bottom of the screen after `G`. In other circumstances, the scroll would correctly reset, but there would be a visible flash as the editor scrolls to the wrong offset and then back, especially when using backspace at the bottom of the file.

Fixes VIM-3474
2024-06-21 17:22:36 +03:00
Matt EllisandAlex Pláte a7814e69de Fix incorrect double registration when opening editors
Ensures that the editor listeners are only registered once when the editor is created. IdeaVim uses two different events to track editor creation, to try to understand how the editor is being created (new window, split, preview, etc.) and this can lead to calling the `EditorListeners.add` method twice. This would create a second `Disposable` and cause handlers to leak. This is most visible when creating the first window and then disabling IdeaVim. This window would still handle drag events like IdeaVim, even changing the caret back to block after the drag finishes.
2024-06-21 13:13:15 +03:00
Matt Ellis 5eb0fae08f Remove explicit since-build from plugin.xml
Let the Gradle plugin manage since-build, based on our target compile version. We leave until-build open ended
2024-06-17 11:18:50 +01:00
Matt Ellis 798d805a0f Provide hint for the CodeQL autobuilder GH action
The autobuilder action can't resolve the 'by project' property to know what our source compatibility is, so we need to give it a hint. If we don't, it will assume the lowest version compatible with the current version of Gradle, which right now is 11.

This value doesn't have to match the `javaVersion` property, but has to allow us to resolve dependencies. Currently, we require at least version 17.
2024-06-17 11:18:50 +01:00
Matt Ellis 0d4ba06e57 Add task to run IDE in split mode 2024-06-17 11:18:43 +01:00
Matt Ellis 4913b13a2d Migrate to IntelliJ Platform Gradle Plugin 2.0
Also updates the GitHub workflows to use the new name for the testIdeUi task, and the TeamCity files to use the new name for the VerifyPlugin task
2024-06-17 11:03:17 +01:00
Matt Ellis b0bab992db Convert settings.gradle to Kotlin 2024-06-17 10:05:45 +01:00
Matt Ellis af5f4227b7 Rename settings.gradle to settings.gradle.kts 2024-06-17 10:05:44 +01:00
Matt Ellis fa6a694ea4 Move some Gradle config blocks around 2024-06-17 10:05:43 +01:00
Matt Ellis c673f5818c Make jumplist project ID key unique
Fixes an issue if multiple projects with the same name are open at the same time
2024-06-14 14:35:48 +01:00
Matt Ellis ec78a87644 Fix recent places adding to jump list
Fixes VIM-3424
2024-06-14 14:29:12 +01:00
Matt Ellis 69d14ddcf5 Implement clearjumps command 2024-06-14 14:29:12 +01:00
Matt Ellis f62819df00 Add generated parser files to gitignore 2024-06-14 14:29:11 +01:00
Matt EllisandAlex Pláte d00bd8bb25 Fix incsearch highlights with operator count
E.g. `2"a3"b4"c5d6/foo` will now highlight the current match correctly
2024-06-03 11:54:48 +03:00
Matt EllisandAlex Pláte a66e44d835 Fix [count]: initial range text in ex field
Fixes regression from changes in ex field handling
2024-06-03 11:54:48 +03:00
Matt EllisandAlex Pláte ce05317634 Maintain Visual when cancelling search entry 2024-06-03 11:54:48 +03:00
Matt EllisandAlex Pláte 33d88d55c9 Remove unused branch in SortCommand
Commands are executed in Normal mode, although there may be multiple carets
2024-06-03 11:54:48 +03:00
Matt EllisandAlex Pláte a31a4a8ca7 Share ex entry set up with filter commands 2024-06-03 11:54:48 +03:00
Matt EllisandAlex Pláte c34d000b91 Reintroduce ProcessGroup.startExEntry
We need to share the implementation between starting an Ex command, and starting a filter command, which is just an Ex command with initial text
2024-06-03 11:54:48 +03:00
Matt EllisandAlex Pláte a2bfe950fa Fix move command moving to current line
Removes a workaround that would break moving a range to the current line because it would always move the caret to the start of the range. Now positions the caret to the start of the selection if there is one. This also means we can remove the SAVE_VISUAL flag from JoinLinesCommand

Fixes VIM-2936
2024-06-03 11:54:48 +03:00
Matt EllisandAlex Pláte b44f40acd6 Fix incorrect output for line() in Normal mode 2024-06-03 11:54:48 +03:00
Matt EllisandAlex Pláte 5169093bbf Clear ex output after assert and fix tests
This ensures that a failing action doesn't pass due to previous state
2024-06-03 11:54:48 +03:00
Matt EllisandAlex Pláte b15b1cd3f8 Fix range with missing last address
Fixes VIM-992
2024-06-03 11:54:48 +03:00
Matt EllisandAlex Pláte f7b6a97435 Support 0 as part of a range address
Fixes VIM-1137
2024-06-03 11:54:48 +03:00
Matt EllisandAlex Pláte f64c99c406 Support incsearch highlighting for global command
Fixes VIM-2891
2024-06-03 11:54:48 +03:00
Matt EllisandAlex Pláte f552e43c5b Refactor handling of default range
Specify a default range instead of default line for count.
2024-06-03 11:54:48 +03:00
Matt EllisandAlex Pláte 4798198e41 Minor refactorings 2024-06-03 11:54:48 +03:00
Matt EllisandAlex Pláte a59de4ce05 Add tests and fixes for yank command
Handles validation for count and ensures correct behaviour for registers.
2024-06-03 11:54:48 +03:00
Matt EllisandAlex Pláte 2dea525665 Add tests and fixes for join command
Handles validation for count and positions caret in the correct place. Also handles join with visual multicaret scenarios.
2024-06-03 11:54:48 +03:00
Matt EllisandAlex Pláte 8ecb1f7296 Add tests and fixes for print command
Handles validation of count and correctly moves caret to end of range after execution. Also fix issue where the results of :print are accumulated and not cleared.

Fixes VIM-2570
2024-06-03 11:54:48 +03:00
Matt EllisandAlex Pláte 9ca9530061 Add tests and fixes for shift commands
Shift left and right now work with counts, validate the counts and move the caret to the correct end position
2024-06-03 11:54:48 +03:00
Matt EllisandAlex Pláte 54e27afc3f Simplify getCount functions
Made it explicit to get the count from argument and/or range. Default count is not passed, because it was never used. Added some tests where possible, but hard to test select file and friends
2024-06-03 11:54:48 +03:00
Matt EllisandAlex Pláte 5e67032655 Add tests and fixes for delete lines command
Validates register before use and correctly uses register and count
2024-06-03 11:54:48 +03:00
Matt EllisandAlex Pláte cb37f6df63 Add tests and fixes for goto line command
Correctly handles some validation, and also allows going to line zero
2024-06-03 11:54:48 +03:00
Matt EllisandAlex Pláte ca3a18cf37 Add tests for goto character command
Also start to refactor handling of count
2024-06-03 11:54:48 +03:00
Matt EllisandAlex Pláte cac36627aa Support 0 in copy command to copy to top of file 2024-06-03 11:54:48 +03:00
Matt EllisandAlex Pláte 6404e1127e Remove incorrect VimBehaviourDiffers annotation 2024-06-03 11:54:48 +03:00
Matt EllisandAlex Pláte e762a3093b Range is already normalised 2024-06-03 11:54:48 +03:00
Matt EllisandAlex Pláte 739ac2ae5e Simplify getting address from argument 2024-06-03 11:54:48 +03:00
Matt EllisandAlex Pláte 77c364a2d0 Move count handling out of range into command 2024-06-03 11:54:48 +03:00