1
0
mirror of https://github.com/chylex/IntelliJ-IdeaVim.git synced 2024-12-22 13:42:48 +01:00
Commit Graph

1344 Commits

Author SHA1 Message Date
filipp
cf41a3a76c Fix(VIM-3507): Mapping exits early on double backslash 2024-06-28 13:46:06 +03:00
Filipp Vakhitov
1b0886041b Fix(VIM-3506): in command mode no longer change cursor to " 2024-06-27 15:46:22 +05:00
filipp
948520f90a Fix(VIM-3485): Stay in the same split when using (Back) or (Forward) 2024-06-21 17:44:44 +03:00
Alex Pláte
28aa156cb7
Merge branch 'master' into feature/gradle-intellij-plugin-v2 2024-06-21 16:30:25 +03:00
lippfi
e7b87d31cf
Merge pull request #904 from citizenmatt/bugfix/jumplist
Fix jumplist no longer updated from IDE actions
2024-06-17 17:45:25 +05: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
Filipp Vakhitov
1da7ffc052 Add more logging to spot bug in CommandConsumer 2024-06-15 22:36:28 +02:00
Matt Ellis
69d14ddcf5
Implement clearjumps command 2024-06-14 14:29:12 +01:00
Filipp Vakhitov
39a85b6bc2 Add more logging 2024-06-13 20:58:07 +02:00
Filipp Vakhitov
c44ed58142 Make text deletion in change actions a part of insert sequence 2024-06-09 00:33:07 +03:00
Filipp Vakhitov
d1eea68719 Support i_CTRL-G_U 2024-06-07 21:38:11 +03:00
Filipp Vakhitov
133aff7fd8 Add a return type to getInsertSequence method 2024-06-07 21:29:44 +03:00
Filipp Vakhitov
efde94db7a Fix recursive forEachCaretInvocation 2024-06-07 18:05:02 +03:00
Filipp Vakhitov
6ec072b34e End inputSequence on motion in insert mode 2024-06-07 17:12:11 +03:00
Filipp Vakhitov
4027a21514 Support most* cases for starting / ending inputSequence
* - Ending inputSequence on motion in insert mode is not supported in this commit
2024-06-07 16:55:22 +03:00
Filipp Vakhitov
cf6b292f0c Add methods to work with InsertSequence 2024-06-07 16:24:37 +03:00
Filipp Vakhitov
2c0ff587e3 Post-review improvements 2024-06-05 11:35:58 +03:00
Filipp Vakhitov
6ac8e672be Fix compilation 2024-06-05 11:35:58 +03:00
Filipp Vakhitov
04ee2dd1e7 Post-rebase fixes 2024-06-05 11:35:58 +03:00
Filipp Vakhitov
3106a98aee Make IjVimSearchGroup a PersistentStateComponent instead of deprecated SearchGroup 2024-06-05 11:35:58 +03:00
Filipp Vakhitov
73769a3472 Move one method to VimProcessGroupBase 2024-06-05 11:35:58 +03:00
Filipp Vakhitov
085e253d77 Fix possible bug in Fleet
Previously, we executed processings first and updated the state afterward. This approach could be problematic for asynchronous key processing, as Fleet might access the current state, which, in the context of async key processing, is a snapshot before execution and does not reflect the actual current KeyHandlerState
2024-06-05 11:35:58 +03:00
Filipp Vakhitov
b2af8f153e Add VimScriptFunctionServiceBase 2024-06-05 11:35:58 +03:00
Filipp Vakhitov
e2b05ab639 Move Vimscript grammar to engine 2024-06-05 11:35:58 +03:00
Filipp Vakhitov
9b97867be1 Support replace mode in command line 2024-06-05 11:35:58 +03:00
Filipp Vakhitov
06685d1721 Move more logic to VimCommandLine interface 2024-06-05 11:35:58 +03:00
Filipp Vakhitov
ae4b88a06b Remove ExEntryPanel and move its method to VimCommandLine 2024-06-05 11:35:58 +03:00
Filipp Vakhitov
c83ecc46ed Rename method 2024-06-05 11:35:58 +03:00
Filipp Vakhitov
c32050a208 Introduce actualText and visibleText for command line 2024-06-05 11:35:58 +03:00
Filipp Vakhitov
4a8c7227e6 Remove default value 2024-06-05 11:35:58 +03:00
Filipp Vakhitov
55e61a7094 Remove count for command line
It was not used anywhere
2024-06-05 11:35:58 +03:00
Filipp Vakhitov
60977d05b6 Deprecate ExEntryPanel 2024-06-05 11:35:58 +03:00
Filipp Vakhitov
0c91bc3207 Changes to replace ExEntryPanel with interface and move more code to engine 2024-06-05 11:35:58 +03:00
Filipp Vakhitov
f5cd2c173f Changes to replace ExEntryPanel with interface and move more code to engine 2024-06-05 11:35:58 +03:00
Matt Ellis
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 Ellis
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 Ellis
ce05317634 Maintain Visual when cancelling search entry 2024-06-03 11:54:48 +03:00
Matt Ellis
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 Ellis
a31a4a8ca7 Share ex entry set up with filter commands 2024-06-03 11:54:48 +03:00
Matt Ellis
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 Ellis
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 Ellis
f7b6a97435 Support 0 as part of a range address
Fixes VIM-1137
2024-06-03 11:54:48 +03:00
Matt Ellis
f64c99c406 Support incsearch highlighting for global command
Fixes VIM-2891
2024-06-03 11:54:48 +03:00
Matt Ellis
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 Ellis
4798198e41 Minor refactorings 2024-06-03 11:54:48 +03:00
Matt Ellis
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 Ellis
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 Ellis
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 Ellis
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 Ellis
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 Ellis
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 Ellis
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 Ellis
ca3a18cf37 Add tests for goto character command
Also start to refactor handling of count
2024-06-03 11:54:48 +03:00
Matt Ellis
cac36627aa Support 0 in copy command to copy to top of file 2024-06-03 11:54:48 +03:00
Matt Ellis
e762a3093b Range is already normalised 2024-06-03 11:54:48 +03:00
Matt Ellis
739ac2ae5e Simplify getting address from argument 2024-06-03 11:54:48 +03:00
Matt Ellis
77c364a2d0 Move count handling out of range into command 2024-06-03 11:54:48 +03:00
Matt Ellis
103cd9f5ce Fix off-by-one error in count
Count needs to be one-based, lines must be zero-based. So store addresses as one-based until processed
2024-06-03 11:54:48 +03:00
Matt Ellis
4778995f3b Remove unnecessary getFirstLine function 2024-06-03 11:54:48 +03:00
Matt Ellis
0a14150840 Extract TextRange from Ex range class 2024-06-03 11:54:48 +03:00
Matt Ellis
e8ffc0313f Remove Range overloads that don't require a caret
Provide caret when calling from Command
2024-06-03 11:54:48 +03:00
Matt Ellis
7dbd3886b1 Introduce addresses for current line and last line
Remove mutation from LineAddress
2024-06-03 11:54:48 +03:00
Matt Ellis
8c83164d76 Remove mutable state from Range
Sometimes we cache things, and other times it's relative to a passed caret. Let's always calculate it
2024-06-03 11:54:48 +03:00
Matt Ellis
076aab1ccf Rename Ranges, and ExRanges.kt 2024-06-03 11:54:48 +03:00
Matt Ellis
751f51c88f Rename Range and related classes to Address
An address evaluates to a line, and a range is a collection of addresses
2024-06-03 11:54:48 +03:00
Filipp Vakhitov
7abb1fd630 Finalizing merge 2024-05-28 23:35:31 +03:00
Filipp Vakhitov
9e3ca56afd Merge branch 'refs/heads/master' into fleet
# Conflicts:
#	src/main/java/com/maddyhome/idea/vim/ui/ex/ExEntryPanel.java
#	vim-engine/src/main/kotlin/com/maddyhome/idea/vim/action/ex/LeaveCommandLineAction.kt
#	vim-engine/src/main/kotlin/com/maddyhome/idea/vim/action/motion/search/SearchEntryFwdAction.kt
#	vim-engine/src/main/kotlin/com/maddyhome/idea/vim/action/motion/search/SearchEntryRevAction.kt
#	vim-engine/src/main/kotlin/com/maddyhome/idea/vim/key/consumers/CommandConsumer.kt
2024-05-28 22:19:17 +03:00
Filipp Vakhitov
5379528e3e Minor post-review PR improvements 2024-05-28 21:52:43 +03:00
Matt Ellis
7865388086 Fix regression when sub string ends with backslash
Fixes VIM-3428
2024-05-28 13:53:13 +03:00
Matt Ellis
4e2db68acf Update selection when searching in Visual mode 2024-05-28 13:53:13 +03:00
Matt Ellis
ddabf8df5e Fix regression finding endpos in new regex engine
Fixes VIM-3344
2024-05-28 13:53:13 +03:00
Matt Ellis
3f28e197ca Clear status bar on scrolling, add/remove lines, etc.
Also implements <C-L> to "redraw" screen and clear status line
2024-05-28 13:53:13 +03:00
Matt Ellis
3a67524e8a Show status bar message when search wraps
Fixes VIM-1043
2024-05-28 13:53:13 +03:00
Matt Ellis
33312d95b0 Remove wrapscan flag for substitute
Substitute always works on a known range
2024-05-28 13:53:13 +03:00
Matt Ellis
f554b21cd9 Support count for search
Fixes VIM-2836
2024-05-28 13:53:13 +03:00
Matt Ellis
e98a284d40 Fix multiline regex substitution
Fixes VIM-2141
2024-05-28 13:53:13 +03:00
Matt Ellis
d3f560a31c Add special case to match newline with end of file 2024-05-28 13:53:13 +03:00
Matt Ellis
633667ed7f Fix regression with global not saving used patterns
This is a messy quick fix, as the search group needs a lot of tidying up right now. Perhaps a better implementation would be to move the implementation of the global command into the search group - processGlobalCommand, like we already have processSearchCommand and processSubstituteCommand

