1
0
mirror of https://github.com/chylex/IntelliJ-IdeaVim.git synced 2024-10-18 10:42:46 +02:00

Compare commits

...

770 Commits

Author SHA1 Message Date
2e8f0da0e4
Set plugin version to chylex-16 2023-09-28 01:08:23 +02:00
3659aabb70
Remove update checker 2023-09-28 01:07:25 +02:00
7490c270d4
[VIM-696] Restore visual mode after undo/redo, and disable incompatible actions 2023-09-28 01:07:25 +02:00
e2f6f0d5bc
Change matchit plugin to use HTML patterns in unrecognized files 2023-09-28 01:07:25 +02:00
15124fd7dd
Fix vim-surround not working with multiple cursors
Fixes multiple cursors with vim-surround commands `cs, ds, S` (but not `ys`).
2023-09-28 01:07:25 +02:00
4de683db34
Add VimScript 'renaming()' function 2023-09-28 01:07:25 +02:00
5a9c8345cc
Add support for repeatable actions with ':raction' 2023-09-28 01:07:24 +02:00
69229fca8c
Disable taking over arrow keys and Home/End 2023-09-28 01:07:24 +02:00
03bcceb09b
Set custom plugin version 2023-09-28 01:07:24 +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
1337 changed files with 102479 additions and 77699 deletions

View File

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

1
.gitattributes vendored Normal file
View File

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

View File

@ -14,9 +14,11 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v3
with: with:
fetch-depth: 300 fetch-depth: 300
- name: Get tags
run: git fetch --tags origin
- name: Set up JDK 11 - name: Set up JDK 11
uses: actions/setup-java@v2 uses: actions/setup-java@v2
with: with:
@ -25,15 +27,20 @@ jobs:
server-id: github # Value of the distributionManagement/repository/id field of the pom.xml server-id: github # Value of the distributionManagement/repository/id field of the pom.xml
settings-path: ${{ github.workspace }} # location for the settings.xml file settings-path: ${{ github.workspace }} # location for the settings.xml file
- uses: nrwl/last-successful-commit-action@v1 # The last successful job was marked with a tag
id: last_successful_commit - name: Get commit with last workflow
with: run: |
branch: 'master' echo "LAST_COMMIT=$(git rev-list -n 1 tags/workflow-close-youtrack)" >> $GITHUB_ENV
workflow_id: 'closeYoutrackOnCommit.yml'
github_token: ${{ secrets.GITHUB_TOKEN }}
- name: Update YouTrack - name: Update YouTrack
run: ./gradlew updateYoutrackOnCommit run: ./gradlew updateYoutrackOnCommit
env: env:
SUCCESS_COMMIT: ${{ steps.last_successful_commit.outputs.commit_hash }} SUCCESS_COMMIT: ${{ env.LAST_COMMIT }}
YOUTRACK_TOKEN: ${{ secrets.YOUTRACK_TOKEN }} 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. # Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL - name: Initialize CodeQL
uses: github/codeql-action/init@v1 uses: github/codeql-action/init@v2
with: with:
languages: ${{ matrix.language }} languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file. # 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). # 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) # If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild - name: Autobuild
uses: github/codeql-action/autobuild@v1 uses: github/codeql-action/autobuild@v2
# Command-line programs to run using the OS shell. # Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl # 📚 https://git.io/JvXDl
@ -64,4 +64,4 @@ jobs:
# make release # make release
- name: Perform CodeQL Analysis - name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v1 uses: github/codeql-action/analyze@v2

View File

@ -29,4 +29,4 @@ jobs:
run: ./gradlew integrationsTest run: ./gradlew integrationsTest
env: env:
YOUTRACK_TOKEN: ${{ secrets.YOUTRACK_TOKEN }} YOUTRACK_TOKEN: ${{ secrets.YOUTRACK_TOKEN }}
GITHUB_OAUTH: ${{ secrets.MERGE_PR }} GITHUB_OAUTH: ${{ secrets.GITHUB_TOKEN }}

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

@ -18,6 +18,8 @@ jobs:
- uses: actions/checkout@v2 - uses: actions/checkout@v2
with: with:
fetch-depth: 50 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 - name: Set up JDK 11
uses: actions/setup-java@v2 uses: actions/setup-java@v2
with: with:
@ -32,25 +34,12 @@ jobs:
env: env:
GITHUB_OAUTH: ${{ secrets.GITHUB_TOKEN }} GITHUB_OAUTH: ${{ secrets.GITHUB_TOKEN }}
# Reuse from update changelog
- uses: nrwl/last-successful-commit-action@v1
id: last_successful_commit
with:
branch: 'master'
workflow_id: 'updateChangelog.yml'
github_token: ${{ secrets.GITHUB_TOKEN }}
- name: Update changelog
run: ./gradlew updateChangelog
env:
SUCCESS_COMMIT: ${{ steps.last_successful_commit.outputs.commit_hash }}
- name: Commit changes - name: Commit changes
uses: stefanzweifel/git-auto-commit-action@v4 uses: stefanzweifel/git-auto-commit-action@v4
with: with:
branch: master branch: master
commit_message: Update changelog after merging PR commit_message: Update changelog after merging PR
commit_user_name: Alex Plate commit_user_name: IdeaVim Bot
commit_user_email: aleksei.plate@jetbrains.com commit_user_email: maintainers@ideavim.dev
commit_author: Alex Plate <aleksei.plate@jetbrains.com> commit_author: IdeaVim Bot <maintainers@ideavim.dev>
file_pattern: CHANGES.md file_pattern: CHANGES.md

View File

@ -20,6 +20,8 @@ jobs:
uses: actions/checkout@v3 uses: actions/checkout@v3
with: with:
path: origin 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 - name: Fetch docs repo
uses: actions/checkout@v3 uses: actions/checkout@v3
@ -37,6 +39,6 @@ jobs:
branch: master branch: master
repository: docs repository: docs
commit_message: Update docs commit_message: Update docs
commit_user_name: Alex Plate commit_user_name: IdeaVim Bot
commit_user_email: aleksei.plate@jetbrains.com commit_user_email: maintainers@ideavim.dev
commit_author: Alex Plate <aleksei.plate@jetbrains.com> 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: on:
workflow_dispatch: workflow_dispatch:
push: schedule:
branches: [ master ] - cron: '0 9 * * *'
# Workflow run on push is disabled to avoid conflicts when merging PR
# push:
# branches: [ master ]
jobs: jobs:
build: build:
@ -14,9 +17,13 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v3
with: with:
fetch-depth: 300 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 - name: Set up JDK 11
uses: actions/setup-java@v2 uses: actions/setup-java@v2
with: with:
@ -25,25 +32,30 @@ jobs:
server-id: github # Value of the distributionManagement/repository/id field of the pom.xml server-id: github # Value of the distributionManagement/repository/id field of the pom.xml
settings-path: ${{ github.workspace }} # location for the settings.xml file settings-path: ${{ github.workspace }} # location for the settings.xml file
- uses: nrwl/last-successful-commit-action@v1 # The last successful job was marked with a tag
id: last_successful_commit - name: Get commit with last workflow
with: run: |
branch: 'master' echo "LAST_COMMIT=$(git rev-list -n 1 tags/workflow-authors)" >> $GITHUB_ENV
workflow_id: 'updateAuthors.yml'
github_token: ${{ secrets.GITHUB_TOKEN }}
- name: Update authors - name: Update authors
id: update_authors id: update_authors
run: ./gradlew updateAuthors --stacktrace run: ./gradlew updateAuthors --stacktrace
env: env:
SUCCESS_COMMIT: ${{ steps.last_successful_commit.outputs.commit_hash }} SUCCESS_COMMIT: ${{ env.LAST_COMMIT }}
GITHUB_OAUTH: ${{ secrets.GITHUB_TOKEN }} GITHUB_OAUTH: ${{ secrets.GITHUB_TOKEN }}
- name: Commit changes - name: Commit changes
uses: stefanzweifel/git-auto-commit-action@v4 uses: stefanzweifel/git-auto-commit-action@v4
with: with:
commit_message: Add ${{ steps.update_authors.outputs.authors }} to contributors list commit_message: Add ${{ steps.update_authors.outputs.authors }} to contributors list
commit_user_name: Alex Plate commit_user_name: IdeaVim Bot
commit_user_email: aleksei.plate@jetbrains.com commit_user_email: maintainers@ideavim.dev
commit_author: Alex Plate <aleksei.plate@jetbrains.com> commit_author: IdeaVim Bot <maintainers@ideavim.dev>
file_pattern: AUTHORS.md 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,19 +5,25 @@ name: Update Changelog
on: on:
workflow_dispatch: workflow_dispatch:
push: schedule:
branches: [ master ] - cron: '0 10 * * *'
# Workflow run on push is disabled to avoid conflicts when merging PR
# push:
# branches: [ master ]
jobs: jobs:
build: build:
if: github.event.pull_request.merged != true
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v3
with: with:
fetch-depth: 300 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 - name: Set up JDK 11
uses: actions/setup-java@v2 uses: actions/setup-java@v2
with: with:
@ -26,24 +32,34 @@ jobs:
server-id: github # Value of the distributionManagement/repository/id field of the pom.xml server-id: github # Value of the distributionManagement/repository/id field of the pom.xml
settings-path: ${{ github.workspace }} # location for the settings.xml file settings-path: ${{ github.workspace }} # location for the settings.xml file
- uses: nrwl/last-successful-commit-action@v1 # The last successful job was marked with a tag
id: last_successful_commit - name: Get commit with last workflow
with: run: |
branch: 'master' echo "LAST_COMMIT=$(git rev-list -n 1 tags/workflow-changelog)" >> $GITHUB_ENV
workflow_id: 'updateChangelog.yml'
github_token: ${{ secrets.GITHUB_TOKEN }}
- name: Update changelog - name: Update changelog
run: ./gradlew updateChangelog run: ./gradlew updateChangelog
env: env:
SUCCESS_COMMIT: ${{ steps.last_successful_commit.outputs.commit_hash }} SUCCESS_COMMIT: ${{ env.LAST_COMMIT }}
- name: Commit changes - name: Commit changes
uses: stefanzweifel/git-auto-commit-action@v4 uses: stefanzweifel/git-auto-commit-action@v4
with: with:
commit_message: Update changelog commit_message: Update changelog. Action id - ${{ github.run_id }}
commit_user_name: Alex Plate commit_user_name: IdeaVim Bot
commit_user_email: aleksei.plate@jetbrains.com commit_user_email: maintainers@ideavim.dev
commit_author: Alex Plate <aleksei.plate@jetbrains.com> commit_author: IdeaVim Bot <maintainers@ideavim.dev>
file_pattern: CHANGES.md file_pattern: CHANGES.md
skip_fetch: false
- 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 - uses: actions/checkout@v2
with: with:
fetch-depth: 50 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 - name: Set up JDK 11
uses: actions/setup-java@v2 uses: actions/setup-java@v2
with: with:
@ -25,13 +27,15 @@ jobs:
server-id: github # Value of the distributionManagement/repository/id field of the pom.xml server-id: github # Value of the distributionManagement/repository/id field of the pom.xml
settings-path: ${{ github.workspace }} # location for the settings.xml file settings-path: ${{ github.workspace }} # location for the settings.xml file
- name: Format files - uses: findologic/intellij-format-action@1.0.1
run: ./gradlew ktlintFormat with:
include-glob: '*.kt,*.java'
path: .
- name: Commit changes - name: Commit changes
uses: stefanzweifel/git-auto-commit-action@v4 uses: stefanzweifel/git-auto-commit-action@v4
with: with:
commit_message: Update formatting commit_message: Update formatting
commit_user_name: Alex Plate commit_user_name: IdeaVim Bot
commit_user_email: aleksei.plate@jetbrains.com commit_user_email: maintainers@ideavim.dev
commit_author: Alex Plate <aleksei.plate@jetbrains.com> commit_author: IdeaVim Bot <maintainers@ideavim.dev>

