1
0
mirror of https://github.com/chylex/IntelliJ-IdeaVim.git synced 2025-08-17 16:31:45 +02:00

Compare commits

..

1024 Commits

Author SHA1 Message Date
1afd0d3c37 Set plugin version to chylex-18 2023-10-20 00:58:13 +02:00
547bd08c7e Set minimum IDEA version to 2023.2 2023-10-20 00:58:13 +02:00
0c4154547f Reset insert mode when switching active editor 2023-10-20 00:58:12 +02:00
92d8be1ba4 Revert "Add VimScript 'renaming()' function"
This reverts commit a8a822b58e.
2023-10-20 00:58:12 +02:00
080dbe9c0e Prevent IdeaVIM from stealing key binding that confirms in-place refactoring 2023-10-20 00:58:12 +02:00
ff7e6bf053 Set plugin version to chylex-17 2023-10-19 06:13:47 +02:00
f19ce34311 Add operating system type to has() function 2023-10-18 22:14:42 +02:00
8bcb0d116d Set plugin version to chylex-16 2023-09-29 01:39:49 +02:00
d9ae9fa40d Remove update checker 2023-09-29 01:39:48 +02:00
c19f88e5c0 [VIM-696] Restore visual mode after undo/redo, and disable incompatible actions 2023-09-29 01:39:48 +02:00
03f4fb288d Change matchit plugin to use HTML patterns in unrecognized files 2023-09-29 01:39:48 +02:00
ef27579277 Fix vim-surround not working with multiple cursors
Fixes multiple cursors with vim-surround commands `cs, ds, S` (but not `ys`).
2023-09-29 01:39:48 +02:00
a8a822b58e Add VimScript 'renaming()' function 2023-09-29 01:39:48 +02:00
9752bd5bbb Add support for repeatable actions with ':raction' 2023-09-29 01:39:48 +02:00
240d9e0be4 Disable taking over arrow keys and Home/End 2023-09-29 01:39:48 +02:00
328442544d Set custom plugin version 2023-09-29 01:39:48 +02:00
aleksei.plate@jetbrains.com
7d4981639a TeamCity change in 'Ideavim / IdeaVim releases' project: parameters of 'Publish patch release' build configuration were updated 2023-09-15 11:49:05 +00:00
Alex Plate
967538767a Push only a specific tag on EAP 2023-09-15 14:20:21 +03:00
Alex Plate
4731eb9db8 Bring back removed functions 2023-09-14 16:50:52 +03:00
Alex Plate
337f5ade59 Get rid of deprecated method 2023-09-14 16:31:26 +03:00
Alex Plate
fe8bbcb11a Bring back a method to keep the compatibility 2023-09-14 16:26:14 +03:00
Alex Plate
b1b6b0bf80 Add links to the new page about modes 2023-09-14 15:44:00 +03:00
Alex Plate
1c28c138e0 Add post about modes in vim 2023-09-14 15:41:23 +03:00
dependabot[bot]
cb73111779 Bump io.ktor:ktor-client-cio from 2.3.3 to 2.3.4
Bumps [io.ktor:ktor-client-cio](https://github.com/ktorio/ktor) from 2.3.3 to 2.3.4.
- [Release notes](https://github.com/ktorio/ktor/releases)
- [Changelog](https://github.com/ktorio/ktor/blob/2.3.4/CHANGELOG.md)
- [Commits](https://github.com/ktorio/ktor/compare/2.3.3...2.3.4)

---
updated-dependencies:
- dependency-name: io.ktor:ktor-client-cio
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-13 15:47:28 +00:00
dependabot[bot]
6250678f61 Bump io.ktor:ktor-serialization-kotlinx-json from 2.3.3 to 2.3.4
Bumps [io.ktor:ktor-serialization-kotlinx-json](https://github.com/ktorio/ktor) from 2.3.3 to 2.3.4.
- [Release notes](https://github.com/ktorio/ktor/releases)
- [Changelog](https://github.com/ktorio/ktor/blob/2.3.4/CHANGELOG.md)
- [Commits](https://github.com/ktorio/ktor/compare/2.3.3...2.3.4)

---
updated-dependencies:
- dependency-name: io.ktor:ktor-serialization-kotlinx-json
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-13 18:35:41 +03:00
Alex Plate
1821f01ef1 Fix detecting the commit by tag 2023-09-13 16:33:16 +03:00
Alex Plate
350f084156 Update changeslog 2023-09-12 14:41:13 +03:00
Alex Plate
a6c2babafb Fix issue with GitHub CI changes pushing 2023-09-12 14:40:08 +03:00
IdeaVim Bot
f566aed1fe Update changelog. Action id - 6158816999 2023-09-12 11:34:46 +00:00
Alex Plate
10fb54224c Use a deploy key to pull the changes 2023-09-12 14:29:20 +03:00
Matt Ellis
585b815472 Only notify changes if the value is different
This is primarily to avoid instantiating inactive extensions when
resetting all options back to default values, which sets extensions
inactive.
It applies to global and local options, but not to global-local. The
notifications for global-local options are already complex, as they can
be reacting to changes to both the global and local value, and only
notifying editors that are affected.
2023-09-11 11:04:09 +03:00
Matt Ellis
c37e2f4176 Update fallback window when all windows close 2023-09-11 11:04:09 +03:00
Matt Ellis
626d59d3fc Only use fallback for first initialisation
Subsequent initialisation will be treated like EDIT
2023-09-11 11:04:09 +03:00
Matt Ellis
ddd058a26f Fix name of usage statistic 2023-09-11 11:04:09 +03:00
Matt Ellis
32b8d03c5e Improve modifying string and string list options 2023-09-11 11:04:09 +03:00
Matt Ellis
71f3e1b4f1 Support per-window global values
For local-to-window options
2023-09-11 11:04:09 +03:00
Matt Ellis
aa6f53fa68 Require editor when getting/setting global option 2023-09-11 11:04:09 +03:00
Matt Ellis
1335e9f7f2 Improve detection of editor open scenarios 2023-09-11 11:04:09 +03:00
Matt Ellis
c75599b6a0 Refactor editor options initialisation 2023-09-11 11:04:09 +03:00
Matt Ellis
2efdfbd988 Remove unnecessary calls from tests 2023-09-11 11:04:09 +03:00
Matt Ellis
700198d8bc Remove test only vimscript execute method 2023-09-11 11:04:09 +03:00
Matt Ellis
3efab5928e Evaluate ideavimrc in the fallback window context 2023-09-11 11:04:09 +03:00
Matt Ellis
93037b6866 Add fallback window to capture local option state 2023-09-11 11:04:09 +03:00
Matt Ellis
0f19e50c69 Improve hierarchy of option accessors
Getting the effective IJ options would allow access to Vim global and IJ global, but not Vim effective. IntelliJ specific options are now a separate hierarchy, so the Vim effective and IJ effective accessors now simply access all Vim or all IJ options.
2023-09-11 11:04:09 +03:00
Matt Ellis
66ea6ad3d4 Rename OptionScope to OptionAccessScope 2023-09-11 11:04:09 +03:00
Alex Plate
b6dc1f0e61 Add new harpoon plugin as a dependent plugin 2023-09-11 10:42:39 +03:00
filipp
0c1dc51db4 Fix(VIM-3060): Clipboard interaction stopped working
Fix for Windows
2023-09-07 14:42:00 +03:00
filipp
74a710c5e8 VIM-3060 Clipboard interaction stopped working
Fixed issue and tests (for Linux)
2023-09-07 02:39:23 +03:00
dependabot[bot]
c4a773e72d Bump io.ktor:ktor-client-auth from 2.3.3 to 2.3.4
Bumps [io.ktor:ktor-client-auth](https://github.com/ktorio/ktor) from 2.3.3 to 2.3.4.
- [Release notes](https://github.com/ktorio/ktor/releases)
- [Changelog](https://github.com/ktorio/ktor/blob/2.3.4/CHANGELOG.md)
- [Commits](https://github.com/ktorio/ktor/compare/2.3.3...2.3.4)

---
updated-dependencies:
- dependency-name: io.ktor:ktor-client-auth
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-06 16:15:12 +00:00
dependabot[bot]
ad43fc37ab Bump io.ktor:ktor-client-content-negotiation from 2.3.3 to 2.3.4
Bumps [io.ktor:ktor-client-content-negotiation](https://github.com/ktorio/ktor) from 2.3.3 to 2.3.4.
- [Release notes](https://github.com/ktorio/ktor/releases)
- [Changelog](https://github.com/ktorio/ktor/blob/2.3.4/CHANGELOG.md)
- [Commits](https://github.com/ktorio/ktor/compare/2.3.3...2.3.4)

---
updated-dependencies:
- dependency-name: io.ktor:ktor-client-content-negotiation
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-06 19:00:07 +03:00
dependabot[bot]
8011c048a2 Bump io.ktor:ktor-client-core from 2.3.3 to 2.3.4
Bumps [io.ktor:ktor-client-core](https://github.com/ktorio/ktor) from 2.3.3 to 2.3.4.
- [Release notes](https://github.com/ktorio/ktor/releases)
- [Changelog](https://github.com/ktorio/ktor/blob/2.3.4/CHANGELOG.md)
- [Commits](https://github.com/ktorio/ktor/compare/2.3.3...2.3.4)

---
updated-dependencies:
- dependency-name: io.ktor:ktor-client-core
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-06 15:48:02 +00:00
dependabot[bot]
c4ee9987bf Bump org.eclipse.jgit:org.eclipse.jgit.ssh.apache
Bumps org.eclipse.jgit:org.eclipse.jgit.ssh.apache from 6.6.0.202305301015-r to 6.7.0.202309050840-r.

---
updated-dependencies:
- dependency-name: org.eclipse.jgit:org.eclipse.jgit.ssh.apache
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-06 15:47:47 +00:00
Alex Pláte
f70decddd1 Update README.md
Fix type
2023-09-06 08:29:54 +03:00
Alex Plate
79a0aea065 Remove bunny plugin 2023-09-04 09:38:37 +03:00
Alex Plate
fe87e86721 Fix typo in wiki 2023-09-01 19:09:14 +03:00
Alex Plate
456055bcf0 Do not run multiple carets from ChangeEditorActionHandler and instead pass this information to EditorActionHandlerBase
This is needed for the new way we register handlers. As we can't be sure that this commands won't be called from the `runForEachCaret` context, we have to avoid this method
2023-09-01 17:25:14 +03:00
Alex Plate
5ebe290424 Check if the caret if valid 2023-09-01 15:27:27 +03:00
Alex Plate
4532d68743 Convert change group to kotlin 2023-09-01 14:29:51 +03:00
Alex Plate
1903e18397 Rename .java to .kt 2023-09-01 14:13:57 +03:00
Alex Plate
a705bf7053 Get rid of the exception suppression
This suppression existed for a very long time. Now it hid one of the exceptions I expected.
2023-09-01 13:58:11 +03:00
Alex Plate
26e9bf5197 Detect if we run the action in runForEachCaret scope or not 2023-09-01 13:25:15 +03:00
Alex Plate
64007b3634 Update changelog to version 2.5.0 2023-09-01 13:04:48 +03:00
Alex Plate
80f099220c Add pushing the branch 2023-09-01 13:03:53 +03:00
Alex Plate
08615f2295 Remove deprecated release workflow 2023-09-01 12:49:47 +03:00
Alex Plate
5c02bb4f91 Use bash script in release workflow 2023-09-01 12:48:44 +03:00
Alex Plate
ad6aee55f9 Add comment 2023-09-01 12:41:25 +03:00
Alex Plate
aac4fd8e5e Use shell to push 2023-09-01 12:29:23 +03:00
Alex Plate
c013ae7dab Fix incorrect gradle config 2023-09-01 11:45:24 +03:00
Alex Plate
57ab4b0849 Cleanup push code 2023-09-01 11:41:23 +03:00
Alex Plate
24a762504f Do not push release branch on EAP or patch release 2023-09-01 11:40:34 +03:00
Alex Plate
838bcc07a4 Update usages of jgit in repository 2023-09-01 11:40:32 +03:00
Alex Plate
0f0c996b54 Update usages of jgit in repository 2023-09-01 11:31:22 +03:00
dependabot[bot]
b1ad67a354 Bump com.google.devtools.ksp:symbol-processing-api
Bumps [com.google.devtools.ksp:symbol-processing-api](https://github.com/google/ksp) from 1.9.0-1.0.13 to 1.9.10-1.0.13.
- [Release notes](https://github.com/google/ksp/releases)
- [Commits](https://github.com/google/ksp/compare/1.9.0-1.0.13...1.9.10-1.0.13)

---
updated-dependencies:
- dependency-name: com.google.devtools.ksp:symbol-processing-api
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-30 15:50:58 +00:00
dependabot[bot]
c7a64c0c7c Bump org.jetbrains.changelog from 2.1.2 to 2.2.0
Bumps org.jetbrains.changelog from 2.1.2 to 2.2.0.

---
updated-dependencies:
- dependency-name: org.jetbrains.changelog
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-30 15:40:47 +00:00
dependabot[bot]
5da87dbe0a Bump org.jetbrains.kotlin:kotlin-stdlib from 1.8.21 to 1.9.10
Bumps [org.jetbrains.kotlin:kotlin-stdlib](https://github.com/JetBrains/kotlin) from 1.8.21 to 1.9.10.
- [Release notes](https://github.com/JetBrains/kotlin/releases)
- [Changelog](https://github.com/JetBrains/kotlin/blob/v1.9.10/ChangeLog.md)
- [Commits](https://github.com/JetBrains/kotlin/compare/v1.8.21...v1.9.10)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-30 15:37:36 +00:00
dependabot[bot]
38e1a62f19 Bump org.jetbrains.kotlinx:kotlinx-serialization-json-jvm
Bumps [org.jetbrains.kotlinx:kotlinx-serialization-json-jvm](https://github.com/Kotlin/kotlinx.serialization) from 1.5.1 to 1.6.0.
- [Release notes](https://github.com/Kotlin/kotlinx.serialization/releases)
- [Changelog](https://github.com/Kotlin/kotlinx.serialization/blob/master/CHANGELOG.md)
- [Commits](https://github.com/Kotlin/kotlinx.serialization/compare/v1.5.1...v1.6.0)

---
updated-dependencies:
- dependency-name: org.jetbrains.kotlinx:kotlinx-serialization-json-jvm
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-30 18:36:38 +03:00
Alex Plate
5174a26719 Comment out TC requirements because they don't override 2023-08-25 19:05:42 +03:00
Alex Pláte
98886cb269 Update README.md
Add reference to stackoverflow answer about names of VIsual mode
2023-08-25 11:48:26 +03:00
Alex Plate
e7a8b45c10 [VIM-3051] Refactor the way we store modes in IdeaVim
Now we have a single variable with current mode instead of stack of modes.
2023-08-25 11:38:21 +03:00
Alex Plate
2e0ec73d77 Remove some deprecated methods 2023-08-25 11:17:28 +03:00
dependabot[bot]
b8b324cdf3 Bump io.ktor:ktor-serialization-kotlinx-json from 2.3.0 to 2.3.3
Bumps [io.ktor:ktor-serialization-kotlinx-json](https://github.com/ktorio/ktor) from 2.3.0 to 2.3.3.
- [Release notes](https://github.com/ktorio/ktor/releases)
- [Changelog](https://github.com/ktorio/ktor/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ktorio/ktor/compare/2.3.0...2.3.3)

---
updated-dependencies:
- dependency-name: io.ktor:ktor-serialization-kotlinx-json
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-23 19:08:49 +03:00
dependabot[bot]
12600d8404 Bump org.mockito.kotlin:mockito-kotlin from 4.1.0 to 5.1.0
Bumps [org.mockito.kotlin:mockito-kotlin](https://github.com/mockito/mockito-kotlin) from 4.1.0 to 5.1.0.
- [Release notes](https://github.com/mockito/mockito-kotlin/releases)
- [Commits](https://github.com/mockito/mockito-kotlin/compare/4.1.0...5.1.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-23 18:56:25 +03:00
dependabot[bot]
d9dfdb7e68 Bump org.jetbrains.intellij from 1.14.2 to 1.15.0
Bumps org.jetbrains.intellij from 1.14.2 to 1.15.0.

---
updated-dependencies:
- dependency-name: org.jetbrains.intellij
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-23 18:55:44 +03:00
dependabot[bot]
07f8b2c47b Bump io.ktor:ktor-client-cio from 2.2.4 to 2.3.3
Bumps [io.ktor:ktor-client-cio](https://github.com/ktorio/ktor) from 2.2.4 to 2.3.3.
- [Release notes](https://github.com/ktorio/ktor/releases)
- [Changelog](https://github.com/ktorio/ktor/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ktorio/ktor/compare/2.2.4...2.3.3)

---
updated-dependencies:
- dependency-name: io.ktor:ktor-client-cio
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-23 15:55:25 +00:00
Alex Plate
b9c4ae2fbb Update the external Vim license
RIP Bram Moolenaar
https://twitter.com/ideavim/status/1688541894979051520

This change follows the update of the original Vim license: e978b4534a
2023-08-18 17:04:58 +03:00
filipp.vakhitov
2b2d78edc0 TeamCity change in 'Ideavim' project: requirements of 'Tests for IntelliJ Latest EAP With Xorg' build configuration were updated 2023-08-18 08:46:59 +00:00
filipp.vakhitov
2ad78c722a TeamCity change in 'Ideavim' project: requirements of 'Tests for IntelliJ Latest EAP With Xorg' build configuration were updated 2023-08-18 08:46:45 +00:00
filipp.vakhitov
99771babba TeamCity change in 'Ideavim' project: requirements of 'Tests for IntelliJ Latest EAP With Xorg' build configuration were updated 2023-08-18 08:46:12 +00:00
filipp.vakhitov
1b0ba48b9d TeamCity change in 'Ideavim' project: requirements of 'Tests for IntelliJ Latest EAP With Xorg' build configuration were updated 2023-08-18 08:39:02 +00:00
filipp
95cf32c70a Add build configuration 2023-08-18 11:34:43 +03:00
dependabot[bot]
14469d1a2e Bump org.jetbrains.changelog from 2.0.0 to 2.1.2
Bumps org.jetbrains.changelog from 2.0.0 to 2.1.2.

---
updated-dependencies:
- dependency-name: org.jetbrains.changelog
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-17 09:11:54 +03:00
dependabot[bot]
336f1c3b80 Bump org.jetbrains.kotlinx:kotlinx-serialization-json-jvm
Bumps [org.jetbrains.kotlinx:kotlinx-serialization-json-jvm](https://github.com/Kotlin/kotlinx.serialization) from 1.5.0 to 1.5.1.
- [Release notes](https://github.com/Kotlin/kotlinx.serialization/releases)
- [Changelog](https://github.com/Kotlin/kotlinx.serialization/blob/master/CHANGELOG.md)
- [Commits](https://github.com/Kotlin/kotlinx.serialization/compare/v1.5.0...v1.5.1)

---
updated-dependencies:
- dependency-name: org.jetbrains.kotlinx:kotlinx-serialization-json-jvm
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-16 16:21:36 +00:00
dependabot[bot]
055fd4379a Bump com.google.devtools.ksp:symbol-processing-api
Bumps [com.google.devtools.ksp:symbol-processing-api](https://github.com/google/ksp) from 1.8.21-1.0.11 to 1.9.0-1.0.13.
- [Release notes](https://github.com/google/ksp/releases)
- [Commits](https://github.com/google/ksp/compare/1.8.21-1.0.11...1.9.0-1.0.13)

---
updated-dependencies:
- dependency-name: com.google.devtools.ksp:symbol-processing-api
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-16 16:04:23 +00:00
dependabot[bot]
f6b5cfe1d4 Bump io.ktor:ktor-client-core from 2.2.4 to 2.3.3
Bumps [io.ktor:ktor-client-core](https://github.com/ktorio/ktor) from 2.2.4 to 2.3.3.
- [Release notes](https://github.com/ktorio/ktor/releases)
- [Changelog](https://github.com/ktorio/ktor/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ktorio/ktor/compare/2.2.4...2.3.3)

---
updated-dependencies:
- dependency-name: io.ktor:ktor-client-core
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-16 16:04:09 +00:00
dependabot[bot]
df744fe48b Bump com.squareup.okhttp3:okhttp from 4.10.0 to 4.11.0
Bumps [com.squareup.okhttp3:okhttp](https://github.com/square/okhttp) from 4.10.0 to 4.11.0.
- [Changelog](https://github.com/square/okhttp/blob/master/CHANGELOG.md)
- [Commits](https://github.com/square/okhttp/compare/parent-4.10.0...parent-4.11.0)

---
updated-dependencies:
- dependency-name: com.squareup.okhttp3:okhttp
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-16 19:02:17 +03:00
Alex Plate
9f10a4a0b7 Revert "Temporally disable some tests"
This reverts commit bf6a8a71
2023-08-14 16:17:47 +03:00
Alex Plate
22ca74a1a3 Use a different approach for switching to visual mode. The previous way caused "recursive runForEachCaret exception" 2023-08-14 16:17:47 +03:00
Alex Plate
3093c9212c Add note about visual type in text objects 2023-08-14 16:17:46 +03:00
dependabot[bot]
6b8a4e6e63 Bump org.junit.jupiter:junit-jupiter-engine from 5.9.2 to 5.10.0
Bumps [org.junit.jupiter:junit-jupiter-engine](https://github.com/junit-team/junit5) from 5.9.2 to 5.10.0.
- [Release notes](https://github.com/junit-team/junit5/releases)
- [Commits](https://github.com/junit-team/junit5/compare/r5.9.2...r5.10.0)

---
updated-dependencies:
- dependency-name: org.junit.jupiter:junit-jupiter-engine
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-14 11:28:23 +03:00
dependabot[bot]
d256870953 Bump org.junit.jupiter:junit-jupiter-api from 5.9.2 to 5.10.0
Bumps [org.junit.jupiter:junit-jupiter-api](https://github.com/junit-team/junit5) from 5.9.2 to 5.10.0.
- [Release notes](https://github.com/junit-team/junit5/releases)
- [Commits](https://github.com/junit-team/junit5/compare/r5.9.2...r5.10.0)

---
updated-dependencies:
- dependency-name: org.junit.jupiter:junit-jupiter-api
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-14 08:16:59 +00:00
dependabot[bot]
8fd8cceadb Bump io.ktor:ktor-client-auth from 2.2.4 to 2.3.3
Bumps [io.ktor:ktor-client-auth](https://github.com/ktorio/ktor) from 2.2.4 to 2.3.3.
- [Release notes](https://github.com/ktorio/ktor/releases)
- [Changelog](https://github.com/ktorio/ktor/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ktorio/ktor/compare/2.2.4...2.3.3)

---
updated-dependencies:
- dependency-name: io.ktor:ktor-client-auth
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-14 11:09:38 +03:00
dependabot[bot]
402b532311 Bump org.junit.jupiter:junit-jupiter-params from 5.9.2 to 5.10.0
Bumps [org.junit.jupiter:junit-jupiter-params](https://github.com/junit-team/junit5) from 5.9.2 to 5.10.0.
- [Release notes](https://github.com/junit-team/junit5/releases)
- [Commits](https://github.com/junit-team/junit5/compare/r5.9.2...r5.10.0)

---
updated-dependencies:
- dependency-name: org.junit.jupiter:junit-jupiter-params
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-14 11:05:11 +03:00
Alex Plate
8e85d35d8f Disable the failed test again 2023-08-14 10:53:17 +03:00
Alex Plate
6b6794a367 Check if test will fail on server 2023-08-14 10:36:44 +03:00
Alex Plate
14a726b5af Add a note 2023-08-14 10:35:54 +03:00
dependabot[bot]
3e937d234b Bump io.ktor:ktor-client-content-negotiation from 2.2.4 to 2.3.3
Bumps [io.ktor:ktor-client-content-negotiation](https://github.com/ktorio/ktor) from 2.2.4 to 2.3.3.
- [Release notes](https://github.com/ktorio/ktor/releases)
- [Changelog](https://github.com/ktorio/ktor/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ktorio/ktor/compare/2.2.4...2.3.3)

---
updated-dependencies:
- dependency-name: io.ktor:ktor-client-content-negotiation
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-14 10:29:17 +03:00
Alex Plate
bf6a8a713b Temporally disable some tests 2023-08-14 10:08:36 +03:00
IdeaVim Bot
b8c5e7aaba Update changelog after merging PR 2023-08-14 06:07:23 +00:00
Ludwig Valda Vasquez
068d610e3a Add grapheme cluster handling tests
GraphemeBreakTest.txt was downloaded from the Unicode Character Database [0].

Changes to build.gradle.kts were required to stop `gradlew test` from
regenerating the resources with empty JSON objects. And adding a
dependency.

[0]: https://www.unicode.org/Public/UCD/latest/ucd/auxiliary/GraphemeBreakTest.txt
2023-08-14 09:04:41 +03:00
Ludwig Valda Vasquez
41177b91be Handle unicode grapheme clusters
Some characters that render as a single symbol can span over a sequence
of several unicode code points (e.g., flag emojis, combination of a
letter and a diacritic, Hangul syllables, etc.).

Such composites are called grapheme clusters in the unicode standard,
and this patch introduces recognition of extended grapheme cluster
boundaries, allowing to iterate over rendered characters. Without this,
user may observe the cursor being "stuck" inside a character for several
keystrokes, while it's making its way through each code point in the
grapheme cluster.

The implementation follows the boundaries search algorithm outlined in
the technical report 29 of the Unicode standard[1]. The implementation was
tested against the set of test cases provided by the unicode character
database[2].

Additionally to the grapheme cluster boundaries search itself, this
patch adds `isExtendedPictographic` function, that answers whether the
given code point has a unicode "Extended_Pictographic" property, which
is required to correctly determine grapheme cluster boundaries. This
method is implemented natively in the JDK 21 and can be removed once we
start targeting that version.

Extended_Pictographic property is stored as a bitmap. I was considering
making a similar map for the code point classification in the grapheme
cluster boundary search implementation, which could yield better
performance, but that would require adding another half a megabyte (at
least) of data into the JAR and I've settled for the bunch of `if`s way.

That is something that can be reconsidered and shouldn't be difficult to
change if the impact on performance would be noticeable (in my simple
tests it didn't show).

A few functions in the vim-engine were adjusted to handle grapheme
clusters (such as getting the horizontal offset and adjusting the cursor
to not reach over the end of the line).

[1]: https://www.unicode.org/reports/tr29/#Grapheme_Cluster_Boundaries
[2]: https://www.unicode.org/Public/UCD/latest/ucd/auxiliary/GraphemeBreakTest.txt
2023-08-14 09:04:41 +03:00
Filipp Vakhitov
c2ebacdfb3 Better annotations 2023-08-11 15:57:09 +03:00
Alex Plate
5d4996c085 Optimize imports on the project 2023-08-11 11:54:38 +03:00
Alex Plate
dbafbbf66d Add a small interesting facts about undolevels 2023-08-11 11:47:36 +03:00
Filipp Vakhitov
a46200ca17 Introduce TestForLinux annotation 2023-08-11 00:22:43 +03:00
filipp
1fe64e69ca Support running tests if headless 2023-08-04 19:00:47 +03:00
IdeaVim Bot
a017ec9bfd Update changelog after merging PR 2023-08-03 12:03:00 +00:00
Matt Ellis
cb8385a092 Fix issue adding back hidden status bar widget 2023-08-03 15:00:28 +03:00
Matt Ellis
d4aa1f87e0 Fix read-only stdin when running application 2023-08-03 14:58:47 +03:00
filipp
41df06a48b Fix failing tests second attempt
(please please)
2023-08-03 14:00:03 +03:00
filipp
4188e636f3 Fix failing tests
(please)
2023-08-03 13:39:33 +03:00
filipp
e2c0d59e3a Fix default register for unnamedplus without X 2023-08-03 11:24:29 +03:00
Alex Plate
6a8c210a23 Fix incorrect tic in docs 2023-08-02 16:43:53 +03:00
Alex Plate
a62cc3618c Fix an issue with disposed caret when moving up
There was an issue that when we enter visual block, move up, then try to switch to the visual line, we get a disposed caret issue.
This was caused by the fact that we get the list of carets, then process them one by one. However, as we update the first caret, the second gets disposed.
2023-08-01 16:17:39 +03:00
Alex Plate
a703afbef9 Update changelog 2023-08-01 12:25:38 +03:00
Alex Plate
5ce8445d5c Update GH jobs to use the IdeaVim Bot git account 2023-08-01 12:25:38 +03:00
Matt Ellis
d112030a8e Add explanatory comment about InsertExitModeAction 2023-08-01 12:22:26 +03:00
Matt Ellis
98ca4080dd Do not enter INSERT mode for read-only editors
It's not enough that the document is writable, the editor needs to be non-read-only, too.

Fixes VIM-2313, fixes VIM-2318, fixes VIM-2666, fixes VIM-2951
2023-08-01 12:22:26 +03:00
Alex Plate
3b9c63e781 Update changelog after merging PR 2023-07-31 08:31:19 +00:00
Matt Ellis
dd24ebf184 Rename OptionsScope.AUTO to EFFECTIVE 2023-07-31 11:28:32 +03:00
Matt Ellis
7ef2be625f Refactor parseOptionLine for readability 2023-07-31 11:28:32 +03:00
Matt Ellis
e3957d2207 Minor updates from code review 2023-07-31 11:28:32 +03:00
Matt Ellis
8ce1307d51 Fix tests under latest SDK 2023-07-31 11:28:32 +03:00
Matt Ellis
e1141dcd1c Remove old option listener API 2023-07-31 11:28:32 +03:00
Matt Ellis
4e33b5f351 Migrate to effective value change listeners 2023-07-31 11:28:32 +03:00
Matt Ellis
54dc184dd0 Introduce option effective value change listener 2023-07-31 11:28:32 +03:00
Matt Ellis
1977ce3ea5 Add simple one to many collection 2023-07-31 11:28:32 +03:00
Matt Ellis
c8c9d1729e Introduce listener for global option changes 2023-07-31 11:28:32 +03:00
Matt Ellis
e6e4b81f3b Simplify guicursor caret attributes cache 2023-07-31 11:28:32 +03:00
Matt Ellis
1c465f028e Fix option scopes for :let command 2023-07-31 11:28:32 +03:00
Matt Ellis
12824c22c4 Add :setglobal command 2023-07-31 11:28:32 +03:00
Matt Ellis
64c5ad72a3 Use accessor API to set global-local value 2023-07-31 11:28:32 +03:00
Matt Ellis
080c2059ee Format unset global-local toggle options 2023-07-31 11:28:32 +03:00
Matt Ellis
a288850010 Add support for resetting option to global value 2023-07-31 11:28:32 +03:00
Matt Ellis
16811602d2 Support global-local options 2023-07-31 11:28:32 +03:00
Matt Ellis
6d94d719e3 Only notify change if option has changed 2023-07-31 11:28:32 +03:00
Matt Ellis
749d111e89 Reset options for current editor only
Matches Vim behaviour for `:set all&`
2023-07-31 11:28:32 +03:00
Matt Ellis
365d8d34ce Introduce AUTO scope for effective option values 2023-07-31 11:28:32 +03:00
Matt Ellis
ced25bbf28 Initialise options when opening windows/buffers
Note that this temporarily changes the semantics of `:set` to always set the local option, instead of setting the global option (because we now eagerly initialise local values). Neither is correct, but we don't yet have a way to support the proper behaviour.
2023-07-31 11:28:32 +03:00
Matt Ellis
7e1ce5a203 Use Vim terminology in storage service 2023-07-31 11:28:32 +03:00
Matt Ellis
aeec754f7e Override IjVimEditor.toString for better debugging 2023-07-31 11:28:32 +03:00
Matt Ellis
9a3fcb56a1 Support local-to-buffer options
Previously, all local options were treated as local-to-window
2023-07-31 11:28:32 +03:00
Matt Ellis
aff956f4c8 Update parsed value cache for declared scope 2023-07-31 11:28:32 +03:00
Matt Ellis
0f49fd6406 Introduce declared scope for all options 2023-07-31 11:28:32 +03:00
IdeaVim Bot
1111770033 Update changelog. Action id - 5699821393 2023-07-29 10:07:18 +00:00
Filipp Vakhitov
6d313fc456 Update gradle plugin 2023-07-28 20:14:03 +03:00
Filipp Vakhitov
0201acb5f7 Fix test 2023-07-28 20:09:09 +03:00
Filipp Vakhitov
dfbefe96da Fix(VIM-802): IdeaVim vs. Vim: discrepancies in using registers 2023-07-28 19:58:51 +03:00
filipp
a71b35097f Fix(VIM-2246): X11/Xorg Primary selection register "* not supported 2023-07-28 19:56:42 +03:00
Alex Plate
acd0cf5245 [TC] Smart checkout of the branch 2023-07-27 14:32:27 +03:00
Alex Plate
393b9b2f3d [TC] Create branch when checkout 2023-07-27 14:16:21 +03:00
Alex Plate
f66bad1810 Revert "[TC] Enable stack trace for all gradle tasks"
This reverts commit 386a81454b.
2023-07-27 14:05:42 +03:00
Alex Plate
386a81454b [TC] Enable stack trace for all gradle tasks 2023-07-27 14:00:24 +03:00
Alex Plate
deb2b7a36f [TC] Update name on the job 2023-07-27 13:58:01 +03:00
Alex Plate
a3901c7b1c [TC] Enable other build steps and disable old release job 2023-07-27 13:43:45 +03:00
Alex Plate
631ee109f5 [TC] Add unshallow fetch for other builds 2023-07-27 13:35:36 +03:00
Alex Plate
25570e2135 [TC] Change git pull to fetch 2023-07-27 13:31:15 +03:00
Alex Plate
6d70044b15 [TC] Pull git history 2023-07-27 13:24:22 +03:00
Alex Plate
b064f94172 [TC] Print the log size 2023-07-27 13:05:43 +03:00
Alex Plate
721124e8c5 [TC] Add git pull for dev task 2023-07-27 13:01:32 +03:00
Alex Plate
85333e03a4 [TC] Add additional git pull 2023-07-27 12:57:01 +03:00
Alex Plate
bef928a20c [TC] Add some logging 2023-07-27 12:49:40 +03:00
Alex Plate
6967416207 [TC] Print the last version 2023-07-27 12:40:41 +03:00
Alex Plate
e968b3f26b [TC] Add SSH agent to dev release 2023-07-27 12:33:10 +03:00
Alex Plate
be6d8e23c8 [TC] Set teamcity build number from job 2023-07-27 12:29:54 +03:00
Alex Plate
397effacd4 [TC] Remove dev_version constant 2023-07-27 12:26:08 +03:00
Alex Plate
a35738d99b [TC] Make tagging available for any job 2023-07-27 12:24:46 +03:00
Alex Plate
03aafdeae2 [TC] Update dev version of job 2023-07-27 11:55:00 +03:00
Alex Plate
f5529b6cce [TC] Add function to calculate dev version 2023-07-27 11:52:23 +03:00
Alex Plate
0bd39c2826 [TC] Update release EAP job 2023-07-27 11:40:25 +03:00
Alex Plate
d335745010 [TC] Add task to calculate new EAP version 2023-07-27 11:36:52 +03:00
Alex Plate
0d59843f40 [TC] Reformat version calculation 2023-07-27 11:28:09 +03:00
Alex Plate
011d0a15a9 [TC] Clean up release process 2023-07-27 11:17:41 +03:00
Alex Plate
c72b968f9b [TC] Add other job types 2023-07-27 11:12:47 +03:00
Alex Plate
4e7cef9402 [TC] Prepare to other types of release 2023-07-27 11:08:36 +03:00
Alex Plate
1868d5a202 [TC] Move steps to release package 2023-07-27 11:03:57 +03:00
Alex Plate
423fcfbda3 [TC] Update pushing step to work with any branch 2023-07-27 11:02:40 +03:00
Alex Plate
be5d17457f [TC] Add more release steps 2023-07-27 11:00:11 +03:00
Alex Plate
5033b0332e [TC] Add step with updating release branch 2023-07-27 10:42:15 +03:00
Alex Plate
a1cf4cc46d [TC] Add function to add release tag 2023-07-27 09:54:48 +03:00
Alex Plate
838f494a85 [TC] Commit changes before release 2023-07-27 09:37:23 +03:00
Alex Plate
d55f5b1e39 [TC] Set up job with release type 2023-07-27 09:12:26 +03:00
Alex Plate
c98768dd52 [TC] Add release type to the config 2023-07-27 09:05:46 +03:00
filipp
0058f81e76 VIM-3022 Search is broken in folded regions 2023-07-27 01:03:12 +03:00
Alex Plate
b79c384c3f [TC] Set the version for the next task 2023-07-26 17:08:43 +03:00
Alex Plate
a11dae821e [TC] Add task to update the changelog 2023-07-26 17:02:31 +03:00
aleksei.plate@jetbrains.com
b08deb518c TeamCity change in 'Ideavim / IdeaVim releases' project: build features of 'Publish Minor Release' build configuration were updated 2023-07-26 13:33:51 +00:00
aleksei.plate@jetbrains.com
7ad0a8c400 TeamCity change in 'Ideavim / IdeaVim releases' project: runners of 'Publish Minor Release' build configuration were updated 2023-07-26 13:19:44 +00:00
aleksei.plate@jetbrains.com
4bb33ec101 TeamCity change in 'Ideavim / IdeaVim releases' project: runners of 'Publish Minor Release' build configuration were updated 2023-07-26 13:19:31 +00:00
Alex Plate
856baec94d [TC] Try to find reason why this doesn't work on TC 2023-07-26 16:14:45 +03:00
Alex Plate
09600db5f2 [TC] Remove additional pull for the job 2023-07-26 16:09:54 +03:00
aleksei.plate@jetbrains.com
810a1e252d TeamCity change in 'Ideavim / IdeaVim releases' project: VCS roots of 'Publish Minor Release' build configuration were updated 2023-07-26 13:09:46 +00:00
Alex Plate
10b3fcdfcc [TC] Add additional pull for the job 2023-07-26 16:04:20 +03:00
Alex Plate
652e6eb9e8 [TC] Do not specify build number pattern for job 2023-07-26 15:59:09 +03:00
Alex Plate
eea2b5f6fb [TC] Calculate the rootDir of the root project 2023-07-26 15:56:26 +03:00
Alex Plate
b4eb0df689 [TC] Add "ReleaseMinor" job that prints the version of the next minor release 2023-07-26 15:46:50 +03:00
Alex Plate
2b26c6a5b6 Use XLarge agents for releases
We'll use them as usualy we make releases manually and need to wait till it finishes
2023-07-26 15:06:29 +03:00
Alex Plate
79e2134ca8 Apply TeamCity patch 2023-07-26 15:02:10 +03:00
aleksei.plate@jetbrains.com
6efa30152f TeamCity change in 'Ideavim' project: 'Qodana checks' build configuration settings were updated 2023-07-24 13:13:53 +00:00
aleksei.plate@jetbrains.com
781fb476e7 TeamCity change in 'Ideavim' project: 'Qodana checks' build configuration settings were updated 2023-07-21 09:46:26 +00:00
aleksei.plate@jetbrains.com
f2ed4eba3b TeamCity change in 'Ideavim / IdeaVim releases' project: parameters of 'Publish vim-engine' build configuration were updated 2023-07-20 14:06:10 +00:00
aleksei.plate@jetbrains.com
d2b1cd511d TeamCity change in 'Ideavim / IdeaVim releases' project: parameters of 'Publish vim-engine' build configuration were updated 2023-07-20 14:04:12 +00:00
aleksei.plate@jetbrains.com
1c9df39afe TeamCity change in 'Ideavim / IdeaVim releases' project: parameters of 'Publish vim-engine' build configuration were updated 2023-07-20 14:03:48 +00:00
aleksei.plate@jetbrains.com
f124f45604 TeamCity change in 'Ideavim / IdeaVim releases' project: parameters of 'Publish vim-engine' build configuration were updated 2023-07-20 14:03:06 +00:00
Alex Plate
d3660892ae Move publishing to a TC job 2023-07-20 17:00:40 +03:00
Alex Plate
78ea4e4e30 Set up publishing of the vim-engine library 2023-07-20 16:50:14 +03:00
Alex Plate
5ab985a7cc Update changelog after merging PR 2023-07-19 15:06:47 +00:00
Matt Ellis
6bd1782c4b Fix OS specific values in tests 2023-07-19 18:04:02 +03:00
Matt Ellis
2f5d402c61 Support :set! to output as a single column 2023-07-19 18:04:02 +03:00
Matt Ellis
8fb2ea5845 Output options in column order, not row order
This means that the last column might not be full, rather than the last row. Same as Vim.
2023-07-19 18:04:02 +03:00
Matt Ellis
a78e21a167 Use soft wraps instead of hard wraps in ex output
Hard wraps require figuring out the width of the panel, and all we have is the width of the associated editor, which excludes gutter, etc. Easier to let the UI toolkit handle it
2023-07-19 18:04:02 +03:00
Matt Ellis
2e9b626523 Fix formatting of value pair options 2023-07-19 18:04:02 +03:00
Matt Ellis
4487b8904c Sort options output before formatting
Sorts on option name, not including "no" prefix for toggle options
2023-07-19 18:04:02 +03:00
Matt Ellis
1f01f915dc Remove trailing padding from options list 2023-07-19 18:04:02 +03:00
Filipp Vakhitov
4222c71a69 Pre-release tasks 2023-07-18 11:48:56 +03:00
IdeaVim Bot
1d463cde90 Update changelog. Action id - 5561661508 2023-07-15 10:07:05 +00:00
Alex Plate
834d1476ce Replace VimDataContext with a dataContextWrapper
This should fix some issues like
https://jb-web.exa.aws.intellij.net/report/16130069
https://jb-web.exa.aws.intellij.net/report/16092668
2023-07-14 16:58:26 +03:00
filipp
a769a8d1a4 Fix(VIM-2818): Wrong caret position after multicaret paste 2023-07-14 16:24:36 +03:00
filipp
ece8c3821d Add test for VIM-481 2023-07-14 16:00:54 +03:00
filipp
2bc0c4c41b Better buffer storage 2023-07-14 15:06:03 +03:00
filipp
9e203898b6 Support more registers for secondary carets 2023-07-14 13:42:43 +03:00
filipp
58ad8417e5 Fix vim logger 2023-07-14 13:22:32 +03:00
Alex Plate
9c00927089 Use different commit format 2023-07-07 13:41:11 +03:00
Alex Plate
7c6964c6ef Use different commit format 2023-07-07 13:40:47 +03:00
Alex Plate
31a5104205 Remove incorrect item in changelog 2023-07-07 13:36:12 +03:00
Alex Plate
7bcf3858e8 Add ludwig-jb to contributors list 2023-07-07 10:31:44 +00:00
Alex Plate
fb3eb0da8a Use tags for workflows 2023-07-07 13:28:01 +03:00
Alex Plate
0e6d92dea7 Update changelog job 2023-07-07 13:23:46 +03:00
Alex Plate
c00ffe7fc3 Try to use tags to get last commit 2023-07-07 13:15:26 +03:00
Alex Plate
02b3f8bf02 Disable changelog update 2023-07-07 13:03:00 +03:00
Alex Plate
fe7afb0141 Try to use tags in the workflow 2023-07-07 12:56:31 +03:00
Alex Plate
1ec810b981 Switch to custom last-successful-commit-action 2023-07-07 12:36:59 +03:00
Alex Plate
3a2187ebad Try to use modified action 2023-07-07 12:24:42 +03:00
Alex Plate
fef6a1b090 Bring back the plugin in devendencies check 2023-07-07 12:24:42 +03:00
Alex Plate
2f5b39af54 Update changelog after merging PR 2023-07-07 08:49:32 +00:00
samabcde
d3f942aebc VIM-2920 fix select block expansion when enclose boundary is line break 2023-07-07 11:46:41 +03:00
Alex Plate
5df0db8845 Update changelog after merging PR 2023-07-07 08:01:10 +00:00
Ludwig Valda Vasquez
28887c1da2 Update VimMessages#updateStatusBar to accept VimEditor
This is required for vim support in Fleet.
2023-07-07 10:57:56 +03:00
Alex Plate
7053a225b8 Update the branch name 2023-06-30 14:25:58 +03:00
Alex Plate
54422801c3 Try to migrate to a different way to get last successful action 2023-06-30 14:22:53 +03:00
Alex Plate
56c464ba79 Update changelog 2023-06-30 10:07:38 +00:00
filipp
2582f1e907 Fix(VIM-1294): unvoluntary unfolding when using ideavim 2023-06-30 12:32:41 +03:00
Alex Plate
13139966ea Implement UserDataHolder for out VimDataContext
This is needed for fix Rider issues with put: https://youtrack.jetbrains.com/issue/RIDER-94213/StackOverflowError-when-using-GotoDeclaration-action-or-gd-with-IdeaVIM-plugin-in-Rider-2023.2#focus=Comments-27-7617177.0-0
2023-06-30 10:50:38 +03:00
Alex Plate
011bb78f69 Update changelog 2023-06-28 10:08:02 +00:00
Alex Pláte
2446ed20a6 Update README.md 2023-06-28 12:51:22 +03:00
filipp
c376feb4d8 Fix(VIM-2685): Register command outputs different values for same registers 2023-06-27 17:40:56 +03:00
filipp
fa0bcfa37a Remove duplicate file 2023-06-23 17:19:37 +03:00
filipp
6b70b11ffc Focus active tab after :tabclose 2023-06-23 17:05:09 +03:00
filipp
e474075778 Basic support for commands that were not added to grammar 2023-06-23 15:18:57 +03:00
filipp
1205bb67f2 VIM-2973 Multiline editing like "ciw" doesn't work well when have remappings to stop c and d from using the default register 2023-06-21 01:20:46 +03:00
filipp
10bcd20cd8 Retire obsolete commands
With all the gratefulness for 20 years of service. Thank you, pioneers of our plugin's legacy.
2023-06-20 15:59:09 +03:00
filipp
3a2e6e018d Add missing command tests 2023-06-20 15:59:09 +03:00
filipp
1b1680f7b0 Fix typo 2023-06-20 15:59:09 +03:00
filipp
6cc52570ac Add missing ExCommand annotations 2023-06-20 15:59:09 +03:00
filipp
6425791ed9 Attempt to avoid broken jsons after partial compilation 2023-06-20 15:59:09 +03:00
Alex Plate
4c7a720447 Update changelog 2023-06-17 10:07:41 +00:00
Alex Plate
23ac9f3faf Update changelog 2023-06-16 10:08:08 +00:00
Alex Plate
0192009482 Fix(VIM-2975): Fix the offset after the rendered docs 2023-06-15 14:25:09 +03:00
Alex Plate
2468c359a4 Disable test warning 2023-06-15 13:23:00 +03:00
Alex Plate
ae1ad9fd2e Update changelog 2023-06-14 10:07:36 +00:00
Alex Plate
3596748059 Prepare to 2.3.0 release 2023-06-14 09:25:02 +03:00
Alex Plate
407806e84c Update changelog 2023-06-14 09:25:02 +03:00
Alex Plate
b83909da9c Update changelog after merging PR 2023-06-12 07:42:26 +00:00
Martin Yzeiri
dd490967d3 Add Matchit PHP patterns 2023-06-12 10:39:45 +03:00
Martin Yzeiri
391202877a Extract tagNamePattern to an argument
Providing a custom tagNamePattern makes it easier to interop with
languages like PHP.
2023-06-12 10:39:45 +03:00
Martin Yzeiri
c48acd8fb7 Simplify JavaScript PSI checks
The less than/greater than operators are the only binary expressions in
the JS patterns, so the extra PSI checks are redundant.
2023-06-12 10:39:45 +03:00
Martin Yzeiri
c8428258fe Switch to linkedMapOf
mapOf happens to give us LinkedHashMaps, but we'll use the explicit
constructor since insertion order matters for PatternsTables.
2023-06-12 10:39:45 +03:00
Alex Plate
fc4feaa78c Update changelog 2023-06-07 10:07:42 +00:00
Alex Plate
1855f3b43f Disable detection of the java OOM on TeamCity
With the new version of gradle intellij plugin, it started to print a message that some configuration may cause OOM exception
Funny thing is that TeamCity has an automatic detection of OOM based on the text output.
So, the builds started to fail because TC used to thing that the OOM happened
2023-06-06 17:33:35 +03:00
aleksei.plate@jetbrains.com
50b848027c TeamCity change in 'Ideavim' project: general settings of 'Plugin verification' build configuration were updated 2023-06-06 14:29:49 +00:00
Alex Plate
7b71af9e1d Fix(VIM-2964): Fix an issue with leaking caret instance
Now I use the subscription to the disposer, but I think we can update it to the flow
2023-06-06 16:12:54 +03:00
Alex Plate
4814f0c895 Switch to the previous version of intellij gradle plugin
I've got a lot of OOM, trying to find a culprit
2023-06-06 14:53:32 +03:00
Alex Plate
192307ad52 Update verion of TC config 2023-06-06 14:42:23 +03:00
Alex Plate
e28c57432d Set stable IJ for releases as the current EAP frezes with the buildSearchableOption task 2023-06-06 14:39:31 +03:00
Alex Plate
911915266a Inline the writeFile function 2023-06-06 12:16:14 +03:00
Alex Plate
51c464f8d2 Fix out of bounds exception 2023-06-06 12:07:33 +03:00
filipp
30069564a7 Remove class 2023-06-06 10:42:42 +03:00
filipp
460553d8ae Avoid dependency to annotation-processors 2023-06-06 10:42:42 +03:00
filipp
cc2de42415 Moving from gorgeous YAML to good old JSON 2023-06-06 10:42:42 +03:00
filipp
b31aa57d81 build.gradle.kts cleanup 2023-06-06 10:42:42 +03:00
filipp
c9b9bb6cf8 Remove generated files for tests 2023-06-06 10:42:42 +03:00
filipp
89e74b2011 Remove unused import 2023-06-06 10:42:42 +03:00
filipp
434d882314 Add vimscriptfunctionannotation option 2023-06-06 10:42:42 +03:00
filipp
617d9d90ed Add excommandannotation option 2023-06-06 10:42:42 +03:00
filipp
f456e0a8dd Fix tests 2023-06-06 10:42:42 +03:00
filipp
2716255e22 Better paths 2023-06-06 10:42:42 +03:00
filipp
4d907213c3 Split ex-commands in YAML 2023-06-06 10:42:42 +03:00
filipp
ee704f53c7 Support lazy ex command classloading 2023-06-06 10:42:42 +03:00
filipp
74237365f1 Fix LazyVimscriptFunction 2023-06-06 10:42:42 +03:00
filipp
8aeab29303 Annotate ex-commands 2023-06-06 10:42:42 +03:00
filipp
ff945e7b8a Add ExCommand annotation 2023-06-06 10:42:42 +03:00
filipp
9707704f57 Minor refactoring 2023-06-06 10:42:42 +03:00
filipp
7491d19309 Add yaml files 2023-06-06 10:42:42 +03:00
filipp
fb74e5e731 Fix tests 2023-06-06 10:42:42 +03:00
filipp
627c8a6eca Move some functions to engine 2023-06-06 10:42:42 +03:00
filipp
8094758a82 Add function providers 2023-06-06 10:42:42 +03:00
filipp
f143b6ee9f Rename KSP options 2023-06-06 10:42:42 +03:00
filipp
77cef909fb Add comment to YAML 2023-06-06 10:42:42 +03:00
filipp
063d3949cf Better YAML 2023-06-06 10:42:42 +03:00
filipp
c1b87eba03 Annotate functions 2023-06-06 10:42:42 +03:00
filipp
bae52964cd Add VimscriptFunction annotation 2023-06-06 10:42:42 +03:00
Alex Plate
06021c1b79 Update changelog after merging PR 2023-06-01 07:39:37 +00:00
samabcde
437932cd57 VIM-1990 fix repeat delete find or till wrong MotionType 2023-06-01 10:36:28 +03:00
Alex Plate
6cc16aa72b Update changelog 2023-05-31 10:08:03 +00:00
Alex Plate
b48950ff3a Fix(VIM-2953): The previous fix for :q command caused weird behavior of tab closing
The initial change was caused by VIM-2912 in a8f0145333, but when I took the old function back, it seems that both issues are fixed.
2023-05-31 11:41:25 +03:00
Alex Plate
c397c77809 Add Sam Ng to contributors list 2023-05-30 09:03:46 +00:00
Alex Plate
e8f31bc2bd Update changelog after merging PR 2023-05-29 11:43:45 +00:00
samabcde
4e7149c945 VIM-2615 add support to sort u command, fix natural sort issue when both string not contain number 2023-05-29 14:41:06 +03:00
Alex Plate
064379b9e0 Add names of run confugrations so they can be started right from IJ 2023-05-19 18:03:09 +03:00
Alex Plate
48b18da953 Get text object parameters from the operatorArguments 2023-05-19 10:21:18 +03:00
Alex Plate
904ca5d529 Remove argument argument from text object 2023-05-19 10:16:23 +03:00
Alex Plate
05986d017d Remove deprecated function 2023-05-19 09:52:06 +03:00
Alex Plate
aabe56e8b3 Disable alternative context resolve during copy because of binary incompatibility with the newer version of EAP 2023-05-17 13:08:07 +03:00
Alex Plate
fc07ec3db3 Fix compilation for the new version of EAP 2023-05-17 12:39:39 +03:00
Alex Plate
2e8454907d Fix esc for replace in octopus mode
VIM-2938
2023-05-17 12:39:39 +03:00
Alex Plate
72ed659833 Update changelog after merging PR 2023-05-17 08:56:53 +00:00
Matt Ellis
94ef9692f2 Fix typo in ideajoin notification 2023-05-17 10:54:13 +02:00
Matt Ellis
798750bf95 Use options API for more cached values 2023-05-17 10:54:13 +02:00
Matt Ellis
e8d9bd551f Add helper functions to storage service 2023-05-17 10:54:13 +02:00
Matt Ellis
d08ea2ee9b Introduce simple cache for parsed option values 2023-05-17 10:54:13 +02:00
Matt Ellis
52dcb2d290 Treat 'iskeyword' as a local-to-buffer option 2023-05-17 10:54:13 +02:00
Matt Ellis
4cc883f174 Refactor search helper companion to interface
Helper functions now take the editor rather than the text, ready for search to rely on per-editor options (i.e. '`iskeyword'`). Also standardises on `Int` for search parameters. While the file size is a `Long`, the editor returns a `CharSequence`, which is indexed by `Int`.
2023-05-17 10:54:13 +02:00
Matt Ellis
5a3c5bd761 Treat 'virtualedit' as a global-local option 2023-05-17 10:54:13 +02:00
Matt Ellis
66830b7cb3 Treat 'idearefactor' as a global-local option 2023-05-17 10:54:13 +02:00
Matt Ellis
b742865e8a Treat 'ideajoin' as a global-local option 2023-05-17 10:54:13 +02:00
Matt Ellis
fd314a3288 Treat 'matchpairs' as a local option 2023-05-17 10:54:13 +02:00
Alex Plate
87a52d9592 Update changelog 2023-05-14 10:08:42 +00:00
filipp
527b321ee0 Fix(VIM-2945): %-movement mismatches braces 2023-05-14 00:09:00 +03:00
Alex Plate
5122a33f30 Update changelog 2023-05-08 10:08:22 +00:00
filipp
d89fbeea62 Fix(VIM-2930): vim-multiple-cursors + ReplaceWithRegister issue 2023-05-07 23:51:05 +03:00
filipp
e4f7700044 Refactoring
Update method signatures and return types:
- Getting rid of "magic constants" (e.g. -1) and replacing them with nullable
- Replacing direction Int with Enum
- JetBrains annotations
2023-05-05 09:41:27 +03:00
filipp
a1d0c3ebf4 Remove println 2023-05-05 09:41:27 +03:00
filipp
2088c1ce00 Move more methods to engine 2023-05-05 09:41:27 +03:00
Alex Plate
ec164daf0e Update codeql version 2023-05-02 09:17:05 +03:00
Alex Plate
94c38cefac Remove bunny plugin from compatibility checks 2023-05-02 09:09:26 +03:00
Alex Plate
2a5d218a94 Update changelog after merging PR 2023-04-26 08:17:39 +00:00
Martin Yzeiri
bcf10a0b8e Matchit: Ignore JS comparison operators
In files that mix HTML and JavaScript, arrow functions or forms like (x > y)
conflict with the brackets on HTML tags. We can ignore those JS elements
using PSI checks like we do for some Ruby keywords.
2023-04-26 11:14:06 +03:00
Martin Yzeiri
546137c0f5 Matchit: Correct HTML regex
A final closing > is required on the search pair, otherwise tags with a
shared prefix in their names will conflict.
2023-04-26 11:14:06 +03:00
Martin Yzeiri
92bc691e1f Matchit: Improve comment handling
Since the cursor can come before the start of the matching pair, we need
to check the PSI element at the first match offset, not the caret offset,
when deciding if we need to skip comments.

This fix makes the special isHtmlAttribute check unnecessary. If the caret
is in an HTML attribute, the first match offset will point to the start
of the tag.
2023-04-26 11:14:06 +03:00
Martin Yzeiri
d834d0fdd9 Move a unit test 2023-04-26 11:14:06 +03:00
dependabot[bot]
74b88d07a0 Bump org.mockito.kotlin:mockito-kotlin from 4.0.0 to 4.1.0
Bumps [org.mockito.kotlin:mockito-kotlin](https://github.com/mockito/mockito-kotlin) from 4.0.0 to 4.1.0.
- [Release notes](https://github.com/mockito/mockito-kotlin/releases)
- [Commits](https://github.com/mockito/mockito-kotlin/compare/4.0.0...4.1.0)

---
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>
2023-04-26 11:11:04 +03:00
Alex Plate
57f5d3310a Update gradle version to 8 2023-04-26 11:09:39 +03:00
Alex Plate
a5495b1d92 Update intellij gradle plugin version 2023-04-26 10:59:05 +03:00
Alex Plate
fb623be741 Remove ktlint baseline 2023-04-26 10:57:55 +03:00
Alex Plate
30e69e13fd Update kotlin version to 1.8.21 2023-04-26 10:57:54 +03:00
dependabot[bot]
17346c255e Bump org.jetbrains:annotations from 23.0.0 to 24.0.1
Bumps [org.jetbrains:annotations](https://github.com/JetBrains/java-annotations) from 23.0.0 to 24.0.1.
- [Release notes](https://github.com/JetBrains/java-annotations/releases)
- [Changelog](https://github.com/JetBrains/java-annotations/blob/master/CHANGELOG.md)
- [Commits](https://github.com/JetBrains/java-annotations/compare/23.0.0...24.0.1)

---
updated-dependencies:
- dependency-name: org.jetbrains:annotations
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-04-26 10:46:14 +03:00
dependabot[bot]
6fc83b8245 Bump io.ktor:ktor-serialization-kotlinx-json from 2.1.3 to 2.3.0
Bumps [io.ktor:ktor-serialization-kotlinx-json](https://github.com/ktorio/ktor) from 2.1.3 to 2.3.0.
- [Release notes](https://github.com/ktorio/ktor/releases)
- [Changelog](https://github.com/ktorio/ktor/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ktorio/ktor/commits)

---
updated-dependencies:
- dependency-name: io.ktor:ktor-serialization-kotlinx-json
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-04-26 10:46:00 +03:00
Alex Plate
b9fb6cacbe Update changelog after merging PR 2023-04-26 07:27:50 +00:00
Matt Ellis
29bd7cbe6e Update note to include how to add an option 2023-04-26 10:26:06 +03:00
Matt Ellis
a51fc9c612 Add extra notes about the history of refactorings 2023-04-26 10:26:06 +03:00
Matt Ellis
77ad9deeba Use interface for IJ specific options 2023-04-26 10:26:06 +03:00
Matt Ellis
ffa6c45b62 Reset test injector after each test 2023-04-26 10:26:06 +03:00
Matt Ellis
957874ce2b Remove unused @JvmField annotations 2023-04-26 10:26:06 +03:00
Matt Ellis
330d92116c Refine inheritance of IJ specific option classes 2023-04-26 10:26:06 +03:00
Matt Ellis
899adfc1b0 More refactoring to use new API 2023-04-26 10:26:06 +03:00
Matt Ellis
23535a6ad5 Remove OptionValueAccessor 2023-04-26 10:26:06 +03:00
Matt Ellis
e8b7f00370 Remove accessor from new API 2023-04-26 10:26:06 +03:00
Matt Ellis
3f2c5070ee Migrate local option access to new API 2023-04-26 10:26:06 +03:00
Matt Ellis
a2352525c5 Migrate global option access to new API
Also fixes some incorrect usages of local options as global, e.g. 'ideajoin' and 'scroll'. There are some options that should be local that are only ever accessed at global scope. These need fixing in the future, e.g. 'iskeyword', 'matchpairs' and 'virtualedit'
2023-04-26 10:26:06 +03:00
Matt Ellis
50384a526b Introduce option accessor delegated properties
Also migrates tests to use new properties
2023-04-26 10:26:06 +03:00
Matt Ellis
9ade3365ff Extract StringListOption
While it is conceptually very similar to StringOption, the implementation of list vs not-list operations are very different, and having a separate type will allow us to do more interesting things with overloading when we introduce delegate properties
2023-04-26 10:26:06 +03:00
Alex Plate
a6932cd5be Remove XML configurations 2023-04-25 10:23:20 +03:00
aleksei.plate@jetbrains.com
81d5c06ca3 TeamCity change in 'Ideavim' project: Synchronization with own VCS root is enabled 2023-04-25 07:20:11 +00:00
Alex Plate
95d2adb8b8 Update changelog 2023-04-20 10:06:32 +00:00
Alex Plate
c91355a1e4 Dumb change: add new line 2023-04-20 11:52:05 +03:00
Alex Plate
a9b16ca2c0 Add to be released section 2023-04-20 11:49:27 +03:00
Alex Plate
0fc04c3ff6 Preparations for 2.2.0 release 2023-04-20 09:43:22 +03:00
filipp
6473ad02a0 Add test for next paragraph motion 2023-04-19 15:25:44 +03:00
filipp
8107f669cd Fix ReplaceWithRegister with single caret 2023-04-19 15:22:49 +03:00
filipp
2f55d92d83 Move more methods to engine 2023-04-19 15:07:06 +03:00
Alex Plate
722ec7f8fb Update configurations 2023-04-15 00:00:52 +03:00
aleksei.plate@jetbrains.com
63442a93e7 TeamCity change in 'Ideavim' project: copy of 'IdeaVim Repository' VCS root was created 2023-04-14 20:58:08 +00:00
aleksei.plate@jetbrains.com
1ce594fa64 TeamCity change in 'Ideavim' project: 'IdeaVim Pull Requests' VCS root was updated 2023-04-14 20:57:04 +00:00
Alex Plate
197b8d7850 Use correct GH publisher 2023-04-14 23:40:51 +03:00
Alex Plate
d51aec080b Use old github configuration 2023-04-14 23:39:37 +03:00
Alex Plate
0239f78889 Update GH configuration 2023-04-14 23:36:19 +03:00
Alex Plate
651cefca30 Update .teamcity dsl 2023-04-14 23:34:00 +03:00
Alex Plate
f4be162aea Fix issue with missing key-repeat dialog on new mac machine 2023-04-14 23:14:01 +03:00
Alex Plate
85636d91dc Update changelog 2023-04-14 10:06:44 +00:00
aleksei.plate@jetbrains.com
7b643430d1 TeamCity change in 'Ideavim / Pull Requests checks' project: triggers of 'GitHub Pull Requests Tests' build configuration were updated 2023-04-13 13:33:25 +00:00
aleksei.plate@jetbrains.com
499033947c TeamCity change in 'Ideavim / Pull Requests checks' project: build features of 'GitHub Pull Requests Tests' build configuration were updated 2023-04-13 13:19:58 +00:00
Alex Plate
7489abc56d Update GH configuration 2023-04-13 16:17:03 +03:00
Alex Plate
c64810509f Fix(VIM-2909): Fix incorrect file detection while closing diff window 2023-04-13 15:58:56 +03:00
Alex Plate
32ccaabaa7 Update changelog 2023-04-12 10:06:44 +00:00
Alex Plate
a8f0145333 Fix(VIM-2912): Fix focus after :q 2023-04-12 11:01:03 +03:00
Alex Plate
6e6fc8d998 Update links to TeamCity 2023-04-05 23:05:27 +03:00
Alex Plate
646e34a5c7 Use better name for tests 2023-04-05 22:57:48 +03:00
Alex Plate
8d43329b6e Another character vanish 2023-04-05 22:48:15 +03:00
Alex Plate
38aca96472 Vanish build ids 2023-04-05 22:46:32 +03:00
Alex Plate
4cd06076c7 Fix incorrect test names 2023-04-05 22:43:35 +03:00
Alex Plate
b485a1406e Define ids for tests 2023-04-05 22:36:32 +03:00
Alex Plate
cc0aa08d91 Another refactoring 2023-04-05 22:31:39 +03:00
Alex Plate
4dd958a538 Cleanup testing configurations 2023-04-05 22:20:13 +03:00
Alex Plate
83d2d1da4f Use medium agents for all build configurations 2023-04-05 22:03:30 +03:00
Alex Plate
24e69bec2b Make abstract build type 2023-04-05 21:58:35 +03:00
Alex Plate
ca337dcca2 Define agent requirements on the project level 2023-04-05 21:52:06 +03:00
Alex Plate
2944c48744 Remove name requirement 2023-04-05 21:42:48 +03:00
Alex Plate
278e7d1a4d Add CPU requirement 2023-04-05 21:39:15 +03:00
Alex Plate
22e090a0f4 Update agent requirement 2023-04-05 21:33:32 +03:00
Alex Plate
ac918eff16 Use correct requirement 2023-04-05 21:26:39 +03:00
Alex Plate
e8aaeac7dc Use different agent name 2023-04-05 21:20:19 +03:00
Alex Plate
1769c1006c Try to use different param 2023-04-05 21:18:21 +03:00
Alex Plate
920a6fe74c Specify medium agents for dev builds 2023-04-05 21:14:17 +03:00
Alex Plate
bc41ce46a7 Fix incorrect branch for dev builds 2023-04-05 20:57:27 +03:00
Alex Plate
8c2b5671f1 Cleanup vcs source roots for TC 2023-04-05 20:52:30 +03:00
Alex Plate
d0d53d7d20 Update TC configurations 2023-04-05 20:13:04 +03:00
Alex Plate
902272f08c Update changelog 2023-04-04 09:06:47 +03:00
Alex Plate
a8b8b56a7e Update GH actions to avoid conflicts 2023-04-04 09:04:26 +03:00
Alex Plate
d628db1dcc Add Silence Tai to contributors list 2023-04-04 05:03:35 +00:00
Stzx
26ed6670d5 Fix dispose operation 2023-04-04 08:02:03 +03:00
Alex Pláte
0aa4ea7bc8 Update updateAffectedRate.yml 2023-04-04 07:59:34 +03:00
dependabot[bot]
34fdd71f37 Bump com.dorongold.task-tree from 2.1.0 to 2.1.1
Bumps com.dorongold.task-tree from 2.1.0 to 2.1.1.

---
updated-dependencies:
- dependency-name: com.dorongold.task-tree
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-04-03 19:40:50 +03:00
Alex Pláte
4a134783b4 Update updateAffectedRate.yml 2023-04-01 16:34:22 +03:00
Alex Plate
bf5ce1f6a5 Try to use different token to youtrack 2023-04-01 10:57:08 +03:00
Alex Plate
00193891fa Add missing youtrack token 2023-04-01 10:51:04 +03:00
Alex Plate
4640c347c7 Set affected rate field on YouTrack automatically 2023-04-01 10:47:59 +03:00
Alex Plate
260bb47434 Different approach for getting editor during bookmarks initialization in order to get rid of slow operations exception 2023-04-01 09:01:19 +03:00
Alex Plate
9d7872e64e Update initialization instructions 2023-03-31 17:39:06 +03:00
filipp
31bdc23b3c Add support for variables in exists function 2023-03-31 17:37:57 +03:00
Matt Ellis
f803c0aa72 Add deterministic initialisation of options 2023-03-31 17:37:48 +03:00
Matt Ellis
531b0e3537 Provide an API to override option default value
This is specifically to support ideaput in 'clipboard'
2023-03-31 17:37:48 +03:00
Matt Ellis
cbf6c30be6 Make option value accessor more strongly typed 2023-03-31 17:37:48 +03:00
Matt Ellis
a6f62dd837 Remove unnecessary assert
checkIfValueValid will check datatype is correct
2023-03-31 17:37:48 +03:00
Matt Ellis
18d52c2459 Make addListener more strongly typed 2023-03-31 17:37:48 +03:00
Matt Ellis
ee55cfd2dd Improve handling of variance with setOptionValue
With the `out` modifier, the compiler won't report a problem trying to assign `VimInt` to an `Option<VimString>`
2023-03-31 17:37:48 +03:00
Matt Ellis
3ab5fc1120 Improve handling of variance 2023-03-31 17:37:48 +03:00
Matt Ellis
f7f60f5079 Fix warnings 2023-03-31 17:37:48 +03:00
Matt Ellis
b7dcff79ae Improve modifyOptionValue 2023-03-31 17:37:48 +03:00
Matt Ellis
c857b9d6dd Make functions private to SetCommand 2023-03-31 17:37:48 +03:00
Matt Ellis
8f8c05e451 Remove string based option helper functions 2023-03-31 17:37:48 +03:00
Matt Ellis
af3ebe60f4 Use strongly typed options instead of constants 2023-03-31 17:37:48 +03:00
Matt Ellis
be64d24c00 Introduce strongly typed properties for options 2023-03-31 17:37:48 +03:00
Matt Ellis
8f04575efd Extract IJ specific options to own file 2023-03-31 17:37:48 +03:00
Matt Ellis
4e1b8f3ec4 Extract IJ specific options to own class 2023-03-31 17:37:48 +03:00
Matt Ellis
c8ca6671ab Remove unused functions 2023-03-31 17:37:48 +03:00
Matt Ellis
88f0d2e532 Replace constants with strongly typed properties 2023-03-31 17:37:48 +03:00
Matt Ellis
76a4499c9f Introduce properties for option definitions 2023-03-31 17:37:48 +03:00
Matt Ellis
e1bd790294 Add tests to ensure ideaput is added or required 2023-03-31 17:37:48 +03:00
Matt Ellis
6d193ca1f8 Extract option definitions to own file 2023-03-31 17:37:48 +03:00
Matt Ellis
d932172e70 Extract option definitions to own class 2023-03-31 17:37:48 +03:00
Matt Ellis
9bbf5824fe Use lazy property delegate 2023-03-31 17:37:48 +03:00
Matt Ellis
d042ee3058 Move octopushandler option out of vim-engine 2023-03-31 17:37:48 +03:00
Alex Plate
fe598b14a1 Modify update authors job 2023-03-31 17:14:28 +03:00
Alex Plate
24df3be8f1 Print more logging in case the vim shortcut is disabled 2023-03-31 17:13:25 +03:00
filipp.vakhitov
2cce67bc27 TeamCity change in 'IntelliJ IDEA plugins / IdeaVim' project: 'Merge Dependabot PR' build configuration was removed 2023-03-31 13:26:44 +00:00
filipp.vakhitov
ae6003d000 TeamCity change in 'IntelliJ IDEA plugins / IdeaVim' project: triggers of 'Merge Dependabot PR' build configuration were updated 2023-03-31 13:09:03 +00:00
filipp.vakhitov
fe8b03dc1c TeamCity change in 'IntelliJ IDEA plugins / IdeaVim' project: general settings of 'Merge Dependabot PR' build configuration were updated 2023-03-31 12:55:28 +00:00
filipp.vakhitov
977b27de90 TeamCity change in 'IntelliJ IDEA plugins / IdeaVim' project: 1 build step(s) were added to 'Merge Dependabot PR' build configuration 2023-03-31 12:49:58 +00:00
filipp.vakhitov
570cf14fe8 TeamCity change in 'IntelliJ IDEA plugins / IdeaVim' project: build configuration was created from URL 2023-03-31 12:48:32 +00:00
dependabot[bot]
7c369900ce Bump io.ktor:ktor-client-cio from 2.1.3 to 2.2.4
Bumps [io.ktor:ktor-client-cio](https://github.com/ktorio/ktor) from 2.1.3 to 2.2.4.
- [Release notes](https://github.com/ktorio/ktor/releases)
- [Changelog](https://github.com/ktorio/ktor/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ktorio/ktor/compare/2.1.3...2.2.4)

---
updated-dependencies:
- dependency-name: io.ktor:ktor-client-cio
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-03-31 09:49:32 +00:00
Alex Plate
8464711b89 Update changelog 2023-03-31 09:47:27 +00:00
Alex Plate
0f07e4bdc3 Fix(VIM-2896): Correct ordering of handlers 2023-03-31 12:45:54 +03:00
dependabot[bot]
de7736ec76 Bump io.ktor:ktor-client-core from 2.1.3 to 2.2.4
Bumps [io.ktor:ktor-client-core](https://github.com/ktorio/ktor) from 2.1.3 to 2.2.4.
- [Release notes](https://github.com/ktorio/ktor/releases)
- [Changelog](https://github.com/ktorio/ktor/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ktorio/ktor/compare/2.1.3...2.2.4)

---
updated-dependencies:
- dependency-name: io.ktor:ktor-client-core
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-03-31 09:45:37 +00:00
dependabot[bot]
4568db387a Bump io.ktor:ktor-client-auth from 2.1.3 to 2.2.4
Bumps [io.ktor:ktor-client-auth](https://github.com/ktorio/ktor) from 2.1.3 to 2.2.4.
- [Release notes](https://github.com/ktorio/ktor/releases)
- [Changelog](https://github.com/ktorio/ktor/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ktorio/ktor/compare/2.1.3...2.2.4)

---
updated-dependencies:
- dependency-name: io.ktor:ktor-client-auth
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-03-31 09:45:16 +00:00
dependabot[bot]
3661cfd4c9 Bump io.ktor:ktor-client-content-negotiation from 2.1.3 to 2.2.4
Bumps [io.ktor:ktor-client-content-negotiation](https://github.com/ktorio/ktor) from 2.1.3 to 2.2.4.
- [Release notes](https://github.com/ktorio/ktor/releases)
- [Changelog](https://github.com/ktorio/ktor/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ktorio/ktor/compare/2.1.3...2.2.4)

---
updated-dependencies:
- dependency-name: io.ktor:ktor-client-content-negotiation
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-03-31 09:44:21 +00:00
filipp
f9ac515d3d Replace merge with rebase 2023-03-31 12:42:44 +03:00
filipp
b7f1394357 Add action to automatically merge Dependabot PR 2023-03-31 12:38:18 +03:00
Alex Plate
25872ccf84 Remove ktlint from build configuration 2023-03-31 11:26:38 +03:00
Alex Plate
0efd81142d Remove ktlint from configurations 2023-03-31 11:22:41 +03:00
Alex Plate
1699e8521d Add new plugin that has a dependency on IdeaVim 2023-03-31 11:22:41 +03:00
filipp
f4068301ff Add information about text range in original script for executable 2023-03-31 11:00:39 +03:00
aleksei.plate
2a6b6f89f4 TeamCity change in 'IntelliJ IDEA plugins / IdeaVim' project: project parameters were changed 2023-03-30 04:55:46 +00:00
aleksei.plate
ca459bef0d TeamCity change in 'IntelliJ IDEA plugins / IdeaVim' project: project parameters were changed 2023-03-30 04:55:10 +00:00
aleksei.plate
9980ef7db9 TeamCity change in 'IntelliJ IDEA plugins / IdeaVim' project: project parameters were changed 2023-03-30 04:53:54 +00:00
Alex Plate
d6b2cdb66a Add plugin sign variables 2023-03-30 07:50:56 +03:00
Alex Plate
832c1c0be3 Revert "Update formatting"
This reverts commit bf0fba9c58.
2023-03-27 11:32:59 +03:00
Alex Plate
bf0fba9c58 Update formatting 2023-03-27 08:27:13 +00:00
Alex Plate
ae5678128b Fix an incorrect version of github action 2023-03-27 11:24:58 +03:00
Alex Plate
6395a4cefc Fix an incorrect version of github action 2023-03-27 11:23:13 +03:00
Alex Plate
1a3491a50f Try to use IJ formatter instead of ktlint 2023-03-27 11:21:10 +03:00
Alex Plate
0f8b67e6ce Reformat files 2023-03-27 11:14:00 +03:00
Alex Plate
1e17db6d21 Add lorem ipsum tests to dictionary 2023-03-20 17:42:28 +02:00
Alex Plate
03bd4bbeed Use Lorem Ipsum for tests 2023-03-20 17:31:31 +02:00
Alex Pláte
ff907893d0 Update README.md 2023-03-20 15:50:46 +02:00
Alex Plate
d104eef064 Update changelog 2023-03-17 11:28:14 +00:00
Alex Plate
f0505b8919 Fix(VIM-2433): Do not clear clipboard after inserting with ideaput 2023-03-17 13:26:13 +02:00
Alex Plate
db12fbe725 Get rid of test clipboard manager 2023-03-17 11:56:50 +02:00
Alex Plate
f88580eb88 Get rid of editor setup function 2023-03-17 10:21:10 +02:00
Alex Plate
dbfce696b9 Make some multicaret tests more stable 2023-03-16 18:05:39 +02:00
Alex Plate
bca5af9c23 Enable some tests with missing @Test annotation 2023-03-16 14:55:05 +02:00
Alex Plate
381abf7c40 Simple fix for the code 2023-03-16 13:36:09 +02:00
Alex Plate
1a2112daf9 Fix code compilation 2023-03-16 13:18:47 +02:00
Alex Plate
e30e194b91 Code cleanup 2023-03-16 13:05:37 +02:00
Alex Plate
edf9962abf Introduce new mechanizm for options testing 2023-03-16 13:01:42 +02:00
Alex Plate
fd896c4af6 Pass testInfo to tear down 2023-03-16 10:52:53 +02:00
Alex Plate
0ae57af270 Do not track action ids for vim actions 2023-03-16 10:52:53 +02:00
Alex Plate
123c8ded11 Rename product function 2023-03-16 10:52:53 +02:00
Alex Plate
0510fe8530 Ktlint format 2023-03-16 10:52:52 +02:00
Alex Plate
3ebaf38486 Fix bug in nerdtree 2023-03-16 10:52:51 +02:00
filipp
84fc962bb0 ReplaceWithRegister 2023-03-15 18:42:22 +02:00
filipp
814bc20cf7 Add more VimScript tests 2023-03-15 14:20:33 +02:00
Alex Plate
6b76270d51 Reformat code 2023-03-15 07:59:25 +02:00
dependabot[bot]
35142e5204 Bump junit-jupiter-engine from 5.8.1 to 5.9.2
Bumps [junit-jupiter-engine](https://github.com/junit-team/junit5) from 5.8.1 to 5.9.2.
- [Release notes](https://github.com/junit-team/junit5/releases)
- [Commits](https://github.com/junit-team/junit5/compare/r5.8.1...r5.9.2)

---
updated-dependencies:
- dependency-name: org.junit.jupiter:junit-jupiter-engine
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-03-14 18:28:02 +02:00
Alex Plate
d313845c84 Update changelog 2023-03-14 13:26:22 +00:00
filipp
21162ba34e Fix(VIM-2286): Set surround not working for me as expected 2023-03-14 15:24:11 +02:00
Alex Plate
e162dc44d1 Enable JUnit5 in all types of tests 2023-03-14 14:33:06 +02:00
Alex Plate
153a36d4e9 Rename method 2023-03-14 14:08:39 +02:00
Alex Plate
9271ca082c Migration of tests to JUnit 5 2023-03-14 14:05:35 +02:00
Alex Plate
0389ea803d Update changelog 2023-03-13 23:16:52 +00:00
filipp
0fea44f735 Fix(VIM-1750): Surround with tag wrong position 2023-03-14 01:14:35 +02:00
Alex Plate
c01cad1c9d Update changelog 2023-03-13 22:25:37 +00:00
filipp
b383706bfb Fix(VIM-1746): IdeaVim Surround removes unwanted characters 2023-03-14 00:23:45 +02:00
filipp
a78f66fd36 Better multiple caret support for surround 2023-03-14 00:23:44 +02:00
Alex Plate
bef57f75c0 Update changelog 2023-03-13 21:55:49 +00:00
filipp
48ec19d9bf Fix(VIM-1551): Surround: line surround not working 2023-03-13 23:45:05 +02:00
filipp
f4198a0409 Add Oskar Persson to contributors list 2023-03-13 19:57:56 +02:00
filipp
9454ebcb35 Move some methods to engine 2023-03-13 19:34:14 +02:00
Alex Plate
441721b63f Reformat source code 2023-03-13 11:44:02 +02:00
Alex Plate
0eda85c95e Enable explicitApiMode for vim-engine 2023-03-13 11:39:50 +02:00
Alex Plate
01e4c80adb Remove traces of the experimental API 2023-03-13 10:29:09 +02:00
Alex Plate
0e8ec4d445 Set visibility for classes in vim-engine 2023-03-13 10:22:53 +02:00
Alex Plate
ae18ccb8cd Add new word to the doc 2023-03-13 09:35:24 +02:00
Alex Plate
ad63afc242 Add more info to the issue report 2023-03-13 09:35:24 +02:00
Alex Plate
f48f8a9643 Add Dani Sevastianov to contributors list 2023-03-13 07:08:20 +00:00
Alex Plate
eae65b6512 Update changelog after merging PR 2023-03-13 07:05:21 +00:00
Dani Sevastianov
02ff5cb24b Fix quick-scope setup documentation 2023-03-13 09:03:37 +02:00
Alex Plate
8210b122bc Update version of kt lint and reformat files 2023-03-13 09:01:38 +02:00
Alex Plate
a0d3cf561b Apply ktlint reformat 2023-03-13 08:43:52 +02:00
Alex Plate
d7c1c77861 Update changelog 2023-03-11 22:22:11 +00:00
filipp
f385c3fa21 Fix(VIM-795): Ctrl-w + h doesn't alway work (window navigation to the left window) 2023-03-12 00:20:08 +02:00
Alex Plate
e07a077da9 Update changelog 2023-03-11 18:03:45 +00:00
filipp
7768c9147d Fix(VIM-2819): Move command works incorrectly 2023-03-11 20:01:55 +02:00
Alex Plate
c5c9877b40 Update changelog 2023-03-10 21:48:13 +00:00
filipp
3ddd4a1a58 Fix(VIM-2868): Pasting in visual mode with P should not replace yank register like when pasting with p 2023-03-10 23:30:35 +02:00
Alex Plate
3c85215011 Update changelog 2023-03-10 20:50:08 +00:00
filipp
2369814092 Fix(VIM-2884): Moving multiple lines in visual mode is not working 2023-03-10 22:48:16 +02:00
Alex Plate
6970a764c4 Update changelog 2023-03-10 19:22:34 +00:00
filipp
4c7c3dba00 Fix(VIM-2733): vim-surround emulation interacts incorrectly with unmatched quotes on previous lines 2023-03-10 21:20:18 +02:00
filipp
aebad12bbe Add some useful methods to work with strings 2023-03-10 20:39:13 +02:00
Alex Plate
8593e7a6ac Small reformat of kotlin script 2023-03-10 19:03:35 +02:00
Alex Plate
119975c313 Remove experimental API 2023-03-10 18:30:07 +02:00
Alex Plate
27c3a95ec6 Provide visibility for some classes 2023-03-10 18:15:48 +02:00
Alex Plate
d5eaf85473 Better support for esc in octopus mode 2023-03-10 14:33:31 +02:00
Alex Plate
7f4c967a20 Fix compilation in tests 2023-03-10 13:34:19 +02:00
Alex Plate
8066ac2819 Enable explicit api mode for vim-engine
But without fixes as there are 3000 violations
2023-03-10 13:23:24 +02:00
Alex Plate
66172c843d Enable explicit api mode for IdeaVim 2023-03-10 13:20:29 +02:00
Alex Plate
88b3373e5c Add option to enable octopus handler 2023-03-10 12:11:17 +02:00
Alex Plate
320d91d639 Add esc to octopus handler 2023-03-10 12:00:41 +02:00
Alex Plate
24d118e225 Update changelog after merging PR 2023-03-10 08:19:21 +00:00
Matt Ellis
c192f319d1 Simplify setting known options a little 2023-03-10 10:17:45 +02:00
Matt Ellis
097dfa06a6 Add a couple of convenience functions 2023-03-10 10:17:45 +02:00
Matt Ellis
90ca544d0a Move getter helpers out of the options interface
The interface now has a simple setter and getter, as well as other functions for managing options. More friendly functions for getting and setting values are available as extension functions
2023-03-10 10:17:45 +02:00
Matt Ellis
2bc9640b88 Remove last of 'set' validation code 2023-03-10 10:17:45 +02:00
Matt Ellis
40ffddf5ef Push toggle option validation into ':set' command 2023-03-10 10:17:45 +02:00
Matt Ellis
bd28c9da23 Push more ':set' command validation into command 2023-03-10 10:17:45 +02:00
Matt Ellis
11ef024779 Move ':set' command validation out of interface
Moves functions that require validation parameters to extension functions. Core interface should not require additional user facing paramter
2023-03-10 10:17:45 +02:00
Matt Ellis
40d9a201ea Use bundle for exception messages 2023-03-10 10:17:45 +02:00
Matt Ellis
6e2ac21fab Refactor getDefaultValue into property 2023-03-10 10:17:45 +02:00
Matt Ellis
7858cf57c6 Fix number operations for set command 2023-03-10 10:17:45 +02:00
Matt Ellis
91c8e7ebda Rename getOptionByNameOrAbbrev 2023-03-10 10:17:45 +02:00
Matt Ellis
6332ee6955 Remove unnecessary argument text 2023-03-10 10:17:45 +02:00
Matt Ellis
3c3014fdc6 Remove unused getAbbrevs function 2023-03-10 10:17:45 +02:00
Matt Ellis
d97e4c44ee Rename "token" and remove default argument 2023-03-10 10:17:45 +02:00
Matt Ellis
1b88c514da Move IjVimOptionGroup to correct package & rename 2023-03-10 10:17:45 +02:00
Matt Ellis
96c1094a61 Replace OptionService with VimOptionGroup
Leaves a skeleton, deprecated implementation of OptionService for existing external use by plugins
2023-03-10 10:17:45 +02:00
Matt Ellis
b3551b4ee5 Remove empty file 2023-03-10 10:17:45 +02:00
Matt Ellis
4232d3d8a2 Remove unused local options types 2023-03-10 10:17:45 +02:00
Matt Ellis
73b64c19ff Move OptionValueAccessor to options package 2023-03-10 10:17:45 +02:00
Matt Ellis
15ccdb2055 Remove unnecessary getOptionServiceImpl 2023-03-10 10:17:45 +02:00
Matt Ellis
418067b077 Remove unused deprecated method
No external usages
2023-03-10 10:17:45 +02:00
Matt Ellis
88b29d1a14 Isolate and remove deprecated code
Moves ToggleOption to the proper package, leaving behind a skeleton class to keep ideavim-sneak and IdeaVim-EasyMotion happy.

Removes NumberOption and related number OptionsManager properties which are only used by which-key 0.6.2, because this plugin is already broken due to a separate API change. (The plugin is expecting the command trie to use `CommandPartNode<ActionBeanClass>`, but it's actually using `CommandPartNode<VimActionsInitiator>`). Also removes `ToggleOption.value`, used by which-key
2023-03-10 10:17:45 +02:00
Matt Ellis
b831aa8eca Fix incorrect type parameter in cast
Cast succeeds, but only due to erasure
2023-03-10 10:17:45 +02:00
Matt Ellis
4540d216cb Move StrictMode out of options package 2023-03-10 10:17:45 +02:00
Alex Plate
b345ebb366 Add test for escaped pairs 2023-03-10 09:42:49 +02:00
Alex Plate
7a8ed2db32 Add kawagh to contributors list 2023-03-10 07:39:23 +00:00
kawagh
9f5ed99b79 Add tests to secure % motion behavior with escaped parentheses 2023-03-10 09:37:46 +02:00
kawagh
1bd6defc84 Include escaped character in search target 2023-03-10 09:37:46 +02:00
Alex Plate
181d76ae7b Improvements for octopus handler 2023-03-09 16:45:06 +02:00
Alex Plate
31d37c218a Update changelog 2023-03-09 13:58:42 +00:00
filipp
72be9845fa Fix(VIM-2885): "v:searchforward" does't work for IdeaVim 2023-03-09 15:56:34 +02:00
filipp
a6a4e50479 Add ` mark to jumplist 2023-03-09 15:29:13 +02:00
Alex Plate
1f88ead837 Update changelog 2023-03-09 12:03:39 +00:00
filipp
8303cafbc9 Fix(VIM-2244): nnoremap mapping doesn't work correctly 2023-03-09 14:01:35 +02:00
filipp
00901f60dc Add get() function 2023-03-08 20:06:43 +02:00
filipp
21aaf06a63 Add split function 2023-03-08 19:21:02 +02:00
Alex Plate
d81774c9a7 Add octopus connector that attaches IdeaVim to IJ using EditorActionHandlers 2023-03-08 13:56:31 +02:00
Alex Plate
2cb6fb041e Use injector to create execution context 2023-03-08 13:06:36 +02:00
Alex Plate
b7d5ee9a75 Add doc why we can move to project activity at the moment 2023-03-08 12:59:48 +02:00
Alex Plate
24dd84b31c Revert "Migrate to project activity"
This reverts commit fc7efd5484.
2023-03-08 12:57:13 +02:00
Alex Plate
0e96819e86 Update creation of execution context 2023-03-08 11:35:01 +02:00
Alex Plate
897d393342 Add delay in UI test 2023-03-08 09:45:25 +02:00
Alex Plate
fc7efd5484 Migrate to project activity 2023-03-08 09:30:33 +02:00
Alex Plate
834695420d Update UI tests 2023-03-08 09:18:45 +02:00
Alex Plate
c4025c0cc1 Set larget expand timeout for UI tests 2023-03-08 08:44:42 +02:00
Alex Plate
c80ef82f2a Remove unnecessary curly braces 2023-03-08 08:34:11 +02:00
filipp
b94b4eea04 Better per caret register storage 2023-03-07 22:31:08 +02:00
Alex Plate
116c813988 Update changelog 2023-03-07 15:26:26 +00:00
filipp
2c9aa8e30e FIX(VIM-2881): ReplaceRegister does no longer worker with MultiCursor 2023-03-07 17:24:19 +02:00
Alex Plate
376c84c46e Update changelog 2023-03-07 07:46:14 +00:00
Alex Plate
a3039e05d4 Fix(VIM-1735): Fix enabling mulple carets after line selection 2023-03-07 09:44:01 +02:00
Alex Plate
bed078213b Fix some qodana issues 2023-03-07 09:44:01 +02:00
Alex Plate
b413c8e715 Update formatting 2023-03-05 00:20:18 +00:00
Alex Plate
299890c737 Update gradle plugin 2023-03-03 18:17:59 +02:00
Alex Plate
e977bee8cc Remove unused task from configuration 2023-03-03 18:08:09 +02:00
Alex Plate
5b636b2b5e Perform code cleanup 2023-03-03 17:57:42 +02:00
Alex Plate
6db4874acd Migrate NerdTree to new startup activity 2023-03-03 17:57:41 +02:00
Alex Plate
e788ea6d7f Remove unused deprecated field 2023-03-03 17:57:41 +02:00
Alex Plate
c5f8eaf1cf Run ktlinter 2023-03-03 17:57:41 +02:00
Alex Plate
c9568b4301 Switch to AnActionWrapper instead of deprecated EmptyAction 2023-03-03 17:57:41 +02:00
Alex Plate
e1c712abb7 Include the original editor context into our custom editor context
Bug reference: https://youtrack.jetbrains.com/issue/VIM-2315/Bug-in-leader-key-handling-in-ideavim#focus=Comments-27-6918383.0-0
2023-03-03 17:57:41 +02:00
filipp
81e8a28cc3 Marketplace plugin mapping tutorial 2023-03-03 16:47:46 +02:00
Alex Plate
e45a2b4517 Update changelog after merging PR 2023-03-01 15:44:18 +00:00
Dominic Palmer
dd69d0fad2 Prevent viewport displacement on undo 2023-03-01 17:41:59 +02:00
filipp
4f680c881c Fix deprecated method in Changelog plugin 2023-03-01 11:25:51 +02:00
filipp
1932d7102b Fix typo 2023-03-01 11:17:25 +02:00
Alex Plate
58ba9ed4be Fix qodana inspections 2023-02-28 17:41:48 +02:00
filipp
8fe6c8bde7 Jumps refactoring 2023-02-28 13:11:08 +02:00
Alex Plate
ec4684c336 Fix qodana inspections 2023-02-28 10:10:24 +02:00
Alex Plate
ec05ca11ba Fix possible NPE 2023-02-28 10:00:42 +02:00
Alex Plate
164e3cedd6 Add Dominic Palmer to contributors list 2023-02-28 07:57:55 +00:00
Alex Plate
0d4d610b3a Update changelog after merging PR 2023-02-28 07:54:03 +00:00
Dominic Palmer
7ebd604390 Include empty lines in the selection when dragging backwards from EOL 2023-02-28 09:52:23 +02:00
Alex Plate
7bc50df300 Fix possible npe 2023-02-28 09:31:38 +02:00
aleksei.plate
3f3eb0f878 TeamCity change in 'IntelliJ IDEA plugins / IdeaVim' project: triggers of 'Qodana checks' build configuration were updated 2023-02-28 07:09:26 +00:00
Alex Plate
6e854eb889 Update formatting 2023-02-26 00:19:08 +00:00
filipp
d009ece391 Fix jumps 2023-02-24 15:22:31 +02:00
Alex Plate
ffa7909f9f Update changelog 2023-02-24 12:51:35 +00:00
filipp
266d164a34 Add option to turn off using IDE jumps by JumpService 2023-02-24 14:48:50 +02:00
filipp
aaf957a3c2 Fix(VIM-44): Unify navigation history between ideavim and idea 2023-02-24 14:44:53 +02:00
Alex Plate
dd35c4907e Update minimal version of IJ
Build based on 231 has tons of incompatibilities with 223
2023-02-23 10:26:30 +02:00
Alex Plate
993986c1cf Add mark test 2023-02-23 09:59:55 +02:00
Alex Plate
8d47d9c015 Cleanup broken tests 2023-02-23 09:37:18 +02:00
Alex Plate
b4764a230a Fix small bug 2023-02-23 08:58:29 +02:00
Alex Plate
2c703a7468 Use more stable YouTrack tests 2023-02-23 08:29:58 +02:00
Alex Plate
87083e03a8 Update formatting 2023-02-19 00:18:26 +00:00
Alex Plate
1d22fbfae0 Update qodana baseline 2023-02-15 10:17:30 +02:00
Alex Plate
cfee63d716 Update changelog 2023-02-15 08:11:24 +00:00
Alex Plate
d49052660f Fix(VIM-2315): Fix overlapping mappings execution 2023-02-15 10:09:37 +02:00
Alex Plate
f5299d4b75 Extract processing of the mappings into the separate file 2023-02-15 09:39:30 +02:00
Alex Plate
35b366640f Fix compilation 2023-02-15 09:23:44 +02:00
aleksei.plate
1dc3809a34 TeamCity change in 'IntelliJ IDEA plugins / IdeaVim' project: 'Qodana checks' build configuration settings were updated 2023-02-13 15:29:22 +00:00
aleksei.plate
82c883acdb TeamCity change in 'IntelliJ IDEA plugins / IdeaVim' project: runners of 'Qodana checks' build configuration were updated 2023-02-13 14:12:19 +00:00
Alex Plate
8333751482 Update changelog 2023-02-13 11:09:48 +00:00
filipp
933070fc32 Update formatting 2023-02-13 13:06:31 +02:00
filipp
ec80a20146 Rename method 2023-02-13 13:05:34 +02:00
filipp
cd46497829 Fix(VIM-282): Cursor line wrapping support (whichwrap) 2023-02-13 13:04:53 +02:00
Alex Plate
cb51a78509 Update formatting 2023-02-12 00:18:06 +00:00
filipp
6a52d0c83a Fix visual marks if put text with multiple carets 2023-02-07 19:28:37 +02:00
Alex Plate
138dc7082e Update formatting 2023-02-05 00:18:21 +00:00
Alex Plate
944c66c366 Update changelog 2023-02-01 21:08:38 +00:00
filipp
0accfbd65f Fix(VIM-1768): Delete surrounding character while in multiple cursors mode 2023-02-01 23:06:25 +02:00
Alex Plate
86498ba317 Update changelog 2023-02-01 19:11:39 +00:00
filipp
6016aac675 Fix(VIM-2804): IdeaVim multiple-cursors copy and paste issue when "set clipboard+=unnamed" 2023-02-01 21:08:55 +02:00
filipp
80f8c88532 Update changelog 2023-02-01 21:08:54 +02:00
filipp
e112d87e28 Register FunctionStorage as service 2023-02-01 21:08:35 +02:00
Alex Plate
718d73f7cc Update changelog 2023-02-01 18:49:33 +00:00
Alex Plate
d01e804b24 Fix(VIM-658): Stop macro on error 2023-02-01 20:47:15 +02:00
Alex Plate
72ca9a2297 Reuse potemkin progress for internal macros 2023-02-01 20:26:06 +02:00
Alex Plate
007a1694d7 Remove useless parameter 2023-02-01 19:50:48 +02:00
Alex Plate
74dd307318 Convert macro group to kotlin 2023-02-01 19:46:09 +02:00
Alex Plate
4bf5f6dcc1 Rename .java to .kt 2023-02-01 19:46:08 +02:00
Alex Plate
cbf450425e Add some docs 2023-02-01 19:45:19 +02:00
Alex Plate
9b56fbc3ed Convert more tests from java to kotlin 2023-01-28 08:48:23 +02:00
Alex Plate
bdcdfda8c4 Rename .java to .kt 2023-01-28 08:48:22 +02:00
Alex Plate
53b2108252 Convert some tests to java 2023-01-28 08:28:40 +02:00
Alex Plate
ab87a86e9d Rename .java to .kt 2023-01-28 08:28:39 +02:00
Alex Plate
17c248eda0 Fix(VIM-2787): Save ideavimrc loading 2023-01-27 10:55:51 +02:00
Alex Plate
bee82a1941 Adding experimental inspection 2023-01-27 10:55:49 +02:00
filipp
772c574149 VimMarkServiceImpl refactoring 2023-01-27 00:20:40 +02:00
filipp
d577411e72 Fix(VIM-2850) 2023-01-27 00:20:40 +02:00
Alex Plate
f901d9d3b0 Use stable version of IJ for build 2023-01-25 08:28:44 +02:00
filipp
da75da6791 Fix easymotion compatibility 2023-01-23 14:36:31 +02:00
filipp
052fe75183 Fix dropLastJump 2023-01-23 13:02:35 +02:00
filipp
d50daad918 Fix easymotion compatibility 2023-01-23 12:57:44 +02:00
Alex Pláte
2834e25945 Update README.md 2023-01-23 10:07:12 +02:00
dependabot[bot]
5c7190710b Bump junit-jupiter-api from 5.8.1 to 5.9.2
Bumps [junit-jupiter-api](https://github.com/junit-team/junit5) from 5.8.1 to 5.9.2.
- [Release notes](https://github.com/junit-team/junit5/releases)
- [Commits](https://github.com/junit-team/junit5/compare/r5.8.1...r5.9.2)

---
updated-dependencies:
- dependency-name: org.junit.jupiter:junit-jupiter-api
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-01-23 10:01:10 +02:00
Alex Plate
dd76de2066 Source vimrc in template only if it exists 2023-01-23 09:34:18 +02:00
Alex Plate
1a7e3ed658 Add some fixes 2023-01-23 08:53:24 +02:00
Alex Plate
956339115c Rename .java to .kt 2023-01-23 08:53:23 +02:00
Alex Plate
484a1f264b Update formatting 2023-01-22 00:18:31 +00:00
nikita.koshcheev
0f739ffb50 TeamCity change in 'IntelliJ IDEA plugins / IdeaVim' project: Updated cloud profile 'amazon-48' in project 'project55' 2023-01-20 17:29:32 +00:00
filipp
e79821385d Remove caret from method signatures in CaretRegisterStorage 2023-01-20 17:24:28 +02:00
Alex Plate
e742d089d6 Include vim-engine sources to IdeaVim distribution 2023-01-20 17:16:37 +02:00
filipp
44336460c5 Fix IDEA compatibility 2023-01-20 16:50:58 +02:00
filipp
46f0309171 VIM-2840 Replace with register does not work with count 2023-01-20 16:33:16 +02:00
filipp
1ed38ec92b Fix mark fixes version 2023-01-20 15:53:20 +02:00
Alex Plate
04dca831e3 Update changelog after merging PR 2023-01-18 15:49:21 +00:00
Matt Ellis
308e8bfbc3 Replace default interface methods with extensions 2023-01-18 17:47:32 +02:00
Matt Ellis
62ecddb719 Replace setOptionValue with :set in tests 2023-01-18 17:47:32 +02:00
Matt Ellis
a852b0efbc Replace unsetOption with :set in tests 2023-01-18 17:47:32 +02:00
Matt Ellis
3dd6a55727 Replace setOption with :set in tests 2023-01-18 17:47:32 +02:00
Matt Ellis
3993e3b9c0 Migrate getOptionValue to new API in tests 2023-01-18 17:47:32 +02:00
Matt Ellis
42b8b5814f Simplify check for option existence 2023-01-18 17:47:32 +02:00
Matt Ellis
60de6f57fd Replace isDefault calls in tests 2023-01-18 17:47:32 +02:00
Matt Ellis
11fcb17c29 Replace appendValue with :set in tests 2023-01-18 17:47:32 +02:00
Matt Ellis
98246e23dd Introduce options value accessor to VimTestCase 2023-01-18 17:47:32 +02:00
Matt Ellis
61e2e81719 Avoid race condition initialising OptionService 2023-01-18 17:47:32 +02:00
Matt Ellis
62e600443e Remove unnecessary options reset in tests 2023-01-18 17:47:32 +02:00
Matt Ellis
5bde4d75ce Remove test option after tests finish 2023-01-18 17:47:32 +02:00
Matt Ellis
9c54fbe733 Migrate isSet to option value accessor API 2023-01-18 17:47:32 +02:00
Matt Ellis
9cc206d548 Introduce friendly API for consuming options 2023-01-18 17:47:32 +02:00
Matt Ellis
a97cf8a3ec Remove unnecessarily cached list field 2023-01-18 17:47:32 +02:00
Matt Ellis
f0ea5f3968 Extract IDEA specific option constants 2023-01-18 17:47:32 +02:00
Matt Ellis
8d44afc8e6 Sort option name constants 2023-01-18 17:47:32 +02:00
Matt Ellis
62ed3bd7f2 Rename option name constants 2023-01-18 17:47:32 +02:00
Matt Ellis
89889924fc Tidy up imports 2023-01-18 17:47:32 +02:00
Matt Ellis
dda592cb39 Small refactor 2023-01-18 17:47:32 +02:00
Matt Ellis
bb44044956 Move IJ specific options out of engine 2023-01-18 17:47:32 +02:00
Matt Ellis
d95810f6e5 Sort options 2023-01-18 17:47:32 +02:00
Matt Ellis
26c275b0f5 Introduce UnsignedNumberOption 2023-01-18 17:47:32 +02:00
filipp
341dc6c58b Post-merge fixes 2023-01-17 16:15:34 +02:00
filipp
a2364b7512 Pull request polishing 2023-01-16 19:23:13 +02:00
filipp
350e1c08d0 Add loading marks and jumps states to VimPlugin 2023-01-16 19:23:00 +02:00
filipp
724dc42a59 Update changelog 2023-01-16 19:22:58 +02:00
filipp
79a62e9d37 Move command tests 2023-01-16 19:22:35 +02:00
filipp
f73ba63133 Add test for marks with multiple carets 2023-01-16 19:22:35 +02:00
filipp
d2c849fceb Post-merge fixes 2023-01-16 19:21:10 +02:00
filipp
c4e9d5d14f Multiple carets support for marks 2023-01-16 19:19:46 +02:00
filipp
76a7d1ee69 Visual marks tests 2023-01-16 18:51:11 +02:00
filipp
a8d225f812 Save jumps after IDE close 2023-01-16 18:51:11 +02:00
filipp
bdfb8c7ee4 Fix exchange 2023-01-16 18:51:11 +02:00
filipp
9ab9d88eb5 VimJumpService implementation 2023-01-16 18:51:11 +02:00
filipp
75ff5feccd LastSelectionInfo now stores buffer positions instead of offset
Updating lastSelectionInfo after insertion & deletion
2023-01-16 18:51:11 +02:00
filipp
a4c7b38b7a Update formatting 2023-01-16 18:51:11 +02:00
filipp
ec86608aff Fix visual selection marks for the :move command 2023-01-16 18:51:11 +02:00
filipp
4010854075 Multicaret gv 2023-01-16 18:51:10 +02:00
filipp
fe1ae29fa3 Better selection marks 2023-01-16 18:40:31 +02:00
filipp
8c7d0b06d1 KeySorter for MarksCommand 2023-01-16 18:40:31 +02:00
filipp
af497e6906 Post-merge fixes 2023-01-16 18:40:30 +02:00
filipp
badb61aaea Move command no longer removes marks 2023-01-16 18:40:25 +02:00
filipp
5884919350 Fix mark order for marks command 2023-01-16 18:40:25 +02:00
filipp
ce77148a38 Multiple carets support for marks 2023-01-16 18:40:24 +02:00
Alex Plate
0ee6ce0a55 Remove some forEachCaret methods 2023-01-16 11:43:00 +02:00
Alex Plate
39f0e14fee Remove one of the unused methods 2023-01-16 09:53:52 +02:00
Alex Plate
dc09907f93 Remove dynamic loader stopper 2023-01-16 09:38:38 +02:00
Alex Plate
dcec97b9b4 Update formatting 2023-01-15 00:22:05 +00:00
Alex Plate
0eb8615db4 Update support guide 2023-01-13 10:19:40 +02:00
Alex Plate
e674d8ac3a Remove more usages of runForEachNative 2023-01-12 10:31:14 +02:00
Alex Plate
141af4f097 Remove one of for each methods 2023-01-12 10:19:11 +02:00
Alex Plate
35ef9c7e68 Update new .ideavimrc template 2023-01-12 09:27:07 +02:00
Alex Plate
67e8b3e988 Add support guide 2023-01-12 09:00:24 +02:00
Alex Plate
896508d1fd Update copyright notice 2023-01-12 08:11:15 +02:00
Alex Plate
908c978242 Global copyright update 2023-01-10 10:09:25 +02:00
Alex Plate
6419279514 Prepare to 2.1.0 release 2023-01-10 09:59:51 +02:00
Alex Plate
0ecfdc5cf3 Fix issue with incorrect position of the caret after put 2023-01-09 10:52:29 +02:00
Alex Plate
a357f989ad Update changelog after merging PR 2023-01-09 08:19:13 +00:00
Patrick Elmquist
831e335b5d Fixed typos in Tutor 2023-01-09 10:17:31 +02:00
Alex Plate
5e4afd4a7b Update changelog 2023-01-06 08:00:34 +00:00
Alex Plate
337c526e23 Fix(VIM-2833): Fix rare deadlock during put in insert mode from clipboard 2023-01-06 09:58:52 +02:00
Alex Plate
5f25db231f Update copyright rules 2023-01-06 09:26:05 +02:00
Alex Plate
fb46993a05 Reformat sources 2023-01-06 09:26:05 +02:00
Alex Plate
ef2738838f Update copyright rules 2023-01-06 09:26:05 +02:00
Alex Plate
b9669e452c Add some information to issue template 2023-01-06 09:26:04 +02:00
Alex Plate
6196417436 Fix minor issue with offsets 2023-01-06 09:26:04 +02:00
Alex Plate
5d797f397d Update changelog after merging PR 2023-01-06 07:23:51 +00:00
Matt Ellis
3be6acf5b5 Restore type qualifiers for some static methods 2023-01-06 09:22:08 +02:00
Matt Ellis
b5619adf45 Cleanup MotionGroup.kt 2023-01-06 09:22:08 +02:00
Matt Ellis
62540fe1b2 Reformat MotionGroup.kt 2023-01-06 09:22:08 +02:00
Matt Ellis
fd85fdf0ac Convert MotionGroup to Kotlin 2023-01-06 09:22:08 +02:00
Matt Ellis
e09208c757 Rename MotionGroup.java to MotionGroup.kt 2023-01-06 09:22:08 +02:00
Matt Ellis
753f2110c6 Clean up ScrollGroup.kt 2023-01-06 09:22:08 +02:00
Matt Ellis
7917e8417b Import EditorHelper methods 2023-01-06 09:22:08 +02:00
Matt Ellis
a0447b4840 Convert ScrollGroup from Java to Kotlin 2023-01-06 09:22:08 +02:00
Matt Ellis
2e561a2af4 Rename ScrollGroup.java to ScrollGroup.kt 2023-01-06 09:22:08 +02:00
Matt Ellis
a330a3e472 Make editor converter property accessors inline 2023-01-06 09:22:08 +02:00
Matt Ellis
229d64fcf8 Add ScrollViewHelper.kt to ThirdPartyLicenses.md 2023-01-06 09:22:08 +02:00
Matt Ellis
6df695f650 Cleanup ScrollViewHelper.kt 2023-01-06 09:22:08 +02:00
Matt Ellis
d77edaa056 Convert ScrollViewHelper to Kotlin 2023-01-06 09:22:08 +02:00
Matt Ellis
4f78246c7f Rename ScrollViewHelper.java to .kt 2023-01-06 09:22:08 +02:00
Matt Ellis
8d3ccdaf9c Extract scroll functionality into ScrollGroup 2023-01-06 09:22:08 +02:00
Matt Ellis
17e1061866 Extract scrollCaretIntoView to helper class
This file is licensed under the Vim license, so that scrolling the caret into view can be based on the Vim implementation
2023-01-06 09:22:08 +02:00
Matt Ellis
30d4b06393 Fix dangling doc comment 2023-01-06 09:22:08 +02:00
Alex Plate
893bf452fb Update changelog after merging PR 2023-01-04 06:58:40 +00:00
Martin Yzeiri
bb67584cba Matchit: Add more Rider file types 2023-01-04 08:56:41 +02:00
Alex Plate
e28ec93c80 Reformat project 2023-01-04 08:44:28 +02:00
Alex Plate
ca37019427 Move some functions to script 2023-01-04 08:42:20 +02:00
Alex Plate
3d452015ee Small refactoring of scripts 2023-01-04 08:42:19 +02:00
Alex Pláte
57a3d82649 Update integrationsTest.yml 2023-01-04 08:21:44 +02:00
Alex Plate
2845beaf8a Better use of Ktor 2022-12-29 09:33:28 +02:00
Alex Plate
1e58ead126 Move scripts into the separate module 2022-12-29 09:26:45 +02:00
Alex Plate
fafa7572d0 Extract plugin dependencies check into the separate file 2022-12-29 08:27:12 +02:00
Alex Plate
4ddeb72bfe Update changelog after merging PR 2022-12-29 05:53:35 +00:00
Martin Yzeiri
28ba36dddb Matchit: Support cshtml files
Enables HTML jumps in Razor (.cshtml) templates.
2022-12-29 07:51:59 +02:00
Alex Plate
b6c501311c Another workflow update 2022-12-28 18:11:13 +02:00
Alex Plate
01d4ebe254 Update workflow 2022-12-28 18:09:21 +02:00
Alex Plate
34dd332f0b Create an entry point for kotlin scripts 2022-12-28 18:04:36 +02:00
Alex Plate
596d0c7115 Add new job to check new plugins in marketplace that depend on IdeaVim 2022-12-28 17:06:34 +02:00
Alex Plate
672601b028 Do not check updates for dev version of the plugin 2022-12-28 14:41:10 +02:00
Alex Plate
e5045f28ab Update tutor a bit 2022-12-28 12:21:36 +02:00
Alex Plate
12ba067db3 Use either name or login for GH merge job 2022-12-28 09:09:08 +02:00
Alex Plate
5413606425 Fix 2022-12-28 09:04:06 +02:00
Alex Plate
72ae18557b Fix broken link in the code 2022-12-28 09:03:19 +02:00
Alex Plate
99bd119ed6 Update changelog after merging PR 2022-12-28 06:59:55 +00:00
Runinho
faebf66065 improve formating 2022-12-28 08:58:14 +02:00
Runinho
dc030d6895 Fix(VIM-2760) notebookCommandMode detection 2022-12-28 08:58:14 +02:00
Alex Plate
7f626005a5 Fix for the dd on last line in the notebook 2022-12-27 18:22:24 +02:00
Alex Plate
28d0741e14 Update changelog after merging PR 2022-12-27 13:56:25 +00:00
Matt Ellis
c0e17a6c61 Fix issue with lastColumn not being invalidated 2022-12-27 15:45:18 +02:00
Matt Ellis
b5046b089e Fix incsearch not scrolling to current match 2022-12-27 15:45:18 +02:00
Alex Plate
1075112bfa Add IdeaVim tutor 2022-12-27 10:48:58 +02:00
Alex Plate
37fddacf8e Update GH CI jobs 2022-12-22 17:34:41 +02:00
Alex Plate
2091a59897 Temp fix for VIM-2808: disable formatting after paste for rider 2022-12-22 15:49:04 +02:00
Alex Plate
d2a427b38f Use different type of action on github merge 2022-12-22 09:28:58 +02:00
Alex Plate
c069719c1c Add quick scope plugin to the list 2022-12-21 14:24:04 +02:00
Alex Plate
654a443d4b Fix compatibility with plugins 2022-12-21 10:59:23 +02:00
Alex Plate
a6ec2d5ed7 Update changelog 2022-12-21 10:34:55 +02:00
Alex Plate
02ac083175 Add new line 2022-12-21 10:18:56 +02:00
Alex Plate
561fce5d40 Update links to vim plugins 2022-12-21 10:18:23 +02:00
Alex Plate
a88263874a Do not check for updates if the plugin is disabled 2022-12-21 10:06:46 +02:00
filipp
943ddeb5ab Update gradle plugin 2022-12-19 17:43:38 +02:00
Alex Pláte
216a3fedd0 Update IdeaVim Plugins.md 2022-12-19 12:36:13 +02:00
Alex Plate
7b8c335a5b Update changelog 2022-12-19 08:08:58 +00:00
Alex Plate
8e8efe4862 Fix(VIM-2813): Migrate update checker to VimStandalonePluginUpdateChecker 2022-12-19 10:06:52 +02:00
Alex Plate
e64dc3cc1c Update changelog 2022-12-19 09:08:18 +02:00
Alex Plate
c833691cf6 Add Ada to contributors list 2022-12-19 07:01:17 +00:00
Ada
ba5e2e8613 Remove the redundant quotation mark at the end of "packadd matchit" command 2022-12-19 08:59:35 +02:00
Alex Plate
b154e31a28 Update formatting 2022-12-04 00:16:36 +00:00
Alex Plate
322b888dc5 Add update to the evolution 2022-12-02 12:03:58 +02:00
Alex Plate
42eefb763b Add an editor to the action executor 2022-12-02 11:52:39 +02:00
Alex Plate
27be351636 Adopt immutable caret around the source code 2022-12-02 11:36:46 +02:00
Alex Plate
8b20287f93 Use immutable caret during put 2022-12-01 19:15:33 +02:00
Alex Plate
50a7bdb34d Update some tests 2022-12-01 19:12:30 +02:00
Alex Plate
dcac3be0da Pass editor to the message service 2022-12-01 14:29:54 +02:00
Alex Plate
ec121fb327 Adapt to immutable caret 2022-12-01 14:17:29 +02:00
Alex Plate
ccb260b6a7 Make showmode on by default as in vim 2022-12-01 14:14:57 +02:00
Alex Plate
c994511ea5 Add dashes to showcmd 2022-12-01 11:01:23 +02:00
Alex Plate
fb5177633a More uses of ImmutableVimCaret 2022-12-01 08:38:52 +02:00
Alex Plate
b15fde59d1 Fix UI test 2022-11-30 18:20:29 +02:00
Alex Plate
1958974c73 Remove experimental CI test 2022-11-30 17:55:55 +02:00
Alex Plate
00b1b0fea4 Add delay to UI test 2022-11-30 17:47:58 +02:00
Alex Plate
743b978e6f Update engine 2022-11-30 13:11:16 +02:00
Alex Plate
cbabd8b76e Add new mapping mode set 2022-11-30 12:00:10 +02:00
Alex Plate
1fd877c597 Small refactoring of vim caret 2022-11-30 11:49:09 +02:00
Alex Plate
4f64ed07b1 Update docs 2022-11-30 08:54:36 +02:00
Alex Plate
4e537b0466 Create a job that syncs documentation 2022-11-30 08:32:34 +02:00
Alex Plate
2b1198dfd9 Rename extensions to plugins to be more consistent 2022-11-30 08:11:39 +02:00
Alex Plate
8db23fba43 Extract ImmutableVimCaret interface 2022-11-29 20:02:26 +02:00
Alex Plate
0451487549 Update engine to support immutable caret 2022-11-29 20:02:25 +02:00
aleksei.plate
a16faa97ec TeamCity change in 'IntelliJ IDEA plugins / IdeaVim' project: 'Qodana checks' build configuration settings were updated 2022-11-29 10:24:50 +00:00
aleksei.plate
dbf626a53e TeamCity change in 'IntelliJ IDEA plugins / IdeaVim' project: 'Qodana checks' build configuration settings were updated 2022-11-29 10:24:36 +00:00
Alex Plate
27cc767ec4 Update UI test 2022-11-29 10:20:53 +02:00
Alex Plate
8d2d08a12b Remove changes after testing 2022-11-29 10:18:06 +02:00
Alex Plate
7c91d97440 Update changelog after merging PR 2022-11-29 08:14:17 +00:00
Alex Plate
0eb7b53801 Useless commit 2022-11-29 10:09:13 +02:00
Alex Plate
510e31584e Fix incorrect env 2022-11-29 09:57:12 +02:00
Alex Plate
0efedd7fa5 Try a different GH login method 2022-11-29 09:46:34 +02:00
Alex Plate
01a32705e4 Try a different GH login method 2022-11-29 09:22:16 +02:00
Alex Plate
05c1b82bcf Add update PR to the integration tests 2022-11-29 08:55:57 +02:00
Alex Plate
cf04796010 Update changelog 2022-11-29 08:55:57 +02:00
Alex Plate
fd7e66e144 Add Runinho to contributors list 2022-11-29 06:52:48 +00:00
Runinho
ceaf290f5e check offset, add test for put before guard 2022-11-29 08:44:13 +02:00
Runinho
5df9ae57ce Fix(VIM-2577) paste not working at end of notebook cell 2022-11-29 08:44:13 +02:00
Alex Pláte
04ed7d413f Update and rename Emulated-plugins.md to IdeaVim Plugins.md 2022-11-28 21:48:20 +02:00
Alex Plate
f543835921 Update UI test 2022-11-28 18:27:56 +02:00
Alex Plate
8ae35160e7 Move method to a different file 2022-11-28 18:25:11 +02:00
Alex Plate
75516a7217 Fix track action ids 2022-11-28 18:06:20 +02:00
Alex Plate
8783fc89e6 Make a longer delay in UI test 2022-11-28 17:47:06 +02:00
Alex Plate
fd0819ca30 Add link to plugins 2022-11-28 17:36:57 +02:00
Alex Plate
650b925251 Refactor caret movement 2022-11-28 16:56:15 +02:00
Alex Plate
fd3e32eaa8 Move some calls to vim engine 2022-11-28 13:29:41 +02:00
Alex Plate
a8bebb88b1 Move vimLeadSelectionOffset to the engine 2022-11-28 13:19:16 +02:00
Alex Plate
3294a74979 Create vim engine evolution file 2022-11-25 17:06:45 +02:00
Alex Plate
db95804eeb Move caret method now returns VimCaret instance
This is important for Fleet because the carets in Fleet are immutable
2022-11-25 16:53:19 +02:00
Alex Plate
15bfc00ddb Update CI job name 2022-11-25 13:45:56 +02:00
Alex Plate
18580e431f Add integration tests for experiments 2022-11-25 13:42:52 +02:00
Alex Plate
98624d8701 Add method for carets 2022-11-25 13:39:38 +02:00
Alex Plate
3c03a15831 Fix test with modifiers 2022-11-25 13:35:30 +02:00
Alex Plate
9710a7bfc1 Small reformat of state machine 2022-11-25 13:35:29 +02:00
Alex Plate
34426ae32d Pass editor to undo redo 2022-11-25 13:35:29 +02:00
Alex Plate
c2f98ee317 Update changelog 2022-11-25 11:13:14 +00:00
Alex Plate
4df2abba82 Fix(VIM-758): Support d mappings 2022-11-25 13:11:13 +02:00
Alex Plate
c3cd207b2b Add some logging 2022-11-25 09:40:48 +02:00
Alex Plate
4f6053f767 File cleanup 2022-11-25 09:31:34 +02:00
Alex Plate
5578fbdd4f Update changelog 2022-11-23 12:04:42 +02:00
Matt Ellis
84a6c40e13 Fix incorrect normalising for trailing inlay 2022-11-23 12:02:55 +02:00
Alex Plate
3e91004660 Update changelog 2022-11-23 09:47:50 +00:00
Alex Plate
ac1d334bf1 Fix(VIM-2797): Introduce variable to mute default argtextobj mappings 2022-11-23 11:44:47 +02:00
Alex Plate
368c840177 Supress warning 2022-11-22 09:54:36 +02:00
Alex Plate
c3a2fd736c Reorder badges 2022-11-21 20:26:29 +02:00
Alex Plate
741987f40b Add codecov badge 2022-11-21 20:24:32 +02:00
Alex Plate
375b025e22 Add kover report 2022-11-21 20:06:40 +02:00
Alex Plate
7324ee5e8d Update formatting 2022-11-20 00:18:56 +00:00
Alex Plate
54c2299654 Remove several methods from VimCaret 2022-11-18 14:37:32 +01:00
Alex Plate
b2cfb6d6ed Refactor visual mode entering 2022-11-18 13:08:27 +01:00
Alex Plate
e8a11b8f79 Remove unused method 2022-11-18 12:28:42 +01:00
Alex Plate
f16890f9a7 Remove unused method 2022-11-17 16:35:33 +01:00
Alex Plate
e881bec45d Move more change group methods to engine 2022-11-17 16:14:26 +01:00
Alex Plate
18eea7ca2d Move change group methods to the engine 2022-11-17 16:03:41 +01:00
Alex Plate
316410a561 Move some methods from put group to the engine 2022-11-17 14:57:19 +01:00
Alex Plate
76a1a190f6 Refactor change group 2022-11-17 14:08:07 +01:00
Alex Plate
c243ae9cef Add refactoring to simplify change group 2022-11-17 14:07:57 +01:00
Alex Plate
2722ee63cc Move yank group to injector base 2022-11-17 14:07:57 +01:00
Matt Ellis
22e7fa1cf3 Add comments 2022-11-17 14:07:46 +01:00
Matt Ellis
101dc355ba Rename parameters in Mark and Jump 2022-11-17 14:07:46 +01:00
Matt Ellis
f5f3d0b827 Rename line parameters and variables
Buffer lines are just called "line", but visual lines (or where things are ambiguous) are explicitly named
2022-11-17 14:07:46 +01:00
Matt Ellis
53cb5d1fe9 Rename more logical position helper functions 2022-11-17 14:07:46 +01:00
Matt Ellis
0978ca616f Rename caret logical position helper functions 2022-11-17 14:07:46 +01:00
Matt Ellis
bbf42c0a28 Rename editor logical position helper functions 2022-11-17 14:07:46 +01:00
Matt Ellis
7df04c6e2e Rename VimLogicalPosition to BufferPosition 2022-11-17 14:07:46 +01:00
Matt Ellis
d3386c8097 Fix Gradle warning 2022-11-17 14:07:46 +01:00
Alex Plate
309197781e Fix some tests 2022-11-17 10:14:03 +01:00
Alex Plate
5a3ee970a0 Move editor helper functions to engine 2022-11-17 09:37:22 +01:00
Alex Plate
7cbe63e484 Move some editor functions to engine 2022-11-16 23:21:22 +01:00
filipp
5342b02091 Converted MacOS chars to ASCII for statistics 2022-11-16 21:26:41 +02:00
Alex Plate
7eeca57135 A few fixes 2022-11-16 13:22:40 +01:00
Alex Plate
2162985e4a Move more methods to engine 2022-11-16 13:05:59 +01:00
Alex Plate
5d53f4c13a Move some methods from editor helper to engine 2022-11-16 12:37:03 +01:00
Alex Plate
7de2c2692d Update changelog 2022-11-16 09:47:06 +01:00
Alex Plate
1b9df35a1d Take back contributions from Marquis Wang 2022-11-16 09:45:09 +01:00
Alex Plate
d5d39797bb Take back contributions from Piotr Mikulski 2022-11-16 09:45:09 +01:00
Alex Plate
829a228d79 Revert "Remove contributions of Piotr Mikulski <piotr@near.org>"
This reverts commit 860592291f.
2022-11-16 09:45:08 +01:00
Alex Plate
4c589c9610 Revert "Refactor commands output"
This reverts commit 05852b07
2022-11-16 09:45:08 +01:00
Alex Plate
b9fc58ec45 Move some methods to engine 2022-11-16 09:45:07 +01:00
Alex Plate
193a84dafd Move method to engine 2022-11-16 09:43:53 +01:00
Alex Plate
3880a33208 Refactoring 2022-11-16 09:43:53 +01:00
Alex Plate
2edf897e39 Move getMotionRange to base method 2022-11-16 09:43:51 +01:00
Matt Ellis
27d1170c75 Move creating adjusted offset out of action 2022-11-16 09:41:59 +01:00
Matt Ellis
11c850a41e Remove unused property 2022-11-16 09:41:59 +01:00
Matt Ellis
ff4ee06a1f Remove unnecessary setting of vimLastColumn 2022-11-16 09:41:59 +01:00
Matt Ellis
0549f32d6e Remove unnecessary base class 2022-11-16 09:41:59 +01:00
Matt Ellis
c5ab3490b3 Remove preOffsetComputation hook
Cached intended column is invalidated and recalculated if the caret has moved (intentionally or outside IdeaVim's control)
2022-11-16 09:41:59 +01:00
Matt Ellis
50ba1a1c4e Simplify overloads 2022-11-16 09:41:59 +01:00
Matt Ellis
ee45d2fb38 Remove unused postMove hooks 2022-11-16 09:41:59 +01:00
Matt Ellis
a94822b79a Remove unused preMove hooks 2022-11-16 09:41:59 +01:00
Matt Ellis
b5aba454ae Remove more postMove overrides 2022-11-16 09:41:59 +01:00
Matt Ellis
a49631e986 Start to refactor postMove and intended column 2022-11-16 09:41:59 +01:00
Matt Ellis
bb31b5f2d3 Remove unused hooks for SingleExecution 2022-11-16 09:41:59 +01:00
Matt Ellis
8ad08d466e Refactor motion handler to combine caret move 2022-11-16 09:41:59 +01:00
Matt Ellis
ab31183a93 Regroup line motion functions 2022-11-15 10:34:12 +02:00
Matt Ellis
3257cc82dc Rename functions to indicate target motion
I.e. line number (currently buffer, should be Vim logical line), current line, or relative to current line
2022-11-15 10:34:12 +02:00
Matt Ellis
ef73733596 Remove unnecessary method from VimCaret 2022-11-15 10:34:12 +02:00
Matt Ellis
4b45d4cf09 Group VimCaret related functions and properties 2022-11-15 10:34:12 +02:00
Matt Ellis
e0b3e1db24 Move StrictMode to engine 2022-11-15 10:34:12 +02:00
Matt Ellis
e0b51d653a Move action to correct package 2022-11-15 10:34:12 +02:00
Matt Ellis
c17ebbf4d7 Rename various scroll functions 2022-11-15 10:34:12 +02:00
Matt Ellis
44a26d59a4 Rename screen line functions to "display" 2022-11-15 10:34:12 +02:00
Matt Ellis
6b8f81f7eb Rename screen column functions to "display"
Two reasons:
1. It is good if the engine uses Vim terminology. A "screen" in Vim includes all window/display lines from all windows in the terminal screen, including the status and command line. IntelliJ doesn't have this concept. A display line is most similar to IntelliJ's visual lines, but describes the window/display's character grid, not the buffer contents.
2. moveCaretToMiddleColumn needs renaming to indicate that it's for a display line, not a logical line, and to make way for an implementation of `gM`, which does work on logical lines
2022-11-15 10:34:12 +02:00
Matt Ellis
9a4b9419eb Rearrange VimMotionGroup to group related functions
No code changes
2022-11-15 10:34:12 +02:00
Matt Ellis
89548d132a Remove obsolete helper method 2022-11-15 10:34:12 +02:00
Matt Ellis
45dbb2cd3b Remove JavaVimTestCase base class
Can also now apply @TestWithoutNeovim to an entire class
2022-11-15 10:34:12 +02:00
Matt Ellis
a95203e2c9 Fix Gradle warning for missing task dependency 2022-11-15 10:34:12 +02:00
Matt Ellis
a79fc4980e Fix Gradle warning from verifyPluginConfiguration 2022-11-15 10:34:12 +02:00
aleksei.plate
1240781503 TeamCity change in 'IntelliJ IDEA plugins / IdeaVim' project: VCS roots of 'IdeaVim compatibility with external plugins' build configuration were updated 2022-11-10 18:38:50 +00:00
aleksei.plate
0875c61bc9 TeamCity change in 'IntelliJ IDEA plugins / IdeaVim' project: build features of 'Qodana checks' build configuration were updated 2022-11-10 13:52:57 +00:00
Alex Plate
da60a1c393 Add some excludes to license analysis 2022-11-10 14:35:29 +02:00
Alex Plate
785f29abf8 Fix some qodana inspections 2022-11-10 13:38:18 +02:00
Alex Plate
2a3e96b891 Turn off unused declaration inspection because it's flacky 2022-11-10 12:12:47 +02:00
Alex Plate
f1f6dd4c60 Turn off magic constant inspection 2022-11-10 11:31:49 +02:00
Alex Plate
b8a8403dc3 Add links to youtrack issues 2022-11-10 11:25:42 +02:00
Alex Plate
ab5eb9c401 Fix test 2022-11-10 11:25:41 +02:00
aleksei.plate
74b7fc9f77 TeamCity change in 'IntelliJ IDEA plugins / IdeaVim' project: runners of 'IdeaVim compatibility with external plugins' build configuration were updated 2022-11-10 08:28:42 +00:00
aleksei.plate
ca87316691 TeamCity change in 'IntelliJ IDEA plugins / IdeaVim' project: runners of 'IdeaVim compatibility with external plugins' build configuration were updated 2022-11-10 08:28:29 +00:00
aleksei.plate
cae61587da TeamCity change in 'IntelliJ IDEA plugins / IdeaVim' project: runners of 'IdeaVim compatibility with external plugins' build configuration were updated 2022-11-10 08:28:11 +00:00
aleksei.plate
0238d0bf2e TeamCity change in 'IntelliJ IDEA plugins / IdeaVim' project: runners of 'IdeaVim compatibility with external plugins' build configuration were updated 2022-11-10 08:25:52 +00:00
Alex Plate
5be575a078 Remove plugin verifier from the repository 2022-11-10 10:25:30 +02:00
aleksei.plate
36fbbbf4ae TeamCity change in 'IntelliJ IDEA plugins / IdeaVim' project: runners of 'IdeaVim compatibility with external plugins' build configuration were updated 2022-11-10 08:07:47 +00:00
aleksei.plate
a87ab3c558 TeamCity change in 'IntelliJ IDEA plugins / IdeaVim' project: 'IdeaVim compatibility with external plugins' build configuration settings were updated 2022-11-10 07:58:43 +00:00
aleksei.plate
75e22a2080 TeamCity change in 'IntelliJ IDEA plugins / IdeaVim' project: runners of 'IdeaVim compatibility with external plugins' build configuration were updated 2022-11-10 07:58:30 +00:00
aleksei.plate
6c89799bfb TeamCity change in 'IntelliJ IDEA plugins / IdeaVim' project: runners of 'IdeaVim compatibility with external plugins' build configuration were updated 2022-11-10 07:58:25 +00:00
aleksei.plate
e0d9a8d0db TeamCity change in 'IntelliJ IDEA plugins / IdeaVim' project: runners of 'IdeaVim compatibility with external plugins' build configuration were updated 2022-11-10 07:47:17 +00:00
aleksei.plate
3208f6a1bd TeamCity change in 'IntelliJ IDEA plugins / IdeaVim' project: runners of 'IdeaVim compatibility with external plugins' build configuration were updated 2022-11-10 07:47:02 +00:00
aleksei.plate
d525be33cf TeamCity change in 'IntelliJ IDEA plugins / IdeaVim' project: runners of 'IdeaVim compatibility with external plugins' build configuration were updated 2022-11-10 07:46:55 +00:00
aleksei.plate
64136f0b93 TeamCity change in 'IntelliJ IDEA plugins / IdeaVim' project: runners of 'IdeaVim compatibility with external plugins' build configuration were updated 2022-11-10 07:46:34 +00:00
aleksei.plate
238203cf35 TeamCity change in 'IntelliJ IDEA plugins / IdeaVim' project: runners of 'IdeaVim compatibility with external plugins' build configuration were updated 2022-11-10 07:45:48 +00:00
aleksei.plate
6b354467ab TeamCity change in 'IntelliJ IDEA plugins / IdeaVim' project: runners of 'IdeaVim compatibility with external plugins' build configuration were updated 2022-11-10 07:45:05 +00:00
aleksei.plate
10444e5995 TeamCity change in 'IntelliJ IDEA plugins / IdeaVim' project: runners of 'IdeaVim compatibility with external plugins' build configuration were updated 2022-11-10 07:44:52 +00:00
aleksei.plate
42f6ca11db TeamCity change in 'IntelliJ IDEA plugins / IdeaVim' project: runners of 'IdeaVim compatibility with external plugins' build configuration were updated 2022-11-10 07:33:48 +00:00
aleksei.plate
eed094103d TeamCity change in 'IntelliJ IDEA plugins / IdeaVim' project: runners of 'IdeaVim compatibility with external plugins' build configuration were updated 2022-11-10 07:00:06 +00:00
aleksei.plate
5051bcd607 TeamCity change in 'IntelliJ IDEA plugins / IdeaVim' project: runners of 'IdeaVim compatibility with external plugins' build configuration were updated 2022-11-10 06:55:47 +00:00
aleksei.plate
74e2bb2d87 TeamCity change in 'IntelliJ IDEA plugins / IdeaVim' project: runners of 'IdeaVim compatibility with external plugins' build configuration were updated 2022-11-10 06:40:12 +00:00
Alex Plate
a4a6331935 Exclude full generated path from qodana 2022-11-09 09:23:54 +02:00
Alex Plate
3939144128 Update UI tests 2022-11-09 09:13:01 +02:00
Alex Plate
7791c0b7be Get rid of runForEachCaret in DeleteJoinLinesAction 2022-11-08 13:45:21 +02:00
Alex Plate
2cfbff5cf6 Move nerdtree action to background thread 2022-11-08 10:02:47 +02:00
Alex Plate
b734153253 Add vim sneak to the list of plugins 2022-11-08 09:42:11 +02:00
Alex Plate
3df637b265 Remove macrodelay option 2022-11-08 09:42:11 +02:00
Alex Plate
ea220d2514 Update formatting 2022-11-06 00:20:06 +00:00
Alex Plate
8bb75fc376 Add ThirdPartyLicenses.md file 2022-11-04 10:15:42 +02:00
Alex Plate
d461fe555d Refactor status bar icon 2022-11-04 09:55:34 +02:00
Alex Plate
0bd25f2506 Update wording 2022-11-04 09:27:14 +02:00
Alex Plate
2355435275 Update copyright 2022-11-04 09:24:03 +02:00
Alex Plate
cc04ef5869 Add some logging to gradle tasks 2022-11-03 19:45:21 +02:00
aleksei.plate
521d8a605d TeamCity change in 'IntelliJ IDEA plugins / IdeaVim / IdeaVim releases' project: 'Publish Release' build configuration settings were updated 2022-11-03 11:44:19 +00:00
aleksei.plate
3bff1b1ba5 TeamCity change in 'IntelliJ IDEA plugins / IdeaVim / IdeaVim releases' project: 'Publish Release' build configuration settings were updated 2022-11-03 11:44:06 +00:00
Alex Plate
15192652f0 Move releaseActions to a group 2022-11-03 13:21:27 +02:00
aleksei.plate
85873202ca TeamCity change in 'IntelliJ IDEA plugins / IdeaVim / IdeaVim releases' project: runners of 'Publish Release' build configuration were updated 2022-11-03 11:15:37 +00:00
aleksei.plate
706bde03f9 TeamCity change in 'IntelliJ IDEA plugins / IdeaVim / IdeaVim releases' project: parameters of 'Publish Release' build configuration were updated 2022-11-03 11:14:43 +00:00
aleksei.plate
f855f5f429 TeamCity change in 'IntelliJ IDEA plugins / IdeaVim / IdeaVim releases' project: parameters of 'Publish Release' build configuration were updated 2022-11-03 11:13:52 +00:00
aleksei.plate
cce557e82a TeamCity change in 'IntelliJ IDEA plugins / IdeaVim / IdeaVim releases' project: parameters of 'Publish Release' build configuration were updated 2022-11-03 11:13:29 +00:00
Alex Plate
7f7d8bd771 Get already existing version in CI 2022-11-03 13:12:06 +02:00
Alex Plate
9a95093b44 Add automation to marks released tickets as Fixed 2022-11-03 13:07:34 +02:00
aleksei.plate
ddf7bbdd31 TeamCity change in 'IntelliJ IDEA plugins / IdeaVim / IdeaVim releases' project: 'Publish Release' build configuration settings were updated 2022-11-03 11:05:03 +00:00
aleksei.plate
994a811efa TeamCity change in 'IntelliJ IDEA plugins / IdeaVim / IdeaVim releases' project: 'Publish Release' build configuration settings were updated 2022-11-03 11:04:49 +00:00
aleksei.plate
06efa46f32 TeamCity change in 'IntelliJ IDEA plugins / IdeaVim / IdeaVim releases' project: runners of 'Publish Release' build configuration were updated 2022-11-03 11:04:45 +00:00
aleksei.plate
66778a060c TeamCity change in 'IntelliJ IDEA plugins / IdeaVim / IdeaVim releases' project: runners of 'Publish Release' build configuration were updated 2022-11-03 11:04:28 +00:00
aleksei.plate
c9697d6cc8 TeamCity change in 'IntelliJ IDEA plugins / IdeaVim / IdeaVim releases' project: runners of 'Publish Release' build configuration were updated 2022-11-03 10:59:57 +00:00
aleksei.plate
b801daa240 TeamCity change in 'IntelliJ IDEA plugins / IdeaVim / IdeaVim releases' project: runners of 'Publish Release' build configuration were updated 2022-11-03 10:58:43 +00:00
Alex Plate
d2f42d67c7 Change test approach a bit 2022-11-02 21:18:01 +02:00
Alex Plate
cb9d750db9 Update list of unchecked emails 2022-11-02 15:41:09 +02:00
Alex Plate
0b966c4497 Use env token if ours is empty 2022-11-02 14:09:15 +02:00
Alex Plate
0774a822aa Add comments to integration tests 2022-11-02 13:37:57 +02:00
Alex Plate
7e0cdce7ea Add GH actions 2022-11-02 13:32:33 +02:00
Alex Plate
e2ed963af5 Automation to update youtrack ticket status on commit 2022-11-02 13:25:18 +02:00
Alex Plate
4781d29d67 Prepare to 2.0.0 version 2022-11-01 20:08:27 +02:00
Alex Plate
f5b6ca50f4 Update IdeaVim license to MIT
VIM-2782
2022-11-01 20:00:07 +02:00
Alex Plate
05852b07c6 Refactor commands output 2022-11-01 19:47:27 +02:00
Alex Plate
689aa4cf95 [VIM-570] Fix for chinese characters 2022-11-01 19:47:27 +02:00
Alex Plate
56aad9200a Add some links to GitHu 2022-11-01 19:47:27 +02:00
Alex Plate
ac69c0d9c6 Fix search with offset 2022-11-01 19:47:27 +02:00
Alex Plate
860592291f Remove contributions of Piotr Mikulski <piotr@near.org>
6a4bb7395b
9b4825db77
2022-11-01 19:47:26 +02:00
Alex Plate
113597333c Remove contributions of kk <kevinz@weghst.com>
4849992ca9
2022-11-01 19:47:26 +02:00
Alex Plate
a83d71aa39 Remove contributions of Marquis Wang <marquis@marquiswang.com> 2022-11-01 19:47:26 +02:00
Alex Plate
93299ae843 Remove contributions of Marcel Hild <hild@b4mad.net> 2022-11-01 19:47:25 +02:00
Alex Plate
4300cf5330 Prepare to 1.12.0 release 2022-11-01 19:11:28 +02:00
Alex Plate
92d08377ce Update changelog 2022-10-28 08:18:21 +03:00
Alex Plate
19a6284023 Update kotlin version to 1.7.20 2022-10-28 08:16:10 +03:00
Matt Ellis
45908f2a84 Remove unnecessary scroll method 2022-10-28 08:15:32 +03:00
Matt Ellis
8648220e21 Fix(VIM-2778) Remove override of editor scroll setting
Let user decide how editor scrolls when IntelliJ performs navigation, e.g. go to file member
2022-10-28 08:15:32 +03:00
Alex Plate
68e285b514 Update plugin.xml 2022-10-27 11:25:43 +03:00
Alex Plate
5153a42b69 Remove agent requirement 2022-10-27 11:20:54 +03:00
TeamCity
42feed710c TeamCity change in 'IntelliJ IDEA plugins / IdeaVim' project: project settings were updated on disk 2022-10-27 08:09:50 +00:00
Alex Plate
9d049b06c3 Use java pattern matching in the code 2022-10-27 10:58:14 +03:00
Alex Plate
1105529e91 Update minimal IJ version to 223 2022-10-27 10:29:58 +03:00
Alex Plate
49c1f11503 Update changelog 2022-10-25 06:49:32 +00:00
Alex Plate
f54fd84de3 Fix(VIM-2776): Use filename index for file search 2022-10-25 09:47:50 +03:00
1351 changed files with 111061 additions and 93412 deletions

View File

@@ -7,3 +7,4 @@ indent_style = space
[*.kt]
indent_size = 2
indent_style = space
ktlint_standard_no-wildcard-imports = disabled

1
.gitattributes vendored Normal file
View File

@@ -0,0 +1 @@
* text=auto eol=lf

31
.github/workflows/checkNewPlugins.yml vendored Normal file
View File

@@ -0,0 +1,31 @@
# This workflow will build a package using Gradle and then publish it to GitHub packages when a release is created
# For more information see: https://github.com/actions/setup-java/blob/main/docs/advanced-usage.md#Publishing-using-gradle
# This workflow syncs changes from the docs folder of IdeaVim to the IdeaVim.wiki repository
name: Check new plugin dependencies
on:
workflow_dispatch:
schedule:
- cron: '0 5 * * *'
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Fetch origin repo
uses: actions/checkout@v3
- name: Set up JDK 17
uses: actions/setup-java@v2
with:
java-version: '17'
distribution: 'adopt'
server-id: github # Value of the distributionManagement/repository/id field of the pom.xml
settings-path: ${{ github.workspace }} # location for the settings.xml file
- name: Check new plugins
run: ./gradlew scripts:checkNewPluginDependencies

View File

@@ -0,0 +1,46 @@
# This workflow will build a package using Gradle and then publish it to GitHub packages when a release is created
# For more information see: https://github.com/actions/setup-java/blob/main/docs/advanced-usage.md#Publishing-using-gradle
name: Close YouTrack on commit
on:
workflow_dispatch:
push:
branches: [ master ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 300
- name: Get tags
run: git fetch --tags origin
- name: Set up JDK 11
uses: actions/setup-java@v2
with:
java-version: '11'
distribution: 'adopt'
server-id: github # Value of the distributionManagement/repository/id field of the pom.xml
settings-path: ${{ github.workspace }} # location for the settings.xml file
# The last successful job was marked with a tag
- name: Get commit with last workflow
run: |
echo "LAST_COMMIT=$(git rev-list -n 1 tags/workflow-close-youtrack)" >> $GITHUB_ENV
- name: Update YouTrack
run: ./gradlew updateYoutrackOnCommit
env:
SUCCESS_COMMIT: ${{ env.LAST_COMMIT }}
YOUTRACK_TOKEN: ${{ secrets.YOUTRACK_TOKEN }}
- name: Update tags
run: |
git tag --delete workflow-close-youtrack || true
git push origin :refs/tags/workflow-close-youtrack || true
git tag workflow-close-youtrack
git push origin workflow-close-youtrack

View File

@@ -39,7 +39,7 @@ jobs:
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v1
uses: github/codeql-action/init@v2
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
@@ -50,7 +50,7 @@ jobs:
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
uses: github/codeql-action/autobuild@v1
uses: github/codeql-action/autobuild@v2
# Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl
@@ -64,4 +64,4 @@ jobs:
# make release
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v1
uses: github/codeql-action/analyze@v2

View File

@@ -1,10 +1,12 @@
# This workflow will build a package using Gradle and then publish it to GitHub packages when a release is created
# For more information see: https://github.com/actions/setup-java/blob/main/docs/advanced-usage.md#Publishing-using-gradle
name: Update Changelog On PR (Test)
name: Testing CI integrations
on:
workflow_dispatch:
schedule:
- cron: '0 5 * * *'
jobs:
build:
@@ -14,7 +16,7 @@ jobs:
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 50
fetch-depth: 300
- name: Set up JDK 11
uses: actions/setup-java@v2
with:
@@ -23,18 +25,8 @@ jobs:
server-id: github # Value of the distributionManagement/repository/id field of the pom.xml
settings-path: ${{ github.workspace }} # location for the settings.xml file
- name: Update authors
id: update_authors
run: ./gradlew updateMergedPr -PprId=525
- name: Run tests
run: ./gradlew integrationsTest
env:
GITHUB_OAUTH: ${{ secrets.MERGE_PR }}
# - name: Commit changes
# uses: stefanzweifel/git-auto-commit-action@v4
# with:
# branch: master
# commit_message: Update changelog after merging PR
# commit_user_name: Alex Plate
# commit_user_email: aleksei.plate@jetbrains.com
# commit_author: Alex Plate <aleksei.plate@jetbrains.com>
# file_pattern: CHANGES.md
YOUTRACK_TOKEN: ${{ secrets.YOUTRACK_TOKEN }}
GITHUB_OAUTH: ${{ secrets.GITHUB_TOKEN }}

35
.github/workflows/kover.yml vendored Normal file
View File

@@ -0,0 +1,35 @@
# This workflow will build a package using Gradle and then publish it to GitHub packages when a release is created
# For more information see: https://github.com/actions/setup-java/blob/main/docs/advanced-usage.md#Publishing-using-gradle
name: Kover
on:
workflow_dispatch:
push:
branches: [ master ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 300
- name: Set up JDK 11
uses: actions/setup-java@v2
with:
java-version: '11'
distribution: 'adopt'
server-id: github # Value of the distributionManagement/repository/id field of the pom.xml
settings-path: ${{ github.workspace }} # location for the settings.xml file
- name: Run tests
run: ./gradlew koverXmlReport
# Upload Kover report to CodeCov
- uses: codecov/codecov-action@v3
with:
files: ${{ github.workspace }}/build/reports/kover/xml/report.xml

17
.github/workflows/mergeDependabotPR.yml vendored Normal file
View File

@@ -0,0 +1,17 @@
name: Dependabot auto-merge
on: pull_request
permissions:
contents: write
pull-requests: write
jobs:
dependabot:
runs-on: ubuntu-latest
if: ${{ github.actor == 'dependabot[bot]' }}
steps:
- name: Auto-merge Dependabot PR
run: gh pr merge --auto --rebase "$PR_URL"
env:
PR_URL: ${{github.event.pull_request.html_url}}
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}

View File

@@ -5,7 +5,7 @@ name: Update Changelog On PR
on:
workflow_dispatch:
pull_request:
pull_request_target:
types: [ closed ]
jobs:
@@ -18,6 +18,8 @@ jobs:
- uses: actions/checkout@v2
with:
fetch-depth: 50
# See end of file updateChangeslog.yml for explanation of this secret
ssh-key: ${{ secrets.PUSH_TO_PROTECTED_BRANCH_SECRET }}
- name: Set up JDK 11
uses: actions/setup-java@v2
with:
@@ -30,14 +32,14 @@ jobs:
id: update_authors
run: ./gradlew updateMergedPr -PprId=${{ github.event.number }}
env:
GITHUB_OAUTH: ${{ secrets.MERGE_PR }}
GITHUB_OAUTH: ${{ secrets.GITHUB_TOKEN }}
- name: Commit changes
uses: stefanzweifel/git-auto-commit-action@v4
with:
branch: master
commit_message: Update changelog after merging PR
commit_user_name: Alex Plate
commit_user_email: aleksei.plate@jetbrains.com
commit_author: Alex Plate <aleksei.plate@jetbrains.com>
commit_message: Update changelog after merging PR
commit_user_name: IdeaVim Bot
commit_user_email: maintainers@ideavim.dev
commit_author: IdeaVim Bot <maintainers@ideavim.dev>
file_pattern: CHANGES.md

44
.github/workflows/syncDoc.yml vendored Normal file
View File

@@ -0,0 +1,44 @@
# This workflow will build a package using Gradle and then publish it to GitHub packages when a release is created
# For more information see: https://github.com/actions/setup-java/blob/main/docs/advanced-usage.md#Publishing-using-gradle
# This workflow syncs changes from the docs folder of IdeaVim to the IdeaVim.wiki repository
name: Sync docs
on:
workflow_dispatch:
push:
branches: [ master ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Fetch origin repo
uses: actions/checkout@v3
with:
path: origin
# See end of file updateChangeslog.yml for explanation of this secret
ssh-key: ${{ secrets.PUSH_TO_PROTECTED_BRANCH_SECRET }}
- name: Fetch docs repo
uses: actions/checkout@v3
with:
repository: JetBrains/ideavim.wiki
path: docs
- name: Sync docs
id: update_authors
run: cp -a origin/doc/. docs
- name: Commit changes
uses: stefanzweifel/git-auto-commit-action@v4
with:
branch: master
repository: docs
commit_message: Update docs
commit_user_name: IdeaVim Bot
commit_user_email: maintainers@ideavim.dev
commit_author: IdeaVim Bot <maintainers@ideavim.dev>

View File

@@ -0,0 +1,33 @@
# This workflow will build a package using Gradle and then publish it to GitHub packages when a release is created
# For more information see: https://github.com/actions/setup-java/blob/main/docs/advanced-usage.md#Publishing-using-gradle
# This workflow syncs changes from the docs folder of IdeaVim to the IdeaVim.wiki repository
name: Update Affected Rate field on YouTrack
on:
workflow_dispatch:
schedule:
- cron: '0 8 * * *'
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Fetch origin repo
uses: actions/checkout@v3
- name: Set up JDK 17
uses: actions/setup-java@v2
with:
java-version: '17'
distribution: 'adopt'
server-id: github # Value of the distributionManagement/repository/id field of the pom.xml
settings-path: ${{ github.workspace }} # location for the settings.xml file
- name: Update YouTrack
run: ./gradlew scripts:updateAffectedRates
env:
YOUTRACK_TOKEN: ${{ secrets.YOUTRACK_TOKEN }}

View File

@@ -5,8 +5,11 @@ name: Update Authors
on:
workflow_dispatch:
push:
branches: [ master ]
schedule:
- cron: '0 9 * * *'
# Workflow run on push is disabled to avoid conflicts when merging PR
# push:
# branches: [ master ]
jobs:
build:
@@ -14,9 +17,13 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
with:
fetch-depth: 300
# See end of file updateChangeslog.yml for explanation of this secret
ssh-key: ${{ secrets.PUSH_TO_PROTECTED_BRANCH_SECRET }}
- name: Get tags
run: git fetch --tags origin
- name: Set up JDK 11
uses: actions/setup-java@v2
with:
@@ -25,25 +32,30 @@ jobs:
server-id: github # Value of the distributionManagement/repository/id field of the pom.xml
settings-path: ${{ github.workspace }} # location for the settings.xml file
- uses: nrwl/last-successful-commit-action@v1
id: last_successful_commit
with:
branch: 'master'
workflow_id: 'updateAuthors.yml'
github_token: ${{ secrets.GITHUB_TOKEN }}
# The last successful job was marked with a tag
- name: Get commit with last workflow
run: |
echo "LAST_COMMIT=$(git rev-list -n 1 tags/workflow-authors)" >> $GITHUB_ENV
- name: Update authors
id: update_authors
run: ./gradlew updateAuthors --stacktrace
env:
SUCCESS_COMMIT: ${{ steps.last_successful_commit.outputs.commit_hash }}
SUCCESS_COMMIT: ${{ env.LAST_COMMIT }}
GITHUB_OAUTH: ${{ secrets.GITHUB_TOKEN }}
- name: Commit changes
uses: stefanzweifel/git-auto-commit-action@v4
with:
commit_message: Add ${{ steps.update_authors.outputs.authors }} to contributors list
commit_user_name: Alex Plate
commit_user_email: aleksei.plate@jetbrains.com
commit_author: Alex Plate <aleksei.plate@jetbrains.com>
commit_user_name: IdeaVim Bot
commit_user_email: maintainers@ideavim.dev
commit_author: IdeaVim Bot <maintainers@ideavim.dev>
file_pattern: AUTHORS.md
- name: Update tags
run: |
git tag --delete workflow-authors || true
git push origin :refs/tags/workflow-authors || true
git tag workflow-authors
git push origin workflow-authors

View File

@@ -5,8 +5,11 @@ name: Update Changelog
on:
workflow_dispatch:
push:
branches: [ master ]
schedule:
- cron: '0 10 * * *'
# Workflow run on push is disabled to avoid conflicts when merging PR
# push:
# branches: [ master ]
jobs:
build:
@@ -14,9 +17,13 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
with:
fetch-depth: 300
# See end of file updateChangeslog.yml for explanation of this secret
ssh-key: ${{ secrets.PUSH_TO_PROTECTED_BRANCH_SECRET }}
- name: Get tags
run: git fetch --tags origin
- name: Set up JDK 11
uses: actions/setup-java@v2
with:
@@ -25,23 +32,34 @@ jobs:
server-id: github # Value of the distributionManagement/repository/id field of the pom.xml
settings-path: ${{ github.workspace }} # location for the settings.xml file
- uses: nrwl/last-successful-commit-action@v1
id: last_successful_commit
with:
branch: 'master'
workflow_id: 'updateChangelog.yml'
github_token: ${{ secrets.GITHUB_TOKEN }}
# The last successful job was marked with a tag
- name: Get commit with last workflow
run: |
echo "LAST_COMMIT=$(git rev-list -n 1 tags/workflow-changelog)" >> $GITHUB_ENV
- name: Update changelog
run: ./gradlew updateChangelog
env:
SUCCESS_COMMIT: ${{ steps.last_successful_commit.outputs.commit_hash }}
SUCCESS_COMMIT: ${{ env.LAST_COMMIT }}
- name: Commit changes
uses: stefanzweifel/git-auto-commit-action@v4
with:
commit_message: Update changelog
commit_user_name: Alex Plate
commit_user_email: aleksei.plate@jetbrains.com
commit_author: Alex Plate <aleksei.plate@jetbrains.com>
file_pattern: CHANGES.md
commit_message: Update changelog. Action id - ${{ github.run_id }}
commit_user_name: IdeaVim Bot
commit_user_email: maintainers@ideavim.dev
commit_author: IdeaVim Bot <maintainers@ideavim.dev>
file_pattern: CHANGES.md
- name: Update tags
run: |
git tag --delete workflow-changelog || true
git push origin :refs/tags/workflow-changelog || true
git tag workflow-changelog
git push origin workflow-changelog
# Regarding secrets.PUSH_TO_PROTECTED_BRANCH_SECRET - we use branch protection rules to automate merges of the
# dependabot updates. See mergeDependatobPR.yml file.
# However, it turned out that GitHub accepts pushes from the actions as a PR and requires checks, that are always
# false for pushing from actions.
# This secret is created to implement the workaround described in https://stackoverflow.com/a/76135647/3124227

View File

@@ -17,6 +17,8 @@ jobs:
- uses: actions/checkout@v2
with:
fetch-depth: 50
# See end of file updateChangeslog.yml for explanation of this secret
ssh-key: ${{ secrets.PUSH_TO_PROTECTED_BRANCH_SECRET }}
- name: Set up JDK 11
uses: actions/setup-java@v2
with:
@@ -25,13 +27,15 @@ jobs:
server-id: github # Value of the distributionManagement/repository/id field of the pom.xml
settings-path: ${{ github.workspace }} # location for the settings.xml file
- name: Format files
run: ./gradlew ktlintFormat
- uses: findologic/intellij-format-action@1.0.1
with:
include-glob: '*.kt,*.java'
path: .
- name: Commit changes
uses: stefanzweifel/git-auto-commit-action@v4
with:
commit_message: Update formatting
commit_user_name: Alex Plate
commit_user_email: aleksei.plate@jetbrains.com
commit_author: Alex Plate <aleksei.plate@jetbrains.com>
commit_user_name: IdeaVim Bot
commit_user_email: maintainers@ideavim.dev
commit_author: IdeaVim Bot <maintainers@ideavim.dev>

1
.gitignore vendored
View File

@@ -9,6 +9,7 @@
!/.idea/fileTemplates
!/.idea/runConfigurations
!/.idea/codeStyles
!/.idea/vcs.xml
**/build/
**/out/

View File

@@ -6,6 +6,7 @@
<option name="CONTINUATION_INDENT_SIZE" value="4" />
</value>
</option>
<option name="LINE_SEPARATOR" value="&#10;" />
<JavaCodeStyleSettings>
<option name="FIELD_NAME_PREFIX" value="my" />
<option name="STATIC_FIELD_NAME_PREFIX" value="our" />
@@ -191,6 +192,10 @@
</codeStyleSettings>
<codeStyleSettings language="kotlin">
<option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
<indentOptions>
<option name="INDENT_SIZE" value="2" />
<option name="TAB_SIZE" value="2" />
</indentOptions>
</codeStyleSettings>
</code_scheme>
</component>

View File

@@ -1,6 +1,6 @@
<component name="CopyrightManager">
<copyright>
<option name="notice" value="IdeaVim - Vim emulator for IDEs based on the IntelliJ platform&#10;Copyright (C) 2003-&amp;#36;today.year The IdeaVim authors&#10;&#10;This program is free software: you can redistribute it and/or modify&#10;it under the terms of the GNU General Public License as published by&#10;the Free Software Foundation, either version 2 of the License, or&#10;(at your option) any later version.&#10;&#10;This program is distributed in the hope that it will be useful,&#10;but WITHOUT ANY WARRANTY; without even the implied warranty of&#10;MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the&#10;GNU General Public License for more details.&#10;&#10;You should have received a copy of the GNU General Public License&#10;along with this program. If not, see &lt;https://www.gnu.org/licenses/&gt;." />
<option name="notice" value="Copyright 2003-2023 The IdeaVim authors&#10;&#10;Use of this source code is governed by an MIT-style&#10;license that can be found in the LICENSE.txt file or at&#10;https://opensource.org/licenses/MIT." />
<option name="myName" value="IdeaVim" />
</copyright>
</component>

View File

@@ -33,9 +33,11 @@
<option name="ignoreToString" value="false" />
<option name="nonNlsCommentPattern" value="NON-NLS" />
</inspection_tool>
<inspection_tool class="MagicConstant" enabled="false" level="WARNING" enabled_by_default="false" />
<inspection_tool class="MissortedModifiers" enabled="true" level="WARNING" enabled_by_default="true">
<option name="m_requireAnnotationsFirst" value="true" />
</inspection_tool>
<inspection_tool class="SameParameterValue" enabled="false" level="WARNING" enabled_by_default="false" />
<inspection_tool class="SameReturnValue" enabled="false" level="WARNING" enabled_by_default="false" />
<inspection_tool class="SpellCheckingInspection" enabled="false" level="TYPO" enabled_by_default="false">
<option name="processCode" value="true" />
@@ -44,5 +46,17 @@
</inspection_tool>
<inspection_tool class="SuperTearDownInFinally" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="UnstableApiUsage" enabled="false" level="WARNING" enabled_by_default="false" />
<inspection_tool class="unused" enabled="false" level="WARNING" enabled_by_default="false" checkParameterExcludingHierarchy="false">
<option name="LOCAL_VARIABLE" value="true" />
<option name="FIELD" value="true" />
<option name="METHOD" value="true" />
<option name="CLASS" value="true" />
<option name="PARAMETER" value="true" />
<option name="REPORT_PARAMETER_FOR_PUBLIC_METHODS" value="true" />
<option name="ADD_MAINS_TO_ENTRIES" value="true" />
<option name="ADD_APPLET_TO_ENTRIES" value="true" />
<option name="ADD_SERVLET_TO_ENTRIES" value="true" />
<option name="ADD_NONJAVA_TO_ENTRIES" value="true" />
</inspection_tool>
</profile>
</component>

View File

@@ -1,3 +1,3 @@
<component name="DependencyValidationManager">
<scope name="Copyright" pattern="(file[IdeaVIM.main]:*/||file[IdeaVIM.test]:*/)&amp;&amp;!file[IdeaVIM.main]:resources//*" />
<scope name="Copyright" pattern="file:*/&amp;&amp;!file:.github//*&amp;&amp;!file:.idea//*&amp;&amp;!file:.teamcity//*&amp;&amp;!file:assets//*&amp;&amp;!file:config//*&amp;&amp;!file:doc//*&amp;&amp;!file:gradle//*&amp;&amp;!file:gradlew&amp;&amp;!file:gradlew.bat&amp;&amp;!file:src/main/resources//*&amp;&amp;!file:antlr//*&amp;&amp;!file:java/com/maddyhome/idea/vim/regexp/RegExp.kt&amp;&amp;!file:java/com/maddyhome/idea/vim/ui/Tutor.kt&amp;&amp;!file:java/com/maddyhome/idea/vim/helper/ScrollViewHelper.kt" />
</component>

16
.idea/vcs.xml generated Normal file
View File

@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="IssueNavigationConfiguration">
<option name="links">
<list>
<IssueNavigationLink>
<option name="issueRegexp" value="[A-Z]+\-\d+" />
<option name="linkRegexp" value="https://youtrack.jetbrains.com/issue/$0" />
</IssueNavigationLink>
</list>
</option>
</component>
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>

View File

@@ -5,16 +5,15 @@ object Constants {
const val EAP_CHANNEL = "eap"
const val DEV_CHANNEL = "Dev"
const val VERSION = "1.11.1"
const val DEV_VERSION = "1.12.0"
const val VERSION = "2.4.0"
const val GITHUB_TESTS = "LATEST-EAP-SNAPSHOT"
const val NVIM_TESTS = "LATEST-EAP-SNAPSHOT"
const val PROPERTY_TESTS = "LATEST-EAP-SNAPSHOT"
const val LONG_RUNNING_TESTS = "LATEST-EAP-SNAPSHOT"
const val QODANA_TESTS = "LATEST-EAP-SNAPSHOT"
const val RELEASE = "LATEST-EAP-SNAPSHOT"
const val RELEASE = "2023.1.2"
const val RELEASE_DEV = "LATEST-EAP-SNAPSHOT"
const val RELEASE_EAP = "LATEST-EAP-SNAPSHOT"
const val RELEASE_DEV = "2023.1.2"
const val RELEASE_EAP = "2023.1.2"
}

View File

@@ -6,41 +6,25 @@ import _Self.buildTypes.Nvim
import _Self.buildTypes.PluginVerifier
import _Self.buildTypes.PropertyBased
import _Self.buildTypes.Qodana
import _Self.buildTypes.TestsForIntelliJ20222
import _Self.buildTypes.TestsForIntelliJEAP
import _Self.buildTypes.TestingBuildType
import _Self.subprojects.GitHub
import _Self.subprojects.OldTests
import _Self.subprojects.Releases
import _Self.vcsRoots.Branch_181
import _Self.vcsRoots.Branch_183
import _Self.vcsRoots.Branch_191_193
import _Self.vcsRoots.Branch_201
import _Self.vcsRoots.Branch_202
import _Self.vcsRoots.Branch_203_212
import _Self.vcsRoots.Branch_213_221
import _Self.vcsRoots.Branch_Release
import _Self.vcsRoots.GitHubPullRequest
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
import jetbrains.buildServer.configs.kotlin.v2019_2.Project
object Project : Project({
description = "Vim emulation plugin for the IntelliJ platform products"
description = "Vim engine for IDEs based on the IntelliJ platform"
subProjects(Releases, OldTests, GitHub)
// VCS roots
vcsRoot(Branch_183)
vcsRoot(Branch_181)
vcsRoot(Branch_191_193)
vcsRoot(Branch_201)
vcsRoot(Branch_202)
vcsRoot(Branch_203_212)
vcsRoot(Branch_213_221)
vcsRoot(Branch_Release)
vcsRoot(GitHubPullRequest)
// Builds
buildType(TestsForIntelliJEAP)
buildType(TestsForIntelliJ20222)
// Active tests
buildType(TestingBuildType("Latest EAP", "<default>", version = "LATEST-EAP-SNAPSHOT"))
buildType(TestingBuildType("Latest EAP With Xorg", "<default>", version = "LATEST-EAP-SNAPSHOT"))
buildType(PropertyBased)
buildType(LongRunning)
@@ -50,52 +34,22 @@ object Project : Project({
buildType(Compatibility)
buildType(Qodana)
// Unknown staff generated by TeamCity
features {
feature {
type = "CloudImage"
id = "PROJECT_EXT_768"
param("agent_pool_id", "41")
param("amazon-id", "ami-0fa17ce8238eb8868")
param("ebs-optimized", "false")
param("image-instances-limit", "")
param("image-name-prefix", "BuildAgentsIdeaVim")
param("instance-type", "c5d.xlarge")
param("key-pair-name", "teamcity-prod-pub")
param("profileId", "amazon-48")
param("security-group-ids", "sg-eda08696,sg-7332cf0f,")
param("source-id", "BuildAgentsIdeaVim")
param("spot-instance-price", "0.12")
param("subnet-id", "subnet-58839511")
param("use-spot-instances", "true")
param("user-tags", "project=idea-vim")
param("key-pair-name", "")
param("spot-instance-price", "")
}
feature {
type = "CloudProfile"
id = "amazon-48"
param("agentPushPreset", "")
param("cloud-code", "amazon")
param("description", "")
param("enabled", "true")
param("max-running-instances", "10")
param("name", "Cloud Agents")
param("next-hour", "")
param("not-checked", "")
param("profileId", "amazon-48")
param("profileServerUrl", "")
param("region", "eu-west-1")
param("secure:access-id", "credentialsJSON:dbcdb2a2-de5f-4bc9-9421-292b19e83947")
param("secure:secret-key", "credentialsJSON:65a87fe7-0977-4af9-96f1-344f2b82d269")
param("system.cloud.profile_id", "amazon-48")
param("terminate-idle-time", "15")
param("total-work-time", "")
param("user-script", "")
param("spot-fleet-config", "")
param("terminate-after-build", "true")
param("name", "Cloud Agents - Single Build")
}
}
})
// Common build type for all configurations
abstract class IdeaVimBuildType(init: BuildType.() -> Unit) : BuildType({
init()
requirements {
// These requirements define Linux-Medium configuration.
// Unfortunately, requirement by name (teamcity.agent.name) doesn't work
// IDK the reason for it, but on our agents this property is empty
equals("teamcity.agent.hardware.cpuCount", "4")
equals("teamcity.agent.os.family", "Linux")
}
failureConditions {
// Disable detection of the java OOM
javaCrash = false
}
})

View File

@@ -1,31 +1,46 @@
package _Self.buildTypes
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
import _Self.IdeaVimBuildType
import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext
import jetbrains.buildServer.configs.kotlin.v2019_2.buildFeatures.golang
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.script
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.schedule
object Compatibility : BuildType({
object Compatibility : IdeaVimBuildType({
id("IdeaVimCompatibility")
name = "IdeaVim compatibility with external plugins"
vcs {
root(DslContext.settingsRoot)
branchFilter = "+:<default>"
}
steps {
script {
name = "Load Verifier"
scriptContent = """
mkdir verifier1
curl -f -L -o verifier1/verifier-cli-dev-all-1.jar "https://packages.jetbrains.team/files/p/ideavim/plugin-verifier/verifier-cli-dev-all-1.jar"
""".trimIndent()
}
script {
name = "Check"
scriptContent = """
java -jar verifier/verifier-cli-dev-all.jar check-plugin '${'$'}org.jetbrains.IdeaVim-EasyMotion' [latest-IU] -team-city
java -jar verifier/verifier-cli-dev-all.jar check-plugin '${'$'}io.github.mishkun.ideavimsneak' [latest-IU] -team-city
java -jar verifier/verifier-cli-dev-all.jar check-plugin '${'$'}eu.theblob42.idea.whichkey' [latest-IU] -team-city
java -jar verifier/verifier-cli-dev-all.jar check-plugin '${'$'}IdeaVimExtension' [latest-IU] -team-city
# Outdated java -jar verifier/verifier-cli-dev-all.jar check-plugin '${'$'}github.zgqq.intellij-enhance' [latest-IU] -team-city
java -jar verifier/verifier-cli-dev-all.jar check-plugin '${'$'}com.github.copilot' [latest-IU] -team-city
java -jar verifier/verifier-cli-dev-all.jar check-plugin '${'$'}com.github.dankinsoid.multicursor' [latest-IU] -team-city
java -jar verifier/verifier-cli-dev-all.jar check-plugin '${'$'}com.joshestein.ideavim-quickscope' [latest-IU] -team-city
# We use a custom build of verifier that downloads IdeaVim from dev channel
# To create a custom build: Download plugin verifier repo, add an if that switches to dev channel for IdeaVim repo
# At the moment it's com.jetbrains.pluginverifier.repository.repositories.marketplace.MarketplaceRepository#getLastCompatibleVersionOfPlugin
# Build using gradlew :intellij-plugin-verifier:verifier-cli:shadowJar
# Upload verifier-cli-dev-all.jar artifact to the repo in IdeaVim space repo
java --version
java -jar verifier1/verifier-cli-dev-all-1.jar check-plugin '${'$'}org.jetbrains.IdeaVim-EasyMotion' [latest-IU] -team-city
java -jar verifier1/verifier-cli-dev-all-1.jar check-plugin '${'$'}io.github.mishkun.ideavimsneak' [latest-IU] -team-city
java -jar verifier1/verifier-cli-dev-all-1.jar check-plugin '${'$'}eu.theblob42.idea.whichkey' [latest-IU] -team-city
java -jar verifier1/verifier-cli-dev-all-1.jar check-plugin '${'$'}IdeaVimExtension' [latest-IU] -team-city
# Outdated java -jar verifier/verifier-cli-dev-all.jar check-plugin '${'$'}github.zgqq.intellij-enhance' [latest-IU] -team-city
java -jar verifier1/verifier-cli-dev-all-1.jar check-plugin '${'$'}com.github.copilot' [latest-IU] -team-city
java -jar verifier1/verifier-cli-dev-all-1.jar check-plugin '${'$'}com.github.dankinsoid.multicursor' [latest-IU] -team-city
java -jar verifier1/verifier-cli-dev-all-1.jar check-plugin '${'$'}com.joshestein.ideavim-quickscope' [latest-IU] -team-city
""".trimIndent()
}
}

View File

@@ -1,77 +0,0 @@
package _Self.buildTypes
import _Self.Constants.GITHUB_TESTS
import _Self.vcsRoots.GitHubPullRequest
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
import jetbrains.buildServer.configs.kotlin.v2019_2.buildFeatures.PullRequests
import jetbrains.buildServer.configs.kotlin.v2019_2.buildFeatures.commitStatusPublisher
import jetbrains.buildServer.configs.kotlin.v2019_2.buildFeatures.pullRequests
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.VcsTrigger
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
object GithubTests : Github("clean test", "Tests")
sealed class Github(command: String, desc: String) : BuildType({
name = "GitHub Pull Requests $desc"
description = "Test GitHub pull requests $desc"
params {
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
param("env.ORG_GRADLE_PROJECT_ideaVersion", GITHUB_TESTS)
param("env.ORG_GRADLE_PROJECT_instrumentPluginCode", "false")
}
vcs {
root(GitHubPullRequest)
checkoutMode = CheckoutMode.AUTO
branchFilter = """
+:*
-:<default>
""".trimIndent()
}
steps {
gradle {
tasks = command
buildFile = ""
enableStacktrace = true
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
}
}
triggers {
vcs {
quietPeriodMode = VcsTrigger.QuietPeriodMode.USE_DEFAULT
branchFilter = ""
}
}
features {
pullRequests {
provider = github {
authType = token {
token = "credentialsJSON:43afd6e5-6ad5-4d12-a218-cf1547717a7f"
}
filterTargetBranch = "refs/heads/master"
filterAuthorRole = PullRequests.GitHubRoleFilter.EVERYBODY
}
}
commitStatusPublisher {
vcsRootExtId = "${GitHubPullRequest.id}"
publisher = github {
githubUrl = "https://api.github.com"
authType = personalToken {
token = "credentialsJSON:43afd6e5-6ad5-4d12-a218-cf1547717a7f"
}
}
param("github_oauth_user", "AlexPl292")
}
}
requirements {
noLessThanVer("teamcity.agent.jvm.version", "1.8")
}
})

View File

@@ -1,13 +1,14 @@
package _Self.buildTypes
import _Self.Constants.LONG_RUNNING_TESTS
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
import _Self.IdeaVimBuildType
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.schedule
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
object LongRunning : BuildType({
object LongRunning : IdeaVimBuildType({
name = "Long running tests"
params {
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
@@ -17,6 +18,7 @@ object LongRunning : BuildType({
vcs {
root(DslContext.settingsRoot)
branchFilter = "+:<default>"
checkoutMode = CheckoutMode.AUTO
}
@@ -26,17 +28,19 @@ object LongRunning : BuildType({
tasks = "clean testLongRunning"
buildFile = ""
enableStacktrace = true
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
}
}
triggers {
vcs {
branchFilter = ""
enabled = false
branchFilter = "+:<default>"
}
schedule {
enabled = true
schedulingPolicy = daily {
hour = 5
}
}
}
requirements {
noLessThanVer("teamcity.agent.jvm.version", "1.8")
}
})

View File

@@ -1,7 +1,7 @@
package _Self.buildTypes
import _Self.Constants.NVIM_TESTS
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
import _Self.IdeaVimBuildType
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
@@ -10,7 +10,7 @@ import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.BuildFailu
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.failOnMetricChange
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
object Nvim : BuildType({
object Nvim : IdeaVimBuildType({
name = "Tests with nvim"
description = "Running tests with nvim integration"
@@ -23,6 +23,7 @@ object Nvim : BuildType({
vcs {
root(DslContext.settingsRoot)
branchFilter = "+:<default>"
checkoutMode = CheckoutMode.AUTO
}
@@ -41,20 +42,15 @@ object Nvim : BuildType({
tasks = "clean testWithNeovim"
buildFile = ""
enableStacktrace = true
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
}
}
triggers {
vcs {
branchFilter = ""
branchFilter = "+:<default>"
}
}
requirements {
noLessThanVer("teamcity.agent.jvm.version", "1.8")
}
failureConditions {
failOnMetricChange {
metric = BuildFailureOnMetric.MetricType.TEST_COUNT

View File

@@ -1,12 +1,12 @@
package _Self.buildTypes
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
import _Self.IdeaVimBuildType
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
object PluginVerifier : BuildType({
object PluginVerifier : IdeaVimBuildType({
name = "Plugin verification"
params {
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
@@ -15,6 +15,7 @@ object PluginVerifier : BuildType({
vcs {
root(DslContext.settingsRoot)
branchFilter = "+:<default>"
checkoutMode = CheckoutMode.AUTO
}
@@ -24,17 +25,12 @@ object PluginVerifier : BuildType({
tasks = "clean runPluginVerifier"
buildFile = ""
enableStacktrace = true
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
}
}
triggers {
vcs {
branchFilter = ""
branchFilter = "+:<default>"
}
}
requirements {
noLessThanVer("teamcity.agent.jvm.version", "1.8")
}
})

View File

@@ -1,13 +1,13 @@
package _Self.buildTypes
import _Self.Constants.PROPERTY_TESTS
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
import _Self.IdeaVimBuildType
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
object PropertyBased : BuildType({
object PropertyBased : IdeaVimBuildType({
name = "Property based tests"
params {
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
@@ -17,6 +17,7 @@ object PropertyBased : BuildType({
vcs {
root(DslContext.settingsRoot)
branchFilter = "+:<default>"
checkoutMode = CheckoutMode.AUTO
}
@@ -26,17 +27,12 @@ object PropertyBased : BuildType({
tasks = "clean testPropertyBased"
buildFile = ""
enableStacktrace = true
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
}
}
triggers {
vcs {
branchFilter = ""
branchFilter = "+:<default>"
}
}
requirements {
noLessThanVer("teamcity.agent.jvm.version", "1.8")
}
})

View File

@@ -0,0 +1,63 @@
package _Self.buildTypes
import _Self.IdeaVimBuildType
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext
import jetbrains.buildServer.configs.kotlin.v2019_2.ParameterDisplay
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.BuildFailureOnMetric
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.failOnMetricChange
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.ScheduleTrigger
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.schedule
object PublishVimEngine : IdeaVimBuildType({
name = "Publish vim-engine"
description = "Build and publish vim-engine library"
artifactRules = "build/distributions/*"
buildNumberPattern = "0.0.%build.counter%"
params {
param("env.ORG_GRADLE_PROJECT_engineVersion", "%build.number%")
param("env.ORG_GRADLE_PROJECT_uploadUrl", "https://packages.jetbrains.team/maven/p/ij/intellij-dependencies")
password("env.ORG_GRADLE_PROJECT_spacePassword", "credentialsJSON:790b4e43-ee83-4184-b81b-678afab60409", display = ParameterDisplay.HIDDEN)
param("env.ORG_GRADLE_PROJECT_spaceUsername", "Aleksei.Plate")
}
vcs {
root(DslContext.settingsRoot)
branchFilter = "+:<default>"
checkoutMode = CheckoutMode.AUTO
}
steps {
gradle {
tasks = ":vim-engine:publish"
buildFile = ""
enableStacktrace = true
}
}
triggers {
schedule {
enabled = true
schedulingPolicy = weekly {
dayOfWeek = ScheduleTrigger.DAY.Sunday
}
branchFilter = ""
}
}
failureConditions {
failOnMetricChange {
metric = BuildFailureOnMetric.MetricType.ARTIFACT_SIZE
threshold = 5
units = BuildFailureOnMetric.MetricUnit.PERCENTS
comparison = BuildFailureOnMetric.MetricComparison.DIFF
compareTo = build {
buildRule = lastSuccessful()
}
}
}
})

View File

@@ -1,18 +1,18 @@
package _Self.buildTypes
import _Self.Constants.QODANA_TESTS
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
import _Self.IdeaVimBuildType
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.Qodana
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.qodana
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.BuildFailureOnMetric
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.failOnMetricChange
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.ScheduleTrigger
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.schedule
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
object Qodana : BuildType({
object Qodana : IdeaVimBuildType({
name = "Qodana checks"
params {
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
@@ -22,48 +22,48 @@ object Qodana : BuildType({
vcs {
root(DslContext.settingsRoot)
branchFilter = "+:<default>"
checkoutMode = CheckoutMode.AUTO
}
steps {
gradle {
name = "Generate grammar"
tasks = "generateGrammarSource"
}
qodana {
name = "Qodana"
/*
reportAsTestsEnable = ""
failBuildOnErrors = ""
codeInspectionXmlConfig = "Custom"
codeInspectionCustomXmlConfigPath = ".idea/inspectionProfiles/Qodana.xml"
reportAsTestsEnable = "true"
*/
clearConditions()
param("licenseaudit-enable", "true")
param("clonefinder-languages", "Java")
param("clonefinder-mode", "")
param("report-version", "")
param("clonefinder-languages-container", "Java Kotlin")
param("namesAndTagsCustom", "repo.labs.intellij.net/static-analyser/qodana")
param("clonefinder-queried-project", "src")
param("clonefinder-enable", "true")
param("clonefinder-reference-projects", "src")
param("yaml-configuration", "")
param("clonefinder-languages", "")
param("collect-anonymous-statistics", "")
param("licenseaudit-enable", "")
param("clonefinder-languages-container", "")
param("linterVersion", "")
param("clonefinder-queried-project", "")
param("clonefinder-enable", "")
param("clonefinder-reference-projects", "")
linter = jvm {
version = Qodana.JVMVersion.LATEST
}
reportAsTests = true
additionalDockerArguments = "-e QODANA_TOKEN=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJvcmdhbml6YXRpb24iOiIzUFZrQSIsInByb2plY3QiOiIzN1FlQSIsInRva2VuIjoiM0t2bXoifQ.uohp81tM7iAfvvB6k8faarfpV-OjusAaEbWQ8iNrOgs"
additionalQodanaArguments = "--baseline qodana.sarif.json"
}
}
triggers {
vcs {
enabled = true
branchFilter = ""
enabled = false
branchFilter = "+:<default>"
}
schedule {
schedulingPolicy = weekly {
dayOfWeek = ScheduleTrigger.DAY.Tuesday
schedulingPolicy = daily {
hour = 12
minute = 0
timezone = "SERVER"
}
branchFilter = ""
triggerBuild = always()
param("dayOfWeek", "Sunday")
enabled = false
}
}
@@ -74,11 +74,8 @@ object Qodana : BuildType({
comparison = BuildFailureOnMetric.MetricComparison.MORE
compareTo = value()
metric = BuildFailureOnMetric.MetricType.TEST_FAILED_COUNT
param("metricKey", "QodanaProblemsTotal")
param("metricKey", "QodanaProblemsNew")
enabled = false
}
}
requirements {
noLessThanVer("teamcity.agent.jvm.version", "1.8")
}
})

View File

@@ -1,76 +0,0 @@
package _Self.buildTypes
import _Self.Constants.DEFAULT_CHANNEL
import _Self.Constants.DEV_CHANNEL
import _Self.Constants.EAP_CHANNEL
import _Self.Constants.RELEASE
import _Self.Constants.VERSION
import _Self.vcsRoots.Branch_Release
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext
import jetbrains.buildServer.configs.kotlin.v2019_2.buildFeatures.vcsLabeling
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.BuildFailureOnMetric
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.failOnMetricChange
object Release : BuildType({
name = "Publish Release"
description = "Build and publish IdeaVim plugin"
artifactRules = "build/distributions/*"
buildNumberPattern = VERSION
params {
param("env.ORG_GRADLE_PROJECT_ideaVersion", RELEASE)
password(
"env.ORG_GRADLE_PROJECT_publishToken",
"credentialsJSON:61a36031-4da1-4226-a876-b8148bf32bde",
label = "Password"
)
param("env.ORG_GRADLE_PROJECT_version", "%build.number%")
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
param("env.ORG_GRADLE_PROJECT_publishChannels", "$DEFAULT_CHANNEL,$EAP_CHANNEL,$DEV_CHANNEL")
password(
"env.ORG_GRADLE_PROJECT_slackUrl",
"credentialsJSON:a8ab8150-e6f8-4eaf-987c-bcd65eac50b5",
label = "Slack Token"
)
}
vcs {
root(Branch_Release)
checkoutMode = CheckoutMode.AUTO
}
steps {
gradle {
tasks = "clean publishPlugin slackNotification"
buildFile = ""
enableStacktrace = true
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
}
}
features {
vcsLabeling {
vcsRootId = "${DslContext.settingsRoot.id}"
labelingPattern = "%system.build.number%"
successfulOnly = true
branchFilter = ""
}
}
failureConditions {
failOnMetricChange {
metric = BuildFailureOnMetric.MetricType.ARTIFACT_SIZE
threshold = 5
units = BuildFailureOnMetric.MetricUnit.PERCENTS
comparison = BuildFailureOnMetric.MetricComparison.DIFF
compareTo = build {
buildRule = lastSuccessful()
}
}
}
})

View File

@@ -1,22 +1,22 @@
package _Self.buildTypes
import _Self.Constants.DEV_CHANNEL
import _Self.Constants.DEV_VERSION
import _Self.Constants.RELEASE_DEV
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
import _Self.IdeaVimBuildType
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext
import jetbrains.buildServer.configs.kotlin.v2019_2.buildFeatures.sshAgent
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.script
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.BuildFailureOnMetric
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.failOnMetricChange
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.schedule
object ReleaseDev : BuildType({
object ReleaseDev : IdeaVimBuildType({
name = "Publish Dev Build"
description = "Build and publish Dev of IdeaVim plugin"
artifactRules = "build/distributions/*"
buildNumberPattern = "$DEV_VERSION-dev.%build.counter%"
params {
param("env.ORG_GRADLE_PROJECT_ideaVersion", RELEASE_DEV)
@@ -25,23 +25,35 @@ object ReleaseDev : BuildType({
"credentialsJSON:61a36031-4da1-4226-a876-b8148bf32bde",
label = "Password"
)
param("env.ORG_GRADLE_PROJECT_version", "%build.number%")
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
param("env.ORG_GRADLE_PROJECT_publishChannels", DEV_CHANNEL)
}
vcs {
root(DslContext.settingsRoot)
branchFilter = "+:<default>"
checkoutMode = CheckoutMode.AUTO
}
steps {
script {
name = "Pull git tags"
scriptContent = "git fetch --tags origin"
}
script {
name = "Pull git history"
scriptContent = "git fetch --unshallow"
}
gradle {
tasks = "clean publishPlugin"
buildFile = ""
enableStacktrace = true
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
name = "Calculate new dev version"
tasks = "scripts:calculateNewDevVersion"
}
gradle {
name = "Set TeamCity build number"
tasks = "scripts:setTeamCityBuildNumber"
}
gradle {
tasks = "publishPlugin"
}
}
@@ -55,6 +67,12 @@ object ReleaseDev : BuildType({
}
}
features {
sshAgent {
teamcitySshKey = "IdeaVim ssh keys"
}
}
failureConditions {
failOnMetricChange {
metric = BuildFailureOnMetric.MetricType.ARTIFACT_SIZE

View File

@@ -1,22 +1,21 @@
package _Self.buildTypes
import _Self.Constants.DEV_VERSION
import _Self.Constants.EAP_CHANNEL
import _Self.Constants.RELEASE_EAP
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
import _Self.IdeaVimBuildType
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext
import jetbrains.buildServer.configs.kotlin.v2019_2.buildFeatures.vcsLabeling
import jetbrains.buildServer.configs.kotlin.v2019_2.buildFeatures.sshAgent
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.script
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.BuildFailureOnMetric
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.failOnMetricChange
object ReleaseEap : BuildType({
object ReleaseEap : IdeaVimBuildType({
name = "Publish EAP Build"
description = "Build and publish EAP of IdeaVim plugin"
artifactRules = "build/distributions/*"
buildNumberPattern = "$DEV_VERSION-eap.%build.counter%"
params {
param("env.ORG_GRADLE_PROJECT_ideaVersion", RELEASE_EAP)
@@ -25,8 +24,6 @@ object ReleaseEap : BuildType({
"credentialsJSON:61a36031-4da1-4226-a876-b8148bf32bde",
label = "Password"
)
param("env.ORG_GRADLE_PROJECT_version", "%build.number%")
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
param("env.ORG_GRADLE_PROJECT_publishChannels", EAP_CHANNEL)
password(
"env.ORG_GRADLE_PROJECT_slackUrl",
@@ -37,25 +34,58 @@ object ReleaseEap : BuildType({
vcs {
root(DslContext.settingsRoot)
branchFilter = "+:<default>"
checkoutMode = CheckoutMode.AUTO
}
steps {
script {
name = "Pull git tags"
scriptContent = "git fetch --tags origin"
}
script {
name = "Pull git history"
scriptContent = "git fetch --unshallow"
}
gradle {
tasks = "clean publishPlugin"
buildFile = ""
enableStacktrace = true
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
name = "Calculate new eap version"
tasks = "scripts:calculateNewEapVersion"
}
gradle {
name = "Set TeamCity build number"
tasks = "scripts:setTeamCityBuildNumber"
}
gradle {
name = "Add release tag"
tasks = "scripts:addReleaseTag"
}
gradle {
tasks = "publishPlugin"
}
// Same as the script below. However, jgit can't find ssh keys on TeamCity
// gradle {
// name = "Push changes to the repo"
// tasks = "scripts:pushChanges"
// }
script {
name = "Push changes to the repo"
scriptContent = """
branch=$(git branch --show-current)
echo current branch is ${'$'}branch
if [ "master" != "${'$'}branch" ];
then
exit 1
fi
git push origin %build.number%
""".trimIndent()
}
}
features {
vcsLabeling {
vcsRootId = "${DslContext.settingsRoot.id}"
labelingPattern = "%system.build.number%"
successfulOnly = true
branchFilter = ""
sshAgent {
teamcitySshKey = "IdeaVim ssh keys"
}
}
@@ -70,4 +100,12 @@ object ReleaseEap : BuildType({
}
}
}
requirements {
// These requirements define Linux-XLarge configuration.
// Unfortunately, requirement by name (teamcity.agent.name) doesn't work
// IDK the reason for it, but on our agents this property is empty
// equals("teamcity.agent.hardware.cpuCount", "16")
// equals("teamcity.agent.os.family", "Linux")
}
})

View File

@@ -0,0 +1,155 @@
/*
* Copyright 2003-2023 The IdeaVim authors
*
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE.txt file or at
* https://opensource.org/licenses/MIT.
*/
package _Self.buildTypes
import _Self.Constants.DEFAULT_CHANNEL
import _Self.Constants.DEV_CHANNEL
import _Self.Constants.EAP_CHANNEL
import _Self.Constants.RELEASE
import _Self.IdeaVimBuildType
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext
import jetbrains.buildServer.configs.kotlin.v2019_2.ParameterDisplay
import jetbrains.buildServer.configs.kotlin.v2019_2.buildFeatures.sshAgent
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.script
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.BuildFailureOnMetric
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.failOnMetricChange
object ReleaseMajor : ReleasePlugin("major")
object ReleaseMinor : ReleasePlugin("minor")
object ReleasePatch : ReleasePlugin("patch")
sealed class ReleasePlugin(private val releaseType: String) : IdeaVimBuildType({
name = "Publish $releaseType release"
description = "Build and publish IdeaVim plugin"
artifactRules = "build/distributions/*"
params {
param("env.ORG_GRADLE_PROJECT_ideaVersion", RELEASE)
password(
"env.ORG_GRADLE_PROJECT_publishToken",
"credentialsJSON:61a36031-4da1-4226-a876-b8148bf32bde",
label = "Password"
)
param("env.ORG_GRADLE_PROJECT_publishChannels", "$DEFAULT_CHANNEL,$EAP_CHANNEL,$DEV_CHANNEL")
password(
"env.ORG_GRADLE_PROJECT_slackUrl",
"credentialsJSON:a8ab8150-e6f8-4eaf-987c-bcd65eac50b5",
label = "Slack Token"
)
password("env.ORG_GRADLE_PROJECT_youtrackToken", "credentialsJSON:3cd3e867-282c-451f-b958-bc95d56a8450", display = ParameterDisplay.HIDDEN)
param("env.ORG_GRADLE_PROJECT_releaseType", releaseType)
}
vcs {
root(DslContext.settingsRoot)
branchFilter = "+:<default>"
checkoutMode = CheckoutMode.AUTO
}
steps {
script {
name = "Pull git tags"
scriptContent = "git fetch --tags origin"
}
script {
name = "Pull git history"
scriptContent = "git fetch --unshallow"
}
gradle {
name = "Select branch"
tasks = "scripts:selectBranch"
}
gradle {
name = "Calculate new version"
tasks = "scripts:calculateNewVersion"
}
gradle {
name = "Set TeamCity build number"
tasks = "scripts:setTeamCityBuildNumber"
}
gradle {
name = "Update change log"
tasks = "scripts:changelogUpdateUnreleased"
}
gradle {
name = "Commit preparation changes"
tasks = "scripts:commitChanges"
}
gradle {
name = "Add release tag"
tasks = "scripts:addReleaseTag"
}
gradle {
name = "Reset release branch"
tasks = "scripts:resetReleaseBranch"
}
gradle {
name = "Publish release"
tasks = "publishPlugin"
}
// gradle {
// name = "Push changes to the repo"
// tasks = "scripts:pushChangesWithReleaseBranch"
// }
script {
name = "Push changes to the repo"
scriptContent = """
branch=$(git branch --show-current)
echo current branch is ${'$'}branch
if [ "master" != "${'$'}branch" ];
then
git checkout master
fi
git push origin --tags
git push origin
if [ "patch" != $releaseType ];
then
git checkout release
echo checkout release branch
git push --tags
git push origin --force
fi
git checkout ${'$'}branch
""".trimIndent()
}
gradle {
name = "Run Integrations"
tasks = "releaseActions"
}
gradle {
name = "Slack Notification"
tasks = "slackNotification"
}
}
features {
sshAgent {
teamcitySshKey = "IdeaVim ssh keys"
}
}
failureConditions {
failOnMetricChange {
metric = BuildFailureOnMetric.MetricType.ARTIFACT_SIZE
threshold = 5
units = BuildFailureOnMetric.MetricUnit.PERCENTS
comparison = BuildFailureOnMetric.MetricComparison.DIFF
compareTo = build {
buildRule = lastSuccessful()
}
}
}
})

View File

@@ -1,6 +1,8 @@
@file:Suppress("ClassName")
package _Self.buildTypes
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
import _Self.IdeaVimBuildType
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
@@ -8,39 +10,47 @@ import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.BuildFailu
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.failOnMetricChange
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
sealed class ActiveTests(buildName: String, ijVersion: String) : BuildType({
name = buildName
open class TestingBuildType(
private val testName: String,
private val branch: String,
private val version: String = testName,
private val javaVersion: String? = null,
private val javaPlugin: Boolean = true,
) : IdeaVimBuildType({
id("IdeaVimTests_${testName.vanish()}")
name = "Tests for IntelliJ $testName"
params {
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
param("env.ORG_GRADLE_PROJECT_ideaVersion", ijVersion)
param("env.ORG_GRADLE_PROJECT_legacyNoJavaPlugin", javaPlugin.not().toString())
param("env.ORG_GRADLE_PROJECT_ideaVersion", version)
param("env.ORG_GRADLE_PROJECT_instrumentPluginCode", "false")
if (javaVersion != null) {
param("env.ORG_GRADLE_PROJECT_javaVersion", javaVersion)
}
}
vcs {
root(DslContext.settingsRoot)
branchFilter = "+:$branch"
checkoutMode = CheckoutMode.AUTO
}
steps {
gradle {
tasks = "clean check -x ktlintMainSourceSetCheck -x ktlintTestSourceSetCheck"
tasks = "clean test"
buildFile = ""
enableStacktrace = true
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
}
}
triggers {
vcs {
branchFilter = ""
branchFilter = "+:$branch"
}
}
requirements {
noLessThanVer("teamcity.agent.jvm.version", "1.8")
}
failureConditions {
failOnMetricChange {
metric = BuildFailureOnMetric.MetricType.TEST_COUNT
@@ -54,5 +64,9 @@ sealed class ActiveTests(buildName: String, ijVersion: String) : BuildType({
}
})
object TestsForIntelliJEAP : ActiveTests("Tests for IntelliJ Latest EAP", "LATEST-EAP-SNAPSHOT")
object TestsForIntelliJ20222 : ActiveTests("Tests for IntelliJ 2022.2", "2022.2.1")
private fun String.vanish(): String {
return this
.replace(' ', '_')
.replace('.', '_')
.replace('-', '_')
}

View File

@@ -1,58 +0,0 @@
package _Self.buildTypes
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.BuildFailureOnMetric
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.failOnMetricChange
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
object TestsForIntelliJ20183 : BuildType({
name = "Tests for IntelliJ 2018.3"
description = "branch 183"
params {
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
param("env.ORG_GRADLE_PROJECT_legacyNoJavaPlugin", "true")
param("env.ORG_GRADLE_PROJECT_ideaVersion", "IC-2018.3")
param("env.ORG_GRADLE_PROJECT_instrumentPluginCode", "false")
param("env.ORG_GRADLE_PROJECT_javaVersion", "1.8")
}
vcs {
root(_Self.vcsRoots.Branch_183)
checkoutMode = CheckoutMode.AUTO
}
steps {
gradle {
tasks = "clean test"
buildFile = ""
enableStacktrace = true
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
}
}
triggers {
vcs {
branchFilter = ""
}
}
requirements {
noLessThanVer("teamcity.agent.jvm.version", "1.8")
}
failureConditions {
failOnMetricChange {
metric = BuildFailureOnMetric.MetricType.TEST_COUNT
threshold = 20
units = BuildFailureOnMetric.MetricUnit.PERCENTS
comparison = BuildFailureOnMetric.MetricComparison.LESS
compareTo = build {
buildRule = lastSuccessful()
}
}
}
})

View File

@@ -1,61 +0,0 @@
@file:Suppress("ClassName")
package _Self.buildTypes
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.BuildFailureOnMetric
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.failOnMetricChange
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
sealed class TestsForIntelliJ_181_branch(private val version: String) : BuildType({
name = "Tests for IntelliJ $version"
params {
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
param("env.ORG_GRADLE_PROJECT_ideaVersion", "IC-$version")
param("env.ORG_GRADLE_PROJECT_instrumentPluginCode", "false")
param("env.ORG_GRADLE_PROJECT_javaVersion", "1.8")
}
vcs {
root(_Self.vcsRoots.Branch_181)
checkoutMode = CheckoutMode.AUTO
}
steps {
gradle {
tasks = "clean test"
buildFile = ""
enableStacktrace = true
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
}
}
triggers {
vcs {
branchFilter = ""
}
}
requirements {
noLessThanVer("teamcity.agent.jvm.version", "1.8")
}
failureConditions {
failOnMetricChange {
metric = BuildFailureOnMetric.MetricType.TEST_COUNT
threshold = 20
units = BuildFailureOnMetric.MetricUnit.PERCENTS
comparison = BuildFailureOnMetric.MetricComparison.LESS
compareTo = build {
buildRule = lastSuccessful()
}
}
}
})
object TestsForIntelliJ20181 : TestsForIntelliJ_181_branch("2018.1")
object TestsForIntelliJ20182 : TestsForIntelliJ_181_branch("2018.2")

View File

@@ -1,63 +0,0 @@
@file:Suppress("ClassName")
package _Self.buildTypes
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.BuildFailureOnMetric
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.failOnMetricChange
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
sealed class TestsForIntelliJ_191_193_branch(private val version: String) : BuildType({
name = "Tests for IntelliJ $version"
params {
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
param("env.ORG_GRADLE_PROJECT_legacyNoJavaPlugin", "true")
param("env.ORG_GRADLE_PROJECT_ideaVersion", "IC-$version")
param("env.ORG_GRADLE_PROJECT_instrumentPluginCode", "false")
param("env.ORG_GRADLE_PROJECT_javaVersion", "1.8")
}
vcs {
root(_Self.vcsRoots.Branch_191_193)
checkoutMode = CheckoutMode.AUTO
}
steps {
gradle {
tasks = "clean test"
buildFile = ""
enableStacktrace = true
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
}
}
triggers {
vcs {
branchFilter = ""
}
}
requirements {
noLessThanVer("teamcity.agent.jvm.version", "1.8")
}
failureConditions {
failOnMetricChange {
metric = BuildFailureOnMetric.MetricType.TEST_COUNT
threshold = 20
units = BuildFailureOnMetric.MetricUnit.PERCENTS
comparison = BuildFailureOnMetric.MetricComparison.LESS
compareTo = build {
buildRule = lastSuccessful()
}
}
}
})
object TestsForIntelliJ20191 : TestsForIntelliJ_191_193_branch("2019.1")
object TestsForIntelliJ20192 : TestsForIntelliJ_191_193_branch("2019.2")
object TestsForIntelliJ20193 : TestsForIntelliJ_191_193_branch("2019.3")

View File

@@ -1,60 +0,0 @@
@file:Suppress("ClassName")
package _Self.buildTypes
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.BuildFailureOnMetric
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.failOnMetricChange
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
sealed class TestsForIntelliJ_201_branch(private val version: String) : BuildType({
name = "Tests for IntelliJ $version"
params {
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
param("env.ORG_GRADLE_PROJECT_ideaVersion", "IC-$version")
param("env.ORG_GRADLE_PROJECT_instrumentPluginCode", "false")
param("env.ORG_GRADLE_PROJECT_javaVersion", "1.8")
}
vcs {
root(_Self.vcsRoots.Branch_201)
checkoutMode = CheckoutMode.AUTO
}
steps {
gradle {
tasks = "clean test"
buildFile = ""
enableStacktrace = true
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
}
}
triggers {
vcs {
branchFilter = ""
}
}
requirements {
noLessThanVer("teamcity.agent.jvm.version", "1.8")
}
failureConditions {
failOnMetricChange {
metric = BuildFailureOnMetric.MetricType.TEST_COUNT
threshold = 20
units = BuildFailureOnMetric.MetricUnit.PERCENTS
comparison = BuildFailureOnMetric.MetricComparison.LESS
compareTo = build {
buildRule = lastSuccessful()
}
}
}
})
object TestsForIntelliJ20201 : TestsForIntelliJ_201_branch("2020.1")

View File

@@ -1,60 +0,0 @@
@file:Suppress("ClassName")
package _Self.buildTypes
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.BuildFailureOnMetric
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.failOnMetricChange
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
sealed class TestsForIntelliJ_202_branch(private val version: String) : BuildType({
name = "Tests for IntelliJ $version"
params {
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
param("env.ORG_GRADLE_PROJECT_ideaVersion", "IC-$version")
param("env.ORG_GRADLE_PROJECT_instrumentPluginCode", "false")
param("env.ORG_GRADLE_PROJECT_javaVersion", "1.8")
}
vcs {
root(_Self.vcsRoots.Branch_202)
checkoutMode = CheckoutMode.AUTO
}
steps {
gradle {
tasks = "clean test"
buildFile = ""
enableStacktrace = true
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
}
}
triggers {
vcs {
branchFilter = ""
}
}
requirements {
noLessThanVer("teamcity.agent.jvm.version", "1.8")
}
failureConditions {
failOnMetricChange {
metric = BuildFailureOnMetric.MetricType.TEST_COUNT
threshold = 20
units = BuildFailureOnMetric.MetricUnit.PERCENTS
comparison = BuildFailureOnMetric.MetricComparison.LESS
compareTo = build {
buildRule = lastSuccessful()
}
}
}
})
object TestsForIntelliJ20202 : TestsForIntelliJ_202_branch("2020.2")

View File

@@ -1,64 +0,0 @@
@file:Suppress("ClassName")
package _Self.buildTypes
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.BuildFailureOnMetric
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.failOnMetricChange
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
sealed class TestsForIntelliJ_203_212_branch(private val version: String) : BuildType({
name = "Tests for IntelliJ $version"
params {
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
param("env.ORG_GRADLE_PROJECT_legacyNoJavaPlugin", "true")
param("env.ORG_GRADLE_PROJECT_ideaVersion", "IC-$version")
param("env.ORG_GRADLE_PROJECT_instrumentPluginCode", "false")
param("env.ORG_GRADLE_PROJECT_javaVersion", "1.8")
}
vcs {
root(_Self.vcsRoots.Branch_203_212)
checkoutMode = CheckoutMode.AUTO
}
steps {
gradle {
tasks = "clean test"
buildFile = ""
enableStacktrace = true
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
}
}
triggers {
vcs {
branchFilter = ""
}
}
requirements {
noLessThanVer("teamcity.agent.jvm.version", "1.8")
}
failureConditions {
failOnMetricChange {
metric = BuildFailureOnMetric.MetricType.TEST_COUNT
threshold = 20
units = BuildFailureOnMetric.MetricUnit.PERCENTS
comparison = BuildFailureOnMetric.MetricComparison.LESS
compareTo = build {
buildRule = lastSuccessful()
}
}
}
})
object TestsForIntelliJ20212 : TestsForIntelliJ_203_212_branch("2021.2.2")
object TestsForIntelliJ20211 : TestsForIntelliJ_203_212_branch("2021.1")
object TestsForIntelliJ20203 : TestsForIntelliJ_203_212_branch("2020.3")

View File

@@ -1,62 +0,0 @@
@file:Suppress("ClassName")
package _Self.buildTypes
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.BuildFailureOnMetric
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.failOnMetricChange
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
sealed class TestsForIntelliJ_213_221_branch(private val version: String) : BuildType({
name = "Tests for IntelliJ $version"
params {
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
param("env.ORG_GRADLE_PROJECT_legacyNoJavaPlugin", "true")
param("env.ORG_GRADLE_PROJECT_ideaVersion", "IC-$version")
param("env.ORG_GRADLE_PROJECT_instrumentPluginCode", "false")
param("env.ORG_GRADLE_PROJECT_javaVersion", "1.8")
}
vcs {
root(_Self.vcsRoots.Branch_213_221)
checkoutMode = CheckoutMode.AUTO
}
steps {
gradle {
tasks = "clean test"
buildFile = ""
enableStacktrace = true
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
}
}
triggers {
vcs {
branchFilter = ""
}
}
requirements {
noLessThanVer("teamcity.agent.jvm.version", "1.8")
}
failureConditions {
failOnMetricChange {
metric = BuildFailureOnMetric.MetricType.TEST_COUNT
threshold = 20
units = BuildFailureOnMetric.MetricUnit.PERCENTS
comparison = BuildFailureOnMetric.MetricComparison.LESS
compareTo = build {
buildRule = lastSuccessful()
}
}
}
})
object TestsForIntelliJ20213 : TestsForIntelliJ_213_221_branch("2021.3.2")

View File

@@ -1,11 +1,78 @@
package _Self.subprojects
import _Self.buildTypes.GithubTests
import _Self.Constants
import _Self.IdeaVimBuildType
import _Self.vcsRoots.GitHubPullRequest
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
import jetbrains.buildServer.configs.kotlin.v2019_2.Project
import jetbrains.buildServer.configs.kotlin.v2019_2.buildFeatures.PullRequests
import jetbrains.buildServer.configs.kotlin.v2019_2.buildFeatures.commitStatusPublisher
import jetbrains.buildServer.configs.kotlin.v2019_2.buildFeatures.pullRequests
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.VcsTrigger
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
object GitHub : Project({
name = "Pull Requests checks"
description = "Automatic checking of GitHub Pull Requests"
buildType(GithubTests)
buildType(Github("clean test", "Tests"))
})
class Github(command: String, desc: String) : IdeaVimBuildType({
name = "GitHub Pull Requests $desc"
description = "Test GitHub pull requests $desc"
params {
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
param("env.ORG_GRADLE_PROJECT_ideaVersion", Constants.GITHUB_TESTS)
param("env.ORG_GRADLE_PROJECT_instrumentPluginCode", "false")
}
vcs {
root(GitHubPullRequest)
checkoutMode = CheckoutMode.AUTO
branchFilter = """
+:*
-:<default>
""".trimIndent()
}
steps {
gradle {
tasks = command
buildFile = ""
enableStacktrace = true
}
}
triggers {
vcs {
quietPeriodMode = VcsTrigger.QuietPeriodMode.USE_DEFAULT
branchFilter = ""
}
}
features {
pullRequests {
provider = github {
authType = token {
token = "credentialsJSON:90f3b439-6e91-40f7-a086-d4dd8e0ea9b8"
}
filterTargetBranch = "refs/heads/master"
filterAuthorRole = PullRequests.GitHubRoleFilter.EVERYBODY
}
}
commitStatusPublisher {
vcsRootExtId = "${GitHubPullRequest.id}"
publisher = github {
githubUrl = "https://api.github.com"
authType = personalToken {
token = "credentialsJSON:90f3b439-6e91-40f7-a086-d4dd8e0ea9b8"
}
}
param("github_oauth_user", "AlexPl292")
}
}
})

View File

@@ -1,33 +1,23 @@
package _Self.subprojects
import _Self.buildTypes.TestsForIntelliJ20181
import _Self.buildTypes.TestsForIntelliJ20182
import _Self.buildTypes.TestsForIntelliJ20183
import _Self.buildTypes.TestsForIntelliJ20191
import _Self.buildTypes.TestsForIntelliJ20192
import _Self.buildTypes.TestsForIntelliJ20193
import _Self.buildTypes.TestsForIntelliJ20201
import _Self.buildTypes.TestsForIntelliJ20202
import _Self.buildTypes.TestsForIntelliJ20203
import _Self.buildTypes.TestsForIntelliJ20211
import _Self.buildTypes.TestsForIntelliJ20212
import _Self.buildTypes.TestsForIntelliJ20213
import _Self.buildTypes.TestingBuildType
import jetbrains.buildServer.configs.kotlin.v2019_2.Project
object OldTests : Project({
name = "Old IdeaVim tests"
description = "Tests for older versions of IJ"
buildType(TestsForIntelliJ20181)
buildType(TestsForIntelliJ20182)
buildType(TestsForIntelliJ20183)
buildType(TestsForIntelliJ20191)
buildType(TestsForIntelliJ20192)
buildType(TestsForIntelliJ20193)
buildType(TestsForIntelliJ20201)
buildType(TestsForIntelliJ20202)
buildType(TestsForIntelliJ20203)
buildType(TestsForIntelliJ20211)
buildType(TestsForIntelliJ20212)
buildType(TestsForIntelliJ20213)
buildType(TestingBuildType("IC-2018.1", "181-182", javaVersion = "1.8", javaPlugin = false))
buildType(TestingBuildType("IC-2018.2", "181-182", javaVersion = "1.8", javaPlugin = false))
buildType(TestingBuildType("IC-2018.3", "183", javaVersion = "1.8", javaPlugin = false))
buildType(TestingBuildType("IC-2019.1", "191-193", javaVersion = "1.8", javaPlugin = false))
buildType(TestingBuildType("IC-2019.2", "191-193", javaVersion = "1.8", javaPlugin = false))
buildType(TestingBuildType("IC-2019.3", "191-193", javaVersion = "1.8", javaPlugin = false))
buildType(TestingBuildType("IC-2020.1", "201", javaVersion = "1.8", javaPlugin = false))
buildType(TestingBuildType("IC-2020.2", "202", javaVersion = "1.8", javaPlugin = false))
buildType(TestingBuildType("IC-2020.3", "203-212", javaVersion = "1.8", javaPlugin = false))
buildType(TestingBuildType("IC-2021.1", "203-212", javaVersion = "1.8", javaPlugin = false))
buildType(TestingBuildType("IC-2021.2.2", "203-212", javaVersion = "1.8", javaPlugin = false))
buildType(TestingBuildType("IC-2021.3.2", "213-221", javaVersion = "1.8", javaPlugin = false))
buildType(TestingBuildType("IC-2022.2.3", branch = "222", javaPlugin = false))
})

View File

@@ -1,15 +1,41 @@
package _Self.subprojects
import _Self.buildTypes.Release
import _Self.buildTypes.PublishVimEngine
import _Self.buildTypes.ReleaseDev
import _Self.buildTypes.ReleaseEap
import _Self.buildTypes.ReleaseMajor
import _Self.buildTypes.ReleaseMinor
import _Self.buildTypes.ReleasePatch
import jetbrains.buildServer.configs.kotlin.v2019_2.ParameterDisplay
import jetbrains.buildServer.configs.kotlin.v2019_2.Project
object Releases : Project({
name = "IdeaVim releases"
description = "Stable and EAP releases for IdeaVim"
buildType(Release)
params {
password(
"env.CERTIFICATE_CHAIN",
"credentialsJSON:1bab4a88-10e7-4bf9-856c-e6253499dc95",
display = ParameterDisplay.HIDDEN
)
password(
"env.PRIVATE_KEY_PASSWORD",
"credentialsJSON:7c12c867-fe09-4a2f-884d-6fd0ec0a1e79",
display = ParameterDisplay.HIDDEN
)
password(
"env.PRIVATE_KEY",
"credentialsJSON:5d8b553d-fd7e-4347-abd2-51d8d0f2b3f7",
display = ParameterDisplay.HIDDEN
)
}
// buildType(Release)
buildType(ReleaseMajor)
buildType(ReleaseMinor)
buildType(ReleasePatch)
buildType(ReleaseEap)
buildType(ReleaseDev)
buildType(PublishVimEngine)
})

View File

@@ -1,12 +0,0 @@
@file:Suppress("ClassName")
package _Self.vcsRoots
import jetbrains.buildServer.configs.kotlin.v2019_2.vcs.GitVcsRoot
object Branch_181 : GitVcsRoot({
name = "https://github.com/JetBrains/ideavim (branch 181)"
url = "https://github.com/JetBrains/ideavim.git"
branch = "181"
useMirrors = false
})

View File

@@ -1,12 +0,0 @@
@file:Suppress("ClassName")
package _Self.vcsRoots
import jetbrains.buildServer.configs.kotlin.v2019_2.vcs.GitVcsRoot
object Branch_183 : GitVcsRoot({
name = "https://github.com/JetBrains/ideavim (branch 183)"
url = "https://github.com/JetBrains/ideavim.git"
branch = "183"
useMirrors = false
})

View File

@@ -1,12 +0,0 @@
@file:Suppress("ClassName")
package _Self.vcsRoots
import jetbrains.buildServer.configs.kotlin.v2019_2.vcs.GitVcsRoot
object Branch_191_193 : GitVcsRoot({
name = "https://github.com/JetBrains/ideavim (branch 191-193)"
url = "https://github.com/JetBrains/ideavim.git"
branch = "191-193"
useMirrors = false
})

View File

@@ -1,12 +0,0 @@
@file:Suppress("ClassName")
package _Self.vcsRoots
import jetbrains.buildServer.configs.kotlin.v2019_2.vcs.GitVcsRoot
object Branch_201 : GitVcsRoot({
name = "https://github.com/JetBrains/ideavim (branch 201)"
url = "https://github.com/JetBrains/ideavim.git"
branch = "201"
useMirrors = false
})

View File

@@ -1,12 +0,0 @@
@file:Suppress("ClassName")
package _Self.vcsRoots
import jetbrains.buildServer.configs.kotlin.v2019_2.vcs.GitVcsRoot
object Branch_202 : GitVcsRoot({
name = "https://github.com/JetBrains/ideavim (branch 202)"
url = "https://github.com/JetBrains/ideavim.git"
branch = "202"
useMirrors = false
})

View File

@@ -1,12 +0,0 @@
@file:Suppress("ClassName")
package _Self.vcsRoots
import jetbrains.buildServer.configs.kotlin.v2019_2.vcs.GitVcsRoot
object Branch_203_212 : GitVcsRoot({
name = "https://github.com/JetBrains/ideavim (branch 203-212)"
url = "https://github.com/JetBrains/ideavim.git"
branch = "203-212"
useMirrors = false
})

View File

@@ -1,12 +0,0 @@
@file:Suppress("ClassName")
package _Self.vcsRoots
import jetbrains.buildServer.configs.kotlin.v2019_2.vcs.GitVcsRoot
object Branch_213_221 : GitVcsRoot({
id("HttpsGithubComJetBrainsIdeavimBranch213221")
name = "https://github.com/JetBrains/ideavim (branch 213-221)"
url = "https://github.com/JetBrains/ideavim.git"
branch = "213-221"
})

View File

@@ -1,11 +0,0 @@
@file:Suppress("ClassName")
package _Self.vcsRoots
import jetbrains.buildServer.configs.kotlin.v2019_2.vcs.GitVcsRoot
object Branch_Release : GitVcsRoot({
name = "https://github.com/JetBrains/ideavim (branch release)"
url = "https://github.com/JetBrains/ideavim.git"
branch = "release"
})

View File

@@ -7,6 +7,6 @@ object GitHubPullRequest : GitVcsRoot({
url = "git@github.com:JetBrains/ideavim.git"
branchSpec = "+:refs/(pull/*)/head"
authMethod = uploadedKey {
uploadedKey = "Alex Plate TeamCity key"
uploadedKey = "IdeaVim ssh keys"
}
})

View File

@@ -0,0 +1,20 @@
package patches.buildTypes
import jetbrains.buildServer.configs.kotlin.v2019_2.*
import jetbrains.buildServer.configs.kotlin.v2019_2.ui.*
/*
This patch script was generated by TeamCity on settings change in UI.
To apply the patch, change the buildType with id = 'IdeaVimTests_Latest_EAP_With_Xorg'
accordingly, and delete the patch script.
*/
changeBuildType(RelativeId("IdeaVimTests_Latest_EAP_With_Xorg")) {
requirements {
add {
matches("teamcity.agent.jvm.os.family", "Linux")
}
add {
exists("env.DISPLAY")
}
}
}

View File

@@ -1,55 +0,0 @@
package patches.buildTypes
import jetbrains.buildServer.configs.kotlin.v2019_2.*
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.Qodana
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.qodana
import jetbrains.buildServer.configs.kotlin.v2019_2.ui.*
/*
This patch script was generated by TeamCity on settings change in UI.
To apply the patch, change the buildType with id = 'Qodana'
accordingly, and delete the patch script.
*/
changeBuildType(RelativeId("Qodana")) {
expectSteps {
qodana {
name = "Qodana"
linter = jvm {
version = Qodana.JVMVersion.LATEST
}
param("clonefinder-enable", "true")
param("clonefinder-languages", "Java")
param("clonefinder-languages-container", "Java Kotlin")
param("clonefinder-mode", "")
param("clonefinder-queried-project", "src")
param("clonefinder-reference-projects", "src")
param("licenseaudit-enable", "true")
param("namesAndTagsCustom", "repo.labs.intellij.net/static-analyser/qodana")
param("report-version", "")
param("yaml-configuration", "")
}
}
steps {
insert(0) {
gradle {
name = "Generate grammar"
tasks = "generateGrammarSource"
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
}
}
update<Qodana>(1) {
clearConditions()
reportAsTests = true
argumentsCommandDocker = "-e QODANA_TOKEN=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJvcmdhbml6YXRpb24iOiIzUFZrQSIsInByb2plY3QiOiIzN1FlQSIsInRva2VuIjoiM0t2bXoifQ.uohp81tM7iAfvvB6k8faarfpV-OjusAaEbWQ8iNrOgs"
argumentsEntryPointDocker = "--baseline qodana.sarif.json"
param("clonefinder-languages", "")
param("collect-anonymous-statistics", "")
param("licenseaudit-enable", "")
param("clonefinder-languages-container", "")
param("clonefinder-queried-project", "")
param("clonefinder-enable", "")
param("clonefinder-reference-projects", "")
}
}
}

View File

@@ -1,27 +0,0 @@
package patches.buildTypes
import jetbrains.buildServer.configs.kotlin.v2019_2.*
import jetbrains.buildServer.configs.kotlin.v2019_2.buildFeatures.VcsLabeling
import jetbrains.buildServer.configs.kotlin.v2019_2.buildFeatures.vcsLabeling
import jetbrains.buildServer.configs.kotlin.v2019_2.ui.*
/*
This patch script was generated by TeamCity on settings change in UI.
To apply the patch, change the buildType with id = 'ReleaseEap'
accordingly, and delete the patch script.
*/
changeBuildType(RelativeId("ReleaseEap")) {
features {
val feature1 = find<VcsLabeling> {
vcsLabeling {
vcsRootId = "${DslContext.settingsRoot.id}"
labelingPattern = "%system.build.number%"
successfulOnly = true
branchFilter = ""
}
}
feature1.apply {
successfulOnly = false
}
}
}

View File

@@ -0,0 +1,20 @@
package patches.buildTypes
import jetbrains.buildServer.configs.kotlin.v2019_2.*
import jetbrains.buildServer.configs.kotlin.v2019_2.ui.*
/*
This patch script was generated by TeamCity on settings change in UI.
To apply the patch, change the buildType with id = 'ReleasePatch'
accordingly, and delete the patch script.
*/
changeBuildType(RelativeId("ReleasePatch")) {
params {
expect {
password("env.ORG_GRADLE_PROJECT_youtrackToken", "credentialsJSON:3cd3e867-282c-451f-b958-bc95d56a8450", display = ParameterDisplay.HIDDEN)
}
update {
password("env.ORG_GRADLE_PROJECT_youtrackToken", "credentialsJSON:7bc0eb3a-b86a-4ebd-b622-d4ef12d7e1d3", display = ParameterDisplay.HIDDEN)
}
}
}

2
.teamcity/pom.xml vendored
View File

@@ -22,7 +22,7 @@
</repository>
<repository>
<id>teamcity-server</id>
<url>https://teamcity.jetbrains.com/app/dsl-plugins-repository</url>
<url>https://ideavim.teamcity.com/app/dsl-plugins-repository</url>
<snapshots>
<enabled>true</enabled>
</snapshots>

View File

@@ -1,4 +1,5 @@
import jetbrains.buildServer.configs.kotlin.v2019_2.*
import jetbrains.buildServer.configs.kotlin.v2019_2.project
import jetbrains.buildServer.configs.kotlin.v2019_2.version
/*
The settings script is an entry point for defining a single
@@ -29,5 +30,5 @@ node (Plugins -> teamcity-configs -> teamcity-configs:generate),
the 'Debug' option is available in the context menu for the task.
*/
version = "2020.2"
project(_Self.Project)
version = "2023.05"
project(_Self.Project)

View File

@@ -165,7 +165,7 @@ Contributors:
&nbsp;
Pavel Fatin
* [![icon][mail]](mailto:tietyt@gmail.com)
[![icon][github-off]](#)
[![icon][github-off]](https://github.com/DanKaplanSES)
&nbsp;
tieTYT
* [![icon][mail]](mailto:nickgieschen@gmail.com)
@@ -185,7 +185,7 @@ Contributors:
&nbsp;
Vladimir Parfinenko
* [![icon][mail]](mailto:hassmann@hwdev.de)
[![icon][github-off]](#)
[![icon][github-off]](https://github.com/lumie1337)
&nbsp;
Florian Hassmann
* [![icon][mail]](mailto:jpalus@fastmail.com)
@@ -193,7 +193,7 @@ Contributors:
&nbsp;
Jan Palus
* [![icon][mail]](mailto:kpetrov@ripe.net)
[![icon][github-off]](#)
[![icon][github-off]](https://github.com/constpetrov)
&nbsp;
Konstantin Petrov
* [![icon][mail]](mailto:ya-ikmik2012@yandex.ru)
@@ -220,10 +220,6 @@ Contributors:
[![icon][github]](https://github.com/johngrib)
&nbsp;
John Grib
* [![icon][mail]](mailto:hild@b4mad.net)
[![icon][github-off]](#)
&nbsp;
Marcel Hild
* [![icon][mail]](mailto:vedranb@gmail.com)
[![icon][github]](https://github.com/vedran)
&nbsp;
@@ -319,10 +315,6 @@ Contributors:
[![icon][github]](https://github.com/angelbot)
&nbsp;
John Weigel
* [![icon][mail]](mailto:kevinz@weghst.com)
[![icon][github]](https://github.com/kevin70)
&nbsp;
kk
* [![icon][mail]](mailto:runforprogram@163.com)
[![icon][github]](https://github.com/runforprogram)
&nbsp;
@@ -455,6 +447,54 @@ Contributors:
[![icon][github]](https://github.com/lippfi)
&nbsp;
lippfi
* [![icon][mail]](mailto:3237686+Runinho@users.noreply.github.com)
[![icon][github]](https://github.com/Runinho)
&nbsp;
Runinho
* [![icon][mail]](mailto:me@yuhaowen.com)
[![icon][github]](https://github.com/adaext)
&nbsp;
Ada
* [![icon][mail]](mailto:dominic.palmer@outlook.com)
[![icon][github]](https://github.com/dominicpalmer)
&nbsp;
Dominic Palmer
* [![icon][mail]](mailto:kawagh.dev@gmail.com)
[![icon][github]](https://github.com/kawagh)
&nbsp;
kawagh
* [![icon][mail]](mailto:78074243+danisevas@users.noreply.github.com)
[![icon][github]](https://github.com/danisevas)
&nbsp;
Dani Sevastianov
* [![icon][mail]](mailto:oskar.persson@polken.se)
[![icon][github]](https://github.com/oskarpersson/)
&nbsp;
Oskar Persson
* [![icon][mail]](mailto:silence.m@hotmail.com)
[![icon][github]](https://github.com/Stzx)
&nbsp;
Silence Tai
* [![icon][mail]](mailto:tszsumng90@gmail.com)
[![icon][github]](https://github.com/samabcde)
&nbsp;
Sam Ng
* [![icon][mail]](mailto:ludwig.valda.vasquez@jetbrains.com)
[![icon][github]](https://github.com/ludwig-jb)
&nbsp;
ludwig-jb
Previous contributors:
* [![icon][mail]](mailto:hild@b4mad.net)
[![icon][github-off]](#)
&nbsp;
Marcel Hild
* [![icon][mail]](mailto:kevinz@weghst.com)
[![icon][github]](https://github.com/kevin70)
&nbsp;
kk
If you are a contributor and your name is not listed here, feel free to
contact the maintainers.

View File

@@ -25,6 +25,139 @@ usual beta standards.
## To Be Released
### Fixes:
* [VIM-3060](https://youtrack.jetbrains.com/issue/VIM-3060) Clipboard interaction stopped working
### Merged PRs:
* [697](https://github.com/JetBrains/ideavim/pull/697) by [Matt Ellis](https://github.com/citizenmatt): Support per-window "global" values for local-to-window options
## 2.5.0, 2023-09-01
### Fixes:
* [VIM-802](https://youtrack.jetbrains.com/issue/VIM-802) IdeaVim vs. Vim: discrepancies in using registers
* [VIM-2246](https://youtrack.jetbrains.com/issue/VIM-2246) X11/Xorg Primary selection register "* not supported
* [VIM-2313](https://youtrack.jetbrains.com/issue/VIM-2313)
[VIM-2318](https://youtrack.jetbrains.com/issue/VIM-2318)
[VIM-2666](https://youtrack.jetbrains.com/issue/VIM-2666)
[VIM-2951](https://youtrack.jetbrains.com/issue/VIM-2951)
IdeaVim works correctly in read-only editors like log or tests output.
### Merged PRs:
* [666](https://github.com/JetBrains/ideavim/pull/666) by [Matt Ellis](https://github.com/citizenmatt): Improve formatting of `:set` command output
* [667](https://github.com/JetBrains/ideavim/pull/667) by [Matt Ellis](https://github.com/citizenmatt): Eagerly initialise local options and introduce option scope
* [672](https://github.com/JetBrains/ideavim/pull/672) by [Matt Ellis](https://github.com/citizenmatt): Fix issue adding back hidden status bar widget
* [668](https://github.com/JetBrains/ideavim/pull/668) by [ludwig-jb](https://github.com/ludwig-jb): Handle unicode grapheme clusters
## 2.4.0, 2023-07-18
### Fixes:
* [VIM-2975](https://youtrack.jetbrains.com/issue/VIM-2975) Fix the offset after the rendered docs
* [VIM-2685](https://youtrack.jetbrains.com/issue/VIM-2685) Register command outputs different values for same registers
* [VIM-1294](https://youtrack.jetbrains.com/issue/VIM-1294) unvoluntary unfolding when using ideavim
* [VIM-2818](https://youtrack.jetbrains.com/issue/VIM-2818) Wrong caret position after multicaret paste
### Merged PRs:
* [662](https://github.com/JetBrains/ideavim/pull/662) by [ludwig-jb](https://github.com/ludwig-jb): Update VimMessages#updateStatusBar to accept VimEditor
* [659](https://github.com/JetBrains/ideavim/pull/659) by [Sam Ng](https://github.com/samabcde): VIM-2920 fix select block expansion when enclose boundary is line break
## 2.3.0, 2023-06-14
### Features:
* Matchit now supports PHP files | [VIM-2678](https://youtrack.jetbrains.com/issue/VIM-2678)
### Fixes:
* [VIM-2909](https://youtrack.jetbrains.com/issue/VIM-2909) Fix incorrect file detection while closing diff window
* [VIM-2912](https://youtrack.jetbrains.com/issue/VIM-2912) Fix focus after :q
* [VIM-2930](https://youtrack.jetbrains.com/issue/VIM-2930) vim-multiple-cursors + ReplaceWithRegister issue
* [VIM-2945](https://youtrack.jetbrains.com/issue/VIM-2945) %-movement mismatches braces
* [VIM-2953](https://youtrack.jetbrains.com/issue/VIM-2953) The previous fix for :q command caused weird behavior of tab closing
* [VIM-2964](https://youtrack.jetbrains.com/issue/VIM-2964) Fix an issue with leaking caret instance
### Merged PRs:
* [616](https://github.com/JetBrains/ideavim/pull/616) by [Matt Ellis](https://github.com/citizenmatt): Refactor/option delegated properties
* [626](https://github.com/JetBrains/ideavim/pull/626) by [Martin Yzeiri](https://github.com/myzeiri): Matchit bug fixes
* [619](https://github.com/JetBrains/ideavim/pull/619) by [Matt Ellis](https://github.com/citizenmatt): Fix some local options being used as global options
* [638](https://github.com/JetBrains/ideavim/pull/638) by [Sam Ng](https://github.com/samabcde): VIM-2615 add support to sort u command
* [646](https://github.com/JetBrains/ideavim/pull/646) by [Sam Ng](https://github.com/samabcde): VIM-1990 fix repeat delete find or till wrong MotionType
* [649](https://github.com/JetBrains/ideavim/pull/649) by [Martin Yzeiri](https://github.com/myzeiri): Add Matchit support for PHP
## 2.2.0, 2023-04-20
### Features:
* Now every secondary caret has its own marks. You can use marks and `gv` in multiple-caret mode now.
### Fixes:
* [VIM-1829](https://youtrack.jetbrains.com/issue/VIM-1829/key-combinations-are-not-working-in-visual-mode-IdeaVim) Fix marks when moving lines up/down
* [VIM-2130](https://youtrack.jetbrains.com/issue/VIM-2130/Vim-visual-mode-mapping-isnt-behaving-correctly-in-ideavim-it-leaves-visual-mode-after-its-executed) Fix marks when moving lines up/down
* [VIM-2428](https://youtrack.jetbrains.com/issue/VIM-2428/The-gv-command-doesnt-work) Fix marks when moving lines up/down
* [VIM-2686](https://youtrack.jetbrains.com/issue/VIM-2686/Multiple-caret-marks) Add individual mark storage for each secondary caret
* [VIM-2840](https://youtrack.jetbrains.com/issue/VIM-2840) Replace with register does not work with count
* [VIM-658](https://youtrack.jetbrains.com/issue/VIM-658) Stop macro on error
* [VIM-2787](https://youtrack.jetbrains.com/issue/VIM-2787) Save ideavimrc loading
* [VIM-2850](https://youtrack.jetbrains.com/issue/VIM-2850) Marks exception during IDE startup
* [VIM-2804](https://youtrack.jetbrains.com/issue/VIM-2804) IdeaVim multiple-cursors copy and paste issue when "set clipboard+=unnamed"
* [VIM-1768](https://youtrack.jetbrains.com/issue/VIM-1768) Delete surrounding character while in multiple cursors mode
* [VIM-282](https://youtrack.jetbrains.com/issue/VIM-282) Cursor line wrapping support (whichwrap)
* [VIM-2315](https://youtrack.jetbrains.com/issue/VIM-2315) Fix overlapping mappings execution
* [VIM-44](https://youtrack.jetbrains.com/issue/VIM-44) Unify navigation history between ideavim and idea
* [VIM-1735](https://youtrack.jetbrains.com/issue/VIM-1735) Fix enabling mulple carets after line selection
* [VIM-2881](https://youtrack.jetbrains.com/issue/VIM-2881) ReplaceRegister does no longer worker with MultiCursor
* [VIM-2244](https://youtrack.jetbrains.com/issue/VIM-2244) nnoremap mapping doesn't work correctly
* [VIM-2885](https://youtrack.jetbrains.com/issue/VIM-2885) "v:searchforward" does't work for IdeaVim
* [VIM-2733](https://youtrack.jetbrains.com/issue/VIM-2733) vim-surround emulation interacts incorrectly with unmatched quotes on previous lines
* [VIM-2884](https://youtrack.jetbrains.com/issue/VIM-2884) Moving multiple lines in visual mode is not working
* [VIM-2868](https://youtrack.jetbrains.com/issue/VIM-2868) Pasting in visual mode with P should not replace yank register like when pasting with p
* [VIM-2819](https://youtrack.jetbrains.com/issue/VIM-2819) Move command works incorrectly
* [VIM-795](https://youtrack.jetbrains.com/issue/VIM-795) Ctrl-w + h doesn't alway work (window navigation to the left window)
* [VIM-1551](https://youtrack.jetbrains.com/issue/VIM-1551) Surround: line surround not working
* [VIM-1746](https://youtrack.jetbrains.com/issue/VIM-1746) IdeaVim Surround removes unwanted characters
* [VIM-1750](https://youtrack.jetbrains.com/issue/VIM-1750) Surround with tag wrong position
* [VIM-2286](https://youtrack.jetbrains.com/issue/VIM-2286) Set surround not working for me as expected
* [VIM-2433](https://youtrack.jetbrains.com/issue/VIM-2433) Do not clear clipboard after inserting with ideaput
* [VIM-2896](https://youtrack.jetbrains.com/issue/VIM-2896) Correct ordering of handlers
* [VIM-2912](https://youtrack.jetbrains.com/issue/VIM-2912) Fix focus after :q
* [VIM-2909](https://youtrack.jetbrains.com/issue/VIM-2909) Fix incorrect file detection while closing diff window
### Merged PRs:
* [589](https://github.com/JetBrains/ideavim/pull/589) by [Matt Ellis](https://github.com/citizenmatt): Refactor option usage and introduce accessor API
* [604](https://github.com/JetBrains/ideavim/pull/604) by [Dominic Palmer](https://github.com/dominicpalmer): VIM-2773: Include empty lines in the selection when dragging backwards from EOL
* [603](https://github.com/JetBrains/ideavim/pull/603) by [Dominic Palmer](https://github.com/dominicpalmer): VIM-2773: Prevent viewport displacement on undo
* [602](https://github.com/JetBrains/ideavim/pull/602) by [Matt Ellis](https://github.com/citizenmatt): Refactor options service
* [612](https://github.com/JetBrains/ideavim/pull/612) by [Dani Sevastianov](https://github.com/danisevas): Fix quick-scope setup documentation
* [617](https://github.com/JetBrains/ideavim/pull/617) by [Silence Tai](https://github.com/Stzx): Fix dispose operation
## 2.1.0, 2023-01-10
### Features:
* Add IdeaVim tutor. You can access it via the status bar icon.
### Fixes:
* [VIM-2797](https://youtrack.jetbrains.com/issue/VIM-2797) Introduce variable to mute default argtextobj mappings
* [VIM-758](https://youtrack.jetbrains.com/issue/VIM-758) Support d mappings
* [VIM-2577](https://youtrack.jetbrains.com/issue/VIM-2577) Fix paste at the end of notebook cell
* [VIM-2813](https://youtrack.jetbrains.com/issue/VIM-2813) Migrate update checker to VimStandalonePluginUpdateChecker
* [VIM-2833](https://youtrack.jetbrains.com/issue/VIM-2833) Fix rare deadlock during put in insert mode from clipboard
### Merged PRs:
* [558](https://github.com/JetBrains/ideavim/pull/558) by [Matt Ellis](https://github.com/citizenmatt): Fix incorrect normalising for trailing inlay
* [554](https://github.com/JetBrains/ideavim/pull/554) by [Matt Ellis](https://github.com/citizenmatt): Refactor "last column" calculations
* [553](https://github.com/JetBrains/ideavim/pull/553) by [Matt Ellis](https://github.com/citizenmatt): Rearrange and rename some code in engine
* [560](https://github.com/JetBrains/ideavim/pull/560) by [Runinho](https://github.com/Runinho): Fix(VIM-2577) paste not working at end of notebook cell
* [571](https://github.com/JetBrains/ideavim/pull/571) by [Ada](https://github.com/adaext): Remove the redundant quotation mark at the end of "packadd matchit" command
* [561](https://github.com/JetBrains/ideavim/pull/561) by [Matt Ellis](https://github.com/citizenmatt): Fix incremental search not scrolling to current match
* [559](https://github.com/JetBrains/ideavim/pull/559) by [Runinho](https://github.com/Runinho): Fix(VIM-2760) notebookCommandMode detection
* [579](https://github.com/JetBrains/ideavim/pull/579) by [Martin Yzeiri](https://github.com/myzeiri): VIM-2799: Add Matchit support for cshtml files
* [580](https://github.com/JetBrains/ideavim/pull/580) by [Martin Yzeiri](https://github.com/myzeiri): Matchit: Add more Rider file types
* [583](https://github.com/JetBrains/ideavim/pull/583) by [Matt Ellis](https://github.com/citizenmatt): Introduce ScrollGroup
* [586](https://github.com/JetBrains/ideavim/pull/586) by [Patrick Elmquist](https://github.com/patrick-elmquist): Fixed number references in Tutor
## 2.0.0, 2022-11-01
### Changes:
* IdeaVim changes license from GPL-2.0 or later to MIT. [VIM-2782](https://youtrack.jetbrains.com/issue/VIM-2782)
## 1.12.0, 2022-11-01
### Fixes:
* [VIM-1758](https://youtrack.jetbrains.com/issue/VIM-1758) Commentary plugin in rider
* [VIM-1903](https://youtrack.jetbrains.com/issue/VIM-1903) Autoindent now works in rider
@@ -33,6 +166,10 @@ usual beta standards.
* [VIM-2718](https://youtrack.jetbrains.com/issue/VIM-2718) Fixed case where the primary caret was changed
* [VIM-2766](https://youtrack.jetbrains.com/issue/VIM-2766) Move NERDTree update to background thread
* [VIM-2768](https://youtrack.jetbrains.com/issue/VIM-2768) Refactor listeners
* [VIM-2776](https://youtrack.jetbrains.com/issue/VIM-2776) Use filename index for file search
### Merged PRs:
* [550](https://github.com/JetBrains/ideavim/pull/550) by [Matt Ellis](https://github.com/citizenmatt): Fix(VIM-2778) Remove override of editor scroll setting
## 1.11.0, 2022-08-09

View File

@@ -32,6 +32,10 @@ OK, ready to do some coding?
Yoo hoo! Youre all set to begin contributing.
We've prepared some useful configurations for you:
- `Start IJ with IdeaVim`
- `IdeaVim tests`
- `IdeaVim full verification`
![Prepared configurations light](assets/contributing/configs-light.png#gh-light-mode-only)![Prepared configurations dark](assets/contributing/configs-dark.png#gh-dark-mode-only)
And here are useful gradle commands:
@@ -87,9 +91,16 @@ Here are some guides for testing:
1. Read the javadoc for the `@VimBehaviorDiffers` annotation in the source code.
2. Please avoid senseless text like "dhjkwaldjwa", "asdasdasd", "123 123 123 123", etc. Try to choose an example
text that is easy to read and understand what is wrong if the test fails. For example, take a few lines from your
favorite poem, or use Vladimir Nabokovs “A Discovery" if you don't have one.
2. Please avoid senseless text like "dhjkwaldjwa", "asdasdasd", "123 123 123 123", etc. Use a few lines of code or
the following template:
```text
Lorem Ipsum
Lorem ipsum dolor sit amet,
consectetur adipiscing elit
Sed in orci mauris.
Cras id tellus in ex imperdiet egestas.
```
3. Don't forget to test your functionality with line start, line end, file start, file end, empty line, multiple
carets, dollar motion, etc.
@@ -149,7 +160,7 @@ This is just terrible. [You know what to do](https://github.com/JetBrains/ideavi
### Resources:
* [Continuous integration builds](https://teamcity.jetbrains.com/project.html?projectId=IdeaVim&guest=1)
* [Continuous integration builds](https://ideavim.teamcity.com/)
* [Bug tracker](https://youtrack.jetbrains.com/issues/VIM)
* [Chat on gitter](https://gitter.im/JetBrains/ideavim)
* [IdeaVim Channel](https://jb.gg/bi6zp7) on [JetBrains Server](https://discord.gg/jetbrains)
@@ -157,5 +168,5 @@ This is just terrible. [You know what to do](https://github.com/JetBrains/ideavi
* [Changelog](CHANGES.md)
* [Contributors listing](AUTHORS.md)
[teamcity-build-status]: https://teamcity.jetbrains.com/viewType.html?buildTypeId=IdeaVim_TestsForIntelliJEAP&guest=1
[teamcity-build-status-svg]: https://teamcity.jetbrains.com/app/rest/builds/buildType:(id:IdeaVim_TestsForIntelliJEAP)/statusIcon.svg?guest=1
[teamcity-build-status]: https://ideavim.teamcity.com/viewType.html?buildTypeId=Ideavim_IdeaVimTests_Latest_EAP&guest=1
[teamcity-build-status-svg]: https://ideavim.teamcity.com/app/rest/builds/buildType:(id:Ideavim_IdeaVimTests_Latest_EAP)/statusIcon.svg?guest=1

View File

@@ -1,339 +1,21 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
MIT License
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Copyright (c) 2003-present The IdeaVim authors
Preamble
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@@ -9,6 +9,7 @@ IdeaVim
[![Rating][plugin-rating-svg]][plugin-repo]
[![Version][plugin-version-svg]][plugin-repo]
[![Gitter][gitter-svg]][gitter]
[![codecov](https://codecov.io/gh/JetBrains/ideavim/branch/master/graph/badge.svg)](https://codecov.io/gh/JetBrains/ideavim)
[![Twitter][twitter-svg]][twitter]
IdeaVim is a Vim engine for JetBrains IDEs.
@@ -21,9 +22,10 @@ IdeaVim is a Vim engine for JetBrains IDEs.
##### Resources:
* [Plugin homepage](https://plugins.jetbrains.com/plugin/164-ideavim)
* [Plugin homepage](https://lp.jetbrains.com/ideavim/)
* [Plugin on Marketplace](https://plugins.jetbrains.com/plugin/164-ideavim)
* [Changelog](CHANGES.md)
* [Continuous integration builds](https://teamcity.jetbrains.com/project.html?projectId=IdeaVim&guest=1)
* [Continuous integration builds](https://ideavim.teamcity.com/)
#### Compatibility
@@ -52,7 +54,7 @@ Would you like to try new features and fixes? Join the Early Access Program and
receive EAP builds as updates!
1. Click the IdeaVim icon <img src="src/main/resources/META-INF/pluginIcon_noBorders.svg" width="16" height="16" alt="icon"/>
in the status bar | `Early Access Program` | `Subscibe to EAP`
in the status bar | `Early Access Program` | `Subscribe to EAP`
Or subscribe to EAP updates manually:
@@ -88,7 +90,7 @@ Here are some examples of supported vim features and commands:
* Vim web help
* `~/.ideavimrc` configuration file
[IdeaVim plugins](https://github.com/JetBrains/ideavim/wiki/Emulated-plugins):
[IdeaVim plugins](https://github.com/JetBrains/ideavim/wiki/IdeaVim-Plugins):
* vim-easymotion
* NERDTree
@@ -102,7 +104,8 @@ Here are some examples of supported vim features and commands:
* vim-highlightedyank
* vim-paragraph-motion
* vim-indent-object
* match.it
* match.it
etc
See also:
@@ -201,7 +204,7 @@ Put your settings to `$XDG_CONFIG_HOME/ideavim/ideavimrc` file.
IdeaVim Plugins
--------------------
See [doc/emulated-plugins.md](https://github.com/JetBrains/ideavim/wiki/Emulated-plugins)
See [doc/IdeaVim Plugins.md](https://github.com/JetBrains/ideavim/wiki/IdeaVim-Plugins)
Executing IDE Actions
---------------------
@@ -210,14 +213,14 @@ IdeaVim adds various commands for listing and executing arbitrary IDE actions as
Ex commands or via `:map` command mappings:
### Executing actions:
* `:action {action_id}`
* Execute an action by `{action_id}`. Works from Ex command line.
* Please don't use `:action` in mappings. Use `<Action>` instead.
* `<Action>({action_id})`
* For the mappings you can use a special `<Action>` keyword. Don't forget the parentheses.
* E.g. `map gh <Action>(ShowErrorDescription)` <- execute hover on `gh`.
* :warning: Mappings to `<Action>` don't work with `noremap`.
If you know the case when it's needed, please [let us know](https://github.com/JetBrains/ideavim#contact-maintainers).
* `:action {action_id}`
* Execute an action by `{action_id}`. Works from Ex command line.
* Please don't use `:action` in mappings. Use `<Action>` instead.
### Finding action ids:
@@ -350,9 +353,12 @@ is the source of this knowledge.
[Here](https://github.com/vim/vim/blob/759d81549c1340185f0d92524c563bb37697ea88/src/normal.c#L5365)
is the full list of synonyms.
- You can read a [post](https://github.com/JetBrains/ideavim/wiki/how-many-modes-does-vim-have) about how modes work in Vim and IdeaVim.
- Have you ever used `U` after `dd`? [Don't even try](https://github.com/vim/vim/blob/759d81549c1340185f0d92524c563bb37697ea88/src/ops.c#L874).
- A lot of variables that refers to visual mode start with two uppercase letters, e.g. `VIsual_active`. [Some examples](https://github.com/vim/vim/blob/master/src/normal.c#L17).
- A lot of variables that refer to visual mode start with two uppercase letters, e.g. `VIsual_active`. [Some examples](https://github.com/vim/vim/blob/master/src/normal.c#L17).
As mentioned [here](https://vi.stackexchange.com/a/42885/12441), this was done this way to avoid the clash with X11.
- Other [strange things](https://github.com/vim/vim/blob/759d81549c1340185f0d92524c563bb37697ea88/src/ex_docmd.c#L1845) from vi:
* ":3" jumps to line 3
@@ -361,11 +367,19 @@ is the full list of synonyms.
- Vim script doesn't skip white space before comma. `F(a ,b)` => E475.
- Fancy constants for [undolevels](https://vimhelp.org/options.txt.html#%27undolevels%27):
> The local value is set to -123456 when the global value is to be used.
License
-------
IdeaVim is licensed under the terms of the GNU Public License version 2
or any later version.
IdeaVim is licensed under the MIT license.
Third-party components and licenses are listed in [ThirdPartyLicenses.md](ThirdPartyLicenses.md).
All releases before 2.0.0 were licensed under terms of GPL-2.0 or later.
The last commit before switch to MIT is 05852b07c6090ad40fde7d3cafe0b074604f7ac5.
You can read more about the license change here: https://github.com/JetBrains/ideavim/discussions/543
<!-- Badges -->

86
ThirdPartyLicenses.md Normal file
View File

@@ -0,0 +1,86 @@
IdeaVim project is licensed under MIT license except the following parts of it:
* File [RegExp.kt](src/main/java/com/maddyhome/idea/vim/regexp/RegExp.kt) is licensed under Vim License.
* File [ScrollViewHelper.kt](com/maddyhome/idea/vim/helper/ScrollViewHelper.kt) is licensed under Vim License.
* File [Tutor.kt](src/main/java/com/maddyhome/idea/vim/ui/Tutor.kt) is licensed under Vim License.
```
VIM LICENSE
I) There are no restrictions on distributing unmodified copies of Vim except
that they must include this license text. You can also distribute
unmodified parts of Vim, likewise unrestricted except that they must
include this license text. You are also allowed to include executables
that you made from the unmodified Vim sources, plus your own usage
examples and Vim scripts.
II) It is allowed to distribute a modified (or extended) version of Vim,
including executables and/or source code, when the following four
conditions are met:
1) This license text must be included unmodified.
2) The modified Vim must be distributed in one of the following five ways:
a) If you make changes to Vim yourself, you must clearly describe in
the distribution how to contact you. When the maintainer asks you
(in any way) for a copy of the modified Vim you distributed, you
must make your changes, including source code, available to the
maintainer without fee. The maintainer reserves the right to
include your changes in the official version of Vim. What the
maintainer will do with your changes and under what license they
will be distributed is negotiable. If there has been no negotiation
then this license, or a later version, also applies to your changes.
The current maintainers are listed here: https://github.com/orgs/vim/people.
If this changes it will be announced in appropriate places (most likely
vim.sf.net, www.vim.org and/or comp.editors). When it is completely
impossible to contact the maintainer, the obligation to send him
your changes ceases. Once the maintainer has confirmed that he has
received your changes they will not have to be sent again.
b) If you have received a modified Vim that was distributed as
mentioned under a) you are allowed to further distribute it
unmodified, as mentioned at I). If you make additional changes the
text under a) applies to those changes.
c) Provide all the changes, including source code, with every copy of
the modified Vim you distribute. This may be done in the form of a
context diff. You can choose what license to use for new code you
add. The changes and their license must not restrict others from
making their own changes to the official version of Vim.
d) When you have a modified Vim which includes changes as mentioned
under c), you can distribute it without the source code for the
changes if the following three conditions are met:
- The license that applies to the changes permits you to distribute
the changes to the Vim maintainer without fee or restriction, and
permits the Vim maintainer to include the changes in the official
version of Vim without fee or restriction.
- You keep the changes for at least three years after last
distributing the corresponding modified Vim. When the maintainer
or someone who you distributed the modified Vim to asks you (in
any way) for the changes within this period, you must make them
available to him.
- You clearly describe in the distribution how to contact you. This
contact information must remain valid for at least three years
after last distributing the corresponding modified Vim, or as long
as possible.
e) When the GNU General Public License (GPL) applies to the changes,
you can distribute the modified Vim under the GNU GPL version 2 or
any later version.
3) A message must be added, at least in the output of the ":version"
command and in the intro screen, such that the user of the modified Vim
is able to see that it was modified. When distributing as mentioned
under 2)e) adding the message is only required for as far as this does
not conflict with the license used for the changes.
4) The contact information as required under 2)a) and 2)d) must not be
removed or changed, except that the person himself can make
corrections.
III) If you distribute a modified version of Vim, you are encouraged to use
the Vim license for your changes and make them available to the
maintainer, including the source code. The preferred way to do this is
by e-mail or by uploading the files to a server and e-mailing the URL.
If the number of changes is small (e.g., a modified Makefile) e-mailing a
context diff will do. The e-mail address to be used is
<maintainer@vim.org>
IV) It is not allowed to remove this license from the distribution of the Vim
sources, parts of it or from a modified version. You may use this
license for previous Vim releases instead of the license that they came
with, at your option.
```

42
annotation-processors/.gitignore vendored Normal file
View File

@@ -0,0 +1,42 @@
.gradle
build/
!gradle/wrapper/gradle-wrapper.jar
!**/src/main/**/build/
!**/src/test/**/build/
### IntelliJ IDEA ###
.idea/modules.xml
.idea/jarRepositories.xml
.idea/compiler.xml
.idea/libraries/
*.iws
*.iml
*.ipr
out/
!**/src/main/**/out/
!**/src/test/**/out/
### Eclipse ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
bin/
!**/src/main/**/bin/
!**/src/test/**/bin/
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
### VS Code ###
.vscode/
### Mac OS ###
.DS_Store

View File

@@ -0,0 +1,23 @@
/*
* Copyright 2003-2023 The IdeaVim authors
*
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE.txt file or at
* https://opensource.org/licenses/MIT.
*/
plugins {
kotlin("jvm")
}
group = "com.intellij"
version = "SNAPSHOT"
repositories {
mavenCentral()
}
dependencies {
compileOnly("com.google.devtools.ksp:symbol-processing-api:1.9.10-1.0.13")
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json-jvm:1.6.0")
}

View File

@@ -0,0 +1,16 @@
/*
* Copyright 2003-2023 The IdeaVim authors
*
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE.txt file or at
* https://opensource.org/licenses/MIT.
*/
package com.intellij.vim.annotations
/**
* [command] is formatted the same way it is formatted in Vim (with optional part in square brackets).
*/
@Target(AnnotationTarget.CLASS)
@Retention(AnnotationRetention.SOURCE)
annotation class ExCommand(val command: String)

View File

@@ -0,0 +1,13 @@
/*
* Copyright 2003-2023 The IdeaVim authors
*
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE.txt file or at
* https://opensource.org/licenses/MIT.
*/
package com.intellij.vim.annotations
@Target(AnnotationTarget.CLASS)
@Retention(AnnotationRetention.SOURCE)
annotation class VimscriptFunction(val name: String)

View File

@@ -0,0 +1,55 @@
/*
* Copyright 2003-2023 The IdeaVim authors
*
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE.txt file or at
* https://opensource.org/licenses/MIT.
*/
package com.intellij.vim.processors
import com.google.devtools.ksp.KspExperimental
import com.google.devtools.ksp.getAnnotationsByType
import com.google.devtools.ksp.processing.Resolver
import com.google.devtools.ksp.processing.SymbolProcessor
import com.google.devtools.ksp.processing.SymbolProcessorEnvironment
import com.google.devtools.ksp.symbol.KSAnnotated
import com.google.devtools.ksp.symbol.KSClassDeclaration
import com.google.devtools.ksp.symbol.KSFile
import com.google.devtools.ksp.symbol.KSVisitorVoid
import com.intellij.vim.annotations.ExCommand
import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json
import kotlin.io.path.Path
import kotlin.io.path.writeText
class ExCommandProcessor(private val environment: SymbolProcessorEnvironment): SymbolProcessor {
private val visitor = EXCommandVisitor()
private val commandToClass = mutableMapOf<String, String>()
private val json = Json { prettyPrint = true }
override fun process(resolver: Resolver): List<KSAnnotated> {
resolver.getAllFiles().forEach { it.accept(visitor, Unit) }
val filePath = Path(environment.options["generated_directory"]!!, environment.options["ex_commands_file"]!!)
val fileContent = json.encodeToString(commandToClass)
filePath.writeText(fileContent)
return emptyList()
}
private inner class EXCommandVisitor : KSVisitorVoid() {
@OptIn(KspExperimental::class)
override fun visitClassDeclaration(classDeclaration: KSClassDeclaration, data: Unit) {
val exCommandAnnotation = classDeclaration.getAnnotationsByType(ExCommand::class).firstOrNull() ?: return
val commands = exCommandAnnotation.command.split(",")
for (command in commands) {
commandToClass[command] = classDeclaration.qualifiedName!!.asString()
}
}
override fun visitFile(file: KSFile, data: Unit) {
file.declarations.forEach { it.accept(this, Unit) }
}
}
}

View File

@@ -0,0 +1,55 @@
/*
* Copyright 2003-2023 The IdeaVim authors
*
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE.txt file or at
* https://opensource.org/licenses/MIT.
*/
package com.intellij.vim.processors
import com.google.devtools.ksp.KspExperimental
import com.google.devtools.ksp.getAnnotationsByType
import com.google.devtools.ksp.processing.Resolver
import com.google.devtools.ksp.processing.SymbolProcessor
import com.google.devtools.ksp.processing.SymbolProcessorEnvironment
import com.google.devtools.ksp.symbol.KSAnnotated
import com.google.devtools.ksp.symbol.KSClassDeclaration
import com.google.devtools.ksp.symbol.KSFile
import com.google.devtools.ksp.symbol.KSVisitorVoid
import com.intellij.vim.annotations.VimscriptFunction
import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json
import kotlin.io.path.Path
import kotlin.io.path.writeText
class VimscriptFunctionProcessor(private val environment: SymbolProcessorEnvironment) : SymbolProcessor {
private val visitor = VimscriptFunctionVisitor()
private val nameToClass = mutableMapOf<String, String>()
private val json = Json { prettyPrint = true }
override fun process(resolver: Resolver): List<KSAnnotated> {
resolver.getAllFiles().forEach { it.accept(visitor, Unit) }
val filePath = Path(environment.options["generated_directory"]!!, environment.options["vimscript_functions_file"]!!)
val fileContent = json.encodeToString(nameToClass)
filePath.writeText(fileContent)
return emptyList()
}
// todo inspection that annotation is properly used on proper classes
private inner class VimscriptFunctionVisitor : KSVisitorVoid() {
@OptIn(KspExperimental::class)
override fun visitClassDeclaration(classDeclaration: KSClassDeclaration, data: Unit) {
val vimscriptFunctionAnnotation = classDeclaration.getAnnotationsByType(VimscriptFunction::class).firstOrNull() ?: return
val functionName = vimscriptFunctionAnnotation.name
nameToClass[functionName] = classDeclaration.qualifiedName!!.asString()
}
override fun visitFile(file: KSFile, data: Unit) {
file.declarations.forEach { it.accept(this, Unit) }
}
}
}

View File

@@ -0,0 +1,20 @@
/*
* Copyright 2003-2023 The IdeaVim authors
*
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE.txt file or at
* https://opensource.org/licenses/MIT.
*/
package com.intellij.vim.providers
import com.google.devtools.ksp.processing.SymbolProcessor
import com.google.devtools.ksp.processing.SymbolProcessorEnvironment
import com.google.devtools.ksp.processing.SymbolProcessorProvider
import com.intellij.vim.processors.ExCommandProcessor
class ExCommandProcessorProvider : SymbolProcessorProvider {
override fun create(environment: SymbolProcessorEnvironment): SymbolProcessor {
return ExCommandProcessor(environment)
}
}

View File

@@ -0,0 +1,20 @@
/*
* Copyright 2003-2023 The IdeaVim authors
*
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE.txt file or at
* https://opensource.org/licenses/MIT.
*/
package com.intellij.vim.providers
import com.google.devtools.ksp.processing.SymbolProcessor
import com.google.devtools.ksp.processing.SymbolProcessorEnvironment
import com.google.devtools.ksp.processing.SymbolProcessorProvider
import com.intellij.vim.processors.VimscriptFunctionProcessor
public class VimscriptFunctionProcessorProvider : SymbolProcessorProvider {
override fun create(environment: SymbolProcessorEnvironment): SymbolProcessor {
return VimscriptFunctionProcessor(environment)
}
}

View File

@@ -0,0 +1,2 @@
com.intellij.vim.providers.VimscriptFunctionProcessorProvider
com.intellij.vim.providers.ExCommandProcessorProvider

View File

@@ -1,6 +1,39 @@
/*
* Copyright 2003-2023 The IdeaVim authors
*
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE.txt file or at
* https://opensource.org/licenses/MIT.
*/
import dev.feedforward.markdownto.DownParser
import io.ktor.client.*
import io.ktor.client.call.*
import io.ktor.client.engine.cio.*
import io.ktor.client.plugins.auth.*
import io.ktor.client.plugins.auth.providers.*
import io.ktor.client.plugins.contentnegotiation.*
import io.ktor.client.request.*
import io.ktor.http.*
import io.ktor.serialization.kotlinx.json.*
import kotlinx.coroutines.runBlocking
import kotlinx.serialization.json.Json
import kotlinx.serialization.json.JsonArray
import kotlinx.serialization.json.JsonObject
import kotlinx.serialization.json.addJsonObject
import kotlinx.serialization.json.buildJsonObject
import kotlinx.serialization.json.jsonArray
import kotlinx.serialization.json.jsonObject
import kotlinx.serialization.json.jsonPrimitive
import kotlinx.serialization.json.put
import kotlinx.serialization.json.putJsonArray
import kotlinx.serialization.json.putJsonObject
import org.eclipse.jgit.api.Git
import org.eclipse.jgit.lib.RepositoryBuilder
import org.intellij.markdown.ast.getTextInNode
import org.jetbrains.changelog.Changelog
import org.jetbrains.changelog.exceptions.MissingVersionException
import org.kohsuke.github.GHUser
import java.net.HttpURLConnection
import java.net.URL
@@ -11,11 +44,20 @@ buildscript {
}
dependencies {
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.21")
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.21")
classpath("com.github.AlexPl292:mark-down-to-slack:1.1.2")
classpath("org.eclipse.jgit:org.eclipse.jgit:6.1.0.202203080745-r")
classpath("org.eclipse.jgit:org.eclipse.jgit:6.6.0.202305301015-r")
// This is needed for jgit to connect to ssh
classpath("org.eclipse.jgit:org.eclipse.jgit.ssh.apache:6.7.0.202309050840-r")
classpath("org.kohsuke:github-api:1.305")
classpath("io.ktor:ktor-client-core:2.3.4")
classpath("io.ktor:ktor-client-cio:2.3.4")
classpath("io.ktor:ktor-client-auth:2.3.4")
classpath("io.ktor:ktor-client-content-negotiation:2.3.4")
classpath("io.ktor:ktor-serialization-kotlinx-json:2.3.4")
// This comes from the changelog plugin
// classpath("org.jetbrains:markdown:0.3.1")
}
@@ -24,13 +66,31 @@ buildscript {
plugins {
antlr
java
kotlin("jvm") version "1.6.21"
kotlin("jvm") version "1.8.21"
application
id("org.jetbrains.intellij") version "1.10.0-SNAPSHOT"
id("org.jetbrains.changelog") version "1.3.1"
id("org.jetbrains.intellij") version "1.15.0"
id("org.jetbrains.changelog") version "2.2.0"
// ktlint linter - read more: https://github.com/JLLeitschuh/ktlint-gradle
id("org.jlleitschuh.gradle.ktlint") version "10.3.0"
// id("org.jlleitschuh.gradle.ktlint") version "11.3.1"
id("org.jetbrains.kotlinx.kover") version "0.6.1"
id("com.dorongold.task-tree") version "2.1.1"
id("com.google.devtools.ksp") version "1.8.21-1.0.11"
}
ksp {
arg("generated_directory", "$projectDir/src/main/resources")
arg("vimscript_functions_file", "intellij_vimscript_functions.json")
arg("ex_commands_file", "intellij_ex_commands.json")
}
afterEvaluate {
// tasks.named("kspKotlin").configure { dependsOn("clean") }
tasks.named("kspKotlin").configure { dependsOn("generateGrammarSource") }
tasks.named("kspTestKotlin").configure { enabled = false }
}
// Import variables from gradle.properties file
@@ -46,6 +106,7 @@ val publishChannels: String by project
val publishToken: String by project
val slackUrl: String by project
val youtrackToken: String by project
repositories {
mavenCentral()
@@ -53,8 +114,8 @@ repositories {
}
dependencies {
compileOnly("org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlinVersion")
compileOnly("org.jetbrains:annotations:23.0.0")
compileOnly("org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion")
compileOnly("org.jetbrains:annotations:24.0.1")
// https://mvnrepository.com/artifact/com.ensarsarajcic.neovim.java/neovim-api
testImplementation("com.ensarsarajcic.neovim.java:neovim-api:0.2.3")
@@ -64,7 +125,7 @@ dependencies {
testImplementation("org.jetbrains.kotlin:kotlin-test:$kotlinVersion")
// https://mvnrepository.com/artifact/org.mockito.kotlin/mockito-kotlin
testImplementation("org.mockito.kotlin:mockito-kotlin:4.0.0")
testImplementation("org.mockito.kotlin:mockito-kotlin:5.1.0")
testImplementation("com.intellij.remoterobot:remote-robot:$remoteRobotVersion")
testImplementation("com.intellij.remoterobot:remote-fixtures:$remoteRobotVersion")
@@ -74,7 +135,14 @@ dependencies {
api(project(":vim-engine"))
testApi("com.squareup.okhttp3:okhttp:4.10.0")
ksp(project(":annotation-processors"))
compileOnly(project(":annotation-processors"))
testApi("com.squareup.okhttp3:okhttp:4.11.0")
testImplementation("org.junit.jupiter:junit-jupiter-api:5.10.0")
testImplementation("org.junit.jupiter:junit-jupiter-engine:5.10.0")
testImplementation("org.junit.jupiter:junit-jupiter-params:5.10.0")
}
configurations {
@@ -91,16 +159,19 @@ tasks.register<Test>("testWithNeovim") {
exclude("/ui/**")
exclude("**/longrunning/**")
exclude("**/propertybased/**")
useJUnitPlatform()
}
tasks.register<Test>("testPropertyBased") {
group = "verification"
// include("**/propertybased/**")
useJUnitPlatform()
}
tasks.register<Test>("testLongRunning") {
group = "verification"
// include("**/longrunning/**")
useJUnitPlatform()
}
tasks {
@@ -173,8 +244,9 @@ java {
}
kotlin {
explicitApi()
jvmToolchain {
(this as JavaToolchainSpec).languageVersion.set(JavaLanguageVersion.of(javaVersion))
languageVersion.set(JavaLanguageVersion.of(javaVersion))
}
}
@@ -197,7 +269,7 @@ intellij {
instrumentCode.set(instrumentPluginCode.toBoolean())
intellijRepository.set("https://www.jetbrains.com/intellij-repository")
// Yaml is only used for testing. It's part of the IdeaIC distribution, but needs to be included as a reference
plugins.set(listOf("java", "AceJump:3.8.4", "yaml"))
plugins.set(listOf("java", "AceJump:3.8.11", "yaml"/*, "Pythonid:231.8109.2", "com.intellij.clion-swift:231.8109.4"*/))
}
tasks {
@@ -210,6 +282,12 @@ tasks {
token.set(publishToken)
}
signPlugin {
certificateChain.set(providers.environmentVariable("CERTIFICATE_CHAIN"))
privateKey.set(providers.environmentVariable("PRIVATE_KEY"))
password.set(providers.environmentVariable("PRIVATE_KEY_PASSWORD"))
}
runIdeForUiTests {
systemProperty("robot-server.port", "8082")
systemProperty("ide.mac.message.dialogs.as.sheets", "false")
@@ -232,17 +310,27 @@ tasks {
named("compileKotlin") {
dependsOn("generateGrammarSource")
}
named("compileTestKotlin") {
dependsOn("generateTestGrammarSource")
}
// Add plugin open API sources to the plugin ZIP
val createOpenApiSourceJar by registering(Jar::class) {
dependsOn("generateGrammarSource")
// Java sources
from(sourceSets.main.get().java) {
include("**/com/maddyhome/idea/vim/**/*.java")
}
from(project(":vim-engine").sourceSets.main.get().java) {
include("**/com/maddyhome/idea/vim/**/*.java")
}
// Kotlin sources
from(kotlin.sourceSets.main.get().kotlin) {
include("**/com/maddyhome/idea/vim/**/*.kt")
}
from(project(":vim-engine").kotlin.sourceSets.main.get().kotlin) {
include("**/com/maddyhome/idea/vim/**/*.kt")
}
destinationDirectory.set(layout.buildDirectory.dir("libs"))
archiveClassifier.set("src")
}
@@ -252,23 +340,41 @@ tasks {
from(createOpenApiSourceJar) { into("lib/src") }
}
val pluginVersion = version
// Don't forget to update plugin.xml
patchPluginXml {
sinceBuild.set("222")
sinceBuild.set("231.7515.13")
// Get the latest available change notes from the changelog file
changeNotes.set(
provider {
with(changelog) {
val log = try {
getUnreleased()
} catch (e: MissingVersionException) {
getOrNull(pluginVersion.toString()) ?: getLatest()
}
renderItem(
log,
org.jetbrains.changelog.Changelog.OutputType.HTML,
)
}
},
)
}
}
// --- Linting
ktlint {
disabledRules.add("no-wildcard-imports")
version.set("0.43.0")
}
//ktlint {
// version.set("0.48.2")
//}
// --- Tests
tasks {
test {
useJUnitPlatform()
exclude("**/propertybased/**")
exclude("**/longrunning/**")
exclude("/ui/**")
@@ -277,6 +383,7 @@ tasks {
tasks.register<Test>("testUi") {
group = "verification"
useJUnitPlatform()
include("/ui/**")
}
@@ -292,11 +399,19 @@ changelog {
// version = "0.60"
}
tasks.register("getUnreleasedChangelog") {
group = "changelog"
doLast {
val log = changelog.getUnreleased().toHTML()
println(log)
// --- Kover
koverMerged {
enable()
}
kover {
instrumentation {
// set of test tasks names to exclude from instrumentation. The results of their execution will not be presented in the report
excludeTasks += "testPropertyBased"
excludeTasks += "testLongRunning"
excludeTasks += "testWithNeovim"
excludeTasks += "testUi"
}
}
@@ -308,7 +423,8 @@ tasks.register("slackNotification") {
println("Slack Url is not defined")
return@doLast
}
val changeLog = changelog.getLatest().toText()
val changeLog = changelog.renderItem(changelog.getLatest(), Changelog.OutputType.PLAIN_TEXT)
val slackDown = DownParser(changeLog, true).toSlack().toString()
//language=JSON
@@ -364,6 +480,7 @@ tasks.register("updateAuthors") {
"aleksei.plate@TeamCity",
"alex.plate@192.168.0.109",
"nikita.koshcheev@TeamCity",
"TeamCity@TeamCity",
)
updateAuthors(uncheckedEmails)
}
@@ -388,6 +505,85 @@ tasks.register("updateChangelog") {
}
}
tasks.register("updateYoutrackOnCommit") {
doLast {
updateYoutrackOnCommit()
}
}
val vimProjectId = "22-43"
val fixVersionsFieldId = "123-285"
val fixVersionsFieldType = "VersionProjectCustomField"
val fixVersionsElementType = "VersionBundleElement"
tasks.register("releaseActions") {
group = "other"
doLast {
val tickets = getYoutrackTicketsByQuery("%23%7BReady+To+Release%7D")
if (tickets.isNotEmpty()) {
println("Updating statuses for tickets: $tickets")
setYoutrackStatus(tickets, "Fixed")
if (getVersionIdByName(version.toString()) != null) {
addReleaseToYoutrack(version.toString())
} else {
println("Version $version is already exists in YouTrack")
}
setYoutrackFixVersion(tickets, version.toString())
} else {
println("No tickets to update statuses")
}
}
}
tasks.register("integrationsTest") {
group = "other"
doLast {
val testTicketId = "VIM-2784"
// YouTrack set to Ready To Release on Fix commit
setYoutrackStatus(listOf(testTicketId), "Ready To Release")
if ("Ready To Release" != getYoutrackStatus(testTicketId)) {
error("Ticket status was not updated")
}
setYoutrackStatus(listOf(testTicketId), "Open")
// Check YouTrack requests
val prevStatus = getYoutrackStatus(testTicketId)
setYoutrackStatus(listOf(testTicketId), "Ready To Release")
val tickets = getYoutrackTicketsByQuery("%23%7BReady+To+Release%7D")
if (testTicketId !in tickets) {
error("Test ticket is not found in request")
}
setYoutrackStatus(listOf(testTicketId), prevStatus)
// Check adding and removing release
val existingVersionId = getVersionIdByName("TEST_VERSION")
if (existingVersionId != null) {
deleteVersionById(existingVersionId)
}
val versionId = addReleaseToYoutrack("TEST_VERSION")
guard(getVersionIdByName("TEST_VERSION") != null) { "Test version isn't created" }
setYoutrackStatus(listOf(testTicketId), "Fixed")
setYoutrackFixVersion(listOf(testTicketId), "TEST_VERSION")
deleteVersionById(versionId)
setYoutrackStatus(listOf(testTicketId), "Open")
guard(getVersionIdByName("TEST_VERSION") == null) { "Test version isn't deleted" }
updateMergedPr(525)
// TODO: test Ticket parsing
// TODO: test Update CHANGES
// TODO: test Update AUTHORS
// TODO: test Slack notification
// TODO: Add a comment on EAP release
}
}
fun guard(check: Boolean, ifWrong: () -> String) {
if (!check) {
error(ifWrong())
}
}
tasks.register("testUpdateChangelog") {
group = "verification"
description = "This is a task to manually assert the correctness of the update tasks"
@@ -404,37 +600,152 @@ tasks.register("testUpdateChangelog") {
}
}
fun addReleaseToYoutrack(name: String): String {
val client = httpClient()
println("Creating new release version in YouTrack: $name")
return runBlocking {
val response = client.post("https://youtrack.jetbrains.com/api/admin/projects/$vimProjectId/customFields/$fixVersionsFieldId/bundle/values?fields=id,name") {
contentType(ContentType.Application.Json)
accept(ContentType.Application.Json)
val request = buildJsonObject {
put("name", name)
put("\$type", fixVersionsElementType)
}
setBody(request)
}
response.body<JsonObject>().getValue("id").jsonPrimitive.content
}
}
fun getVersionIdByName(name: String): String? {
val client = httpClient()
return runBlocking {
val response = client.get("https://youtrack.jetbrains.com/api/admin/projects/$vimProjectId/customFields/$fixVersionsFieldId/bundle/values?fields=id,name&query=$name")
response.body<JsonArray>().singleOrNull()?.jsonObject?.get("id")?.jsonPrimitive?.content
}
}
fun deleteVersionById(id: String) {
val client = httpClient()
runBlocking {
client.delete("https://youtrack.jetbrains.com/api/admin/projects/$vimProjectId/customFields/$fixVersionsFieldId/bundle/values/$id")
}
}
fun updateYoutrackOnCommit() {
println("Start updating youtrack")
println(projectDir)
val newFixes = changes()
val newTickets = newFixes.map { it.id }
println("Set new status for $newTickets")
setYoutrackStatus(newTickets, "Ready To Release")
}
fun getYoutrackTicketsByQuery(query: String): Set<String> {
val client = httpClient()
return runBlocking {
val response = client.get("https://youtrack.jetbrains.com/api/issues/?fields=idReadable&query=project:VIM+$query")
response.body<JsonArray>().mapTo(HashSet()) { it.jsonObject.getValue("idReadable").jsonPrimitive.content }
}
}
fun setYoutrackStatus(tickets: Collection<String>, status: String) {
val client = httpClient()
runBlocking {
for (ticket in tickets) {
println("Try to set $ticket to $status")
val response = client.post("https://youtrack.jetbrains.com/api/issues/$ticket?fields=customFields(id,name,value(id,name))") {
contentType(ContentType.Application.Json)
accept(ContentType.Application.Json)
val request = buildJsonObject {
putJsonArray("customFields") {
addJsonObject {
put("name", "State")
put("\$type", "SingleEnumIssueCustomField")
putJsonObject("value") {
put("name", status)
}
}
}
}
setBody(request)
}
println(response)
println(response.body<String>())
if (!response.status.isSuccess()) {
error("Request failed. $ticket, ${response.body<String>()}")
}
val finalState = response.body<JsonObject>()["customFields"]!!.jsonArray
.single { it.jsonObject["name"]!!.jsonPrimitive.content == "State" }
.jsonObject["value"]!!
.jsonObject["name"]!!
.jsonPrimitive.content
if (finalState != status) {
error("Ticket $ticket is not updated! Expected status $status, but actually $finalState")
}
}
}
}
fun setYoutrackFixVersion(tickets: Collection<String>, version: String) {
val client = httpClient()
runBlocking {
for (ticket in tickets) {
println("Try to set fix version $version for $ticket")
val response = client.post("https://youtrack.jetbrains.com/api/issues/$ticket?fields=customFields(id,name,value(id,name))") {
contentType(ContentType.Application.Json)
accept(ContentType.Application.Json)
val request = buildJsonObject {
putJsonArray("customFields") {
addJsonObject {
put("name", "Fix versions")
put("\$type", "MultiVersionIssueCustomField")
putJsonArray("value") {
addJsonObject { put("name", version) }
}
}
}
}
setBody(request)
}
println(response)
println(response.body<String>())
if (!response.status.isSuccess()) {
error("Request failed. $ticket, ${response.body<String>()}")
}
val finalState = response.body<JsonObject>()["customFields"]!!.jsonArray
.single { it.jsonObject["name"]!!.jsonPrimitive.content == "Fix versions" }
.jsonObject["value"]!!
.jsonArray[0]
.jsonObject["name"]!!
.jsonPrimitive.content
if (finalState != version) {
error("Ticket $ticket is not updated! Expected fix version $version, but actually $finalState")
}
}
}
}
fun getYoutrackStatus(ticket: String): String {
val client = httpClient()
return runBlocking {
val response = client.get("https://youtrack.jetbrains.com/api/issues/$ticket/customFields/123-129?fields=value(name)")
response.body<JsonObject>()["value"]!!.jsonObject.getValue("name").jsonPrimitive.content
}
}
fun updateChangelog() {
println("Start update authors")
println(projectDir)
val repository = org.eclipse.jgit.lib.RepositoryBuilder().setGitDir(File("$projectDir/.git")).build()
val git = org.eclipse.jgit.api.Git(repository)
val lastSuccessfulCommit = System.getenv("SUCCESS_COMMIT")!!
val messages = git.log().call()
.takeWhile {
!it.id.name.equals(lastSuccessfulCommit, ignoreCase = true)
}
.map { it.shortMessage }
// Collect fixes
val newFixes = mutableListOf<Change>()
println("Last successful commit: $lastSuccessfulCommit")
println("Amount of commits: ${messages.size}")
println("Start emails processing")
for (message in messages) {
println("Processing '$message'...")
val lowercaseMessage = message.toLowerCase()
val regex = "^fix\\((vim-\\d+)\\):".toRegex()
val findResult = regex.find(lowercaseMessage)
if (findResult != null) {
println("Message matches")
val value = findResult.groups[1]!!.value.toUpperCase()
val shortMessage = message.drop(findResult.range.last + 1).trim()
newFixes += Change(value, shortMessage)
} else {
println("Message doesn't match")
}
}
val newFixes = changes()
// Update changes file
val changesFile = File("$projectDir/CHANGES.md")
@@ -460,8 +771,8 @@ fun updateChangelog() {
fun updateAuthors(uncheckedEmails: Set<String>) {
println("Start update authors")
println(projectDir)
val repository = org.eclipse.jgit.lib.RepositoryBuilder().setGitDir(File("$projectDir/.git")).build()
val git = org.eclipse.jgit.api.Git(repository)
val repository = RepositoryBuilder().setGitDir(File("$projectDir/.git")).build()
val git = Git(repository)
val lastSuccessfulCommit = System.getenv("SUCCESS_COMMIT")!!
val hashesAndEmailes = git.log().call()
.takeWhile {
@@ -486,7 +797,15 @@ fun updateAuthors(uncheckedEmails: Set<String>) {
println("Email '$email' is from dependabot. Skip it")
continue
}
val user = ghRepository.getCommit(hash).author
if ("tcuser" in email) {
println("Email '$email' is from teamcity. Skip it")
continue
}
val user: GHUser? = ghRepository.getCommit(hash).author
if (user == null) {
println("Cant get the commit author. Email: $email. Commit: $hash")
continue
}
val htmlUrl = user.htmlUrl.toString()
val name = user.name ?: user.login
users.add(Author(name, htmlUrl, email))
@@ -504,7 +823,7 @@ fun updateAuthors(uncheckedEmails: Set<String>) {
for (child in contributorsSection.children) {
if (child.children.size > 1) {
existingEmails.add(
child.children[1].children[0].children[2].children[2].getTextInNode(authors).toString()
child.children[1].children[0].children[2].children[2].getTextInNode(authors).toString(),
)
}
}
@@ -537,7 +856,9 @@ data class Author(val name: String, val url: String, val mail: String)
data class Change(val id: String, val text: String)
fun updateMergedPr(number: Int) {
val gitHub = org.kohsuke.github.GitHub.connect()
val token = System.getenv("GITHUB_OAUTH")
println("Token size: ${token.length}")
val gitHub = org.kohsuke.github.GitHubBuilder().withOAuthToken(token).build()
println("Connecting to the repo...")
val repository = gitHub.getRepository("JetBrains/ideavim")
println("Getting pull requests...")
@@ -554,7 +875,7 @@ fun updateMergedPr(number: Int) {
if (pullRequest.user.login == "dependabot[bot]") return
val prNumber = pullRequest.number
val userName = pullRequest.user.name
val userName = pullRequest.user.name ?: pullRequest.user.login
val login = pullRequest.user.login
val title = pullRequest.title
val section =
@@ -632,3 +953,57 @@ val sections = listOf(
"### Fixes:",
"### Merged PRs:",
)
fun changes(): List<Change> {
val repository = RepositoryBuilder().setGitDir(File("$projectDir/.git")).build()
val git = Git(repository)
val lastSuccessfulCommit = System.getenv("SUCCESS_COMMIT")!!
val messages = git.log().call()
.takeWhile {
!it.id.name.equals(lastSuccessfulCommit, ignoreCase = true)
}
.map { it.shortMessage }
// Collect fixes
val newFixes = mutableListOf<Change>()
println("Last successful commit: $lastSuccessfulCommit")
println("Amount of commits: ${messages.size}")
println("Start changes processing")
for (message in messages) {
println("Processing '$message'...")
val lowercaseMessage = message.toLowerCase()
val regex = "^fix\\((vim-\\d+)\\):".toRegex()
val findResult = regex.find(lowercaseMessage)
if (findResult != null) {
println("Message matches")
val value = findResult.groups[1]!!.value.toUpperCase()
val shortMessage = message.drop(findResult.range.last + 1).trim()
newFixes += Change(value, shortMessage)
} else {
println("Message doesn't match")
}
}
return newFixes
}
fun httpClient(): HttpClient {
return HttpClient(CIO) {
expectSuccess = true
install(Auth) {
bearer {
loadTokens {
val accessToken = youtrackToken.ifBlank { System.getenv("YOUTRACK_TOKEN")!! }
BearerTokens(accessToken, "")
}
}
}
install(ContentNegotiation) {
json(
Json {
prettyPrint = true
isLenient = true
},
)
}
}
}

View File

@@ -1,6 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<baseline version="1.0">
<file name="src/main/java/com/maddyhome/idea/vim/listener/RiderSpecifics.kt">
<error line="1" column="1" source="filename" />
</file>
</baseline>

View File

@@ -1,248 +0,0 @@
Emulated Vim Plugins
--------------------
IdeaVim extensions emulate plugins of the original Vim. In order to use
IdeaVim extensions, you have to enable them via this command in your `~/.ideavimrc`:
```
Plug '<extension-github-reference>'
```
If you reuse your existing `.vimrc` file using `source ~/.vimrc`, IdeaVim can parse and enable plugins that are defined
using [vim-plug](https://github.com/junegunn/vim-plug) or [vundle](https://github.com/VundleVim/Vundle.vim).
No additional set commands in `~/.ideavimrc` are required.
If you'd like to disable some plugin that's enabled in `.vimrc`, you can use `set no<extension-name>`
in `~/.ideavimrc`. E.g. `set nosurround`.
Available extensions:
## easymotion
* Setup:
* Install [IdeaVim-EasyMotion](https://plugins.jetbrains.com/plugin/13360-ideavim-easymotion/)
and [AceJump](https://plugins.jetbrains.com/plugin/7086-acejump/) plugins.
* `Plug 'easymotion/vim-easymotion'`
* <details>
<summary>Alternative syntax</summary>
<code>Plug 'https://github.com/easymotion/vim-easymotion'</code>
<br/>
<code>Plug 'vim-easymotion'</code>
<br/>
<code>set easymotion</code>
</details>
* Emulates [vim-easymotion](https://github.com/easymotion/vim-easymotion)
* Commands: All commands with the mappings are supported. See the [full list of supported commands](https://github.com/AlexPl292/IdeaVim-EasyMotion#supported-commands).
## NERDTree
* Setup: `Plug 'preservim/nerdtree'`
* <details>
<summary>Alternative vim-plug / vundle syntax</summary>
<code>Plug 'https://github.com/preservim/nerdtree'</code>
<br/>
<code>Plug 'nerdtree'</code>
<br/>
<code>set NERDTree</code>
</details>
* Emulates [NERDTree](https://github.com/preservim/nerdtree)
* Commands: [[see here|NERDTree-support]]
## surround
* Setup: `Plug 'tpope/vim-surround'`
* <details>
<summary>Alternative vim-plug / vundle syntax</summary>
<code>Plug 'https://github.com/tpope/vim-surround'</code>
<br/>
<code>Plug 'vim-surround'</code>
<br/>
<code>Plug 'https://www.vim.org/scripts/script.php?script_id=1697'</code>
<br/>
<code>set surround</code>
</details>
* Emulates [vim-surround](https://github.com/tpope/vim-surround)
* Commands: `ys`, `cs`, `ds`, `S`
## multiple-cursors
* Setup: `Plug 'terryma/vim-multiple-cursors'`
* <details>
<summary>Alternative vim-plug / vundle syntax</summary>
<code>Plug 'https://github.com/terryma/vim-multiple-cursors'</code>
<br/>
<code>Plug 'vim-multiple-cursors'</code>
<br/>
<code>set multiple-cursors</code>
</details>
* Emulates [vim-multiple-cursors](https://github.com/terryma/vim-multiple-cursors)
* Commands: `<A-n>`, `<A-x>`, `<A-p>`, `g<A-n>`
## commentary
* Setup: `Plug 'tpope/vim-commentary'`
* <details>
<summary>Alternative vim-plug / vundle syntax</summary>
<code>Plug 'https://github.com/tpope/vim-commentary'</code>
<br/>
<code>Plug 'vim-commentary'</code>
<br/>
<code>Plug 'https://www.vim.org/scripts/script.php?script_id=3695'</code>
<br/>
<code>Plug 'tomtom/tcomment_vim'</code>
<br/>
<code>Plug 'tcomment_vim'</code>
<br/>
<code>Plug 'https://www.vim.org/scripts/script.php?script_id=1173'</code>
<br/>
<code>set commentary</code>
</details>
* Emulates [commentary.vim](https://github.com/tpope/vim-commentary)
* Commands: `gcc`, `gc + motion`, `v_gc`
* By [Daniel Leong](https://github.com/dhleong)
## ReplaceWithRegister
* Setup: `Plug 'vim-scripts/ReplaceWithRegister'`
* <details>
<summary>Alternative vim-plug / vundle syntax</summary>
<code>Plug 'https://github.com/vim-scripts/ReplaceWithRegister'</code>
<br/>
<code>Plug 'ReplaceWithRegister'</code>
<br/>
<code>Plug 'https://github.com/inkarkat/vim-ReplaceWithRegister'</code>
<br/>
<code>Plug 'inkarkat/vim-ReplaceWithRegister'</code>
<br/>
<code>Plug 'vim-ReplaceWithRegister'</code>
<br/>
<code>Plug 'https://www.vim.org/scripts/script.php?script_id=2703'</code>
<br/>
<code>set ReplaceWithRegister</code>
</details>
* Emulates [ReplaceWithRegister](https://github.com/vim-scripts/ReplaceWithRegister)
* Commands: `gr`, `grr`
* By [igrekster](https://github.com/igrekster)
## argtextobj
* Setup:
* `Plug 'vim-scripts/argtextobj.vim'`
* <details>
<summary>Alternative vim-plug / vundle syntax</summary>
<code>Plug 'https://github.com/vim-scripts/argtextobj.vim'</code>
<br/>
<code>Plug 'argtextobj.vim'</code>
<br/>
<code>Plug 'https://www.vim.org/scripts/script.php?script_id=2699'</code>
<br/>
<code>set argtextobj</code>
</details>
* By default, only the arguments inside parenthesis are considered. To extend the functionality
to other types of brackets, set `g:argtextobj_pairs` variable to a comma-separated
list of colon-separated pairs (same as VIM's `matchpairs` option), like
`let g:argtextobj_pairs="(:),{:},<:>"`. The order of pairs matters when
handling symbols that can also be operators: `func(x << 5, 20) >> 17`. To handle
this syntax parenthesis, must come before angle brackets in the list.
* Emulates [argtextobj.vim](https://www.vim.org/scripts/script.php?script_id=2699)
* Additional text objects: `aa`, `ia`
## exchange
* Setup: `Plug 'tommcdo/vim-exchange'`
* <details>
<summary>Alternative vim-plug / vundle syntax</summary>
<code>Plug 'https://github.com/tommcdo/vim-exchange'</code>
<br/>
<code>Plug 'vim-exchange'</code>
<br/>
<code>set exchange</code>
</details>
* Emulates [vim-exchange](https://github.com/tommcdo/vim-exchange)
* Commands: `cx`, `cxx`, `X`, `cxc`
* By [fan-tom](https://github.com/fan-tom)
## textobj-entire
* Setup: `Plug 'kana/vim-textobj-entire'`
* <details>
<summary>Alternative vim-plug / vundle syntax</summary>
<code>Plug 'https://github.com/kana/vim-textobj-entire'</code>
<br/>
<code>Plug 'vim-textobj-entire'</code>
<br/>
<code>Plug 'https://www.vim.org/scripts/script.php?script_id=2610'</code>
<br/>
<code>set textobj-entire</code>
</details>
* Emulates [vim-textobj-entire](https://github.com/kana/vim-textobj-entire)
* Additional text objects: `ae`, `ie`
* By [Alexandre Grison](https://github.com/agrison)
## highlightedyank
* Setup:
* `Plug 'machakann/vim-highlightedyank'`
* <details>
<summary>Alternative vim-plug / vundle syntax</summary>
<code>Plug 'https://github.com/machakann/vim-highlightedyank'</code>
<br/>
<code>Plug 'vim-highlightedyank'</code>
<br/>
<code>set highlightedyank</code>
</details>
* if you want to optimize highlight duration, assign a time in milliseconds:
`let g:highlightedyank_highlight_duration = "1000"`
A negative number makes the highlight persistent.
`let g:highlightedyank_highlight_duration = "-1"`
* if you want to change background color of highlight you can provide the rgba of the color you want e.g.
`let g:highlightedyank_highlight_color = "rgba(160, 160, 160, 155)"`
* Emulates [vim-highlightedyank](https://github.com/machakann/vim-highlightedyank)
* By [KostkaBrukowa](https://github.com/KostkaBrukowa)
## vim-paragraph-motion
* Setup: `Plug 'dbakker/vim-paragraph-motion'`
* <details>
<summary>Alternative vim-plug / vundle syntax</summary>
<code>Plug 'https://github.com/dbakker/vim-paragraph-motion'</code>
<br/>
<code>Plug 'vim-paragraph-motion'</code>
<br/>
<code>Plug 'https://github.com/vim-scripts/Improved-paragraph-motion'</code>
<br/>
<code>Plug 'vim-scripts/Improved-paragraph-motion'</code>
<br/>
<code>Plug 'Improved-paragraph-motion'</code>
<br/>
<code>set vim-paragraph-motion</code>
</details>
* Emulates [vim-paragraph-motion](https://github.com/dbakker/vim-paragraph-motion)
## vim-indent-object
* Setup: `Plug 'michaeljsmith/vim-indent-object'`
* <details>
<summary>Alternative vim-plug / vundle syntax</summary>
<code>Plug 'https://github.com/michaeljsmith/vim-indent-object'</code>
<br/>
<code>Plug 'vim-indent-object'</code>
<br/>
<code>set textobj-indent</code>
</details>
* Emulates [vim-indent-object](https://github.com/michaeljsmith/vim-indent-object)
* Additional text objects: `ai`, `ii`, `aI`
* By [Shrikant Sharat Kandula](https://github.com/sharat87)
## matchit.vim
* Setup: `packadd matchit`
* <details>
<summary>Alternative vim-plug / vundle syntax</summary>
<code>Plug 'vim-matchit'</code>
<br/>
<code>Plug 'chrisbra/matchit'</code>
<br/>
<code>set matchit</code>
</details>
* Emulates [matchit.vim](https://github.com/chrisbra/matchit)
* Currently works for HTML/XML and ruby
* By [Martin Yzeiri](https://github.com/myzeiri)

View File

@@ -1,6 +1,6 @@
Welcome to the IdeaVim wiki!
- List of emulated plugins: [[plugins|Emulated-plugins]]
- Examples of `ideajoin` option (also known as "smart join"): [["ideajoin" examples|"ideajoin"-examples]]
- List of "set" commands: [["set" commands|"set"-commands]]
- List of IdeaVim plugins: [[plugins|IdeaVim Plugins]]
- Examples of `ideajoin` option (also known as "smart join"): [["ideajoin" examples|ideajoin-examples]]
- List of "set" commands: [["set" commands|set-commands]]
- Docs about "select" mode in vim: [[select mode|Select-mode]]

398
doc/IdeaVim Plugins.md Normal file
View File

@@ -0,0 +1,398 @@
IdeaVim Plugins
--------------------
IdeaVim plugins work like the original Vim plugins. If you want to turn any of them on, you have to enable it via this command in your `~/.ideavimrc`:
```
Plug '<plugin-github-reference>'
```
If you reuse your existing `.vimrc` file using `source ~/.vimrc`, IdeaVim can parse and enable plugins that are defined
using [vim-plug](https://github.com/junegunn/vim-plug) or [vundle](https://github.com/VundleVim/Vundle.vim).
No additional set commands in `~/.ideavimrc` are required.
If you'd like to disable some plugin that's enabled in `.vimrc`, you can use `set no<extension-name>`
in `~/.ideavimrc`. E.g. `set nosurround`.
Available plugins:
<details>
<summary><h2>easymotion</h2></summary>
Original plugin: [vim-easymotion](https://github.com/easymotion/vim-easymotion).
### Setup:
- Install [IdeaVim-EasyMotion](https://plugins.jetbrains.com/plugin/13360-ideavim-easymotion/)
and [AceJump](https://plugins.jetbrains.com/plugin/7086-acejump/) plugins.
- Add the following command to `~/.ideavimrc`: `Plug 'easymotion/vim-easymotion'`
<details>
<summary>Alternative syntax</summary>
<code>Plugin 'easymotion/vim-easymotion'</code>
<br/>
<code>Plug 'https://github.com/easymotion/vim-easymotion'</code>
<br/>
<code>Plug 'vim-easymotion'</code>
<br/>
<code>set easymotion</code>
</details>
### Instructions
All commands with the mappings are supported. See the [full list of supported commands](https://github.com/AlexPl292/IdeaVim-EasyMotion#supported-commands).
</details>
<details>
<summary><h2>sneak</h2></summary>
Original plugin: [vim-sneak](https://github.com/justinmk/vim-sneak).
### Setup:
- Install [IdeaVim-sneak](https://plugins.jetbrains.com/plugin/15348-ideavim-sneak) plugin.
- Add the following command to `~/.ideavimrc`: `set sneak`
### Instructions
See the [docs](https://github.com/Mishkun/ideavim-sneak#usage)
</details>
<details>
<summary><h2>NERDTree</h2></summary>
Original plugin: [NERDTree](https://github.com/preservim/nerdtree).
### Setup:
- Add the following command to `~/.ideavimrc`: `Plug 'preservim/nerdtree'`
<details>
<summary>Alternative syntax</summary>
<code>Plugin 'preservim/nerdtree'</code>
<br/>
<code>Plug 'https://github.com/preservim/nerdtree'</code>
<br/>
<code>Plug 'nerdtree'</code>
<br/>
<code>set NERDTree</code>
</details>
### Instructions
[[See here|NERDTree-support]].
</details>
<details>
<summary><h2>surround</h2></summary>
Original plugin: [vim-surround](https://github.com/tpope/vim-surround).
### Setup:
- Add the following command to `~/.ideavimrc`: `Plug 'tpope/vim-surround'`
<details>
<summary>Alternative syntax</summary>
<code>Plugin 'tpope/vim-surround'</code>
<br/>
<code>Plug 'https://www.vim.org/scripts/script.php?script_id=1697'</code>
<br/>
<code>Plug 'vim-surround'</code>
<br/>
<code>set surround</code>
</details>
### Instructions
https://github.com/tpope/vim-surround/blob/master/doc/surround.txt
</details>
<details>
<summary><h2>multiple-cursors</h2></summary>
Original plugin: [vim-multiple-cursors](https://github.com/terryma/vim-multiple-cursors).
### Setup:
- Add the following command to `~/.ideavimrc`: `Plug 'terryma/vim-multiple-cursors'`
<details>
<summary>Alternative syntax</summary>
<code>Plugin 'terryma/vim-multiple-cursors'</code>
<br/>
<code>Plug 'https://github.com/terryma/vim-multiple-cursors'</code>
<br/>
<code>Plug 'vim-multiple-cursors'</code>
<br/>
<code>set multiple-cursors</code>
</details>
### Instructions
https://github.com/terryma/vim-multiple-cursors/blob/master/doc/multiple_cursors.txt
</details>
<details>
<summary><h2>commentary</h2></summary>
By [Daniel Leong](https://github.com/dhleong)
Original plugin: [commentary.vim](https://github.com/tpope/vim-commentary).
### Setup:
- Add the following command to `~/.ideavimrc`: `Plug 'tpope/vim-commentary'`
<details>
<summary>Alternative syntax</summary>
<code>Plugin 'tpope/vim-commentary'</code>
<br/>
<code>Plug 'https://github.com/tpope/vim-commentary'</code>
<br/>
<code>Plug 'vim-commentary'</code>
<br/>
<code>Plug 'tcomment_vim'</code>
<br/>
<code>set commentary</code>
</details>
### Instructions
https://github.com/tpope/vim-commentary/blob/master/doc/commentary.txt
</details>
<details>
<summary><h2>ReplaceWithRegister</h2></summary>
By [igrekster](https://github.com/igrekster)
Original plugin: [ReplaceWithRegister](https://github.com/vim-scripts/ReplaceWithRegister).
### Setup:
- Add the following command to `~/.ideavimrc`: `Plug 'vim-scripts/ReplaceWithRegister'`
<details>
<summary>Alternative syntax</summary>
<code>Plugin 'vim-scripts/ReplaceWithRegister'</code>
<br/>
<code>Plug 'ReplaceWithRegister'</code>
<br/>
<code>Plug 'https://github.com/inkarkat/vim-ReplaceWithRegister'</code>
<br/>
<code>Plug 'inkarkat/vim-ReplaceWithRegister'</code>
<br/>
<code>Plug 'vim-ReplaceWithRegister'</code>
<br/>
<code>Plug 'https://www.vim.org/scripts/script.php?script_id=2703'</code>
<br/>
<code>set ReplaceWithRegister</code>
</details>
### Instructions
https://github.com/vim-scripts/ReplaceWithRegister/blob/master/doc/ReplaceWithRegister.txt
</details>
<details>
<summary><h2>argtextobj</h2></summary>
Original plugin: [argtextobj.vim](https://www.vim.org/scripts/script.php?script_id=2699).
### Setup:
- Add the following command to `~/.ideavimrc`: `Plug 'vim-scripts/argtextobj.vim'`
<details>
<summary>Alternative syntax</summary>
<code>Plugin 'vim-scripts/argtextobj.vim'</code>
<br/>
<code>Plug 'https://github.com/vim-scripts/argtextobj.vim'</code>
<br/>
<code>Plug 'argtextobj.vim'</code>
<br/>
<code>Plug 'https://www.vim.org/scripts/script.php?script_id=2699'</code>
<br/>
<code>set argtextobj</code>
</details>
### Instructions
By default, only the arguments inside parenthesis are considered. To extend the functionality
to other types of brackets, set `g:argtextobj_pairs` variable to a comma-separated
list of colon-separated pairs (same as VIM's `matchpairs` option), like
`let g:argtextobj_pairs="(:),{:},<:>"`. The order of pairs matters when
handling symbols that can also be operators: `func(x << 5, 20) >> 17`. To handle
this syntax parenthesis, must come before angle brackets in the list.
https://www.vim.org/scripts/script.php?script_id=2699
</details>
<details>
<summary><h2>exchange</h2></summary>
By [fan-tom](https://github.com/fan-tom)
Original plugin: [vim-exchange](https://github.com/tommcdo/vim-exchange).
### Setup:
- Add the following command to `~/.ideavimrc`: `Plug 'tommcdo/vim-exchange'`
<details>
<summary>Alternative syntax</summary>
<code>Plugin 'tommcdo/vim-exchange'</code>
<br/>
<code>Plug 'https://github.com/tommcdo/vim-exchange'</code>
<br/>
<code>Plug 'vim-exchange'</code>
<br/>
<code>set exchange</code>
</details>
### Instructions
https://github.com/tommcdo/vim-exchange/blob/master/doc/exchange.txt
</details>
<details>
<summary><h2>textobj-entire</h2></summary>
By [Alexandre Grison](https://github.com/agrison)
Original plugin: [vim-textobj-entire](https://github.com/kana/vim-textobj-entire).
### Setup:
- Add the following command to `~/.ideavimrc`: `Plug 'kana/vim-textobj-entire'`
<details>
<summary>Alternative syntax</summary>
<code>Plugin 'kana/vim-textobj-entire'</code>
<br/>
<code>Plug 'vim-textobj-entire'</code>
<br/>
<code>Plug 'https://www.vim.org/scripts/script.php?script_id=2610'</code>
<br/>
<code>set textobj-entire</code>
</details>
### Instructions
https://github.com/kana/vim-textobj-entire/blob/master/doc/textobj-entire.txt
</details>
<details>
<summary><h2>highlightedyank</h2></summary>
By [KostkaBrukowa](https://github.com/KostkaBrukowa)
Original plugin: [vim-highlightedyank](https://github.com/machakann/vim-highlightedyank).
### Setup:
- Add the following command to `~/.ideavimrc`: `Plug 'machakann/vim-highlightedyank'`
<details>
<summary>Alternative syntax</summary>
<code>Plugin 'machakann/vim-highlightedyank'</code>
<br/>
<code>Plug 'https://github.com/machakann/vim-highlightedyank'</code>
<br/>
<code>Plug 'vim-highlightedyank'</code>
<br/>
<code>set highlightedyank</code>
</details>
### Instructions
If you want to optimize highlight duration, assign a time in milliseconds:
`let g:highlightedyank_highlight_duration = "1000"`
A negative number makes the highlight persistent.
If you want to change background color of highlight you can provide the rgba of the color you want e.g.
`let g:highlightedyank_highlight_color = "rgba(160, 160, 160, 155)"`
https://github.com/machakann/vim-highlightedyank/blob/master/doc/highlightedyank.txt
</details>
<details>
<summary><h2>vim-paragraph-motion</h2></summary>
Original plugin: [vim-paragraph-motion](https://github.com/dbakker/vim-paragraph-motion).
### Setup:
- Add the following command to `~/.ideavimrc`: `Plug 'dbakker/vim-paragraph-motion'`
<details>
<summary>Alternative syntax</summary>
<code>Plugin 'dbakker/vim-paragraph-motion'</code>
<br/>
<code>Plug 'https://github.com/dbakker/vim-paragraph-motion'</code>
<br/>
<code>Plug 'vim-paragraph-motion'</code>
<br/>
<code>Plug 'https://github.com/vim-scripts/Improved-paragraph-motion'</code>
<br/>
<code>Plug 'vim-scripts/Improved-paragraph-motion'</code>
<br/>
<code>Plug 'Improved-paragraph-motion'</code>
<br/>
<code>set vim-paragraph-motion</code>
</details>
### Instructions
https://github.com/dbakker/vim-paragraph-motion#vim-paragraph-motion
</details>
<details>
<summary><h2>vim-indent-object</h2></summary>
By [Shrikant Sharat Kandula](https://github.com/sharat87)
Original plugin: [vim-indent-object](https://github.com/michaeljsmith/vim-indent-object).
### Setup:
- Add the following command to `~/.ideavimrc`: `Plug 'michaeljsmith/vim-indent-object'`
<details>
<summary>Alternative syntax</summary>
<code>Plugin 'michaeljsmith/vim-indent-object'</code>
<br/>
<code>Plug 'https://github.com/michaeljsmith/vim-indent-object'</code>
<br/>
<code>Plug 'vim-indent-object'</code>
<br/>
<code>set textobj-indent</code>
</details>
### Instructions
https://github.com/michaeljsmith/vim-indent-object/blob/master/doc/indent-object.txt
</details>
<details>
<summary><h2>matchit.vim</h2></summary>
By [Martin Yzeiri](https://github.com/myzeiri)
Original plugin: [matchit.vim](https://github.com/chrisbra/matchit).
### Setup:
- Add the following command to `~/.ideavimrc`: `packadd matchit`
<details>
<summary>Alternative syntax</summary>
<code>Plug 'vim-matchit'</code>
<br/>
<code>Plug 'chrisbra/matchit'</code>
<br/>
<code>set matchit</code>
</details>
### Instructions
https://github.com/adelarsq/vim-matchit/blob/master/doc/matchit.txt
</details>
<details>
<summary><h2>IdeaVim-Quickscope</h2></summary>
Original plugin: [quick-scope](https://github.com/unblevable/quick-scope).
### Setup:
- Install [IdeaVim-Quickscope](https://plugins.jetbrains.com/plugin/19417-ideavim-quickscope) plugin.
- Add the following command to `~/.ideavimrc`: `set quickscope`
### Instructions
https://plugins.jetbrains.com/plugin/19417-ideavim-quickscope
</details>

View File

@@ -1,8 +1,8 @@
# NERDTree
IdeaVim supports emulation of the NERDTree plugin. Update your `~/.ideavimrc` to turn it on:
IdeaVim supports the NERDTree plugin. Update your `~/.ideavimrc` to turn it on:
```vim
Plug 'preservim/nerdtree`
Plug 'preservim/nerdtree'
```
or
```vim
@@ -15,7 +15,7 @@ Use `set noNERDTree` to disable this extension.
```vim
set NERDTree
Plug 'preservim/nerdtree`
Plug 'preservim/nerdtree'
Plug 'https://github.com/preservim/nerdtree'
Plug 'https://github.com/scrooloose/nerdtree'
Plug 'scrooloose/nerdtree'

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

View File

@@ -0,0 +1,13 @@
Using actions from external plugins is the same, as tracking and reusing any IDE action. As an example, let's create a mapping that will toggle case of the word under caret using the CamelCase plugin when you press `<leader>t`.
**Steps to make this mapping**
1. Install the plugin via Marketplace
2. Enable action tracking. You can enable it by one of the following ways:
* Execute `:set trackactionids` ex command or just `:set tai`
* Open the "Find actions" window by pressing `Ctrl-Shift-A` and search for "Track Action Ids" to find the toggle that enables and disables action tracking
3. Execute the plugin action the way intended by plugin author "See Edit menu or use ⇧ + ⌥ + U / Shift + Alt + U" or just find the `Toggle Camel Case` action in the "Find actions" window (`Ctrl-Shift-A`). If you action tracking is on, you will see this notification in your right bottom corner:
<img alt="Notification" src="images/action-id-notification.png"/>
4. Copy the action id from the notification to create the following mapping in your .ideavimrc
```map <leader>t <Action>(de.netnexus.CamelCasePlugin.ToggleCamelCase)```

View File

@@ -0,0 +1,43 @@
# How Many Modes Does Vim Have?
When asked this question, many people will say three: Normal, Visual, and Insert. Some will have heard about One-command mode, while others will know about the two types of modes that are available during selection: Visual and Select. The official documentation, however, identifies seven main modes and seven additional ones (search for `:h vim-mode` [here](https://vimhelp.org/intro.txt.html#vim-modes)). Whats more, the documentation for the built-in `mode()` function states that up to 35 different mode values may be returned (search for `:h mode()` [here](https://vimhelp.org/builtin.txt.html#mode%28%29)).
## Modes in Vim
The `mode()` function returns a string. Each character in this string represents a mode or its sub-mode. For example:
* n Normal
* i Insert
* no Operator-pending
* niI Normal using |i_CTRL-O| in |Insert-mode|
* niR Normal using |i_CTRL-O| in |Replace-mode|
The documentation for the function states that, if you check the mode, you should only compare by prefix rather than the whole string. Moreover, the list of modes can be extended.
During the development of IdeaVim, it turned out that even 35 modes were not enough to represent the full range of Vim states. For example, the `mode()` function does not cover the state when we enter Operator-pending mode after One-command mode. This information is important because we have to know that Vim should enter Insert mode after this particular Operator-pending command is finished.
All of the above shows that Vim itself doesnt have a strictly bounded set of modes. Rather, the list can be extended with new ones, and the regular modes, like Visual or Normal, may have “submodes” that specify certain details of Vims state.
Inside the code, the state of Vim is defined by the `State` variable in the `globals.h` file ([source](https://github.com/neovim/neovim/blob/master/src/nvim/globals.h#L637)). This is an integer variable with a [list of possible values](https://github.com/neovim/neovim/blob/master/src/nvim/vim.h#L47). However, this list does not define the full range of modes, and other variables from the `globals.h `file store information about specifics. For example, <code>[restart_edit](https://github.com/neovim/neovim/blob/389165cac1596bf602c50904a789722d65ceaac7/src/nvim/globals.h#L670)</code> is set when we enter One-command mode, and <code>[VIsual_active](https://github.com/neovim/neovim/blob/389165cac1596bf602c50904a789722d65ceaac7/src/nvim/globals.h#L535)</code> defines whether Visual mode is enabled (check out [this README](https://github.com/JetBrains/ideavim#some-facts-about-vim) to learn why this variable starts with two uppercase letters). Meanwhile, the <code>[get_real_mode](https://github.com/neovim/neovim/blob/389165cac1596bf602c50904a789722d65ceaac7/src/nvim/state.c#L154)</code> function helps determine whether Vim is in Select or Visual mode.
The `mode()` function, which delegates to <code>[get_mode()](https://github.com/neovim/neovim/blob/389165cac1596bf602c50904a789722d65ceaac7/src/nvim/state.c#L173)</code>, is a big set of “if” commands that collect the information from different variables and combine them into a string representation.
## Modes in IdeaVim
For a long time, IdeaVim used a stack to store the information about the current mode:
* The default value is Normal mode
* When entering Insert mode, an “INSERT” command is added to the stack
* If the user presses _Ctrl-O_ to enter One-time command mode, a “NORMAL” command is added to the stack.
* On _Esc_, the top value of the stack is popped, activating Insert mode.
* On the second _Esc_, the top value is popped again, deactivating Insert mode.
This solution worked well for a long time. However, it sometimes led to programming mistakes, as this structure allowed incorrect states when the stack contained a senseless mix of modes. For the most part, these downsides were manageable, and we were generally able to keep the state consistent. Nevertheless, we recently decided to perform a refactoring.
Now IdeaVim has a single `Mode` interface ([source](https://github.com/JetBrains/ideavim/blob/98886cb269752a5f989c90b1da90fc624b3a381c/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/state/mode/Mode.kt#L27)) that represents the mode and all possible states of it. This solution is type-safe and helps developers of IdeaVim avoid setting illegal states.

38
doc/support-guide.md Normal file
View File

@@ -0,0 +1,38 @@
# Support Guide
This document is created to help our support team.
It's not intended to be read by the users as it brings to value to them.
## Support channels
- Main, YouTrack: https://youtrack.jetbrains.com/issues/VIM
- [Chat on gitter](https://gitter.im/JetBrains/ideavim)
- [IdeaVim Channel](https://jb.gg/bi6zp7) on [JetBrains Server](https://discord.gg/jetbrains)
- Rare: GitHub discussions - https://github.com/JetBrains/ideavim/discussions
## Expectations from the support
- Process incoming requests from all the support channels
- Request for an additional information
- Help users to answer simple cases
- Try to reproduce the issue
- Try to help user if this is misconfiguration / incorrect usage
- Pass actual bugs to the dev team
- Update "State" and "Area" fields
## YouTrack statuses
IdeaVim has multiple YouTrack statuses, main are:
- Submitted: issue is created by user, but not processed by our team. This is the default status for new tickets.
- Open: issues is processed by out team, what means that the issues is reproduced and accepted
- Waiting For Reply: Waiting for further information from the user. These issues are automatically closed if the
user doesn't reply in 30 days.
- Ready To Release: Bug is fixed, but not yet released
- Fixed: Bug is fixed
- Closed: Issue is closed by some other reason
# ~.ideavimrc file
`~/.ideavimrc` is the file that is used for IdeaVim configuration. It may affect behaviour of the program,
so it makes sense to additionally request this file in case the issues can't be reproduced.

View File

@@ -1,19 +1,36 @@
#
# Copyright 2003-2023 The IdeaVim authors
#
# Use of this source code is governed by an MIT-style
# license that can be found in the LICENSE.txt file or at
# https://opensource.org/licenses/MIT.
#
# suppress inspection "UnusedProperty" for whole file
ideaVersion=2022.2.2
ideaVersion=2023.2
downloadIdeaSources=true
instrumentPluginCode=true
version=chylex-13
version=chylex-18
javaVersion=17
remoteRobotVersion=0.11.15
remoteRobotVersion=0.11.17
antlrVersion=4.10.1
kotlin.incremental.useClasspathSnapshot=false
# Please don't forget to update kotlin version in buildscript section
kotlinVersion=1.6.21
kotlinVersion=1.8.21
publishToken=token
publishChannels=eap
slackUrl=
youtrackToken=
# Gradle settings
org.gradle.jvmargs='-Dfile.encoding=UTF-8'
# Disable warning from gradle-intellij-plugin. Kotlin stdlib is included as compileOnly, so the warning is unnecessary
kotlin.stdlib.default.dependency=false
# Disable incremental annotation processing
ksp.incremental=false

Binary file not shown.

View File

@@ -1,5 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-bin.zip
networkTimeout=10000
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

25
gradlew vendored
View File

@@ -55,7 +55,7 @@
# Darwin, MinGW, and NonStop.
#
# (3) This script is generated from the Groovy template
# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# within the Gradle project.
#
# You can find Gradle at https://github.com/gradle/gradle/.
@@ -80,13 +80,10 @@ do
esac
done
APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
APP_NAME="Gradle"
# This is normally unused
# shellcheck disable=SC2034
APP_BASE_NAME=${0##*/}
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum
@@ -143,12 +140,16 @@ fi
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
case $MAX_FD in #(
max*)
# In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC3045
MAX_FD=$( ulimit -H -n ) ||
warn "Could not query maximum file descriptor limit"
esac
case $MAX_FD in #(
'' | soft) :;; #(
*)
# In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC3045
ulimit -n "$MAX_FD" ||
warn "Could not set maximum file descriptor limit to $MAX_FD"
esac
@@ -193,6 +194,10 @@ if "$cygwin" || "$msys" ; then
done
fi
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Collect all arguments for the java command;
# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
# shell script including quotes and variable substitutions, so put them in
@@ -205,6 +210,12 @@ set -- \
org.gradle.wrapper.GradleWrapperMain \
"$@"
# Stop when "xargs" is not available.
if ! command -v xargs >/dev/null 2>&1
then
die "xargs is not available"
fi
# Use "xargs" to parse quoted args.
#
# With -n1 it outputs one arg per line, with the quotes and backslashes removed.

15
gradlew.bat vendored
View File

@@ -14,7 +14,7 @@
@rem limitations under the License.
@rem
@if "%DEBUG%" == "" @echo off
@if "%DEBUG%"=="" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@@ -25,7 +25,8 @@
if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
if "%DIRNAME%"=="" set DIRNAME=.
@rem This is normally unused
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@@ -40,7 +41,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto execute
if %ERRORLEVEL% equ 0 goto execute
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
@@ -75,13 +76,15 @@ set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd
if %ERRORLEVEL% equ 0 goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1
set EXIT_CODE=%ERRORLEVEL%
if %EXIT_CODE% equ 0 set EXIT_CODE=1
if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
exit /b %EXIT_CODE%
:mainEnd
if "%OS%"=="Windows_NT" endlocal

File diff suppressed because one or more lines are too long

View File

@@ -19,7 +19,10 @@ exclude:
- src/test/java/org/jetbrains/plugins/ideavim/propertybased/samples/JavaText.kt
- src/test/java/org/jetbrains/plugins/ideavim/propertybased/samples/LoremText.kt
- src/test/java/org/jetbrains/plugins/ideavim/propertybased/samples/SimpleText.kt
- src/main/java/com/maddyhome/idea/vim/vimscript/parser/generated/VimscriptListener.java
- src/main/java/com/maddyhome/idea/vim/vimscript/parser/generated/VimscriptLexer.java
- src/main/java/com/maddyhome/idea/vim/vimscript/parser/generated/VimscriptParser.java
- src/main/java/com/maddyhome/idea/vim/vimscript/parser/generated/VimscriptVisitor.java
- src/main/java/com/maddyhome/idea/vim/vimscript/parser/generated
- src/main/java/com/maddyhome/idea/vim/package-info.java
dependencyIgnores:
- name: "acejump"
- name: "icu4j"
- name: "antlr-runtime"
- name: "javax.json"

141
scripts/build.gradle.kts Normal file
View File

@@ -0,0 +1,141 @@
/*
* Copyright 2003-2023 The IdeaVim authors
*
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE.txt file or at
* https://opensource.org/licenses/MIT.
*/
plugins {
java
kotlin("jvm")
application
}
// group 'org.jetbrains.ideavim'
// version 'SNAPSHOT'
repositories {
mavenCentral()
}
dependencies {
compileOnly("org.jetbrains.kotlin:kotlin-stdlib:1.9.10")
implementation("io.ktor:ktor-client-core:2.3.4")
implementation("io.ktor:ktor-client-cio:2.3.4")
implementation("io.ktor:ktor-client-content-negotiation:2.3.4")
implementation("io.ktor:ktor-serialization-kotlinx-json:2.3.4")
implementation("io.ktor:ktor-client-auth:2.3.4")
implementation("org.eclipse.jgit:org.eclipse.jgit:6.6.0.202305301015-r")
// This is needed for jgit to connect to ssh
implementation("org.eclipse.jgit:org.eclipse.jgit.ssh.apache:6.7.0.202309050840-r")
implementation("com.vdurmont:semver4j:3.1.0")
}
val releaseType: String? by project
tasks {
compileKotlin {
kotlinOptions {
freeCompilerArgs = listOf("-Xjvm-default=all-compatibility")
}
}
}
tasks.register("generateIdeaVimConfigurations", JavaExec::class) {
group = "verification"
description = "This job tracks if there are any new plugins in marketplace we don't know about"
mainClass.set("scripts.MainKt")
classpath = sourceSets["main"].runtimeClasspath
}
tasks.register("checkNewPluginDependencies", JavaExec::class) {
group = "verification"
description = "This job tracks if there are any new plugins in marketplace we don't know about"
mainClass.set("scripts.CheckNewPluginDependenciesKt")
classpath = sourceSets["main"].runtimeClasspath
}
tasks.register("updateAffectedRates", JavaExec::class) {
group = "verification"
description = "This job updates Affected Rate field on YouTrack"
mainClass.set("scripts.YouTrackUsersAffectedKt")
classpath = sourceSets["main"].runtimeClasspath
}
tasks.register("calculateNewVersion", JavaExec::class) {
group = "release"
mainClass.set("scripts.release.CalculateNewVersionKt")
classpath = sourceSets["main"].runtimeClasspath
args = listOf("${rootProject.rootDir}", releaseType ?: "")
}
tasks.register("changelogUpdateUnreleased", JavaExec::class) {
group = "release"
mainClass.set("scripts.release.ChangelogUpdateUnreleasedKt")
classpath = sourceSets["main"].runtimeClasspath
args = listOf(project.version.toString(), rootProject.rootDir.toString(), releaseType ?: "")
}
tasks.register("commitChanges", JavaExec::class) {
group = "release"
mainClass.set("scripts.release.CommitChangesKt")
classpath = sourceSets["main"].runtimeClasspath
args = listOf(project.version.toString(), rootProject.rootDir.toString(), releaseType ?: "")
}
tasks.register("addReleaseTag", JavaExec::class) {
group = "release"
mainClass.set("scripts.release.AddReleaseTagKt")
classpath = sourceSets["main"].runtimeClasspath
args = listOf(project.version.toString(), rootProject.rootDir.toString(), releaseType ?: "")
}
tasks.register("resetReleaseBranch", JavaExec::class) {
group = "release"
mainClass.set("scripts.release.ResetReleaseBranchKt")
classpath = sourceSets["main"].runtimeClasspath
args = listOf(project.version.toString(), rootProject.rootDir.toString(), releaseType ?: "")
}
tasks.register("pushChanges", JavaExec::class) {
mainClass.set("scripts.PushChangesKt")
classpath = sourceSets["main"].runtimeClasspath
args = listOf(rootProject.rootDir.toString())
}
tasks.register("pushChangesWithReleaseBranch", JavaExec::class) {
mainClass.set("scripts.PushChangesWithReleaseBranchKt")
classpath = sourceSets["main"].runtimeClasspath
args = listOf(rootProject.rootDir.toString(), releaseType ?: "")
}
tasks.register("selectBranch", JavaExec::class) {
group = "release"
mainClass.set("scripts.release.SelectBranchKt")
classpath = sourceSets["main"].runtimeClasspath
args = listOf(project.version.toString(), rootProject.rootDir.toString(), releaseType ?: "")
}
tasks.register("calculateNewEapVersion", JavaExec::class) {
group = "release"
mainClass.set("scripts.release.CalculateNewEapVersionKt")
classpath = sourceSets["main"].runtimeClasspath
args = listOf("${rootProject.rootDir}")
}
tasks.register("calculateNewDevVersion", JavaExec::class) {
group = "release"
mainClass.set("scripts.release.CalculateNewDevVersionKt")
classpath = sourceSets["main"].runtimeClasspath
args = listOf("${rootProject.rootDir}")
}
tasks.register("setTeamCityBuildNumber", JavaExec::class) {
group = "release"
mainClass.set("scripts.release.SetTeamCityBuildNumberKt")
classpath = sourceSets["main"].runtimeClasspath
args = listOf(project.version.toString(), rootProject.rootDir.toString(), releaseType ?: "")
}

View File

@@ -0,0 +1,13 @@
/*
* Copyright 2003-2023 The IdeaVim authors
*
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE.txt file or at
* https://opensource.org/licenses/MIT.
*/
package scripts
fun main() {
println("Hello")
}

View File

@@ -0,0 +1,66 @@
/*
* Copyright 2003-2023 The IdeaVim authors
*
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE.txt file or at
* https://opensource.org/licenses/MIT.
*/
package scripts
import io.ktor.client.call.*
import io.ktor.client.request.*
import kotlinx.serialization.json.JsonObject
import kotlinx.serialization.json.jsonPrimitive
/**
* Marketplace has an API to get all plugins that depend on our plugin.
* Here we have a list of dependent plugins at some moment, and we check if something changed in that.
* If so, we need to update our list of plugins.
*
* This script makes no actions and aimed to notify the devs in case they need to update the list of IdeaVim plugins.
*/
@Suppress("SpellCheckingInspection")
val knownPlugins = listOf(
"IdeaVimExtension",
"github.zgqq.intellij-enhance",
"org.jetbrains.IdeaVim-EasyMotion",
"io.github.mishkun.ideavimsneak",
"eu.theblob42.idea.whichkey",
"com.github.copilot",
"com.github.dankinsoid.multicursor",
"com.joshestein.ideavim-quickscope",
"ca.alexgirard.HarpoonIJ",
// "cc.implicated.intellij.plugins.bunny", // I don't want to include this plugin in the list of IdeaVim plugins as I don't understand what this is for
)
suspend fun main() {
val response = client.get("https://plugins.jetbrains.com/api/plugins/") {
parameter("dependency", "IdeaVIM")
parameter("includeOptional", true)
}
val output = response.body<List<String>>()
println(output)
if (knownPlugins != output) {
val newPlugins = (output - knownPlugins).map { it to (getPluginLinkByXmlId(it) ?: "Can't find plugin link") }
val removedPlugins = (knownPlugins - output.toSet()).map { it to (getPluginLinkByXmlId(it) ?: "Can't find plugin link") }
error(
"""
Unregistered plugins:
${if (newPlugins.isNotEmpty()) newPlugins.joinToString(separator = "\n") { it.first + "(" + it.second + ")" } else "No unregistered plugins"}
Removed plugins:
${if (removedPlugins.isNotEmpty()) removedPlugins.joinToString(separator = "\n") { it.first + "(" + it.second + ")" } else "No removed plugins"}
""".trimIndent()
)
}
}
private suspend fun getPluginLinkByXmlId(it: String): String? {
val newPluginLink = client.get("https://plugins.jetbrains.com/api/plugins/intellij/$it")
.body<JsonObject>()["link"]?.jsonPrimitive?.content
return newPluginLink?.let { "https://plugins.jetbrains.com$it" }
}

View File

@@ -0,0 +1,49 @@
/*
* Copyright 2003-2023 The IdeaVim authors
*
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE.txt file or at
* https://opensource.org/licenses/MIT.
*/
package scripts
import io.ktor.client.*
import io.ktor.client.engine.cio.*
import io.ktor.client.plugins.*
import io.ktor.client.plugins.auth.*
import io.ktor.client.plugins.auth.providers.*
import io.ktor.client.plugins.contentnegotiation.*
import io.ktor.serialization.kotlinx.json.*
import kotlinx.serialization.json.Json
internal val client = HttpClient(CIO) {
install(ContentNegotiation) {
json()
}
}
fun httpClient(): HttpClient {
return HttpClient(CIO) {
expectSuccess = true
defaultRequest {
url("https://youtrack.jetbrains.com/api/")
}
install(Auth) {
bearer {
loadTokens {
val accessToken = System.getenv("YOUTRACK_TOKEN")!!
BearerTokens(accessToken, "")
}
}
}
install(ContentNegotiation) {
json(
Json {
prettyPrint = true
isLenient = true
},
)
}
}
}

View File

@@ -0,0 +1,37 @@
/*
* Copyright 2003-2023 The IdeaVim authors
*
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE.txt file or at
* https://opensource.org/licenses/MIT.
*/
package scripts
import scripts.release.checkoutBranch
import scripts.release.withGit
import scripts.release.withRepo
fun main(args: Array<String>) {
val rootDir = args[0]
println("root dir: $rootDir")
val currentBranch = withRepo(rootDir) { it.branch }
println("Current branch is $currentBranch")
withGit(rootDir) { git ->
if (currentBranch != "master") {
git.checkoutBranch("master")
println("Check out master branch")
}
git.push()
.setPushTags()
.call()
println("Master pushed with tags")
git.checkoutBranch(currentBranch)
println("Checked out $currentBranch branch")
}
}

View File

@@ -0,0 +1,54 @@
/*
* Copyright 2003-2023 The IdeaVim authors
*
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE.txt file or at
* https://opensource.org/licenses/MIT.
*/
package scripts
import scripts.release.checkoutBranch
import scripts.release.withGit
import scripts.release.withRepo
fun main(args: Array<String>) {
val rootDir = args[0]
val releaseType = args[1]
println("root dir: $rootDir")
println("releaseType: $releaseType")
val currentBranch = withRepo(rootDir) { it.branch }
println("Current branch is $currentBranch")
withGit(rootDir) { git ->
if (currentBranch != "master") {
git.checkoutBranch("master")
println("Check out master branch")
}
git.push()
.setPushTags()
.call()
println("Master pushed with tags")
if (releaseType != "patch") {
git.checkoutBranch("release")
println("Checked out release")
git
.push()
.setForce(true)
.setPushTags()
.call()
println("Pushed release branch with tags")
}
else {
println("Do not push release branch because type of release is $releaseType")
}
git.checkoutBranch(currentBranch)
println("Checked out $currentBranch branch")
}
}

View File

@@ -0,0 +1,27 @@
/*
* Copyright 2003-2023 The IdeaVim authors
*
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE.txt file or at
* https://opensource.org/licenses/MIT.
*/
package scripts.release
fun main(args: Array<String>) {
val (newVersion, rootDir, _) = readArgs(args)
withGit(rootDir) { git ->
git
.tag()
.setName(newVersion)
.call()
val tagFound = git.tagList().call()
.map { it.name }
.find { it == "refs/tags/$newVersion" }
.isNullOrBlank()
.not()
println("Tag added. New tag found: '$tagFound'")
}
}

View File

@@ -0,0 +1,37 @@
/*
* Copyright 2003-2023 The IdeaVim authors
*
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE.txt file or at
* https://opensource.org/licenses/MIT.
*/
package scripts.release
fun main(args: Array<String>) {
println("HI!")
val projectDir = args[0]
println("Working directory: $projectDir")
val (lastVersion, objectId) = getVersion(projectDir, onlyStable = true)
println("Last version: $lastVersion, hash: ${objectId.name}")
val branch = withRepo(projectDir) { it.branch }
check(branch == "master") {
"We should be on master branch"
}
withGit(projectDir) { git ->
val log = git.log().setMaxCount(500).call().toList()
println("First commit hash in log: " + log.first().name + " log size: ${log.size}")
val logDiff = log.takeWhile { it.id.name != objectId.name }
val numCommits = logDiff.size
println("Log diff size is $numCommits")
check(numCommits < 450) {
"More than 450 commits detected since the last release. This is suspicious."
}
val nextVersion = lastVersion.nextMinor().withSuffix("dev.$numCommits")
println("Next dev version: $nextVersion")
println("##teamcity[setParameter name='env.ORG_GRADLE_PROJECT_version' value='$nextVersion']")
}
}

Some files were not shown because too many files have changed in this diff Show More