Fixes VIM-3348
2024-05-28 13:53:13 +03:00
Matt Ellis
656e975562 Fix reset of last substitution string on use
Fixes VIM-3354
2024-05-28 13:53:13 +03:00
Matt Ellis
f7fbe89de4 Use EnumSet instead of list of enums 2024-05-28 13:53:13 +03:00
Matt Ellis
509829b052 Fix force ignorecase atom in search highlights
Fixes VIM-3391
2024-05-28 13:53:13 +03:00
Matt Ellis
cf2b021d02 Fix search for last search pattern with new offset
Fixes VIM-2356
2024-05-28 13:53:13 +03:00
Matt Ellis
67f10aece5 Fix search motion type when providing offset
Search motion type should be linewise if there's a line offset, or inclusive if the `e` flag is provided. Otherwise, it's exclusive.

Fixes VIM-1940
2024-05-28 13:53:13 +03:00
Matt Ellis
bfe0f51cb1 Restore current match highlighting for :s command
Regression while migrating to the new regex engine removed the highlights shown when confirming each change
2024-05-28 13:53:13 +03:00
Matt Ellis
ffce61906a Restore search highlights when setting 'hlsearch'
Fixes VIM-3257
2024-05-28 13:53:13 +03:00
Filipp Vakhitov
a81d54eb90 Remove VimCommandLineHelper 2024-05-24 17:18:24 +03:00
Filipp Vakhitov
23519bbdae Refactoring to use interfaces from vim-engine 2024-05-24 16:51:38 +03:00
Filipp Vakhitov
8e2fd44f55 Remove unnecessary methods from ProcessGroup 2024-05-24 14:25:51 +03:00
Filipp Vakhitov
1c84917b29 Move LeaveCommandLineAction to its own class 2024-05-24 12:58:04 +03:00
Filipp Vakhitov
c5522ed19d Move ExEntryAction to vim-engine 2024-05-24 12:56:52 +03:00
Alex Plate
16cd05fc76
Fix incorrect use of visual position instead of buffer position
We should calculate the line above based on logical position rather than visual position.