View File

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

View File

@ -1,6 +1,6 @@
<component name="CopyrightManager"> <component name="CopyrightManager">
<copyright> <copyright>
<option name="notice" value="Copyright 2003-2022 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="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" /> <option name="myName" value="IdeaVim" />
</copyright> </copyright>
</component> </component>

View File

@ -1,3 +1,3 @@
<component name="DependencyValidationManager"> <component name="DependencyValidationManager">
<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" /> <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> </component>

View File

@ -5,16 +5,15 @@ object Constants {
const val EAP_CHANNEL = "eap" const val EAP_CHANNEL = "eap"
const val DEV_CHANNEL = "Dev" const val DEV_CHANNEL = "Dev"
const val VERSION = "2.0.0" const val VERSION = "2.4.0"
const val DEV_VERSION = "2.1.0"
const val GITHUB_TESTS = "LATEST-EAP-SNAPSHOT" const val GITHUB_TESTS = "LATEST-EAP-SNAPSHOT"
const val NVIM_TESTS = "LATEST-EAP-SNAPSHOT" const val NVIM_TESTS = "LATEST-EAP-SNAPSHOT"
const val PROPERTY_TESTS = "LATEST-EAP-SNAPSHOT" const val PROPERTY_TESTS = "LATEST-EAP-SNAPSHOT"
const val LONG_RUNNING_TESTS = "LATEST-EAP-SNAPSHOT" const val LONG_RUNNING_TESTS = "LATEST-EAP-SNAPSHOT"
const val QODANA_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_DEV = "2023.1.2"
const val RELEASE_EAP = "LATEST-EAP-SNAPSHOT" const val RELEASE_EAP = "2023.1.2"
} }

View File

@ -6,33 +6,25 @@ import _Self.buildTypes.Nvim
import _Self.buildTypes.PluginVerifier import _Self.buildTypes.PluginVerifier
import _Self.buildTypes.PropertyBased import _Self.buildTypes.PropertyBased
import _Self.buildTypes.Qodana import _Self.buildTypes.Qodana
import _Self.buildTypes.TestsForIntelliJ20222 import _Self.buildTypes.TestingBuildType
import _Self.buildTypes.TestsForIntelliJEAP
import _Self.subprojects.GitHub import _Self.subprojects.GitHub
import _Self.subprojects.OldTests import _Self.subprojects.OldTests
import _Self.subprojects.Releases import _Self.subprojects.Releases
import _Self.vcsRoots.* import _Self.vcsRoots.GitHubPullRequest
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
import jetbrains.buildServer.configs.kotlin.v2019_2.Project import jetbrains.buildServer.configs.kotlin.v2019_2.Project
object Project : 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) subProjects(Releases, OldTests, GitHub)
// VCS roots // 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_222)
vcsRoot(Branch_Release)
vcsRoot(GitHubPullRequest) vcsRoot(GitHubPullRequest)
// Builds // Active tests
buildType(TestsForIntelliJEAP) buildType(TestingBuildType("Latest EAP", "<default>", version = "LATEST-EAP-SNAPSHOT"))
buildType(TestingBuildType("Latest EAP With Xorg", "<default>", version = "LATEST-EAP-SNAPSHOT"))
buildType(PropertyBased) buildType(PropertyBased)
buildType(LongRunning) buildType(LongRunning)
@ -42,52 +34,22 @@ object Project : Project({
buildType(Compatibility) buildType(Compatibility)
buildType(Qodana) buildType(Qodana)
})
// Unknown staff generated by TeamCity // Common build type for all configurations
features { abstract class IdeaVimBuildType(init: BuildType.() -> Unit) : BuildType({
feature { init()
type = "CloudImage"
id = "PROJECT_EXT_768" requirements {
param("agent_pool_id", "41") // These requirements define Linux-Medium configuration.
param("amazon-id", "ami-0fa17ce8238eb8868") // Unfortunately, requirement by name (teamcity.agent.name) doesn't work
param("ebs-optimized", "false") // IDK the reason for it, but on our agents this property is empty
param("image-instances-limit", "") equals("teamcity.agent.hardware.cpuCount", "4")
param("image-name-prefix", "BuildAgentsIdeaVim") equals("teamcity.agent.os.family", "Linux")
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")
} }
failureConditions {
// Disable detection of the java OOM
javaCrash = false
} }
}) })

View File