This issue was detected thanks to newly introduced soft wraps and proprty tests
2024-05-24 11:39:45 +03:00
Filipp Vakhitov
91e54c8b0d Replace c_CTRL-R swing TextAction implementation with proper Vim engine implementation 2024-05-23 17:31:18 +03:00
Filipp Vakhitov
15ccebfe11 Cleanup 2024-05-23 15:27:18 +03:00
Filipp Vakhitov
9e99506223 Move some logic to engine 2024-05-23 01:32:48 +03:00
Filipp Vakhitov
53ea90379f Moved some search related logic to commands to simplify KeyHandler and ProcessGroup 2024-05-23 00:15:46 +03:00
Filipp Vakhitov
2619d7ebb4 Moved some classes to the same file in vim-engine
They will share some logic in future commits
2024-05-22 22:14:54 +03:00
Filipp Vakhitov
8c8a7aceca Moved some classes to the same file in vim-engine
They will share some logic in future commits
2024-05-22 22:12:34 +03:00
Filipp Vakhitov
726b885b60 More obvious processing of ex-commands.
1. Now we have two parallel commandBuilders: for the editor and for the command prompt. It's done for sequence of keys like `d/foo<C-R>"<CR>` where we have two different commands that are built at the same time.
2. We simplified the CommandConsumer and made the logic more straightforward. `/`, `?` and `:` enter the command mode, while pressing final `<CR>` fires the command execution.
2024-05-22 22:04:32 +03:00
Filipp Vakhitov
a6994a09c3 Add support for commands that can be executed either once or for each caret depending on some circumstances
In a future commit, I'm going to make ProcessExEntryAction responsible for processing both search and ex commands. Search commands are motions that are executed for each caret, while ex-commands are executed once. The per-caret code is held internally by the ex commands themselves.

The current solution is definitely not the right one, and the whole ex command subsystem needs to be reviewed and refactored:

1. Some commands can be motions, which is currently not supported.
2. We need to figure out a gentle way of handling multiple carets.
2024-05-22 15:44:12 +03:00
Matt Ellis
755000c376 Reset Vim options when IDE setting changes
Options are not reset if they've been explicitly set by the user (e.g. `:set list` or _View | Active Editor | Show Whitespaces_). They are reset if they were explicitly set in `~/.ideavimrc`.

Also bumps the IDE build number to 233.11799.241 in order to use EditorSettingsExternalizable.PropNames
2024-05-10 15:27:24 +03:00
Matt Ellis
c9ee685956 Codify assumption re global-local external setting 2024-05-10 15:27:24 +03:00
Matt Ellis
c2b1083836 Updated descriptions as per review comments 2024-05-10 15:27:24 +03:00
Matt Ellis
3518528f22 Prevent resetting options when plugin re-enabled 2024-05-10 15:27:24 +03:00
Matt Ellis
9bed8fec79 Map 'scrolloff' and 'sidescrolloff' options
Fixes VIM-3110
2024-05-10 15:27:24 +03:00
Matt Ellis
3ffbea7d42 Match Vim's behaviour for :set[local] {option}<
String and number/toggle options have different and opposite behaviour for `:set {option}<` and `:setlocal {option}<`. This change matches Vim's behaviour.
2024-05-10 15:27:24 +03:00
Matt Ellis
39b42193cb Map 'scrolljump' and 'sidescroll' options
Fixes VIM-3110
2024-05-10 15:27:24 +03:00
Matt Ellis
50b42036d1 Add 'bomb' option
No tests, as I don't know how to test interaction with saving to disk
2024-05-10 15:27:24 +03:00
Matt Ellis
340c40ceff Add 'fileformat' option
No tests, as I don't know how to test interaction with saving to disk
2024-05-10 15:27:24 +03:00
Matt Ellis
07f1d1e8e6 Move number/relativenumber options out of engine
While they are core Vim options, they are implemented by the host, not by the engine. If another host wants to support these options, they can add them in their implementation layer.
2024-05-10 15:27:24 +03:00
Matt Ellis
6c61254c50 Add 'colorcolumn' option to show visual guides
IntelliJ ties the hard wrap right margin guide with the other visual guides, and it's not possible to show one without the other. In Vim, you can show the hard wrap margin by adding "+0" to 'colorcolumn', so in IdeaVim, we automatically add this.
2024-05-10 15:27:24 +03:00
Matt Ellis
c6efea8c34 Add 'textwidth' option
Also supports overriding local-to-buffer options with IDE values, ensuring that changes to the option/IDE value are applied to all editors for the buffer.

Fixes VIM-1310
2024-05-10 15:27:24 +03:00
Matt Ellis
80f43a7c66 Add 'cursorline' option 2024-05-10 15:27:24 +03:00
Matt Ellis
73a1118e78 Extract base implementation for IDE backed options 2024-05-10 15:27:24 +03:00
Matt Ellis
d3bedf26cf Treat IDE value as default for 'wrap' option 2024-05-10 15:27:24 +03:00
Matt Ellis
25b29f429a Track how option value is set 2024-05-10 15:27:24 +03:00
Matt Ellis
363f821962 Introduce 'wrap' option based on IntelliJ setting
Fixes VIM-1265
2024-05-10 15:27:24 +03:00
Alex Plate
8d873c0bf1
Fix(VIM-3418): Restore mappings after plugin disable/enable
There is no need to clean up the requiredShortcuts after turning off the plugin. Also, previously this set was not populated properly and keys that were added by ideavimrc or by user were not restored
2024-05-09 08:57:12 +03:00
Alex Plate
955676ed9e
Add comments about structures for testing
Also, there is no need to clear these structures during plugin disabling
2024-05-09 08:30:47 +03:00
Alex Plate
a2439a37e4
Make RequiredShortcut as a data class
This will simplify reading the data during the debug
2024-05-09 08:21:26 +03:00
Alex Plate
b66da76880
VIM-3376: Remove usages of the EditorDataContext
EditorDataContext cannot be used because the platform cannot convert it to the async data context. Taking the fact that it's not clear why this custom context exists, I decided to get rid of it at all.

```
Cannot convert to AsyncDataContext at 'keyboard shortcut' DataContextWrapper(CaretSpecificDataContext(com.maddyhome.idea.vim.helper.EditorDataContext)). Please use CustomizedDataContext or its inheritors like SimpleDataContext
```

Class EditorDataContext cannot be removed because it's used in github.zgqq.intellij-enhance plugin
2024-04-26 14:52:47 +03:00
Alex Plate
0b8c081425
VIM-3376: Working on removing EditorDataContext. Remove it from multiple places
EditorDataContext cannot be used because the platform cannot convert it to the async data context. Taking the fact that it's not clear why this custom context exists, I decided to get rid of it at all.

```
Cannot convert to AsyncDataContext at 'keyboard shortcut' DataContextWrapper(CaretSpecificDataContext(com.maddyhome.idea.vim.helper.EditorDataContext)). Please use CustomizedDataContext or its inheritors like SimpleDataContext
```
2024-04-26 14:16:52 +03:00
Alex Plate
209052ffa6
Create a function to get the execution context from the editor
This is a part of VIM-3376. This context will not be a custom EditorDataContext, but some context created by the platform.
In some places we don't have any kind of "current context", but we have to use it for the function. However, such context can be simply retrieved from the editor.
2024-04-26 14:03:37 +03:00
Alex Plate
fe9a6b5cfb
Remove context argument when creating a pad for the string
It's unclear why it was needed to get the project from the context, but it's easy to get the project from the existing editor
2024-04-26 13:56:10 +03:00
Alex Plate
cd27e5229b
VIM-3376: Working on removing EditorDataContext. Remove from CommandLineHelper
EditorDataContext cannot be used because the platform cannot convert it to the async data context. Taking the fact that it's not clear why this custom context exists, I decided to get rid of it at all.

```
Cannot convert to AsyncDataContext at 'keyboard shortcut' DataContextWrapper(CaretSpecificDataContext(com.maddyhome.idea.vim.helper.EditorDataContext)). Please use CustomizedDataContext or its inheritors like SimpleDataContext
```
2024-04-26 13:40:18 +03:00
Alex Plate
472732905c
VIM-3376: Get rid of IjCaretAndEditorExecutionContext
This context was added long ago, but I wasn't able to find specific reasons for that. Currently, such custom contexts cannot work with the intellij platform and should be refactored or removed. The issues with this context are that it cannot be converted to the async data context by the platform.
Taking the fact that the reason for this context was not found, I decided to get rid of it.

The issue from the platform looks like this

```
Cannot convert to AsyncDataContext at 'keyboard shortcut' DataContextWrapper(CaretSpecificDataContext(com.maddyhome.idea.vim.helper.EditorDataContext)). Please use CustomizedDataContext or its inheritors like SimpleDataContext
```
Here the EditorDataContext is mentioned instead of CaretAndEditorData context, however, I'll clean up both contexts during this refactoring