@ -1,31 +1,46 @@
package _Self.buildTypes 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.DslContext
import jetbrains.buildServer.configs.kotlin.v2019_2.buildFeatures.golang 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.buildSteps.script
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.schedule import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.schedule
object Compatibility : BuildType({ object Compatibility : IdeaVimBuildType({
id("IdeaVimCompatibility") id("IdeaVimCompatibility")
name = "IdeaVim compatibility with external plugins" name = "IdeaVim compatibility with external plugins"
vcs { vcs {
root(DslContext.settingsRoot) root(DslContext.settingsRoot)
branchFilter = "+:<default>"
} }
steps { 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 { script {
name = "Check" name = "Check"
scriptContent = """ scriptContent = """
java -jar verifier/verifier-cli-dev-all.jar check-plugin '${'$'}org.jetbrains.IdeaVim-EasyMotion' [latest-IU] -team-city # We use a custom build of verifier that downloads IdeaVim from dev channel
java -jar verifier/verifier-cli-dev-all.jar check-plugin '${'$'}io.github.mishkun.ideavimsneak' [latest-IU] -team-city # To create a custom build: Download plugin verifier repo, add an if that switches to dev channel for IdeaVim repo
java -jar verifier/verifier-cli-dev-all.jar check-plugin '${'$'}eu.theblob42.idea.whichkey' [latest-IU] -team-city # At the moment it's com.jetbrains.pluginverifier.repository.repositories.marketplace.MarketplaceRepository#getLastCompatibleVersionOfPlugin
java -jar verifier/verifier-cli-dev-all.jar check-plugin '${'$'}IdeaVimExtension' [latest-IU] -team-city # 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 # 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 verifier1/verifier-cli-dev-all-1.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 verifier1/verifier-cli-dev-all-1.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 java -jar verifier1/verifier-cli-dev-all-1.jar check-plugin '${'$'}com.joshestein.ideavim-quickscope' [latest-IU] -team-city
""".trimIndent() """.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 package _Self.buildTypes
import _Self.Constants.LONG_RUNNING_TESTS 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.CheckoutMode
import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle 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 import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
object LongRunning : BuildType({ object LongRunning : IdeaVimBuildType({
name = "Long running tests" name = "Long running tests"
params { params {
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false") param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
@ -17,6 +18,7 @@ object LongRunning : BuildType({
vcs { vcs {
root(DslContext.settingsRoot) root(DslContext.settingsRoot)
branchFilter = "+:<default>"
checkoutMode = CheckoutMode.AUTO checkoutMode = CheckoutMode.AUTO
} }
@ -26,17 +28,19 @@ object LongRunning : BuildType({
tasks = "clean testLongRunning" tasks = "clean testLongRunning"
buildFile = "" buildFile = ""
enableStacktrace = true enableStacktrace = true
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
} }
} }
triggers { triggers {
vcs { 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 package _Self.buildTypes
import _Self.Constants.NVIM_TESTS 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.CheckoutMode
import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle 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.failureConditions.failOnMetricChange
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
object Nvim : BuildType({ object Nvim : IdeaVimBuildType({
name = "Tests with nvim" name = "Tests with nvim"
description = "Running tests with nvim integration" description = "Running tests with nvim integration"
@ -23,6 +23,7 @@ object Nvim : BuildType({
vcs { vcs {
root(DslContext.settingsRoot) root(DslContext.settingsRoot)
branchFilter = "+:<default>"
checkoutMode = CheckoutMode.AUTO checkoutMode = CheckoutMode.AUTO
} }
@ -41,20 +42,15 @@ object Nvim : BuildType({
tasks = "clean testWithNeovim" tasks = "clean testWithNeovim"
buildFile = "" buildFile = ""
enableStacktrace = true enableStacktrace = true
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
} }
} }
triggers { triggers {
vcs { vcs {
branchFilter = "" branchFilter = "+:<default>"
} }
} }
requirements {
noLessThanVer("teamcity.agent.jvm.version", "1.8")
}
failureConditions { failureConditions {
failOnMetricChange { failOnMetricChange {
metric = BuildFailureOnMetric.MetricType.TEST_COUNT metric = BuildFailureOnMetric.MetricType.TEST_COUNT

View File

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

View File

@ -1,13 +1,13 @@
package _Self.buildTypes package _Self.buildTypes
import _Self.Constants.PROPERTY_TESTS 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.CheckoutMode
import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
object PropertyBased : BuildType({ object PropertyBased : IdeaVimBuildType({
name = "Property based tests" name = "Property based tests"
params { params {
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false") param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
@ -17,6 +17,7 @@ object PropertyBased : BuildType({
vcs { vcs {
root(DslContext.settingsRoot) root(DslContext.settingsRoot)
branchFilter = "+:<default>"
checkoutMode = CheckoutMode.AUTO checkoutMode = CheckoutMode.AUTO
} }
@ -26,17 +27,12 @@ object PropertyBased : BuildType({
tasks = "clean testPropertyBased" tasks = "clean testPropertyBased"
buildFile = "" buildFile = ""
enableStacktrace = true enableStacktrace = true
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
} }
} }
triggers { triggers {
vcs { 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 package _Self.buildTypes
import _Self.Constants.QODANA_TESTS 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.CheckoutMode
import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext 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.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.buildSteps.qodana
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.BuildFailureOnMetric 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.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.schedule
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
object Qodana : BuildType({ object Qodana : IdeaVimBuildType({
name = "Qodana checks" name = "Qodana checks"
params { params {
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false") param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
@ -22,48 +22,48 @@ object Qodana : BuildType({
vcs { vcs {
root(DslContext.settingsRoot) root(DslContext.settingsRoot)
branchFilter = "+:<default>"
checkoutMode = CheckoutMode.AUTO checkoutMode = CheckoutMode.AUTO
} }
steps { steps {
gradle {
name = "Generate grammar"
tasks = "generateGrammarSource"
}
qodana { qodana {
name = "Qodana" name = "Qodana"
/* param("clonefinder-languages", "")
reportAsTestsEnable = "" param("collect-anonymous-statistics", "")
failBuildOnErrors = "" param("licenseaudit-enable", "")
codeInspectionXmlConfig = "Custom" param("clonefinder-languages-container", "")
codeInspectionCustomXmlConfigPath = ".idea/inspectionProfiles/Qodana.xml" param("linterVersion", "")
reportAsTestsEnable = "true" param("clonefinder-queried-project", "")
*/ param("clonefinder-enable", "")
clearConditions() param("clonefinder-reference-projects", "")
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", "")
linter = jvm { linter = jvm {
version = Qodana.JVMVersion.LATEST version = Qodana.JVMVersion.LATEST
} }
reportAsTests = true
additionalDockerArguments = "-e QODANA_TOKEN=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJvcmdhbml6YXRpb24iOiIzUFZrQSIsInByb2plY3QiOiIzN1FlQSIsInRva2VuIjoiM0t2bXoifQ.uohp81tM7iAfvvB6k8faarfpV-OjusAaEbWQ8iNrOgs"
additionalQodanaArguments = "--baseline qodana.sarif.json"
} }
} }
triggers { triggers {
vcs { vcs {
enabled = true enabled = false
branchFilter = "" branchFilter = "+:<default>"
} }
schedule { schedule {
schedulingPolicy = weekly { schedulingPolicy = daily {
dayOfWeek = ScheduleTrigger.DAY.Tuesday hour = 12
minute = 0
timezone = "SERVER"
} }
branchFilter = "" param("dayOfWeek", "Sunday")
triggerBuild = always() enabled = false
} }
} }
@ -74,11 +74,8 @@ object Qodana : BuildType({
comparison = BuildFailureOnMetric.MetricComparison.MORE comparison = BuildFailureOnMetric.MetricComparison.MORE
compareTo = value() compareTo = value()
metric = BuildFailureOnMetric.MetricType.TEST_FAILED_COUNT 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 package _Self.buildTypes
import _Self.Constants.DEV_CHANNEL import _Self.Constants.DEV_CHANNEL
import _Self.Constants.DEV_VERSION
import _Self.Constants.RELEASE_DEV 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.CheckoutMode
import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext 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.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.BuildFailureOnMetric
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.failOnMetricChange import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.failOnMetricChange
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.schedule import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.schedule
object ReleaseDev : BuildType({ object ReleaseDev : IdeaVimBuildType({
name = "Publish Dev Build" name = "Publish Dev Build"
description = "Build and publish Dev of IdeaVim plugin" description = "Build and publish Dev of IdeaVim plugin"
artifactRules = "build/distributions/*" artifactRules = "build/distributions/*"
buildNumberPattern = "$DEV_VERSION-dev.%build.counter%"
params { params {
param("env.ORG_GRADLE_PROJECT_ideaVersion", RELEASE_DEV) param("env.ORG_GRADLE_PROJECT_ideaVersion", RELEASE_DEV)
@ -25,23 +25,35 @@ object ReleaseDev : BuildType({
"credentialsJSON:61a36031-4da1-4226-a876-b8148bf32bde", "credentialsJSON:61a36031-4da1-4226-a876-b8148bf32bde",
label = "Password" 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) param("env.ORG_GRADLE_PROJECT_publishChannels", DEV_CHANNEL)
} }
vcs { vcs {
root(DslContext.settingsRoot) root(DslContext.settingsRoot)
branchFilter = "+:<default>"
checkoutMode = CheckoutMode.AUTO checkoutMode = CheckoutMode.AUTO
} }
steps { steps {
script {
name = "Pull git tags"
scriptContent = "git fetch --tags origin"
}
script {
name = "Pull git history"
scriptContent = "git fetch --unshallow"
}
gradle { gradle {
tasks = "clean publishPlugin" name = "Calculate new dev version"
buildFile = "" tasks = "scripts:calculateNewDevVersion"
enableStacktrace = true }
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL") 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 { failureConditions {
failOnMetricChange { failOnMetricChange {
metric = BuildFailureOnMetric.MetricType.ARTIFACT_SIZE metric = BuildFailureOnMetric.MetricType.ARTIFACT_SIZE

View File

@ -1,22 +1,21 @@
package _Self.buildTypes package _Self.buildTypes
import _Self.Constants.DEV_VERSION
import _Self.Constants.EAP_CHANNEL import _Self.Constants.EAP_CHANNEL
import _Self.Constants.RELEASE_EAP 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.CheckoutMode
import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext 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.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.BuildFailureOnMetric
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.failOnMetricChange import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.failOnMetricChange
object ReleaseEap : BuildType({ object ReleaseEap : IdeaVimBuildType({
name = "Publish EAP Build" name = "Publish EAP Build"
description = "Build and publish EAP of IdeaVim plugin" description = "Build and publish EAP of IdeaVim plugin"
artifactRules = "build/distributions/*" artifactRules = "build/distributions/*"
buildNumberPattern = "$DEV_VERSION-eap.%build.counter%"
params { params {
param("env.ORG_GRADLE_PROJECT_ideaVersion", RELEASE_EAP) param("env.ORG_GRADLE_PROJECT_ideaVersion", RELEASE_EAP)
@ -25,8 +24,6 @@ object ReleaseEap : BuildType({
"credentialsJSON:61a36031-4da1-4226-a876-b8148bf32bde", "credentialsJSON:61a36031-4da1-4226-a876-b8148bf32bde",
label = "Password" 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) param("env.ORG_GRADLE_PROJECT_publishChannels", EAP_CHANNEL)
password( password(
"env.ORG_GRADLE_PROJECT_slackUrl", "env.ORG_GRADLE_PROJECT_slackUrl",
@ -37,25 +34,58 @@ object ReleaseEap : BuildType({
vcs { vcs {
root(DslContext.settingsRoot) root(DslContext.settingsRoot)
branchFilter = "+:<default>"
checkoutMode = CheckoutMode.AUTO checkoutMode = CheckoutMode.AUTO
} }
steps { steps {
script {
name = "Pull git tags"
scriptContent = "git fetch --tags origin"
}
script {
name = "Pull git history"
scriptContent = "git fetch --unshallow"
}
gradle { gradle {
tasks = "clean publishPlugin" name = "Calculate new eap version"
buildFile = "" tasks = "scripts:calculateNewEapVersion"
enableStacktrace = true }
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL") 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 { features {
vcsLabeling { sshAgent {
vcsRootId = "${DslContext.settingsRoot.id}" teamcitySshKey = "IdeaVim ssh keys"
labelingPattern = "%system.build.number%"
successfulOnly = true
branchFilter = ""
} }
} }
@ -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 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.CheckoutMode
import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle 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.failureConditions.failOnMetricChange
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
sealed class ActiveTests(buildName: String, ijVersion: String) : BuildType({ open class TestingBuildType(
name = buildName 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 { params {
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false") 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") param("env.ORG_GRADLE_PROJECT_instrumentPluginCode", "false")
if (javaVersion != null) {
param("env.ORG_GRADLE_PROJECT_javaVersion", javaVersion)
}
} }
vcs { vcs {
root(DslContext.settingsRoot) root(DslContext.settingsRoot)
branchFilter = "+:$branch"
checkoutMode = CheckoutMode.AUTO checkoutMode = CheckoutMode.AUTO
} }
steps { steps {
gradle { gradle {
tasks = "clean check -x ktlintMainSourceSetCheck -x ktlintTestSourceSetCheck" tasks = "clean test"
buildFile = "" buildFile = ""
enableStacktrace = true enableStacktrace = true
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
} }
} }
triggers { triggers {
vcs { vcs {
branchFilter = "" branchFilter = "+:$branch"
} }
} }
requirements {
noLessThanVer("teamcity.agent.jvm.version", "1.8")
}
failureConditions { failureConditions {
failOnMetricChange { failOnMetricChange {
metric = BuildFailureOnMetric.MetricType.TEST_COUNT metric = BuildFailureOnMetric.MetricType.TEST_COUNT
@ -54,4 +64,9 @@ sealed class ActiveTests(buildName: String, ijVersion: String) : BuildType({
} }
}) })
object TestsForIntelliJEAP : ActiveTests("Tests for IntelliJ Latest EAP", "LATEST-EAP-SNAPSHOT") 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,57 +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_222_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")
}
vcs {
root(_Self.vcsRoots.Branch_222)
checkoutMode = CheckoutMode.AUTO
}
steps {
gradle {
tasks = "clean test"
buildFile = ""
enableStacktrace = true
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
}
}
triggers {
vcs {
branchFilter = ""
}
}
failureConditions {
failOnMetricChange {
metric = BuildFailureOnMetric.MetricType.TEST_COUNT
threshold = 20
units = BuildFailureOnMetric.MetricUnit.PERCENTS
comparison = BuildFailureOnMetric.MetricComparison.LESS
compareTo = build {
buildRule = lastSuccessful()
}
}
}
})
object TestsForIntelliJ20222 : TestsForIntelliJ_222_branch("2022.2.3")

View File

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

View File

@ -1,15 +1,41 @@
package _Self.subprojects package _Self.subprojects
import _Self.buildTypes.Release import _Self.buildTypes.PublishVimEngine
import _Self.buildTypes.ReleaseDev import _Self.buildTypes.ReleaseDev
import _Self.buildTypes.ReleaseEap 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 import jetbrains.buildServer.configs.kotlin.v2019_2.Project
object Releases : Project({ object Releases : Project({
name = "IdeaVim releases" name = "IdeaVim releases"
description = "Stable and EAP releases for IdeaVim" 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(ReleaseEap)
buildType(ReleaseDev) 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,12 +0,0 @@
@file:Suppress("ClassName")
package _Self.vcsRoots
import jetbrains.buildServer.configs.kotlin.v2019_2.vcs.GitVcsRoot
object Branch_222 : GitVcsRoot({
id("HttpsGithubComJetBrainsIdeavimBranch222")
name = "https://github.com/JetBrains/ideavim (branch 222)"
url = "https://github.com/JetBrains/ideavim.git"
branch = "222"
})

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" url = "git@github.com:JetBrains/ideavim.git"
branchSpec = "+:refs/(pull/*)/head" branchSpec = "+:refs/(pull/*)/head"
authMethod = uploadedKey { authMethod = uploadedKey {
uploadedKey = "Alex Plate TeamCity key" uploadedKey = "IdeaVim ssh keys"
} }
}) })

View File

@ -1,65 +0,0 @@
package patches.buildTypes
import jetbrains.buildServer.configs.kotlin.v2019_2.*
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.ScriptBuildStep
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.script
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 = 'IdeaVimCompatibility'
accordingly, and delete the patch script.
*/
changeBuildType(RelativeId("IdeaVimCompatibility")) {
vcs {
remove(DslContext.settingsRoot.id!!)
}
expectSteps {
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
""".trimIndent()
}
}
steps {
update<ScriptBuildStep>(0) {
name = "Load Verifier"
clearConditions()
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()
}
insert(1) {
script {
name = "Check"
scriptContent = """
# 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

@ -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,101 +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.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.VcsTrigger
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.schedule
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
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
additionalDockerArguments = "-e QODANA_TOKEN=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJvcmdhbml6YXRpb24iOiIzUFZrQSIsInByb2plY3QiOiIzN1FlQSIsInRva2VuIjoiM0t2bXoifQ.uohp81tM7iAfvvB6k8faarfpV-OjusAaEbWQ8iNrOgs"
additionalQodanaArguments = "--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", "")
}
}
triggers {
val trigger1 = find<VcsTrigger> {
vcs {
branchFilter = ""
}
}
trigger1.apply {
enabled = false
}
val trigger2 = find<ScheduleTrigger> {
schedule {
schedulingPolicy = weekly {
dayOfWeek = ScheduleTrigger.DAY.Tuesday
}
branchFilter = ""
triggerBuild = always()
}
}
trigger2.apply {
enabled = false
}
}
failureConditions {
val feature1 = find<BuildFailureOnMetric> {
failOnMetricChange {
metric = BuildFailureOnMetric.MetricType.QODANA_TOTAL_PROBLEMS_COUNT
threshold = 0
units = BuildFailureOnMetric.MetricUnit.DEFAULT_UNIT
comparison = BuildFailureOnMetric.MetricComparison.MORE
compareTo = value()
}
}
feature1.apply {
param("metricKey", "QodanaProblemsNew")
}
}
}

View File

@ -1,48 +0,0 @@
package patches.buildTypes
import jetbrains.buildServer.configs.kotlin.v2019_2.*
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.GradleBuildStep
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
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 = 'Release'
accordingly, and delete the patch script.
*/
changeBuildType(RelativeId("Release")) {
params {
add {
password("env.ORG_GRADLE_PROJECT_youtrackToken", "credentialsJSON:3cd3e867-282c-451f-b958-bc95d56a8450", display = ParameterDisplay.HIDDEN)
}
}
expectSteps {
gradle {
tasks = "clean publishPlugin slackNotification"
buildFile = ""
enableStacktrace = true
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
}
}
steps {
update<GradleBuildStep>(0) {
clearConditions()
tasks = "clean publishPlugin"
}
insert(1) {
gradle {
name = "Run Integrations"
tasks = "releaseActions"
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
}
}
insert(2) {
gradle {
name = "Slack Notification"
tasks = "slackNotification"
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
}
}
}
}

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)
}
}
}

View File

@ -1,50 +0,0 @@
package patches.projects
import jetbrains.buildServer.configs.kotlin.v2019_2.*
import jetbrains.buildServer.configs.kotlin.v2019_2.AmazonEC2CloudImage
import jetbrains.buildServer.configs.kotlin.v2019_2.Project
import jetbrains.buildServer.configs.kotlin.v2019_2.amazonEC2CloudImage
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 root project
accordingly, and delete the patch script.
*/
changeProject(DslContext.projectId) {
features {
val feature1 = find<AmazonEC2CloudImage> {
amazonEC2CloudImage {
id = "PROJECT_EXT_768"
profileId = "amazon-48"
agentPoolId = "41"
name = "BuildAgentsIdeaVim"
vpcSubnetId = "subnet-58839511"
keyPairName = ""
instanceType = "c5d.xlarge"
securityGroups = listOf("sg-eda08696", "sg-7332cf0f")
useSpotInstances = true
instanceTags = mapOf(
"project" to "idea-vim"
)
source = Source("ami-0fa17ce8238eb8868")
param("image-instances-limit", "")
param("spot-instance-price", "")
}
}
feature1.apply {
profileId = "amazon-48"
agentPoolId = "41"
name = "BuildAgentsIdeaVim"
vpcSubnetId = "subnet-58839511"
keyPairName = ""
instanceType = "c5d.xlarge"
securityGroups = listOf("sg-eda08696", "sg-7332cf0f")
useSpotInstances = true
instanceTags = mapOf(
"project" to "idea-vim"
)
source = Source("ami-07c529efaddafcf86")
}
}
}

2
.teamcity/pom.xml vendored
View File

@ -22,7 +22,7 @@
</repository> </repository>
<repository> <repository>
<id>teamcity-server</id> <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> <snapshots>
<enabled>true</enabled> <enabled>true</enabled>
</snapshots> </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 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. the 'Debug' option is available in the context menu for the task.
*/ */
version = "2020.2" version = "2023.05"
project(_Self.Project) project(_Self.Project)

View File

@ -455,6 +455,34 @@ Contributors:
[![icon][github]](https://github.com/adaext) [![icon][github]](https://github.com/adaext)
&nbsp; &nbsp;
Ada 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: Previous contributors:

View File

@ -25,6 +25,109 @@ usual beta standards.
## To Be Released ## 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: ### Features:
* Add IdeaVim tutor. You can access it via the status bar icon. * Add IdeaVim tutor. You can access it via the status bar icon.
@ -33,6 +136,7 @@ usual beta standards.
* [VIM-758](https://youtrack.jetbrains.com/issue/VIM-758) Support d 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-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-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: ### Merged PRs:
* [558](https://github.com/JetBrains/ideavim/pull/558) by [Matt Ellis](https://github.com/citizenmatt): Fix incorrect normalising for trailing inlay * [558](https://github.com/JetBrains/ideavim/pull/558) by [Matt Ellis](https://github.com/citizenmatt): Fix incorrect normalising for trailing inlay
@ -43,6 +147,9 @@ usual beta standards.
* [561](https://github.com/JetBrains/ideavim/pull/561) by [Matt Ellis](https://github.com/citizenmatt): Fix incremental search not scrolling to current match * [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 * [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 * [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 ## 2.0.0, 2022-11-01

View File

@ -32,6 +32,10 @@ OK, ready to do some coding?
Yoo hoo! Youre all set to begin contributing. Yoo hoo! Youre all set to begin contributing.
We've prepared some useful configurations for you: 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) ![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: 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. 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 2. Please avoid senseless text like "dhjkwaldjwa", "asdasdasd", "123 123 123 123", etc. Use a few lines of code or
text that is easy to read and understand what is wrong if the test fails. For example, take a few lines from your the following template:
favorite poem, or use Vladimir Nabokovs “A Discovery" if you don't have one. ```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 3. Don't forget to test your functionality with line start, line end, file start, file end, empty line, multiple
carets, dollar motion, etc. carets, dollar motion, etc.
@ -149,7 +160,7 @@ This is just terrible. [You know what to do](https://github.com/JetBrains/ideavi
### Resources: ### 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) * [Bug tracker](https://youtrack.jetbrains.com/issues/VIM)
* [Chat on gitter](https://gitter.im/JetBrains/ideavim) * [Chat on gitter](https://gitter.im/JetBrains/ideavim)
* [IdeaVim Channel](https://jb.gg/bi6zp7) on [JetBrains Server](https://discord.gg/jetbrains) * [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) * [Changelog](CHANGES.md)
* [Contributors listing](AUTHORS.md) * [Contributors listing](AUTHORS.md)
[teamcity-build-status]: https://teamcity.jetbrains.com/viewType.html?buildTypeId=IdeaVim_TestsForIntelliJEAP&guest=1 [teamcity-build-status]: https://ideavim.teamcity.com/viewType.html?buildTypeId=Ideavim_IdeaVimTests_Latest_EAP&guest=1
[teamcity-build-status-svg]: https://teamcity.jetbrains.com/app/rest/builds/buildType:(id:IdeaVim_TestsForIntelliJEAP)/statusIcon.svg?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

@ -22,9 +22,10 @@ IdeaVim is a Vim engine for JetBrains IDEs.
##### Resources: ##### 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) * [Changelog](CHANGES.md)
* [Continuous integration builds](https://teamcity.jetbrains.com/project.html?projectId=IdeaVim&guest=1) * [Continuous integration builds](https://ideavim.teamcity.com/)
#### Compatibility #### Compatibility
@ -53,7 +54,7 @@ Would you like to try new features and fixes? Join the Early Access Program and
receive EAP builds as updates! 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"/> 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: Or subscribe to EAP updates manually:
@ -203,7 +204,7 @@ Put your settings to `$XDG_CONFIG_HOME/ideavim/ideavimrc` file.
IdeaVim Plugins IdeaVim Plugins
-------------------- --------------------
See [doc/emulated-plugins.md](https://github.com/JetBrains/ideavim/wiki/IdeaVim-Plugins) See [doc/IdeaVim Plugins.md](https://github.com/JetBrains/ideavim/wiki/IdeaVim-Plugins)
Executing IDE Actions Executing IDE Actions
--------------------- ---------------------
@ -212,14 +213,14 @@ IdeaVim adds various commands for listing and executing arbitrary IDE actions as
Ex commands or via `:map` command mappings: Ex commands or via `:map` command mappings:
### Executing actions: ### 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})` * `<Action>({action_id})`
* For the mappings you can use a special `<Action>` keyword. Don't forget the parentheses. * 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`. * E.g. `map gh <Action>(ShowErrorDescription)` <- execute hover on `gh`.
* :warning: Mappings to `<Action>` don't work with `noremap`. * :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). 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: ### Finding action ids:
@ -352,9 +353,12 @@ is the source of this knowledge.
[Here](https://github.com/vim/vim/blob/759d81549c1340185f0d92524c563bb37697ea88/src/normal.c#L5365) [Here](https://github.com/vim/vim/blob/759d81549c1340185f0d92524c563bb37697ea88/src/normal.c#L5365)
is the full list of synonyms. 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). - 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: - Other [strange things](https://github.com/vim/vim/blob/759d81549c1340185f0d92524c563bb37697ea88/src/ex_docmd.c#L1845) from vi:
* ":3" jumps to line 3 * ":3" jumps to line 3
@ -363,6 +367,9 @@ is the full list of synonyms.
- Vim script doesn't skip white space before comma. `F(a ,b)` => E475. - 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 License
------- -------

View File

@ -1,7 +1,8 @@
IdeaVim project is licensed under MIT license except the following parts of it: 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 [RegExp.kt](src/main/java/com/maddyhome/idea/vim/regexp/RegExp.kt) is licensed under Vim License.
File [Tutor.kt](src/main/java/com/maddyhome/idea/vim/ui/Tutor.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 VIM LICENSE
@ -27,8 +28,8 @@ II) It is allowed to distribute a modified (or extended) version of Vim,
maintainer will do with your changes and under what license they maintainer will do with your changes and under what license they
will be distributed is negotiable. If there has been no negotiation will be distributed is negotiable. If there has been no negotiation
then this license, or a later version, also applies to your changes. then this license, or a later version, also applies to your changes.
The current maintainer is Bram Moolenaar <Bram@vim.org>. If this The current maintainers are listed here: https://github.com/orgs/vim/people.
changes it will be announced in appropriate places (most likely 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 vim.sf.net, www.vim.org and/or comp.editors). When it is completely
impossible to contact the maintainer, the obligation to send him impossible to contact the maintainer, the obligation to send him
your changes ceases. Once the maintainer has confirmed that he has your changes ceases. Once the maintainer has confirmed that he has

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,5 +1,5 @@
/* /*
* Copyright 2003-2022 The IdeaVim authors * Copyright 2003-2023 The IdeaVim authors
* *
* Use of this source code is governed by an MIT-style * Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE.txt file or at * license that can be found in the LICENSE.txt file or at
@ -31,6 +31,9 @@ import kotlinx.serialization.json.putJsonObject
import org.eclipse.jgit.api.Git import org.eclipse.jgit.api.Git
import org.eclipse.jgit.lib.RepositoryBuilder import org.eclipse.jgit.lib.RepositoryBuilder
import org.intellij.markdown.ast.getTextInNode 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.HttpURLConnection
import java.net.URL import java.net.URL
@ -41,16 +44,19 @@ buildscript {
} }
dependencies { dependencies {
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.7.20") classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.21")
classpath("com.github.AlexPl292:mark-down-to-slack:1.1.2") 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("org.kohsuke:github-api:1.305")
classpath("io.ktor:ktor-client-core:2.1.3") classpath("io.ktor:ktor-client-core:2.3.4")
classpath("io.ktor:ktor-client-cio:2.1.3") classpath("io.ktor:ktor-client-cio:2.3.4")
classpath("io.ktor:ktor-client-auth:2.1.3") classpath("io.ktor:ktor-client-auth:2.3.4")
classpath("io.ktor:ktor-client-content-negotiation:2.1.3") classpath("io.ktor:ktor-client-content-negotiation:2.3.4")
classpath("io.ktor:ktor-serialization-kotlinx-json:2.1.3") classpath("io.ktor:ktor-serialization-kotlinx-json:2.3.4")
// This comes from the changelog plugin // This comes from the changelog plugin
// classpath("org.jetbrains:markdown:0.3.1") // classpath("org.jetbrains:markdown:0.3.1")
@ -60,17 +66,31 @@ buildscript {
plugins { plugins {
antlr antlr
java java
kotlin("jvm") version "1.7.20" kotlin("jvm") version "1.8.21"
application application
id("org.jetbrains.intellij") version "1.11.1-SNAPSHOT" id("org.jetbrains.intellij") version "1.15.0"
id("org.jetbrains.changelog") version "1.3.1" id("org.jetbrains.changelog") version "2.2.0"
// ktlint linter - read more: https://github.com/JLLeitschuh/ktlint-gradle // 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("org.jetbrains.kotlinx.kover") version "0.6.1"
id("com.dorongold.task-tree") version "2.1.0" 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 // Import variables from gradle.properties file
@ -94,8 +114,8 @@ repositories {
} }
dependencies { dependencies {
compileOnly("org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlinVersion") compileOnly("org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion")
compileOnly("org.jetbrains:annotations:23.0.0") compileOnly("org.jetbrains:annotations:24.0.1")
// https://mvnrepository.com/artifact/com.ensarsarajcic.neovim.java/neovim-api // https://mvnrepository.com/artifact/com.ensarsarajcic.neovim.java/neovim-api
testImplementation("com.ensarsarajcic.neovim.java:neovim-api:0.2.3") testImplementation("com.ensarsarajcic.neovim.java:neovim-api:0.2.3")
@ -105,7 +125,7 @@ dependencies {
testImplementation("org.jetbrains.kotlin:kotlin-test:$kotlinVersion") testImplementation("org.jetbrains.kotlin:kotlin-test:$kotlinVersion")
// https://mvnrepository.com/artifact/org.mockito.kotlin/mockito-kotlin // 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-robot:$remoteRobotVersion")
testImplementation("com.intellij.remoterobot:remote-fixtures:$remoteRobotVersion") testImplementation("com.intellij.remoterobot:remote-fixtures:$remoteRobotVersion")
@ -115,7 +135,14 @@ dependencies {
api(project(":vim-engine")) 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 { configurations {
@ -132,16 +159,19 @@ tasks.register<Test>("testWithNeovim") {
exclude("/ui/**") exclude("/ui/**")
exclude("**/longrunning/**") exclude("**/longrunning/**")
exclude("**/propertybased/**") exclude("**/propertybased/**")
useJUnitPlatform()
} }
tasks.register<Test>("testPropertyBased") { tasks.register<Test>("testPropertyBased") {
group = "verification" group = "verification"
// include("**/propertybased/**") // include("**/propertybased/**")
useJUnitPlatform()
} }
tasks.register<Test>("testLongRunning") { tasks.register<Test>("testLongRunning") {
group = "verification" group = "verification"
// include("**/longrunning/**") // include("**/longrunning/**")
useJUnitPlatform()
} }
tasks { tasks {
@ -214,6 +244,7 @@ java {
} }
kotlin { kotlin {
explicitApi()
jvmToolchain { jvmToolchain {
languageVersion.set(JavaLanguageVersion.of(javaVersion)) languageVersion.set(JavaLanguageVersion.of(javaVersion))
} }
@ -238,7 +269,7 @@ intellij {
instrumentCode.set(instrumentPluginCode.toBoolean()) instrumentCode.set(instrumentPluginCode.toBoolean())
intellijRepository.set("https://www.jetbrains.com/intellij-repository") 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 // 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 { tasks {
@ -251,6 +282,12 @@ tasks {
token.set(publishToken) token.set(publishToken)
} }
signPlugin {
certificateChain.set(providers.environmentVariable("CERTIFICATE_CHAIN"))
privateKey.set(providers.environmentVariable("PRIVATE_KEY"))
password.set(providers.environmentVariable("PRIVATE_KEY_PASSWORD"))
}
runIdeForUiTests { runIdeForUiTests {
systemProperty("robot-server.port", "8082") systemProperty("robot-server.port", "8082")
systemProperty("ide.mac.message.dialogs.as.sheets", "false") systemProperty("ide.mac.message.dialogs.as.sheets", "false")
@ -284,10 +321,16 @@ tasks {
from(sourceSets.main.get().java) { from(sourceSets.main.get().java) {
include("**/com/maddyhome/idea/vim/**/*.java") include("**/com/maddyhome/idea/vim/**/*.java")
} }
from(project(":vim-engine").sourceSets.main.get().java) {
include("**/com/maddyhome/idea/vim/**/*.java")
}
// Kotlin sources // Kotlin sources
from(kotlin.sourceSets.main.get().kotlin) { from(kotlin.sourceSets.main.get().kotlin) {
include("**/com/maddyhome/idea/vim/**/*.kt") 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")) destinationDirectory.set(layout.buildDirectory.dir("libs"))
archiveClassifier.set("src") archiveClassifier.set("src")
} }
@ -297,23 +340,41 @@ tasks {
from(createOpenApiSourceJar) { into("lib/src") } from(createOpenApiSourceJar) { into("lib/src") }
} }
val pluginVersion = version
// Don't forget to update plugin.xml // Don't forget to update plugin.xml
patchPluginXml { patchPluginXml {
sinceBuild.set("223.7401.7") 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 // --- Linting
ktlint { //ktlint {
disabledRules.add("no-wildcard-imports") // version.set("0.48.2")
version.set("0.43.0") //}
}
// --- Tests // --- Tests
tasks { tasks {
test { test {
useJUnitPlatform()
exclude("**/propertybased/**") exclude("**/propertybased/**")
exclude("**/longrunning/**") exclude("**/longrunning/**")
exclude("/ui/**") exclude("/ui/**")
@ -322,6 +383,7 @@ tasks {
tasks.register<Test>("testUi") { tasks.register<Test>("testUi") {
group = "verification" group = "verification"
useJUnitPlatform()
include("/ui/**") include("/ui/**")
} }
@ -337,14 +399,6 @@ changelog {
// version = "0.60" // version = "0.60"
} }
tasks.register("getUnreleasedChangelog") {
group = "changelog"
doLast {
val log = changelog.getUnreleased().toHTML()
println(log)
}
}
// --- Kover // --- Kover
koverMerged { koverMerged {
@ -369,7 +423,8 @@ tasks.register("slackNotification") {
println("Slack Url is not defined") println("Slack Url is not defined")
return@doLast return@doLast
} }
val changeLog = changelog.getLatest().toText()
val changeLog = changelog.renderItem(changelog.getLatest(), Changelog.OutputType.PLAIN_TEXT)
val slackDown = DownParser(changeLog, true).toSlack().toString() val slackDown = DownParser(changeLog, true).toSlack().toString()
//language=JSON //language=JSON
@ -468,7 +523,7 @@ tasks.register("releaseActions") {
if (tickets.isNotEmpty()) { if (tickets.isNotEmpty()) {
println("Updating statuses for tickets: $tickets") println("Updating statuses for tickets: $tickets")
setYoutrackStatus(tickets, "Fixed") setYoutrackStatus(tickets, "Fixed")
if (!checkReleaseVersionExists(version.toString())) { if (getVersionIdByName(version.toString()) != null) {
addReleaseToYoutrack(version.toString()) addReleaseToYoutrack(version.toString())
} else { } else {
println("Version $version is already exists in YouTrack") println("Version $version is already exists in YouTrack")
@ -502,14 +557,17 @@ tasks.register("integrationsTest") {
setYoutrackStatus(listOf(testTicketId), prevStatus) setYoutrackStatus(listOf(testTicketId), prevStatus)
// Check adding and removing release // Check adding and removing release
guard(!checkReleaseVersionExists("TEST_VERSION")) { "Test version already exists" } val existingVersionId = getVersionIdByName("TEST_VERSION")
if (existingVersionId != null) {
deleteVersionById(existingVersionId)
}
val versionId = addReleaseToYoutrack("TEST_VERSION") val versionId = addReleaseToYoutrack("TEST_VERSION")
guard(checkReleaseVersionExists("TEST_VERSION")) { "Test version isn't created" } guard(getVersionIdByName("TEST_VERSION") != null) { "Test version isn't created" }
setYoutrackStatus(listOf(testTicketId), "Fixed") setYoutrackStatus(listOf(testTicketId), "Fixed")
setYoutrackFixVersion(listOf(testTicketId), "TEST_VERSION") setYoutrackFixVersion(listOf(testTicketId), "TEST_VERSION")
deleteVersionById(versionId) deleteVersionById(versionId)
setYoutrackStatus(listOf(testTicketId), "Open") setYoutrackStatus(listOf(testTicketId), "Open")
guard(!checkReleaseVersionExists("TEST_VERSION")) { "Test version isn't deleted" } guard(getVersionIdByName("TEST_VERSION") == null) { "Test version isn't deleted" }
updateMergedPr(525) updateMergedPr(525)
// TODO: test Ticket parsing // TODO: test Ticket parsing
@ -560,12 +618,12 @@ fun addReleaseToYoutrack(name: String): String {
} }
} }
fun checkReleaseVersionExists(name: String): Boolean { fun getVersionIdByName(name: String): String? {
val client = httpClient() val client = httpClient()
return runBlocking { return runBlocking {
val response = client.get("https://youtrack.jetbrains.com/api/admin/projects/$vimProjectId/customFields/$fixVersionsFieldId/bundle/values?fields=id,name&query=$name") val response = client.get("https://youtrack.jetbrains.com/api/admin/projects/$vimProjectId/customFields/$fixVersionsFieldId/bundle/values?fields=id,name&query=$name")
response.body<JsonArray>().isNotEmpty() response.body<JsonArray>().singleOrNull()?.jsonObject?.get("id")?.jsonPrimitive?.content
} }
} }
@ -739,7 +797,15 @@ fun updateAuthors(uncheckedEmails: Set<String>) {
println("Email '$email' is from dependabot. Skip it") println("Email '$email' is from dependabot. Skip it")
continue 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 htmlUrl = user.htmlUrl.toString()
val name = user.name ?: user.login val name = user.name ?: user.login
users.add(Author(name, htmlUrl, email)) users.add(Author(name, htmlUrl, email))
@ -757,7 +823,7 @@ fun updateAuthors(uncheckedEmails: Set<String>) {
for (child in contributorsSection.children) { for (child in contributorsSection.children) {
if (child.children.size > 1) { if (child.children.size > 1) {
existingEmails.add( 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(),
) )
} }
} }
@ -902,7 +968,7 @@ fun changes(): List<Change> {
val newFixes = mutableListOf<Change>() val newFixes = mutableListOf<Change>()
println("Last successful commit: $lastSuccessfulCommit") println("Last successful commit: $lastSuccessfulCommit")
println("Amount of commits: ${messages.size}") println("Amount of commits: ${messages.size}")
println("Start emails processing") println("Start changes processing")
for (message in messages) { for (message in messages) {
println("Processing '$message'...") println("Processing '$message'...")
val lowercaseMessage = message.toLowerCase() val lowercaseMessage = message.toLowerCase()
@ -936,7 +1002,7 @@ fun httpClient(): HttpClient {
Json { Json {
prettyPrint = true prettyPrint = true
isLenient = 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,7 +1,7 @@
IdeaVim Plugins IdeaVim Plugins
-------------------- --------------------
IdeaVim plugins work like the original Vim plugins. If you want to turn of any of them, you have to enable it via this command in your `~/.ideavimrc`: 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>' Plug '<plugin-github-reference>'
@ -388,7 +388,7 @@ https://github.com/adelarsq/vim-matchit/blob/master/doc/matchit.txt
Original plugin: [quick-scope](https://github.com/unblevable/quick-scope). Original plugin: [quick-scope](https://github.com/unblevable/quick-scope).
### Setup: ### Setup:
- Install [IdeaVim-sneak](https://plugins.jetbrains.com/plugin/15348-ideavim-sneak) plugin. - Install [IdeaVim-Quickscope](https://plugins.jetbrains.com/plugin/19417-ideavim-quickscope) plugin.
- Add the following command to `~/.ideavimrc`: `set quickscope` - Add the following command to `~/.ideavimrc`: `set quickscope`
### Instructions ### Instructions

View File

@ -2,7 +2,7 @@
IdeaVim supports the NERDTree plugin. Update your `~/.ideavimrc` to turn it on: IdeaVim supports the NERDTree plugin. Update your `~/.ideavimrc` to turn it on:
```vim ```vim
Plug 'preservim/nerdtree` Plug 'preservim/nerdtree'
``` ```
or or
```vim ```vim
@ -15,7 +15,7 @@ Use `set noNERDTree` to disable this extension.
```vim ```vim
set NERDTree set NERDTree
Plug 'preservim/nerdtree` Plug 'preservim/nerdtree'
Plug 'https://github.com/preservim/nerdtree' Plug 'https://github.com/preservim/nerdtree'
Plug 'https://github.com/scrooloose/nerdtree' Plug 'https://github.com/scrooloose/nerdtree'
Plug '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,5 +1,5 @@
# #
# Copyright 2003-2022 The IdeaVim authors # Copyright 2003-2023 The IdeaVim authors
# #
# Use of this source code is governed by an MIT-style # Use of this source code is governed by an MIT-style
# license that can be found in the LICENSE.txt file or at # license that can be found in the LICENSE.txt file or at
@ -8,17 +8,16 @@
# suppress inspection "UnusedProperty" for whole file # suppress inspection "UnusedProperty" for whole file
ideaVersion=LATEST-EAP-SNAPSHOT ideaVersion=2023.2.1
downloadIdeaSources=true downloadIdeaSources=true
instrumentPluginCode=true instrumentPluginCode=true
version=SNAPSHOT version=chylex-16
javaVersion=17 javaVersion=17
remoteRobotVersion=0.11.15 remoteRobotVersion=0.11.17
antlrVersion=4.10.1 antlrVersion=4.10.1
# Please don't forget to update kotlin version in buildscript section # Please don't forget to update kotlin version in buildscript section
kotlinVersion=1.7.20 kotlinVersion=1.8.21
publishToken=token publishToken=token
publishChannels=eap publishChannels=eap
@ -30,3 +29,6 @@ org.gradle.jvmargs='-Dfile.encoding=UTF-8'
# Disable warning from gradle-intellij-plugin. Kotlin stdlib is included as compileOnly, so the warning is unnecessary # Disable warning from gradle-intellij-plugin. Kotlin stdlib is included as compileOnly, so the warning is unnecessary
kotlin.stdlib.default.dependency=false 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 distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists 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 zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists

25
gradlew vendored
View File

@ -55,7 +55,7 @@
# Darwin, MinGW, and NonStop. # Darwin, MinGW, and NonStop.
# #
# (3) This script is generated from the Groovy template # (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. # within the Gradle project.
# #
# You can find Gradle at https://github.com/gradle/gradle/. # You can find Gradle at https://github.com/gradle/gradle/.
@ -80,13 +80,10 @@ do
esac esac
done done
APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit # This is normally unused
# shellcheck disable=SC2034
APP_NAME="Gradle"
APP_BASE_NAME=${0##*/} APP_BASE_NAME=${0##*/}
APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
# 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"'
# Use the maximum available, or set MAX_FD != -1 to use that value. # Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum MAX_FD=maximum
@ -143,12 +140,16 @@ fi
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
case $MAX_FD in #( case $MAX_FD in #(
max*) 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 ) || MAX_FD=$( ulimit -H -n ) ||
warn "Could not query maximum file descriptor limit" warn "Could not query maximum file descriptor limit"
esac esac
case $MAX_FD in #( case $MAX_FD in #(
'' | soft) :;; #( '' | 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" || ulimit -n "$MAX_FD" ||
warn "Could not set maximum file descriptor limit to $MAX_FD" warn "Could not set maximum file descriptor limit to $MAX_FD"
esac esac
@ -193,6 +194,10 @@ if "$cygwin" || "$msys" ; then
done done
fi 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; # Collect all arguments for the java command;
# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of # * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
# shell script including quotes and variable substitutions, so put them in # shell script including quotes and variable substitutions, so put them in
@ -205,6 +210,12 @@ set -- \
org.gradle.wrapper.GradleWrapperMain \ 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. # Use "xargs" to parse quoted args.
# #
# With -n1 it outputs one arg per line, with the quotes and backslashes removed. # 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 limitations under the License.
@rem @rem
@if "%DEBUG%" == "" @echo off @if "%DEBUG%"=="" @echo off
@rem ########################################################################## @rem ##########################################################################
@rem @rem
@rem Gradle startup script for Windows @rem Gradle startup script for Windows
@ -25,7 +25,8 @@
if "%OS%"=="Windows_NT" setlocal if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0 set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=. if "%DIRNAME%"=="" set DIRNAME=.
@rem This is normally unused
set APP_BASE_NAME=%~n0 set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME% set APP_HOME=%DIRNAME%
@ -40,7 +41,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1 %JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto execute if %ERRORLEVEL% equ 0 goto execute
echo. echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 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 :end
@rem End local scope for the variables with windows NT shell @rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd if %ERRORLEVEL% equ 0 goto mainEnd
:fail :fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code! rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 set EXIT_CODE=%ERRORLEVEL%
exit /b 1 if %EXIT_CODE% equ 0 set EXIT_CODE=1
if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
exit /b %EXIT_CODE%
:mainEnd :mainEnd
if "%OS%"=="Windows_NT" endlocal if "%OS%"=="Windows_NT" endlocal

File diff suppressed because one or more lines are too long

View File

@ -1,5 +1,5 @@
/* /*
* Copyright 2003-2022 The IdeaVim authors * Copyright 2003-2023 The IdeaVim authors
* *
* Use of this source code is governed by an MIT-style * Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE.txt file or at * license that can be found in the LICENSE.txt file or at
@ -20,14 +20,22 @@ repositories {
} }
dependencies { dependencies {
compileOnly("org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.7.20") compileOnly("org.jetbrains.kotlin:kotlin-stdlib:1.9.10")
implementation("io.ktor:ktor-client-core:2.1.3") implementation("io.ktor:ktor-client-core:2.3.4")
implementation("io.ktor:ktor-client-cio:2.1.3") implementation("io.ktor:ktor-client-cio:2.3.4")
implementation("io.ktor:ktor-client-content-negotiation:2.1.3") implementation("io.ktor:ktor-client-content-negotiation:2.3.4")
implementation("io.ktor:ktor-serialization-kotlinx-json:2.1.3") 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 { tasks {
compileKotlin { compileKotlin {
kotlinOptions { kotlinOptions {
@ -49,3 +57,85 @@ tasks.register("checkNewPluginDependencies", JavaExec::class) {
mainClass.set("scripts.CheckNewPluginDependenciesKt") mainClass.set("scripts.CheckNewPluginDependenciesKt")
classpath = sourceSets["main"].runtimeClasspath 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

@ -1,5 +1,5 @@
/* /*
* Copyright 2003-2022 The IdeaVim authors * Copyright 2003-2023 The IdeaVim authors
* *
* Use of this source code is governed by an MIT-style * Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE.txt file or at * license that can be found in the LICENSE.txt file or at

View File

@ -1,5 +1,5 @@
/* /*
* Copyright 2003-2022 The IdeaVim authors * Copyright 2003-2023 The IdeaVim authors
* *
* Use of this source code is governed by an MIT-style * Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE.txt file or at * license that can be found in the LICENSE.txt file or at
@ -8,22 +8,20 @@
package scripts package scripts
import io.ktor.client.*
import io.ktor.client.call.* import io.ktor.client.call.*
import io.ktor.client.engine.cio.*
import io.ktor.client.plugins.contentnegotiation.*
import io.ktor.client.request.* import io.ktor.client.request.*
import io.ktor.serialization.kotlinx.json.* import kotlinx.serialization.json.JsonObject
import kotlinx.coroutines.runBlocking import kotlinx.serialization.json.jsonPrimitive
/** /**
* Marketplace has a API to get all plugins that depend on our plugin. * 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. * 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. * 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. * 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( val knownPlugins = listOf(
"IdeaVimExtension", "IdeaVimExtension",
"github.zgqq.intellij-enhance", "github.zgqq.intellij-enhance",
@ -33,22 +31,36 @@ val knownPlugins = listOf(
"com.github.copilot", "com.github.copilot",
"com.github.dankinsoid.multicursor", "com.github.dankinsoid.multicursor",
"com.joshestein.ideavim-quickscope", "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
) )
fun main() { suspend fun main() {
val client = HttpClient(CIO) { val response = client.get("https://plugins.jetbrains.com/api/plugins/") {
install(ContentNegotiation) {
json()
}
}
runBlocking {
val res = client.get("https://plugins.jetbrains.com/api/plugins/") {
parameter("dependency", "IdeaVIM") parameter("dependency", "IdeaVIM")
parameter("includeOptional", true) parameter("includeOptional", true)
} }
val output = res.body<List<String>>() val output = response.body<List<String>>()
println(output) println(output)
if (knownPlugins != output) error("Unknown plugins list: ${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']")
}
}

View File

@ -0,0 +1,34 @@
/*
* 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, _) = getVersion(projectDir, onlyStable = false)
val nextVersion = if (lastVersion.suffixTokens.isEmpty()) {
lastVersion.nextMinor().withSuffix("eap.1").value
}
else {
check(lastVersion.suffixTokens.size == 2) {
"We should have exactly two suffix tokens. Current tokens: ${lastVersion.suffixTokens.toList()}"
}
check(lastVersion.suffixTokens[0] == "eap") {
"First suffix token must be eap. Current tokens: ${lastVersion.suffixTokens.toList()}"
}
val newEapNumber = lastVersion.suffixTokens[1].toInt().inc()
lastVersion.withSuffix("eap.$newEapNumber").value
}
println("Next eap version: $nextVersion")
println("##teamcity[setParameter name='env.ORG_GRADLE_PROJECT_version' value='$nextVersion']")
}

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>) {
println("HI!")
val projectDir = args[0]
val releaseType = args[1]
println("Working directory: $projectDir")
println("Release type: $releaseType")
val (lastVersion, _) = getVersion(projectDir, onlyStable = true)
val nextVersion = when (releaseType) {
"major" -> lastVersion.nextMajor()
"minor" -> lastVersion.nextMinor()
"patch" -> lastVersion.nextPatch()
else -> error("Only major, minor, and patch versions are supported. Got '$releaseType'")
}
println("Next $releaseType version: $nextVersion")
println("##teamcity[setParameter name='env.ORG_GRADLE_PROJECT_version' value='$nextVersion']")
}

View File

@ -0,0 +1,35 @@
/*
* 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
import java.time.LocalDate
import java.time.format.DateTimeFormatter
import kotlin.io.path.Path
import kotlin.io.path.readText
import kotlin.io.path.writeText
fun main(args: Array<String>) {
println("Start updating unreleased section")
val (newVersion, rootDir, releaseType) = readArgs(args)
checkReleaseType(releaseType)
if (releaseType == "patch") {
println("Skip updating the changelog because release type is 'patch'")
return
}
val currentDate = LocalDate.now().format(DateTimeFormatter.ISO_LOCAL_DATE)
val newItem = "## $newVersion, $currentDate"
val changelogPath = Path("$rootDir/CHANGES.md")
val changelog = changelogPath.readText()
val newChangelog = changelog.replace("## To Be Released", newItem)
changelogPath.writeText(newChangelog)
}

View File

@ -0,0 +1,33 @@
/*
* 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, releaseType) = readArgs(args)
checkReleaseType(releaseType)
if (releaseType == "patch") {
println("Skip committing changes because release type is 'patch'")
return
}
withGit(rootDir) { git ->
git
.commit()
.setAll(true)
.setAuthor("IdeaVim Bot", "maintainers@ideavim.dev")
.setMessage("Preparation to $newVersion release")
.setSign(false)
.call()
val lastGitMessage = git.log().call().first().shortMessage
println("Changes committed. Last gitlog message: $lastGitMessage")
}
}

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