It was used in the action system for mapping to the `<Action>` keyword and in commit 256f5fcd0e it's mentioned that the EditorActionHandler was not working without this context. However, currently both cases work fine without addition wrapping.
2024-04-26 13:27:56 +03:00
dependabot[bot]
78d351a0b0 Bump org.mockito.kotlin:mockito-kotlin from 5.2.1 to 5.3.1
Bumps [org.mockito.kotlin:mockito-kotlin](https://github.com/mockito/mockito-kotlin) from 5.2.1 to 5.3.1.
- [Release notes](https://github.com/mockito/mockito-kotlin/releases)
- [Commits](https://github.com/mockito/mockito-kotlin/compare/5.2.1...5.3.1)

---
updated-dependencies:
- dependency-name: org.mockito.kotlin:mockito-kotlin
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-04-10 18:33:14 +03:00
Alex Plate
2fe2860a09
Remove Offset and Pointer and switch to the regular Ints
Details on that can be found here: VIM-3368
2024-03-29 15:38:05 +02:00
filipp
cb40426976 Fix(FL-25338): Vim plugin stopped working in 1.31.107 2024-03-29 14:52:52 +02:00
Filipp Vakhitov
423ed390a2 Fix(FL-25087): p in vim mode
Pasting was broken with immutable carets because the old caret was not updated during execution
2024-03-29 14:52:52 +02:00
Filipp Vakhitov
7652b16ca6 Move more MotionGroup methods to its base class 2024-03-29 14:52:52 +02:00
Filipp Vakhitov
618a010c15 Move some MotionGroup methods to its base class 2024-03-29 14:52:52 +02:00
Filipp Vakhitov
d44a34ed9b Remove unnecessary abstract method 2024-03-29 14:52:52 +02:00
Filipp Vakhitov
c84fc996db Move some methods to vim-engine
The more methods we have in the engine, the fewer number of methods we will need to implement in the Fleet
2024-03-29 14:52:52 +02:00
Filipp Vakhitov
43f232543b Replace findBlockRange with newer implementation
The newer implementation is a part of the vim-engine library and uses new methods from the SearchGroup.kt, but it is not fully refactored yet
2024-03-29 14:52:52 +02:00
filipp
3f65d1d99a Revert "Revert changes to SearchGroup"
This reverts commit 00ccddf8cf.
2024-03-29 14:52:52 +02:00
Alex Plate
ab75ace8db
Fix(VIM-3331): Support custom registers in replaceWithRegister plugin 2024-03-25 09:40:45 +02:00
Alex Plate
65d755d9b2
Bring back the getMappingMode function for binary compatibility with the which-key plugin 2024-03-12 09:31:59 +02:00
Alex Plate
1f1a8f3395
Avoid generation of the huge amount of sets during regex search
The tests shows that the depth of `epsilonVisited` is usually around 0-3, so there is no need to use the set. However, when the set is used, we have to make a new copy everytime we create a new `SimulationStackFrame`.
Now, the previous stack is reused.
2024-03-11 18:51:46 +02:00
Alex Plate
629e4e7053
Fix(VIM-3336): Improve the performance of n in large files
The git history shows that the force update of the search highlights was accidentally enabled during the refactorings
2024-03-11 18:49:38 +02:00
Alex Plate
c50a299cfd
Remove the unused import 2024-03-11 18:48:27 +02:00
Alex Plate
4bad129caf
Do not register clipboard option change listener for caret registers
Register groups for the caret do not use some fields from the base class, however the listener for these fiels is still registered. Now we don't register this listener.
Generally it looks like a bigger refactoring can be performed in order to separate the common registers logic from caret registers logic.

This change should improve the performance of the IjVimCaret initialization because now we won't register a new disposable on each instance of IjVimCaret

This is a part of VIM-3336
2024-03-11 17:41:54 +02:00
filipp
00ccddf8cf Revert changes to SearchGroup
Wrong branch. The changes should be merged to master only after review in the Fleet branch
2024-03-03 22:16:19 +02:00
filipp
00cbf188fb Replace findUnmatchedBlock method with a new implementation 2024-03-03 22:05:28 +02:00
filipp
0914cda7e5 Better matching for a sequence of single-line comments 2024-03-03 22:05:28 +02:00
filipp
5959e9aaa1 Fix(VIM-1399): Uncommented brackets are matched to commented ones in VIM mode 2024-03-03 22:05:28 +02:00
filipp
06e1af371e Add SearchGroup.kt
In the future, it should become a container for all the search methods that we have in IdeaVim
At the moment we have a bunch of SearchGroups and SearchHelpers, and it may be confusing.
We also want to avoid using unnecessary OOP.
2024-03-03 22:05:28 +02:00
filipp
d744987ac8 Add VimPsiService
We want to avoid unnecessary OOP and use interfaces only for cases where we will have different implementations for different IDEs
This service will help us in our future refactorings of SearchGroup and SearchHelper
2024-03-03 22:03:58 +02:00
filipp
b4eef17aaa Add StringUtil.kt class
Methods in this file will be helpful in future search refactorings
2024-03-03 22:03:58 +02:00
filipp
5c50e8607c Fix search 2024-03-01 08:50:18 +02:00
Filipp Vakhitov
9a324ab448 Reset KeyHandlerState when switching Editors
Now we have a single state for all the editors, so we should not mix their states
2024-02-29 20:27:46 +02:00
dependabot[bot]
c3978335f5 Bump org.mockito.kotlin:mockito-kotlin from 5.0.0 to 5.2.1
Bumps [org.mockito.kotlin:mockito-kotlin](https://github.com/mockito/mockito-kotlin) from 5.0.0 to 5.2.1.
- [Release notes](https://github.com/mockito/mockito-kotlin/releases)
- [Commits](https://github.com/mockito/mockito-kotlin/compare/5.0.0...5.2.1)

---
updated-dependencies:
- dependency-name: org.mockito.kotlin:mockito-kotlin
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-28 16:01:23 +00:00
filipp
3c94091d30 Merge branch 'refs/heads/master' into fleet 2024-02-23 17:24:08 +02:00
Parker7123
db722fc4e5 VIM-1472 Add support for sorting with pattern 2024-02-23 17:15:21 +02:00
filipp
7d679e68dc Merge branch 'refs/heads/master' into fleet
# Conflicts:
#	vim-engine/src/main/kotlin/com/maddyhome/idea/vim/api/VimEditorGroup.kt
#	vim-engine/src/main/kotlin/com/maddyhome/idea/vim/impl/state/VimStateMachineImpl.kt
2024-02-23 17:08:01 +02:00
Matt Ellis
bc808403fb Rename localEditors to getEditors
The fact that these methods only return local editors (i.e., editors for the local user while hosting a Code With Me session) is an implementation detail
2024-02-23 17:01:32 +02:00
Matt Ellis
9d6dc317a4 Only notify editors for the current buffer 2024-02-23 17:01:32 +02:00
Matt Ellis
cf29c50f31 Ensure editors are initialised before use
Fixes VIM-3256
2024-02-23 17:01:32 +02:00
Matt Ellis
2ce3fbd677 Use common APIs to get local editors 2024-02-23 15:54:20 +02:00
Alex Plate
247aaed188
Use the property to change the state of the octopus handler 2024-02-23 15:32:35 +02:00
Filipp Vakhitov
1a4333fa1b Move implementations to upper level
It will simplify support of immutable editors in Fleet
2024-02-23 15:09:45 +02:00
Filipp Vakhitov
8eaa6df318 Throw error instead of warning on state conflict
It may indicate some serious issues, and we would like to know if anything goes wrong
2024-02-23 15:09:45 +02:00
filipp
4aac113522 Remove duplicate method 2024-02-23 15:09:45 +02:00
filipp
795abd77a7 Add documentation 2024-02-23 15:09:45 +02:00
Filipp Vakhitov
38bc914504 Avoid using annotation-processors in vim-engine 2024-02-23 15:09:45 +02:00
Filipp Vakhitov
c8113eea83 Commit state after receiving unknown key 2024-02-23 15:09:45 +02:00
Filipp Vakhitov
924b7418e8 Fix DigraphSequence cloning 2024-02-23 15:09:45 +02:00
Filipp Vakhitov
a7dfef61e9 Make LazyVimCommand open 2024-02-23 15:09:45 +02:00
Filipp Vakhitov
db35c979b4 Move some editor methods to the base class 2024-02-23 15:09:45 +02:00
Filipp Vakhitov
2de933c723 Make processKey public 2024-02-23 15:09:45 +02:00
filipp
d3704d602f Cleanup after moving logic to other classes 2024-02-23 15:09:45 +02:00
filipp
ea62f227bf Remove piece of code for handling bad commands
Bad commands are handled in consumers
2024-02-23 15:09:45 +02:00
filipp
e9bf06686f Add synchronize blocks to minimize risk of concurrent key processing and changing of the KeyHandlerState 2024-02-23 15:09:45 +02:00
filipp
7842b155c1 Move some logic to ModeInputConsumer 2024-02-23 15:09:45 +02:00
filipp
74a8277e10 Move some logic to SelectRegisterConsumer 2024-02-23 15:09:45 +02:00
filipp
ddb1b80463 Move some logic to CommandConsumer 2024-02-23 15:09:45 +02:00
filipp
eea3336934 Move some logic to CommandConsumer 2024-02-23 15:09:45 +02:00
filipp
f801145712 Update MappingInfo to match newer signature 2024-02-23 15:09:45 +02:00
filipp
e033b08535 Move some logic to DigraphConsumer 2024-02-23 15:09:45 +02:00
filipp
1d9514a205 Move some logic to RegisterConsumer 2024-02-23 15:09:45 +02:00
filipp
6741120f19 Move some logic to CharArgumentConsumer 2024-02-23 15:09:45 +02:00
filipp
c501457322 Move some logic to EditorResetConsumer 2024-02-23 15:09:45 +02:00
filipp
46425a24c3 Move some logic to DeleteCommandConsumer 2024-02-23 15:09:45 +02:00
filipp
9826f0a7f0 Move some logic to CommandCountConsumer 2024-02-23 15:09:45 +02:00
filipp
43175061e0 Fix broken digraphSequence
It shouldn't be retested on partial reset
2024-02-23 15:09:45 +02:00
filipp
0ab32cac34 Make MappingProcessor a KeyConsumer 2024-02-23 15:09:45 +02:00
filipp
e3ec9c614b Add KeyConsumer
It will help us to have a more modular KeyHandler in future (chain of different consumers)
2024-02-23 15:09:45 +02:00
filipp
f454d60234 Add MutableBoolean to be able to pass and modify shouldRecord in methods 2024-02-23 15:09:45 +02:00
filipp
19fa00837c Use KeyProcessResultBuilder
It will help us to build the KeyProcessResult that we need for asynchronous key processing
2024-02-23 15:09:45 +02:00
filipp
275c5d28e1 Add KeyProcessResultBuilder 2024-02-23 15:09:45 +02:00
filipp
15ae069f6f Make keyHandlerState argument not null
Applying default values may lead to unexpected results, especially if we sometimes want to use the global state (IJ), and at other times, its clone for asynchronous processing (Fleet).
2024-02-23 15:09:45 +02:00
Filipp Vakhitov
00f5541dc6 Add KeyProcessResult interface 2024-02-23 15:09:45 +02:00
Filipp Vakhitov
02540eb303 Pass KeyHandlerState as a method argument 2024-02-23 15:09:45 +02:00
Filipp Vakhitov
282e581bdb Make state cloneable 2024-02-23 15:09:45 +02:00
Filipp Vakhitov
31e7c49608 Add equals & hashCode 2024-02-23 15:09:45 +02:00
filipp
7966a6dc91 Create KeyHandlerState
We do not need multiple commandBuilder, digraphSequence or mappingState and this class will be a singleton containing them
2024-02-23 15:09:45 +02:00
filipp
5fc2f04224 Remove mappingMode from MappingState
It unnecessarily binds mappingState to mode and thus to editor. And we want to simplify things and have a single MappingState instead of multiple of them
2024-02-23 15:09:45 +02:00
filipp
6edfd8ed22 Remove deprecated showmode status bar text update that does not work with the new UI and will be replaced with widget 2024-02-23 15:09:45 +02:00
filipp
363db05db7 Macro recording state is no longer per editor
It will not only simplify VimStateMachine, but also help us to support multi-editor macros in future
2024-02-23 15:09:45 +02:00
filipp
3738012dd6 Listeners refactoring
1. Listeners now disposed after turning plugin off
2. Change widget listeners to be recreated on plugin toggle
3. Add CaretVisualAttributesListener
2024-02-23 15:09:45 +02:00
filipp
355cfe035d Remove Editor from VimStateMachine
Rationale:
1. A much more experienced developer, whom I highly respect, suggested to empty VimStateMachineImpl constructor in his TODO comment.
2. I aim for VimStateMachine to be a data class rather than being a container for both data and complex logic.
3. From an architectural perspective, it is more correct. Editors do have state (or they may possess a single global state if the corresponding option is set), but a state does not own an editor.
2024-02-23 15:09:44 +02:00
6dd924b2b2 Implement motions to go to next/previous misspelled word 2024-02-23 10:17:25 +02:00
Matt Ellis
f439474b73 Fix set command tests
Also hides more feature flags and diagnostic settings from users and unit tests. Shows them when in internal mode.
2024-02-23 10:04:23 +02:00
Matt Ellis
d6cd92e256 Migrate extensions to use operatorfunc option 2024-02-23 10:04:23 +02:00
Matt Ellis
3a294268d9 Introduce operatorfunc option
Allows creating custom operators in script, as shown in JetBrains/ideavim#702
2024-02-23 10:04:23 +02:00
Alex Plate
9b81c7e650
Update junit version 2024-02-23 10:03:30 +02:00
dependabot[bot]
9fc3fadee8 Bump org.antlr:antlr4 from 4.10.1 to 4.13.1
Bumps [org.antlr:antlr4](https://github.com/antlr/antlr4) from 4.10.1 to 4.13.1.
- [Release notes](https://github.com/antlr/antlr4/releases)
- [Changelog](https://github.com/antlr/antlr4/blob/dev/CHANGES.txt)
- [Commits](https://github.com/antlr/antlr4/compare/4.10.1...4.13.1)

---
updated-dependencies:
- dependency-name: org.antlr:antlr4
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-21 17:42:05 +02:00
Alex Plate
73c3c9f7fe
Replace Enum.values() with Enum.entries, as suggested since 1.9 2024-02-20 16:12:34 +02:00
Alex Plate
328bc5e95a
Convert some services to light services 2024-02-20 16:10:07 +02:00
Alex Plate
12d0d2613f
Allow sneak plugin to be registered with the original mappings from the sneak plugin 2024-02-13 19:20:41 +02:00
f69630b668 VIM-3238 Fix recording a macro that replays another macro 2024-02-10 20:05:47 +02:00
Alex Plate
4937985e2c
Bump kotlin version from 1.8.21 to 1.9.22
One of the reasons for that is that 1.9.22 allows internal classes to be available in testFixtures from java KT-34901.
2024-02-07 09:29:15 +02:00
Alex Plate
855dbfab16
Fix issues with enter in python console
VIM-3287
2024-02-05 18:31:43 +02:00
Filipp Vakhitov
63995e8c61 Support e flag for search 2024-02-05 16:29:49 +02:00
Filipp Vakhitov
6386770ff3 Move more tests to src 2024-02-05 16:29:49 +02:00
Filipp Vakhitov
b4e831a81f Fix VisualAreaMatcher & TextRange 2024-02-05 16:29:49 +02:00
Filipp Vakhitov
9b283360ce Minor improvements 2024-02-05 16:29:49 +02:00
Filipp Vakhitov
fabbd4d156 Better SelectionInfo implementation 2024-02-05 16:29:49 +02:00
filipp
9bea5bf5f7 Remove deprecated code 2024-02-05 16:29:49 +02:00
filipp
9fbc990493 Fix visual matching 2024-02-05 16:29:49 +02:00
filipp
b05fdaaa73 Fix tests 2024-02-05 16:29:49 +02:00
filipp
52d5d4d64c Fix Keyword token 2024-02-05 16:29:49 +02:00
filipp
6ec712466c Fix StartOfWordMatcher & EndOfWordMatcher 2024-02-05 16:29:49 +02:00
filipp
6616b8dc07 Simplify MarkMatchers 2024-02-05 16:29:49 +02:00
filipp
807457c718 Hide method and add Deprecated annotation 2024-02-05 16:29:49 +02:00
Emanuel Gestosa
13d2a40903 removing print 2024-02-05 16:29:49 +02:00
Emanuel Gestosa
022b196d6a adding comments and small refactors 2024-02-05 16:29:49 +02:00
Emanuel Gestosa
7a64216830 getting rid of usages of deprecated classes 2024-02-05 16:29:49 +02:00
Emanuel Gestosa
bf7d2bd465 marking classes as deprecated 2024-02-05 16:29:49 +02:00
Emanuel Gestosa
6e97b591de fixing some error messages 2024-02-05 16:29:49 +02:00
Emanuel Gestosa
fc7c470966 fixing nohlsearch command 2024-02-05 16:29:49 +02:00
Emanuel Gestosa
51492ca121 moving seach methods back to VimSearchGroup base 2024-02-05 16:29:49 +02:00
Emanuel Gestosa
ce1df84330 creating new IjVimSearchGroup class 2024-02-05 16:29:49 +02:00
Emanuel Gestosa
9b43e2a715 working on kotlin implementation of SearchGroup class 2024-02-05 16:29:49 +02:00
Emanuel Gestosa
732cabd6aa working on processSearchCommand 2024-02-05 16:29:49 +02:00
Emanuel Gestosa
7c14801d5c deprecating most of SearchHelper 2024-02-05 16:29:49 +02:00
Emanuel Gestosa
8fd6985316 deprecating SearchHelper find and findAll 2024-02-05 16:29:49 +02:00
Emanuel Gestosa
feac001499 substitute command working with new engine 2024-02-05 16:29:49 +02:00
Emanuel Gestosa
4c47e3a8eb integrating new regex into global command 2024-02-05 16:29:49 +02:00
Emanuel Gestosa
7773b625a5 \c token can't get overrided by \C 2024-02-05 16:29:49 +02:00
Emanuel Gestosa
abe1abec72 test for \c token always taking priority 2024-02-05 16:29:49 +02:00
Emanuel Gestosa
023838a96b working on implicit DFA algorithm optimization 2024-02-05 16:29:49 +02:00
Emanuel Gestosa
f4e743acc5 VimRegex uses wrapscan option 2024-02-05 16:29:49 +02:00
Emanuel Gestosa
06d58cbda5 integrating options into the main module 2024-02-05 16:29:49 +02:00
Emanuel Gestosa
d199dea204 using options in findPrevious 2024-02-05 16:29:49 +02:00
Emanuel Gestosa
5722060ed9 testing VimRegex with smartcase set 2024-02-05 16:29:49 +02:00
Emanuel Gestosa
d4f7e727c1 VimRegex methods now receive options 2024-02-05 16:29:49 +02:00
Emanuel Gestosa
39897bd012 allow findAll to have a max index 2024-02-05 16:29:49 +02:00
Emanuel Gestosa
2bf46ce2f3 fixing findPrevious not wraping around in some cases 2024-02-05 16:29:49 +02:00
Emanuel Gestosa
b49a185efc using the count parameter in find() 2024-02-05 16:29:49 +02:00
Emanuel Gestosa
e305ebd1ed fixing patterns with just a AND operator 2024-02-05 16:29:49 +02:00
Emanuel Gestosa
6f5c9826f4 fixing patterns with single ^ or $ 2024-02-05 16:29:49 +02:00
Emanuel Gestosa
b2441c3cca throwing and catching VimRegexException 2024-02-05 16:29:49 +02:00
Emanuel Gestosa
a73599e9ee use non-exact nfas for slightly faster matches 2024-02-05 16:29:49 +02:00
Emanuel Gestosa
43f5d5a8e8 integrating findAll 2024-02-05 16:29:49 +02:00
Emanuel Gestosa
b20cbd3558 fix findNext getting stuck at line ends 2024-02-05 16:29:49 +02:00
Emanuel Gestosa
7f835a407c fix findPrevious not finding matches that start at end-of-line 2024-02-05 16:29:49 +02:00
Emanuel Gestosa
9859974db7 integrating findNext and findPrevious 2024-02-05 16:29:49 +02:00
Emanuel Gestosa
bd92ef08ec use explicit stack instead of recursion for backtracking 2024-02-05 16:29:49 +02:00
Emanuel Gestosa
8de6107a17 getting rid of handleTransition method 2024-02-05 16:29:49 +02:00
Emanuel Gestosa
e639f03ac7 stop using non-exact start nfas 2024-02-05 16:29:49 +02:00
Emanuel Gestosa
f9aac442c1 findAll returns List instead of Sequence 2024-02-05 16:29:49 +02:00
Emanuel Gestosa
5fdf675168 rename NFATest to VimRegexEngineTest 2024-02-05 16:29:49 +02:00
Emanuel Gestosa
232f81ff48 commenting new classes 2024-02-05 16:29:49 +02:00
Emanuel Gestosa
1c4a6b2274 refactoring nfa simulation logic to its own class 2024-02-05 16:29:49 +02:00
Emanuel Gestosa
deb71f8efc cleaning comments 2024-02-05 16:29:49 +02:00
Emanuel Gestosa
4596596d9f new findPrevious API method 2024-02-05 16:29:49 +02:00
Emanuel Gestosa
bbb6d42f8d changing find to findNext 2024-02-05 16:29:49 +02:00
Emanuel Gestosa
01efd0f9f0 trying to get antlr to report vim errors 2024-02-05 16:29:49 +02:00
Emanuel Gestosa
2d7597d206 clearing some TODOS in VimRegex 2024-02-05 16:29:49 +02:00
Emanuel Gestosa
221741c891 assuring that cursor line and column tokens belong to the same cursor 2024-02-05 16:29:49 +02:00
Emanuel Gestosa
9f69beb450 test for pattern with multiple cursors 2024-02-05 16:29:49 +02:00
Emanuel Gestosa
e843d9e9c3 assuring that visual selection tokens belong to the same cursor 2024-02-05 16:29:49 +02:00
Emanuel Gestosa
008b3d94fb assuring that all cursor and mark tokens belong to the same cursor 2024-02-05 16:29:49 +02:00
Emanuel Gestosa
6756d83c55 test for tokens belonging to the same cursor 2024-02-05 16:29:49 +02:00
Emanuel Gestosa
b52072a2e3 visitors for mark related tokens 2024-02-05 16:29:49 +02:00
Emanuel Gestosa
3afb00d563 tests for mark related tokens 2024-02-05 16:29:49 +02:00
Emanuel Gestosa
a30c94fd2f mock mark related methods for regex testing 2024-02-05 16:29:49 +02:00
Emanuel Gestosa
f50c29a285 matchers for mark related tokens 2024-02-05 16:29:49 +02:00
Emanuel Gestosa
f238b0f138 parsing more mark registers 2024-02-05 16:29:49 +02:00
Emanuel Gestosa
d0a8c98040 parsing mark related tokens 2024-02-05 16:29:49 +02:00
Emanuel Gestosa
b3d161ad97 fix tests not detecting visual area selection properly 2024-02-05 16:29:49 +02:00
Emanuel Gestosa
fce9cf2077 visitor for visual area token 2024-02-05 16:29:49 +02:00
Emanuel Gestosa
efd0e56697 visual area matcher 2024-02-05 16:29:49 +02:00
Emanuel Gestosa
b94a9bb9d9 nfa tests for matching inside visual area 2024-02-05 16:29:49 +02:00
Emanuel Gestosa
c153cc5a29 mock visual selection 2024-02-05 16:29:49 +02:00
Emanuel Gestosa
a680e9a25a visual columns matching 2024-02-05 16:29:49 +02:00
Emanuel Gestosa
3c18c4ef22 fixing parsing of optionally matched sequence 2024-02-05 16:29:49 +02:00
Emanuel Gestosa
c4e11b5976 visitor for optionally matched sequence 2024-02-05 16:29:49 +02:00
Emanuel Gestosa
65be51dd48 tests for optionally matched sequence 2024-02-05 16:29:49 +02:00
Emanuel Gestosa
9684103f97 parsing optionally matched atoms tokens 2024-02-05 16:29:49 +02:00
Emanuel Gestosa
f4c647d430 new doTest method for VimRegexTest 2024-02-05 16:29:49 +02:00
Emanuel Gestosa
f1eab3b9c1 dividing regex api tests into seperate classes 2024-02-05 16:29:49 +02:00
Emanuel Gestosa
545d52bd93 dividing regex tests into internal and public api tests 2024-02-05 16:29:49 +02:00
Emanuel Gestosa
4e42198c09 using multi line strings in VimRegexTest 2024-02-05 16:29:49 +02:00
Emanuel Gestosa
44736a51b9 new NFA doTest method 2024-02-05 16:29:49 +02:00
Emanuel Gestosa
e675ffd623 cleaning multiline strings in tests 2024-02-05 16:29:49 +02:00
Emanuel Gestosa
1f14e06bd3 refactoring editor mock methods 2024-02-05 16:29:49 +02:00
Emanuel Gestosa
9871078269 tests receive caret indexes in the text 2024-02-05 16:29:49 +02:00
Emanuel Gestosa
5e7a7f4d62 fixing cursor line and column matchers 2024-02-05 16:29:49 +02:00
Emanuel Gestosa
7d690c6809 visitors for cursor line and column tokens 2024-02-05 16:29:49 +02:00