mirror of
https://github.com/chylex/IntelliJ-IdeaVim.git
synced 2025-08-17 16:31:45 +02:00
Compare commits
1017 Commits
customized
...
customized
Author | SHA1 | Date | |
---|---|---|---|
8bcb0d116d
|
|||
d9ae9fa40d
|
|||
c19f88e5c0
|
|||
03f4fb288d
|
|||
ef27579277
|
|||
a8a822b58e
|
|||
9752bd5bbb
|
|||
240d9e0be4
|
|||
328442544d
|
|||
![]() |
7d4981639a | ||
![]() |
967538767a | ||
![]() |
4731eb9db8 | ||
![]() |
337f5ade59 | ||
![]() |
fe8bbcb11a | ||
![]() |
b1b6b0bf80 | ||
![]() |
1c28c138e0 | ||
![]() |
cb73111779 | ||
![]() |
6250678f61 | ||
![]() |
1821f01ef1 | ||
![]() |
350f084156 | ||
![]() |
a6c2babafb | ||
![]() |
f566aed1fe | ||
![]() |
10fb54224c | ||
![]() |
585b815472 | ||
![]() |
c37e2f4176 | ||
![]() |
626d59d3fc | ||
![]() |
ddd058a26f | ||
![]() |
32b8d03c5e | ||
![]() |
71f3e1b4f1 | ||
![]() |
aa6f53fa68 | ||
![]() |
1335e9f7f2 | ||
![]() |
c75599b6a0 | ||
![]() |
2efdfbd988 | ||
![]() |
700198d8bc | ||
![]() |
3efab5928e | ||
![]() |
93037b6866 | ||
![]() |
0f19e50c69 | ||
![]() |
66ea6ad3d4 | ||
![]() |
b6dc1f0e61 | ||
![]() |
0c1dc51db4 | ||
![]() |
74a710c5e8 | ||
![]() |
c4a773e72d | ||
![]() |
ad43fc37ab | ||
![]() |
8011c048a2 | ||
![]() |
c4ee9987bf | ||
![]() |
f70decddd1 | ||
![]() |
79a0aea065 | ||
![]() |
fe87e86721 | ||
![]() |
456055bcf0 | ||
![]() |
5ebe290424 | ||
![]() |
4532d68743 | ||
![]() |
1903e18397 | ||
![]() |
a705bf7053 | ||
![]() |
26e9bf5197 | ||
![]() |
64007b3634 | ||
![]() |
80f099220c | ||
![]() |
08615f2295 | ||
![]() |
5c02bb4f91 | ||
![]() |
ad6aee55f9 | ||
![]() |
aac4fd8e5e | ||
![]() |
c013ae7dab | ||
![]() |
57ab4b0849 | ||
![]() |
24a762504f | ||
![]() |
838bcc07a4 | ||
![]() |
0f0c996b54 | ||
![]() |
b1ad67a354 | ||
![]() |
c7a64c0c7c | ||
![]() |
5da87dbe0a | ||
![]() |
38e1a62f19 | ||
![]() |
5174a26719 | ||
![]() |
98886cb269 | ||
![]() |
e7a8b45c10 | ||
![]() |
2e0ec73d77 | ||
![]() |
b8b324cdf3 | ||
![]() |
12600d8404 | ||
![]() |
d9dfdb7e68 | ||
![]() |
07f8b2c47b | ||
![]() |
b9c4ae2fbb | ||
![]() |
2b2d78edc0 | ||
![]() |
2ad78c722a | ||
![]() |
99771babba | ||
![]() |
1b0ba48b9d | ||
![]() |
95cf32c70a | ||
![]() |
14469d1a2e | ||
![]() |
336f1c3b80 | ||
![]() |
055fd4379a | ||
![]() |
f6b5cfe1d4 | ||
![]() |
df744fe48b | ||
![]() |
9f10a4a0b7 | ||
![]() |
22ca74a1a3 | ||
![]() |
3093c9212c | ||
![]() |
6b8a4e6e63 | ||
![]() |
d256870953 | ||
![]() |
8fd8cceadb | ||
![]() |
402b532311 | ||
![]() |
8e85d35d8f | ||
![]() |
6b6794a367 | ||
![]() |
14a726b5af | ||
![]() |
3e937d234b | ||
![]() |
bf6a8a713b | ||
![]() |
b8c5e7aaba | ||
![]() |
068d610e3a | ||
![]() |
41177b91be | ||
![]() |
c2ebacdfb3 | ||
![]() |
5d4996c085 | ||
![]() |
dbafbbf66d | ||
![]() |
a46200ca17 | ||
![]() |
1fe64e69ca | ||
![]() |
a017ec9bfd | ||
![]() |
cb8385a092 | ||
![]() |
d4aa1f87e0 | ||
![]() |
41df06a48b | ||
![]() |
4188e636f3 | ||
![]() |
e2c0d59e3a | ||
![]() |
6a8c210a23 | ||
![]() |
a62cc3618c | ||
![]() |
a703afbef9 | ||
![]() |
5ce8445d5c | ||
![]() |
d112030a8e | ||
![]() |
98ca4080dd | ||
![]() |
3b9c63e781 | ||
![]() |
dd24ebf184 | ||
![]() |
7ef2be625f | ||
![]() |
e3957d2207 | ||
![]() |
8ce1307d51 | ||
![]() |
e1141dcd1c | ||
![]() |
4e33b5f351 | ||
![]() |
54dc184dd0 | ||
![]() |
1977ce3ea5 | ||
![]() |
c8c9d1729e | ||
![]() |
e6e4b81f3b | ||
![]() |
1c465f028e | ||
![]() |
12824c22c4 | ||
![]() |
64c5ad72a3 | ||
![]() |
080c2059ee | ||
![]() |
a288850010 | ||
![]() |
16811602d2 | ||
![]() |
6d94d719e3 | ||
![]() |
749d111e89 | ||
![]() |
365d8d34ce | ||
![]() |
ced25bbf28 | ||
![]() |
7e1ce5a203 | ||
![]() |
aeec754f7e | ||
![]() |
9a3fcb56a1 | ||
![]() |
aff956f4c8 | ||
![]() |
0f49fd6406 | ||
![]() |
1111770033 | ||
![]() |
6d313fc456 | ||
![]() |
0201acb5f7 | ||
![]() |
dfbefe96da | ||
![]() |
a71b35097f | ||
![]() |
acd0cf5245 | ||
![]() |
393b9b2f3d | ||
![]() |
f66bad1810 | ||
![]() |
386a81454b | ||
![]() |
deb2b7a36f | ||
![]() |
a3901c7b1c | ||
![]() |
631ee109f5 | ||
![]() |
25570e2135 | ||
![]() |
6d70044b15 | ||
![]() |
b064f94172 | ||
![]() |
721124e8c5 | ||
![]() |
85333e03a4 | ||
![]() |
bef928a20c | ||
![]() |
6967416207 | ||
![]() |
e968b3f26b | ||
![]() |
be6d8e23c8 | ||
![]() |
397effacd4 | ||
![]() |
a35738d99b | ||
![]() |
03aafdeae2 | ||
![]() |
f5529b6cce | ||
![]() |
0bd39c2826 | ||
![]() |
d335745010 | ||
![]() |
0d59843f40 | ||
![]() |
011d0a15a9 | ||
![]() |
c72b968f9b | ||
![]() |
4e7cef9402 | ||
![]() |
1868d5a202 | ||
![]() |
423fcfbda3 | ||
![]() |
be5d17457f | ||
![]() |
5033b0332e | ||
![]() |
a1cf4cc46d | ||
![]() |
838f494a85 | ||
![]() |
d55f5b1e39 | ||
![]() |
c98768dd52 | ||
![]() |
0058f81e76 | ||
![]() |
b79c384c3f | ||
![]() |
a11dae821e | ||
![]() |
b08deb518c | ||
![]() |
7ad0a8c400 | ||
![]() |
4bb33ec101 | ||
![]() |
856baec94d | ||
![]() |
09600db5f2 | ||
![]() |
810a1e252d | ||
![]() |
10b3fcdfcc | ||
![]() |
652e6eb9e8 | ||
![]() |
eea2b5f6fb | ||
![]() |
b4eb0df689 | ||
![]() |
2b26c6a5b6 | ||
![]() |
79e2134ca8 | ||
![]() |
6efa30152f | ||
![]() |
781fb476e7 | ||
![]() |
f2ed4eba3b | ||
![]() |
d2b1cd511d | ||
![]() |
1c9df39afe | ||
![]() |
f124f45604 | ||
![]() |
d3660892ae | ||
![]() |
78ea4e4e30 | ||
![]() |
5ab985a7cc | ||
![]() |
6bd1782c4b | ||
![]() |
2f5d402c61 | ||
![]() |
8fb2ea5845 | ||
![]() |
a78e21a167 | ||
![]() |
2e9b626523 | ||
![]() |
4487b8904c | ||
![]() |
1f01f915dc | ||
![]() |
4222c71a69 | ||
![]() |
1d463cde90 | ||
![]() |
834d1476ce | ||
![]() |
a769a8d1a4 | ||
![]() |
ece8c3821d | ||
![]() |
2bc0c4c41b | ||
![]() |
9e203898b6 | ||
![]() |
58ad8417e5 | ||
![]() |
9c00927089 | ||
![]() |
7c6964c6ef | ||
![]() |
31a5104205 | ||
![]() |
7bcf3858e8 | ||
![]() |
fb3eb0da8a | ||
![]() |
0e6d92dea7 | ||
![]() |
c00ffe7fc3 | ||
![]() |
02b3f8bf02 | ||
![]() |
fe7afb0141 | ||
![]() |
1ec810b981 | ||
![]() |
3a2187ebad | ||
![]() |
fef6a1b090 | ||
![]() |
2f5b39af54 | ||
![]() |
d3f942aebc | ||
![]() |
5df0db8845 | ||
![]() |
28887c1da2 | ||
![]() |
7053a225b8 | ||
![]() |
54422801c3 | ||
![]() |
56c464ba79 | ||
![]() |
2582f1e907 | ||
![]() |
13139966ea | ||
![]() |
011bb78f69 | ||
![]() |
2446ed20a6 | ||
![]() |
c376feb4d8 | ||
![]() |
fa0bcfa37a | ||
![]() |
6b70b11ffc | ||
![]() |
e474075778 | ||
![]() |
1205bb67f2 | ||
![]() |
10bcd20cd8 | ||
![]() |
3a2e6e018d | ||
![]() |
1b1680f7b0 | ||
![]() |
6cc52570ac | ||
![]() |
6425791ed9 | ||
![]() |
4c7a720447 | ||
![]() |
23ac9f3faf | ||
![]() |
0192009482 | ||
![]() |
2468c359a4 | ||
![]() |
ae1ad9fd2e | ||
![]() |
3596748059 | ||
![]() |
407806e84c | ||
![]() |
b83909da9c | ||
![]() |
dd490967d3 | ||
![]() |
391202877a | ||
![]() |
c48acd8fb7 | ||
![]() |
c8428258fe | ||
![]() |
fc4feaa78c | ||
![]() |
1855f3b43f | ||
![]() |
50b848027c | ||
![]() |
7b71af9e1d | ||
![]() |
4814f0c895 | ||
![]() |
192307ad52 | ||
![]() |
e28c57432d | ||
![]() |
911915266a | ||
![]() |
51c464f8d2 | ||
![]() |
30069564a7 | ||
![]() |
460553d8ae | ||
![]() |
cc2de42415 | ||
![]() |
b31aa57d81 | ||
![]() |
c9b9bb6cf8 | ||
![]() |
89e74b2011 | ||
![]() |
434d882314 | ||
![]() |
617d9d90ed | ||
![]() |
f456e0a8dd | ||
![]() |
2716255e22 | ||
![]() |
4d907213c3 | ||
![]() |
ee704f53c7 | ||
![]() |
74237365f1 | ||
![]() |
8aeab29303 | ||
![]() |
ff945e7b8a | ||
![]() |
9707704f57 | ||
![]() |
7491d19309 | ||
![]() |
fb74e5e731 | ||
![]() |
627c8a6eca | ||
![]() |
8094758a82 | ||
![]() |
f143b6ee9f | ||
![]() |
77cef909fb | ||
![]() |
063d3949cf | ||
![]() |
c1b87eba03 | ||
![]() |
bae52964cd | ||
![]() |
06021c1b79 | ||
![]() |
437932cd57 | ||
![]() |
6cc16aa72b | ||
![]() |
b48950ff3a | ||
![]() |
c397c77809 | ||
![]() |
e8f31bc2bd | ||
![]() |
4e7149c945 | ||
![]() |
064379b9e0 | ||
![]() |
48b18da953 | ||
![]() |
904ca5d529 | ||
![]() |
05986d017d | ||
![]() |
aabe56e8b3 | ||
![]() |
fc07ec3db3 | ||
![]() |
2e8454907d | ||
![]() |
72ed659833 | ||
![]() |
94ef9692f2 | ||
![]() |
798750bf95 | ||
![]() |
e8d9bd551f | ||
![]() |
d08ea2ee9b | ||
![]() |
52dcb2d290 | ||
![]() |
4cc883f174 | ||
![]() |
5a3c5bd761 | ||
![]() |
66830b7cb3 | ||
![]() |
b742865e8a | ||
![]() |
fd314a3288 | ||
![]() |
87a52d9592 | ||
![]() |
527b321ee0 | ||
![]() |
5122a33f30 | ||
![]() |
d89fbeea62 | ||
![]() |
e4f7700044 | ||
![]() |
a1d0c3ebf4 | ||
![]() |
2088c1ce00 | ||
![]() |
ec164daf0e | ||
![]() |
94c38cefac | ||
![]() |
2a5d218a94 | ||
![]() |
bcf10a0b8e | ||
![]() |
546137c0f5 | ||
![]() |
92bc691e1f | ||
![]() |
d834d0fdd9 | ||
![]() |
74b88d07a0 | ||
![]() |
57f5d3310a | ||
![]() |
a5495b1d92 | ||
![]() |
fb623be741 | ||
![]() |
30e69e13fd | ||
![]() |
17346c255e | ||
![]() |
6fc83b8245 | ||
![]() |
b9fb6cacbe | ||
![]() |
29bd7cbe6e | ||
![]() |
a51fc9c612 | ||
![]() |
77ad9deeba | ||
![]() |
ffa6c45b62 | ||
![]() |
957874ce2b | ||
![]() |
330d92116c | ||
![]() |
899adfc1b0 | ||
![]() |
23535a6ad5 | ||
![]() |
e8b7f00370 | ||
![]() |
3f2c5070ee | ||
![]() |
a2352525c5 | ||
![]() |
50384a526b | ||
![]() |
9ade3365ff | ||
![]() |
a6932cd5be | ||
![]() |
81d5c06ca3 | ||
![]() |
95d2adb8b8 | ||
![]() |
c91355a1e4 | ||
![]() |
a9b16ca2c0 | ||
![]() |
0fc04c3ff6 | ||
![]() |
6473ad02a0 | ||
![]() |
8107f669cd | ||
![]() |
2f55d92d83 | ||
![]() |
722ec7f8fb | ||
![]() |
63442a93e7 | ||
![]() |
1ce594fa64 | ||
![]() |
197b8d7850 | ||
![]() |
d51aec080b | ||
![]() |
0239f78889 | ||
![]() |
651cefca30 | ||
![]() |
f4be162aea | ||
![]() |
85636d91dc | ||
![]() |
7b643430d1 | ||
![]() |
499033947c | ||
![]() |
7489abc56d | ||
![]() |
c64810509f | ||
![]() |
32ccaabaa7 | ||
![]() |
a8f0145333 | ||
![]() |
6e6fc8d998 | ||
![]() |
646e34a5c7 | ||
![]() |
8d43329b6e | ||
![]() |
38aca96472 | ||
![]() |
4cd06076c7 | ||
![]() |
b485a1406e | ||
![]() |
cc0aa08d91 | ||
![]() |
4dd958a538 | ||
![]() |
83d2d1da4f | ||
![]() |
24e69bec2b | ||
![]() |
ca337dcca2 | ||
![]() |
2944c48744 | ||
![]() |
278e7d1a4d | ||
![]() |
22e090a0f4 | ||
![]() |
ac918eff16 | ||
![]() |
e8aaeac7dc | ||
![]() |
1769c1006c | ||
![]() |
920a6fe74c | ||
![]() |
bc41ce46a7 | ||
![]() |
8c2b5671f1 | ||
![]() |
d0d53d7d20 | ||
![]() |
902272f08c | ||
![]() |
a8b8b56a7e | ||
![]() |
d628db1dcc | ||
![]() |
26ed6670d5 | ||
![]() |
0aa4ea7bc8 | ||
![]() |
34fdd71f37 | ||
![]() |
4a134783b4 | ||
![]() |
bf5ce1f6a5 | ||
![]() |
00193891fa | ||
![]() |
4640c347c7 | ||
![]() |
260bb47434 | ||
![]() |
9d7872e64e | ||
![]() |
31bdc23b3c | ||
![]() |
f803c0aa72 | ||
![]() |
531b0e3537 | ||
![]() |
cbf6c30be6 | ||
![]() |
a6f62dd837 | ||
![]() |
18d52c2459 | ||
![]() |
ee55cfd2dd | ||
![]() |
3ab5fc1120 | ||
![]() |
f7f60f5079 | ||
![]() |
b7dcff79ae | ||
![]() |
c857b9d6dd | ||
![]() |
8f8c05e451 | ||
![]() |
af3ebe60f4 | ||
![]() |
be64d24c00 | ||
![]() |
8f04575efd | ||
![]() |
4e1b8f3ec4 | ||
![]() |
c8ca6671ab | ||
![]() |
88f0d2e532 | ||
![]() |
76a4499c9f | ||
![]() |
e1bd790294 | ||
![]() |
6d193ca1f8 | ||
![]() |
d932172e70 | ||
![]() |
9bbf5824fe | ||
![]() |
d042ee3058 | ||
![]() |
fe598b14a1 | ||
![]() |
24df3be8f1 | ||
![]() |
2cce67bc27 | ||
![]() |
ae6003d000 | ||
![]() |
fe8b03dc1c | ||
![]() |
977b27de90 | ||
![]() |
570cf14fe8 | ||
![]() |
7c369900ce | ||
![]() |
8464711b89 | ||
![]() |
0f07e4bdc3 | ||
![]() |
de7736ec76 | ||
![]() |
4568db387a | ||
![]() |
3661cfd4c9 | ||
![]() |
f9ac515d3d | ||
![]() |
b7f1394357 | ||
![]() |
25872ccf84 | ||
![]() |
0efd81142d | ||
![]() |
1699e8521d | ||
![]() |
f4068301ff | ||
![]() |
2a6b6f89f4 | ||
![]() |
ca459bef0d | ||
![]() |
9980ef7db9 | ||
![]() |
d6b2cdb66a | ||
![]() |
832c1c0be3 | ||
![]() |
bf0fba9c58 | ||
![]() |
ae5678128b | ||
![]() |
6395a4cefc | ||
![]() |
1a3491a50f | ||
![]() |
0f8b67e6ce | ||
![]() |
1e17db6d21 | ||
![]() |
03bd4bbeed | ||
![]() |
ff907893d0 | ||
![]() |
d104eef064 | ||
![]() |
f0505b8919 | ||
![]() |
db12fbe725 | ||
![]() |
f88580eb88 | ||
![]() |
dbfce696b9 | ||
![]() |
bca5af9c23 | ||
![]() |
381abf7c40 | ||
![]() |
1a2112daf9 | ||
![]() |
e30e194b91 | ||
![]() |
edf9962abf | ||
![]() |
fd896c4af6 | ||
![]() |
0ae57af270 | ||
![]() |
123c8ded11 | ||
![]() |
0510fe8530 | ||
![]() |
3ebaf38486 | ||
![]() |
84fc962bb0 | ||
![]() |
814bc20cf7 | ||
![]() |
6b76270d51 | ||
![]() |
35142e5204 | ||
![]() |
d313845c84 | ||
![]() |
21162ba34e | ||
![]() |
e162dc44d1 | ||
![]() |
153a36d4e9 | ||
![]() |
9271ca082c | ||
![]() |
0389ea803d | ||
![]() |
0fea44f735 | ||
![]() |
c01cad1c9d | ||
![]() |
b383706bfb | ||
![]() |
a78f66fd36 | ||
![]() |
bef57f75c0 | ||
![]() |
48ec19d9bf | ||
![]() |
f4198a0409 | ||
![]() |
9454ebcb35 | ||
![]() |
441721b63f | ||
![]() |
0eda85c95e | ||
![]() |
01e4c80adb | ||
![]() |
0e8ec4d445 | ||
![]() |
ae18ccb8cd | ||
![]() |
ad63afc242 | ||
![]() |
f48f8a9643 | ||
![]() |
eae65b6512 | ||
![]() |
02ff5cb24b | ||
![]() |
8210b122bc | ||
![]() |
a0d3cf561b | ||
![]() |
d7c1c77861 | ||
![]() |
f385c3fa21 | ||
![]() |
e07a077da9 | ||
![]() |
7768c9147d | ||
![]() |
c5c9877b40 | ||
![]() |
3ddd4a1a58 | ||
![]() |
3c85215011 | ||
![]() |
2369814092 | ||
![]() |
6970a764c4 | ||
![]() |
4c7c3dba00 | ||
![]() |
aebad12bbe | ||
![]() |
8593e7a6ac | ||
![]() |
119975c313 | ||
![]() |
27c3a95ec6 | ||
![]() |
d5eaf85473 | ||
![]() |
7f4c967a20 | ||
![]() |
8066ac2819 | ||
![]() |
66172c843d | ||
![]() |
88b3373e5c | ||
![]() |
320d91d639 | ||
![]() |
24d118e225 | ||
![]() |
c192f319d1 | ||
![]() |
097dfa06a6 | ||
![]() |
90ca544d0a | ||
![]() |
2bc9640b88 | ||
![]() |
40ffddf5ef | ||
![]() |
bd28c9da23 | ||
![]() |
11ef024779 | ||
![]() |
40d9a201ea | ||
![]() |
6e2ac21fab | ||
![]() |
7858cf57c6 | ||
![]() |
91c8e7ebda | ||
![]() |
6332ee6955 | ||
![]() |
3c3014fdc6 | ||
![]() |
d97e4c44ee | ||
![]() |
1b88c514da | ||
![]() |
96c1094a61 | ||
![]() |
b3551b4ee5 | ||
![]() |
4232d3d8a2 | ||
![]() |
73b64c19ff | ||
![]() |
15ccdb2055 | ||
![]() |
418067b077 | ||
![]() |
88b29d1a14 | ||
![]() |
b831aa8eca | ||
![]() |
4540d216cb | ||
![]() |
b345ebb366 | ||
![]() |
7a8ed2db32 | ||
![]() |
9f5ed99b79 | ||
![]() |
1bd6defc84 | ||
![]() |
181d76ae7b | ||
![]() |
31d37c218a | ||
![]() |
72be9845fa | ||
![]() |
a6a4e50479 | ||
![]() |
1f88ead837 | ||
![]() |
8303cafbc9 | ||
![]() |
00901f60dc | ||
![]() |
21aaf06a63 | ||
![]() |
d81774c9a7 | ||
![]() |
2cb6fb041e | ||
![]() |
b7d5ee9a75 | ||
![]() |
24dd84b31c | ||
![]() |
0e96819e86 | ||
![]() |
897d393342 | ||
![]() |
fc7efd5484 | ||
![]() |
834695420d | ||
![]() |
c4025c0cc1 | ||
![]() |
c80ef82f2a | ||
![]() |
b94b4eea04 | ||
![]() |
116c813988 | ||
![]() |
2c9aa8e30e | ||
![]() |
376c84c46e | ||
![]() |
a3039e05d4 | ||
![]() |
bed078213b | ||
![]() |
b413c8e715 | ||
![]() |
299890c737 | ||
![]() |
e977bee8cc | ||
![]() |
5b636b2b5e | ||
![]() |
6db4874acd | ||
![]() |
e788ea6d7f | ||
![]() |
c5f8eaf1cf | ||
![]() |
c9568b4301 | ||
![]() |
e1c712abb7 | ||
![]() |
81e8a28cc3 | ||
![]() |
e45a2b4517 | ||
![]() |
dd69d0fad2 | ||
![]() |
4f680c881c | ||
![]() |
1932d7102b | ||
![]() |
58ba9ed4be | ||
![]() |
8fe6c8bde7 | ||
![]() |
ec4684c336 | ||
![]() |
ec05ca11ba | ||
![]() |
164e3cedd6 | ||
![]() |
0d4d610b3a | ||
![]() |
7ebd604390 | ||
![]() |
7bc50df300 | ||
![]() |
3f3eb0f878 | ||
![]() |
6e854eb889 | ||
![]() |
d009ece391 | ||
![]() |
ffa7909f9f | ||
![]() |
266d164a34 | ||
![]() |
aaf957a3c2 | ||
![]() |
dd35c4907e | ||
![]() |
993986c1cf | ||
![]() |
8d47d9c015 | ||
![]() |
b4764a230a | ||
![]() |
2c703a7468 | ||
![]() |
87083e03a8 | ||
![]() |
1d22fbfae0 | ||
![]() |
cfee63d716 | ||
![]() |
d49052660f | ||
![]() |
f5299d4b75 | ||
![]() |
35b366640f | ||
![]() |
1dc3809a34 | ||
![]() |
82c883acdb | ||
![]() |
8333751482 | ||
![]() |
933070fc32 | ||
![]() |
ec80a20146 | ||
![]() |
cd46497829 | ||
![]() |
cb51a78509 | ||
![]() |
6a52d0c83a | ||
![]() |
138dc7082e | ||
![]() |
944c66c366 | ||
![]() |
0accfbd65f | ||
![]() |
86498ba317 | ||
![]() |
6016aac675 | ||
![]() |
80f8c88532 | ||
![]() |
e112d87e28 | ||
![]() |
718d73f7cc | ||
![]() |
d01e804b24 | ||
![]() |
72ca9a2297 | ||
![]() |
007a1694d7 | ||
![]() |
74dd307318 | ||
![]() |
4bf5f6dcc1 | ||
![]() |
cbf450425e | ||
![]() |
9b56fbc3ed | ||
![]() |
bdcdfda8c4 | ||
![]() |
53b2108252 | ||
![]() |
ab87a86e9d | ||
![]() |
17c248eda0 | ||
![]() |
bee82a1941 | ||
![]() |
772c574149 | ||
![]() |
d577411e72 | ||
![]() |
f901d9d3b0 | ||
![]() |
da75da6791 | ||
![]() |
052fe75183 | ||
![]() |
d50daad918 | ||
![]() |
2834e25945 | ||
![]() |
5c7190710b | ||
![]() |
dd76de2066 | ||
![]() |
1a7e3ed658 | ||
![]() |
956339115c | ||
![]() |
484a1f264b | ||
![]() |
0f739ffb50 | ||
![]() |
e79821385d | ||
![]() |
e742d089d6 | ||
![]() |
44336460c5 | ||
![]() |
46f0309171 | ||
![]() |
1ed38ec92b | ||
![]() |
04dca831e3 | ||
![]() |
308e8bfbc3 | ||
![]() |
62ecddb719 | ||
![]() |
a852b0efbc | ||
![]() |
3dd6a55727 | ||
![]() |
3993e3b9c0 | ||
![]() |
42b8b5814f | ||
![]() |
60de6f57fd | ||
![]() |
11fcb17c29 | ||
![]() |
98246e23dd | ||
![]() |
61e2e81719 | ||
![]() |
62e600443e | ||
![]() |
5bde4d75ce | ||
![]() |
9c54fbe733 | ||
![]() |
9cc206d548 | ||
![]() |
a97cf8a3ec | ||
![]() |
f0ea5f3968 | ||
![]() |
8d44afc8e6 | ||
![]() |
62ed3bd7f2 | ||
![]() |
89889924fc | ||
![]() |
dda592cb39 | ||
![]() |
bb44044956 | ||
![]() |
d95810f6e5 | ||
![]() |
26c275b0f5 | ||
![]() |
341dc6c58b | ||
![]() |
a2364b7512 | ||
![]() |
350e1c08d0 | ||
![]() |
724dc42a59 | ||
![]() |
79a62e9d37 | ||
![]() |
f73ba63133 | ||
![]() |
d2c849fceb | ||
![]() |
c4e9d5d14f | ||
![]() |
76a7d1ee69 | ||
![]() |
a8d225f812 | ||
![]() |
bdfb8c7ee4 | ||
![]() |
9ab9d88eb5 | ||
![]() |
75ff5feccd | ||
![]() |
a4c7b38b7a | ||
![]() |
ec86608aff | ||
![]() |
4010854075 | ||
![]() |
fe1ae29fa3 | ||
![]() |
8c7d0b06d1 | ||
![]() |
af497e6906 | ||
![]() |
badb61aaea | ||
![]() |
5884919350 | ||
![]() |
ce77148a38 | ||
![]() |
0ee6ce0a55 | ||
![]() |
39f0e14fee | ||
![]() |
dc09907f93 | ||
![]() |
dcec97b9b4 | ||
![]() |
0eb8615db4 | ||
![]() |
e674d8ac3a | ||
![]() |
141af4f097 | ||
![]() |
35ef9c7e68 | ||
![]() |
67e8b3e988 | ||
![]() |
896508d1fd | ||
![]() |
908c978242 | ||
![]() |
6419279514 | ||
![]() |
0ecfdc5cf3 | ||
![]() |
a357f989ad | ||
![]() |
831e335b5d | ||
![]() |
5e4afd4a7b | ||
![]() |
337c526e23 | ||
![]() |
5f25db231f | ||
![]() |
fb46993a05 | ||
![]() |
ef2738838f | ||
![]() |
b9669e452c | ||
![]() |
6196417436 | ||
![]() |
5d797f397d | ||
![]() |
3be6acf5b5 | ||
![]() |
b5619adf45 | ||
![]() |
62540fe1b2 | ||
![]() |
fd85fdf0ac | ||
![]() |
e09208c757 | ||
![]() |
753f2110c6 | ||
![]() |
7917e8417b | ||
![]() |
a0447b4840 | ||
![]() |
2e561a2af4 | ||
![]() |
a330a3e472 | ||
![]() |
229d64fcf8 | ||
![]() |
6df695f650 | ||
![]() |
d77edaa056 | ||
![]() |
4f78246c7f | ||
![]() |
8d3ccdaf9c | ||
![]() |
17e1061866 | ||
![]() |
30d4b06393 | ||
![]() |
893bf452fb | ||
![]() |
bb67584cba | ||
![]() |
e28ec93c80 | ||
![]() |
ca37019427 | ||
![]() |
3d452015ee | ||
![]() |
57a3d82649 | ||
![]() |
2845beaf8a | ||
![]() |
1e58ead126 | ||
![]() |
fafa7572d0 | ||
![]() |
4ddeb72bfe | ||
![]() |
28ba36dddb | ||
![]() |
b6c501311c | ||
![]() |
01d4ebe254 | ||
![]() |
34dd332f0b | ||
![]() |
596d0c7115 | ||
![]() |
672601b028 | ||
![]() |
e5045f28ab | ||
![]() |
12ba067db3 | ||
![]() |
5413606425 | ||
![]() |
72ae18557b | ||
![]() |
99bd119ed6 | ||
![]() |
faebf66065 | ||
![]() |
dc030d6895 | ||
![]() |
7f626005a5 | ||
![]() |
28d0741e14 | ||
![]() |
c0e17a6c61 | ||
![]() |
b5046b089e | ||
![]() |
1075112bfa | ||
![]() |
37fddacf8e | ||
![]() |
2091a59897 | ||
![]() |
d2a427b38f | ||
![]() |
c069719c1c | ||
![]() |
654a443d4b | ||
![]() |
a6ec2d5ed7 | ||
![]() |
02ac083175 | ||
![]() |
561fce5d40 | ||
![]() |
a88263874a | ||
![]() |
943ddeb5ab | ||
![]() |
216a3fedd0 | ||
![]() |
7b8c335a5b | ||
![]() |
8e8efe4862 | ||
![]() |
e64dc3cc1c | ||
![]() |
c833691cf6 | ||
![]() |
ba5e2e8613 | ||
![]() |
b154e31a28 | ||
![]() |
322b888dc5 | ||
![]() |
42eefb763b | ||
![]() |
27be351636 | ||
![]() |
8b20287f93 | ||
![]() |
50a7bdb34d | ||
![]() |
dcac3be0da | ||
![]() |
ec121fb327 | ||
![]() |
ccb260b6a7 | ||
![]() |
c994511ea5 | ||
![]() |
fb5177633a | ||
![]() |
b15fde59d1 | ||
![]() |
1958974c73 | ||
![]() |
00b1b0fea4 | ||
![]() |
743b978e6f | ||
![]() |
cbabd8b76e | ||
![]() |
1fd877c597 | ||
![]() |
4f64ed07b1 | ||
![]() |
4e537b0466 | ||
![]() |
2b1198dfd9 | ||
![]() |
8db23fba43 | ||
![]() |
0451487549 | ||
![]() |
a16faa97ec | ||
![]() |
dbf626a53e | ||
![]() |
27cc767ec4 | ||
![]() |
8d2d08a12b | ||
![]() |
7c91d97440 | ||
![]() |
0eb7b53801 | ||
![]() |
510e31584e | ||
![]() |
0efedd7fa5 | ||
![]() |
01a32705e4 | ||
![]() |
05c1b82bcf | ||
![]() |
cf04796010 | ||
![]() |
fd7e66e144 | ||
![]() |
ceaf290f5e | ||
![]() |
5df9ae57ce | ||
![]() |
04ed7d413f | ||
![]() |
f543835921 | ||
![]() |
8ae35160e7 | ||
![]() |
75516a7217 | ||
![]() |
8783fc89e6 | ||
![]() |
fd0819ca30 | ||
![]() |
650b925251 | ||
![]() |
fd3e32eaa8 | ||
![]() |
a8bebb88b1 | ||
![]() |
3294a74979 | ||
![]() |
db95804eeb | ||
![]() |
15bfc00ddb | ||
![]() |
18580e431f | ||
![]() |
98624d8701 | ||
![]() |
3c03a15831 | ||
![]() |
9710a7bfc1 | ||
![]() |
34426ae32d | ||
![]() |
c2f98ee317 | ||
![]() |
4df2abba82 | ||
![]() |
c3cd207b2b | ||
![]() |
4f6053f767 | ||
![]() |
5578fbdd4f | ||
![]() |
84a6c40e13 | ||
![]() |
3e91004660 | ||
![]() |
ac1d334bf1 | ||
![]() |
368c840177 | ||
![]() |
c3a2fd736c | ||
![]() |
741987f40b | ||
![]() |
375b025e22 | ||
![]() |
7324ee5e8d | ||
![]() |
54c2299654 | ||
![]() |
b2cfb6d6ed | ||
![]() |
e8a11b8f79 | ||
![]() |
f16890f9a7 | ||
![]() |
e881bec45d | ||
![]() |
18eea7ca2d | ||
![]() |
316410a561 | ||
![]() |
76a1a190f6 | ||
![]() |
c243ae9cef | ||
![]() |
2722ee63cc | ||
![]() |
22e7fa1cf3 | ||
![]() |
101dc355ba | ||
![]() |
f5f3d0b827 | ||
![]() |
53cb5d1fe9 | ||
![]() |
0978ca616f | ||
![]() |
bbf42c0a28 | ||
![]() |
7df04c6e2e | ||
![]() |
d3386c8097 | ||
![]() |
309197781e | ||
![]() |
5a3ee970a0 | ||
![]() |
7cbe63e484 | ||
![]() |
5342b02091 | ||
![]() |
7eeca57135 | ||
![]() |
2162985e4a | ||
![]() |
5d53f4c13a | ||
![]() |
7de2c2692d | ||
![]() |
1b9df35a1d | ||
![]() |
d5d39797bb | ||
![]() |
829a228d79 | ||
![]() |
4c589c9610 | ||
![]() |
b9fc58ec45 | ||
![]() |
193a84dafd | ||
![]() |
3880a33208 | ||
![]() |
2edf897e39 | ||
![]() |
27d1170c75 | ||
![]() |
11c850a41e | ||
![]() |
ff4ee06a1f | ||
![]() |
0549f32d6e | ||
![]() |
c5ab3490b3 | ||
![]() |
50ba1a1c4e | ||
![]() |
ee45d2fb38 | ||
![]() |
a94822b79a | ||
![]() |
b5aba454ae | ||
![]() |
a49631e986 | ||
![]() |
bb31b5f2d3 | ||
![]() |
8ad08d466e | ||
![]() |
ab31183a93 | ||
![]() |
3257cc82dc | ||
![]() |
ef73733596 | ||
![]() |
4b45d4cf09 | ||
![]() |
e0b3e1db24 | ||
![]() |
e0b51d653a | ||
![]() |
c17ebbf4d7 | ||
![]() |
44a26d59a4 | ||
![]() |
6b8f81f7eb | ||
![]() |
9a4b9419eb | ||
![]() |
89548d132a | ||
![]() |
45dbb2cd3b | ||
![]() |
a95203e2c9 | ||
![]() |
a79fc4980e | ||
![]() |
1240781503 | ||
![]() |
0875c61bc9 | ||
![]() |
da60a1c393 | ||
![]() |
785f29abf8 | ||
![]() |
2a3e96b891 | ||
![]() |
f1f6dd4c60 | ||
![]() |
b8a8403dc3 | ||
![]() |
ab5eb9c401 | ||
![]() |
74b7fc9f77 | ||
![]() |
ca87316691 | ||
![]() |
cae61587da | ||
![]() |
0238d0bf2e | ||
![]() |
5be575a078 | ||
![]() |
36fbbbf4ae | ||
![]() |
a87ab3c558 | ||
![]() |
75e22a2080 | ||
![]() |
6c89799bfb | ||
![]() |
e0d9a8d0db | ||
![]() |
3208f6a1bd | ||
![]() |
d525be33cf | ||
![]() |
64136f0b93 | ||
![]() |
238203cf35 | ||
![]() |
6b354467ab | ||
![]() |
10444e5995 | ||
![]() |
42f6ca11db | ||
![]() |
eed094103d | ||
![]() |
5051bcd607 | ||
![]() |
74e2bb2d87 | ||
![]() |
a4a6331935 | ||
![]() |
3939144128 | ||
![]() |
7791c0b7be | ||
![]() |
2cfbff5cf6 | ||
![]() |
b734153253 | ||
![]() |
3df637b265 | ||
![]() |
ea220d2514 | ||
![]() |
8bb75fc376 | ||
![]() |
d461fe555d | ||
![]() |
0bd25f2506 | ||
![]() |
2355435275 | ||
![]() |
cc04ef5869 | ||
![]() |
521d8a605d | ||
![]() |
3bff1b1ba5 | ||
![]() |
15192652f0 | ||
![]() |
85873202ca | ||
![]() |
706bde03f9 | ||
![]() |
f855f5f429 | ||
![]() |
cce557e82a | ||
![]() |
7f7d8bd771 | ||
![]() |
9a95093b44 | ||
![]() |
ddf7bbdd31 | ||
![]() |
994a811efa | ||
![]() |
06efa46f32 | ||
![]() |
66778a060c | ||
![]() |
c9697d6cc8 | ||
![]() |
b801daa240 | ||
![]() |
d2f42d67c7 | ||
![]() |
cb9d750db9 | ||
![]() |
0b966c4497 | ||
![]() |
0774a822aa | ||
![]() |
7e0cdce7ea | ||
![]() |
e2ed963af5 | ||
![]() |
4781d29d67 | ||
![]() |
f5b6ca50f4 | ||
![]() |
05852b07c6 | ||
![]() |
689aa4cf95 | ||
![]() |
56aad9200a | ||
![]() |
ac69c0d9c6 | ||
![]() |
860592291f | ||
![]() |
113597333c | ||
![]() |
a83d71aa39 | ||
![]() |
93299ae843 | ||
![]() |
4300cf5330 | ||
![]() |
92d08377ce | ||
![]() |
19a6284023 | ||
![]() |
45908f2a84 | ||
![]() |
8648220e21 | ||
![]() |
68e285b514 | ||
![]() |
5153a42b69 | ||
![]() |
42feed710c | ||
![]() |
9d049b06c3 | ||
![]() |
1105529e91 | ||
![]() |
49c1f11503 | ||
![]() |
f54fd84de3 |
@@ -7,3 +7,4 @@ indent_style = space
|
||||
[*.kt]
|
||||
indent_size = 2
|
||||
indent_style = space
|
||||
ktlint_standard_no-wildcard-imports = disabled
|
1
.gitattributes
vendored
Normal file
1
.gitattributes
vendored
Normal file
@@ -0,0 +1 @@
|
||||
* text=auto eol=lf
|
31
.github/workflows/checkNewPlugins.yml
vendored
Normal file
31
.github/workflows/checkNewPlugins.yml
vendored
Normal file
@@ -0,0 +1,31 @@
|
||||
# This workflow will build a package using Gradle and then publish it to GitHub packages when a release is created
|
||||
# For more information see: https://github.com/actions/setup-java/blob/main/docs/advanced-usage.md#Publishing-using-gradle
|
||||
|
||||
# This workflow syncs changes from the docs folder of IdeaVim to the IdeaVim.wiki repository
|
||||
|
||||
name: Check new plugin dependencies
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: '0 5 * * *'
|
||||
|
||||
jobs:
|
||||
build:
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Fetch origin repo
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Set up JDK 17
|
||||
uses: actions/setup-java@v2
|
||||
with:
|
||||
java-version: '17'
|
||||
distribution: 'adopt'
|
||||
server-id: github # Value of the distributionManagement/repository/id field of the pom.xml
|
||||
settings-path: ${{ github.workspace }} # location for the settings.xml file
|
||||
|
||||
- name: Check new plugins
|
||||
run: ./gradlew scripts:checkNewPluginDependencies
|
46
.github/workflows/closeYoutrackOnCommit.yml
vendored
Normal file
46
.github/workflows/closeYoutrackOnCommit.yml
vendored
Normal file
@@ -0,0 +1,46 @@
|
||||
# This workflow will build a package using Gradle and then publish it to GitHub packages when a release is created
|
||||
# For more information see: https://github.com/actions/setup-java/blob/main/docs/advanced-usage.md#Publishing-using-gradle
|
||||
|
||||
name: Close YouTrack on commit
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
push:
|
||||
branches: [ master ]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 300
|
||||
- name: Get tags
|
||||
run: git fetch --tags origin
|
||||
- name: Set up JDK 11
|
||||
uses: actions/setup-java@v2
|
||||
with:
|
||||
java-version: '11'
|
||||
distribution: 'adopt'
|
||||
server-id: github # Value of the distributionManagement/repository/id field of the pom.xml
|
||||
settings-path: ${{ github.workspace }} # location for the settings.xml file
|
||||
|
||||
# The last successful job was marked with a tag
|
||||
- name: Get commit with last workflow
|
||||
run: |
|
||||
echo "LAST_COMMIT=$(git rev-list -n 1 tags/workflow-close-youtrack)" >> $GITHUB_ENV
|
||||
|
||||
- name: Update YouTrack
|
||||
run: ./gradlew updateYoutrackOnCommit
|
||||
env:
|
||||
SUCCESS_COMMIT: ${{ env.LAST_COMMIT }}
|
||||
YOUTRACK_TOKEN: ${{ secrets.YOUTRACK_TOKEN }}
|
||||
|
||||
- name: Update tags
|
||||
run: |
|
||||
git tag --delete workflow-close-youtrack || true
|
||||
git push origin :refs/tags/workflow-close-youtrack || true
|
||||
git tag workflow-close-youtrack
|
||||
git push origin workflow-close-youtrack
|
6
.github/workflows/codeql-analysis.yml
vendored
6
.github/workflows/codeql-analysis.yml
vendored
@@ -39,7 +39,7 @@ jobs:
|
||||
|
||||
# Initializes the CodeQL tools for scanning.
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@v1
|
||||
uses: github/codeql-action/init@v2
|
||||
with:
|
||||
languages: ${{ matrix.language }}
|
||||
# If you wish to specify custom queries, you can do so here or in a config file.
|
||||
@@ -50,7 +50,7 @@ jobs:
|
||||
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
||||
# If this step fails, then you should remove it and run the build manually (see below)
|
||||
- name: Autobuild
|
||||
uses: github/codeql-action/autobuild@v1
|
||||
uses: github/codeql-action/autobuild@v2
|
||||
|
||||
# ℹ️ Command-line programs to run using the OS shell.
|
||||
# 📚 https://git.io/JvXDl
|
||||
@@ -64,4 +64,4 @@ jobs:
|
||||
# make release
|
||||
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@v1
|
||||
uses: github/codeql-action/analyze@v2
|
||||
|
@@ -1,10 +1,12 @@
|
||||
# This workflow will build a package using Gradle and then publish it to GitHub packages when a release is created
|
||||
# For more information see: https://github.com/actions/setup-java/blob/main/docs/advanced-usage.md#Publishing-using-gradle
|
||||
|
||||
name: Update Changelog On PR (Test)
|
||||
name: Testing CI integrations
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: '0 5 * * *'
|
||||
|
||||
jobs:
|
||||
build:
|
||||
@@ -14,7 +16,7 @@ jobs:
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
fetch-depth: 50
|
||||
fetch-depth: 300
|
||||
- name: Set up JDK 11
|
||||
uses: actions/setup-java@v2
|
||||
with:
|
||||
@@ -23,18 +25,8 @@ jobs:
|
||||
server-id: github # Value of the distributionManagement/repository/id field of the pom.xml
|
||||
settings-path: ${{ github.workspace }} # location for the settings.xml file
|
||||
|
||||
- name: Update authors
|
||||
id: update_authors
|
||||
run: ./gradlew updateMergedPr -PprId=525
|
||||
- name: Run tests
|
||||
run: ./gradlew integrationsTest
|
||||
env:
|
||||
GITHUB_OAUTH: ${{ secrets.MERGE_PR }}
|
||||
|
||||
# - name: Commit changes
|
||||
# uses: stefanzweifel/git-auto-commit-action@v4
|
||||
# with:
|
||||
# branch: master
|
||||
# commit_message: Update changelog after merging PR
|
||||
# commit_user_name: Alex Plate
|
||||
# commit_user_email: aleksei.plate@jetbrains.com
|
||||
# commit_author: Alex Plate <aleksei.plate@jetbrains.com>
|
||||
# file_pattern: CHANGES.md
|
||||
YOUTRACK_TOKEN: ${{ secrets.YOUTRACK_TOKEN }}
|
||||
GITHUB_OAUTH: ${{ secrets.GITHUB_TOKEN }}
|
35
.github/workflows/kover.yml
vendored
Normal file
35
.github/workflows/kover.yml
vendored
Normal file
@@ -0,0 +1,35 @@
|
||||
# This workflow will build a package using Gradle and then publish it to GitHub packages when a release is created
|
||||
# For more information see: https://github.com/actions/setup-java/blob/main/docs/advanced-usage.md#Publishing-using-gradle
|
||||
|
||||
name: Kover
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
push:
|
||||
branches: [ master ]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
fetch-depth: 300
|
||||
- name: Set up JDK 11
|
||||
uses: actions/setup-java@v2
|
||||
with:
|
||||
java-version: '11'
|
||||
distribution: 'adopt'
|
||||
server-id: github # Value of the distributionManagement/repository/id field of the pom.xml
|
||||
settings-path: ${{ github.workspace }} # location for the settings.xml file
|
||||
|
||||
- name: Run tests
|
||||
run: ./gradlew koverXmlReport
|
||||
|
||||
|
||||
# Upload Kover report to CodeCov
|
||||
- uses: codecov/codecov-action@v3
|
||||
with:
|
||||
files: ${{ github.workspace }}/build/reports/kover/xml/report.xml
|
17
.github/workflows/mergeDependabotPR.yml
vendored
Normal file
17
.github/workflows/mergeDependabotPR.yml
vendored
Normal 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}}
|
14
.github/workflows/mergePr.yml
vendored
14
.github/workflows/mergePr.yml
vendored
@@ -5,7 +5,7 @@ name: Update Changelog On PR
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
pull_request:
|
||||
pull_request_target:
|
||||
types: [ closed ]
|
||||
|
||||
jobs:
|
||||
@@ -18,6 +18,8 @@ jobs:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
fetch-depth: 50
|
||||
# See end of file updateChangeslog.yml for explanation of this secret
|
||||
ssh-key: ${{ secrets.PUSH_TO_PROTECTED_BRANCH_SECRET }}
|
||||
- name: Set up JDK 11
|
||||
uses: actions/setup-java@v2
|
||||
with:
|
||||
@@ -30,14 +32,14 @@ jobs:
|
||||
id: update_authors
|
||||
run: ./gradlew updateMergedPr -PprId=${{ github.event.number }}
|
||||
env:
|
||||
GITHUB_OAUTH: ${{ secrets.MERGE_PR }}
|
||||
GITHUB_OAUTH: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Commit changes
|
||||
uses: stefanzweifel/git-auto-commit-action@v4
|
||||
with:
|
||||
branch: master
|
||||
commit_message: Update changelog after merging PR
|
||||
commit_user_name: Alex Plate
|
||||
commit_user_email: aleksei.plate@jetbrains.com
|
||||
commit_author: Alex Plate <aleksei.plate@jetbrains.com>
|
||||
commit_message: Update changelog after merging PR
|
||||
commit_user_name: IdeaVim Bot
|
||||
commit_user_email: maintainers@ideavim.dev
|
||||
commit_author: IdeaVim Bot <maintainers@ideavim.dev>
|
||||
file_pattern: CHANGES.md
|
||||
|
44
.github/workflows/syncDoc.yml
vendored
Normal file
44
.github/workflows/syncDoc.yml
vendored
Normal file
@@ -0,0 +1,44 @@
|
||||
# This workflow will build a package using Gradle and then publish it to GitHub packages when a release is created
|
||||
# For more information see: https://github.com/actions/setup-java/blob/main/docs/advanced-usage.md#Publishing-using-gradle
|
||||
|
||||
# This workflow syncs changes from the docs folder of IdeaVim to the IdeaVim.wiki repository
|
||||
|
||||
name: Sync docs
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
push:
|
||||
branches: [ master ]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Fetch origin repo
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
path: origin
|
||||
# See end of file updateChangeslog.yml for explanation of this secret
|
||||
ssh-key: ${{ secrets.PUSH_TO_PROTECTED_BRANCH_SECRET }}
|
||||
|
||||
- name: Fetch docs repo
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
repository: JetBrains/ideavim.wiki
|
||||
path: docs
|
||||
|
||||
- name: Sync docs
|
||||
id: update_authors
|
||||
run: cp -a origin/doc/. docs
|
||||
|
||||
- name: Commit changes
|
||||
uses: stefanzweifel/git-auto-commit-action@v4
|
||||
with:
|
||||
branch: master
|
||||
repository: docs
|
||||
commit_message: Update docs
|
||||
commit_user_name: IdeaVim Bot
|
||||
commit_user_email: maintainers@ideavim.dev
|
||||
commit_author: IdeaVim Bot <maintainers@ideavim.dev>
|
33
.github/workflows/updateAffectedRate.yml
vendored
Normal file
33
.github/workflows/updateAffectedRate.yml
vendored
Normal 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 }}
|
38
.github/workflows/updateAuthors.yml
vendored
38
.github/workflows/updateAuthors.yml
vendored
@@ -5,8 +5,11 @@ name: Update Authors
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
push:
|
||||
branches: [ master ]
|
||||
schedule:
|
||||
- cron: '0 9 * * *'
|
||||
# Workflow run on push is disabled to avoid conflicts when merging PR
|
||||
# push:
|
||||
# branches: [ master ]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
@@ -14,9 +17,13 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 300
|
||||
# See end of file updateChangeslog.yml for explanation of this secret
|
||||
ssh-key: ${{ secrets.PUSH_TO_PROTECTED_BRANCH_SECRET }}
|
||||
- name: Get tags
|
||||
run: git fetch --tags origin
|
||||
- name: Set up JDK 11
|
||||
uses: actions/setup-java@v2
|
||||
with:
|
||||
@@ -25,25 +32,30 @@ jobs:
|
||||
server-id: github # Value of the distributionManagement/repository/id field of the pom.xml
|
||||
settings-path: ${{ github.workspace }} # location for the settings.xml file
|
||||
|
||||
- uses: nrwl/last-successful-commit-action@v1
|
||||
id: last_successful_commit
|
||||
with:
|
||||
branch: 'master'
|
||||
workflow_id: 'updateAuthors.yml'
|
||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
# The last successful job was marked with a tag
|
||||
- name: Get commit with last workflow
|
||||
run: |
|
||||
echo "LAST_COMMIT=$(git rev-list -n 1 tags/workflow-authors)" >> $GITHUB_ENV
|
||||
|
||||
- name: Update authors
|
||||
id: update_authors
|
||||
run: ./gradlew updateAuthors --stacktrace
|
||||
env:
|
||||
SUCCESS_COMMIT: ${{ steps.last_successful_commit.outputs.commit_hash }}
|
||||
SUCCESS_COMMIT: ${{ env.LAST_COMMIT }}
|
||||
GITHUB_OAUTH: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Commit changes
|
||||
uses: stefanzweifel/git-auto-commit-action@v4
|
||||
with:
|
||||
commit_message: Add ${{ steps.update_authors.outputs.authors }} to contributors list
|
||||
commit_user_name: Alex Plate
|
||||
commit_user_email: aleksei.plate@jetbrains.com
|
||||
commit_author: Alex Plate <aleksei.plate@jetbrains.com>
|
||||
commit_user_name: IdeaVim Bot
|
||||
commit_user_email: maintainers@ideavim.dev
|
||||
commit_author: IdeaVim Bot <maintainers@ideavim.dev>
|
||||
file_pattern: AUTHORS.md
|
||||
|
||||
- name: Update tags
|
||||
run: |
|
||||
git tag --delete workflow-authors || true
|
||||
git push origin :refs/tags/workflow-authors || true
|
||||
git tag workflow-authors
|
||||
git push origin workflow-authors
|
||||
|
48
.github/workflows/updateChangelog.yml
vendored
48
.github/workflows/updateChangelog.yml
vendored
@@ -5,8 +5,11 @@ name: Update Changelog
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
push:
|
||||
branches: [ master ]
|
||||
schedule:
|
||||
- cron: '0 10 * * *'
|
||||
# Workflow run on push is disabled to avoid conflicts when merging PR
|
||||
# push:
|
||||
# branches: [ master ]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
@@ -14,9 +17,13 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 300
|
||||
# See end of file updateChangeslog.yml for explanation of this secret
|
||||
ssh-key: ${{ secrets.PUSH_TO_PROTECTED_BRANCH_SECRET }}
|
||||
- name: Get tags
|
||||
run: git fetch --tags origin
|
||||
- name: Set up JDK 11
|
||||
uses: actions/setup-java@v2
|
||||
with:
|
||||
@@ -25,23 +32,34 @@ jobs:
|
||||
server-id: github # Value of the distributionManagement/repository/id field of the pom.xml
|
||||
settings-path: ${{ github.workspace }} # location for the settings.xml file
|
||||
|
||||
- uses: nrwl/last-successful-commit-action@v1
|
||||
id: last_successful_commit
|
||||
with:
|
||||
branch: 'master'
|
||||
workflow_id: 'updateChangelog.yml'
|
||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
# The last successful job was marked with a tag
|
||||
- name: Get commit with last workflow
|
||||
run: |
|
||||
echo "LAST_COMMIT=$(git rev-list -n 1 tags/workflow-changelog)" >> $GITHUB_ENV
|
||||
|
||||
- name: Update changelog
|
||||
run: ./gradlew updateChangelog
|
||||
env:
|
||||
SUCCESS_COMMIT: ${{ steps.last_successful_commit.outputs.commit_hash }}
|
||||
SUCCESS_COMMIT: ${{ env.LAST_COMMIT }}
|
||||
|
||||
- name: Commit changes
|
||||
uses: stefanzweifel/git-auto-commit-action@v4
|
||||
with:
|
||||
commit_message: Update changelog
|
||||
commit_user_name: Alex Plate
|
||||
commit_user_email: aleksei.plate@jetbrains.com
|
||||
commit_author: Alex Plate <aleksei.plate@jetbrains.com>
|
||||
file_pattern: CHANGES.md
|
||||
commit_message: Update changelog. Action id - ${{ github.run_id }}
|
||||
commit_user_name: IdeaVim Bot
|
||||
commit_user_email: maintainers@ideavim.dev
|
||||
commit_author: IdeaVim Bot <maintainers@ideavim.dev>
|
||||
file_pattern: CHANGES.md
|
||||
|
||||
- name: Update tags
|
||||
run: |
|
||||
git tag --delete workflow-changelog || true
|
||||
git push origin :refs/tags/workflow-changelog || true
|
||||
git tag workflow-changelog
|
||||
git push origin workflow-changelog
|
||||
|
||||
# Regarding secrets.PUSH_TO_PROTECTED_BRANCH_SECRET - we use branch protection rules to automate merges of the
|
||||
# dependabot updates. See mergeDependatobPR.yml file.
|
||||
# However, it turned out that GitHub accepts pushes from the actions as a PR and requires checks, that are always
|
||||
# false for pushing from actions.
|
||||
# This secret is created to implement the workaround described in https://stackoverflow.com/a/76135647/3124227
|
14
.github/workflows/updateFormatting.yml
vendored
14
.github/workflows/updateFormatting.yml
vendored
@@ -17,6 +17,8 @@ jobs:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
fetch-depth: 50
|
||||
# See end of file updateChangeslog.yml for explanation of this secret
|
||||
ssh-key: ${{ secrets.PUSH_TO_PROTECTED_BRANCH_SECRET }}
|
||||
- name: Set up JDK 11
|
||||
uses: actions/setup-java@v2
|
||||
with:
|
||||
@@ -25,13 +27,15 @@ jobs:
|
||||
server-id: github # Value of the distributionManagement/repository/id field of the pom.xml
|
||||
settings-path: ${{ github.workspace }} # location for the settings.xml file
|
||||
|
||||
- name: Format files
|
||||
run: ./gradlew ktlintFormat
|
||||
- uses: findologic/intellij-format-action@1.0.1
|
||||
with:
|
||||
include-glob: '*.kt,*.java'
|
||||
path: .
|
||||
|
||||
- name: Commit changes
|
||||
uses: stefanzweifel/git-auto-commit-action@v4
|
||||
with:
|
||||
commit_message: Update formatting
|
||||
commit_user_name: Alex Plate
|
||||
commit_user_email: aleksei.plate@jetbrains.com
|
||||
commit_author: Alex Plate <aleksei.plate@jetbrains.com>
|
||||
commit_user_name: IdeaVim Bot
|
||||
commit_user_email: maintainers@ideavim.dev
|
||||
commit_author: IdeaVim Bot <maintainers@ideavim.dev>
|
||||
|
1
.gitignore
vendored
1
.gitignore
vendored
@@ -9,6 +9,7 @@
|
||||
!/.idea/fileTemplates
|
||||
!/.idea/runConfigurations
|
||||
!/.idea/codeStyles
|
||||
!/.idea/vcs.xml
|
||||
|
||||
**/build/
|
||||
**/out/
|
||||
|
5
.idea/codeStyles/Project.xml
generated
5
.idea/codeStyles/Project.xml
generated
@@ -6,6 +6,7 @@
|
||||
<option name="CONTINUATION_INDENT_SIZE" value="4" />
|
||||
</value>
|
||||
</option>
|
||||
<option name="LINE_SEPARATOR" value=" " />
|
||||
<JavaCodeStyleSettings>
|
||||
<option name="FIELD_NAME_PREFIX" value="my" />
|
||||
<option name="STATIC_FIELD_NAME_PREFIX" value="our" />
|
||||
@@ -191,6 +192,10 @@
|
||||
</codeStyleSettings>
|
||||
<codeStyleSettings language="kotlin">
|
||||
<option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
|
||||
<indentOptions>
|
||||
<option name="INDENT_SIZE" value="2" />
|
||||
<option name="TAB_SIZE" value="2" />
|
||||
</indentOptions>
|
||||
</codeStyleSettings>
|
||||
</code_scheme>
|
||||
</component>
|
2
.idea/copyright/IdeaVim.xml
generated
2
.idea/copyright/IdeaVim.xml
generated
@@ -1,6 +1,6 @@
|
||||
<component name="CopyrightManager">
|
||||
<copyright>
|
||||
<option name="notice" value="IdeaVim - Vim emulator for IDEs based on the IntelliJ platform Copyright (C) 2003-&#36;today.year The IdeaVim authors This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>." />
|
||||
<option name="notice" value="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." />
|
||||
<option name="myName" value="IdeaVim" />
|
||||
</copyright>
|
||||
</component>
|
14
.idea/inspectionProfiles/Qodana.xml
generated
14
.idea/inspectionProfiles/Qodana.xml
generated
@@ -33,9 +33,11 @@
|
||||
<option name="ignoreToString" value="false" />
|
||||
<option name="nonNlsCommentPattern" value="NON-NLS" />
|
||||
</inspection_tool>
|
||||
<inspection_tool class="MagicConstant" enabled="false" level="WARNING" enabled_by_default="false" />
|
||||
<inspection_tool class="MissortedModifiers" enabled="true" level="WARNING" enabled_by_default="true">
|
||||
<option name="m_requireAnnotationsFirst" value="true" />
|
||||
</inspection_tool>
|
||||
<inspection_tool class="SameParameterValue" enabled="false" level="WARNING" enabled_by_default="false" />
|
||||
<inspection_tool class="SameReturnValue" enabled="false" level="WARNING" enabled_by_default="false" />
|
||||
<inspection_tool class="SpellCheckingInspection" enabled="false" level="TYPO" enabled_by_default="false">
|
||||
<option name="processCode" value="true" />
|
||||
@@ -44,5 +46,17 @@
|
||||
</inspection_tool>
|
||||
<inspection_tool class="SuperTearDownInFinally" enabled="true" level="WARNING" enabled_by_default="true" />
|
||||
<inspection_tool class="UnstableApiUsage" enabled="false" level="WARNING" enabled_by_default="false" />
|
||||
<inspection_tool class="unused" enabled="false" level="WARNING" enabled_by_default="false" checkParameterExcludingHierarchy="false">
|
||||
<option name="LOCAL_VARIABLE" value="true" />
|
||||
<option name="FIELD" value="true" />
|
||||
<option name="METHOD" value="true" />
|
||||
<option name="CLASS" value="true" />
|
||||
<option name="PARAMETER" value="true" />
|
||||
<option name="REPORT_PARAMETER_FOR_PUBLIC_METHODS" value="true" />
|
||||
<option name="ADD_MAINS_TO_ENTRIES" value="true" />
|
||||
<option name="ADD_APPLET_TO_ENTRIES" value="true" />
|
||||
<option name="ADD_SERVLET_TO_ENTRIES" value="true" />
|
||||
<option name="ADD_NONJAVA_TO_ENTRIES" value="true" />
|
||||
</inspection_tool>
|
||||
</profile>
|
||||
</component>
|
2
.idea/scopes/Copyright.xml
generated
2
.idea/scopes/Copyright.xml
generated
@@ -1,3 +1,3 @@
|
||||
<component name="DependencyValidationManager">
|
||||
<scope name="Copyright" pattern="(file[IdeaVIM.main]:*/||file[IdeaVIM.test]:*/)&&!file[IdeaVIM.main]:resources//*" />
|
||||
<scope name="Copyright" pattern="file:*/&&!file:.github//*&&!file:.idea//*&&!file:.teamcity//*&&!file:assets//*&&!file:config//*&&!file:doc//*&&!file:gradle//*&&!file:gradlew&&!file:gradlew.bat&&!file:src/main/resources//*&&!file:antlr//*&&!file:java/com/maddyhome/idea/vim/regexp/RegExp.kt&&!file:java/com/maddyhome/idea/vim/ui/Tutor.kt&&!file:java/com/maddyhome/idea/vim/helper/ScrollViewHelper.kt" />
|
||||
</component>
|
16
.idea/vcs.xml
generated
Normal file
16
.idea/vcs.xml
generated
Normal file
@@ -0,0 +1,16 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="IssueNavigationConfiguration">
|
||||
<option name="links">
|
||||
<list>
|
||||
<IssueNavigationLink>
|
||||
<option name="issueRegexp" value="[A-Z]+\-\d+" />
|
||||
<option name="linkRegexp" value="https://youtrack.jetbrains.com/issue/$0" />
|
||||
</IssueNavigationLink>
|
||||
</list>
|
||||
</option>
|
||||
</component>
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||
</component>
|
||||
</project>
|
9
.teamcity/_Self/Constants.kt
vendored
9
.teamcity/_Self/Constants.kt
vendored
@@ -5,16 +5,15 @@ object Constants {
|
||||
const val EAP_CHANNEL = "eap"
|
||||
const val DEV_CHANNEL = "Dev"
|
||||
|
||||
const val VERSION = "1.11.1"
|
||||
const val DEV_VERSION = "1.12.0"
|
||||
const val VERSION = "2.4.0"
|
||||
|
||||
const val GITHUB_TESTS = "LATEST-EAP-SNAPSHOT"
|
||||
const val NVIM_TESTS = "LATEST-EAP-SNAPSHOT"
|
||||
const val PROPERTY_TESTS = "LATEST-EAP-SNAPSHOT"
|
||||
const val LONG_RUNNING_TESTS = "LATEST-EAP-SNAPSHOT"
|
||||
const val QODANA_TESTS = "LATEST-EAP-SNAPSHOT"
|
||||
const val RELEASE = "LATEST-EAP-SNAPSHOT"
|
||||
const val RELEASE = "2023.1.2"
|
||||
|
||||
const val RELEASE_DEV = "LATEST-EAP-SNAPSHOT"
|
||||
const val RELEASE_EAP = "LATEST-EAP-SNAPSHOT"
|
||||
const val RELEASE_DEV = "2023.1.2"
|
||||
const val RELEASE_EAP = "2023.1.2"
|
||||
}
|
||||
|
94
.teamcity/_Self/Project.kt
vendored
94
.teamcity/_Self/Project.kt
vendored
@@ -6,41 +6,25 @@ import _Self.buildTypes.Nvim
|
||||
import _Self.buildTypes.PluginVerifier
|
||||
import _Self.buildTypes.PropertyBased
|
||||
import _Self.buildTypes.Qodana
|
||||
import _Self.buildTypes.TestsForIntelliJ20222
|
||||
import _Self.buildTypes.TestsForIntelliJEAP
|
||||
import _Self.buildTypes.TestingBuildType
|
||||
import _Self.subprojects.GitHub
|
||||
import _Self.subprojects.OldTests
|
||||
import _Self.subprojects.Releases
|
||||
import _Self.vcsRoots.Branch_181
|
||||
import _Self.vcsRoots.Branch_183
|
||||
import _Self.vcsRoots.Branch_191_193
|
||||
import _Self.vcsRoots.Branch_201
|
||||
import _Self.vcsRoots.Branch_202
|
||||
import _Self.vcsRoots.Branch_203_212
|
||||
import _Self.vcsRoots.Branch_213_221
|
||||
import _Self.vcsRoots.Branch_Release
|
||||
import _Self.vcsRoots.GitHubPullRequest
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.Project
|
||||
|
||||
object Project : Project({
|
||||
description = "Vim emulation plugin for the IntelliJ platform products"
|
||||
description = "Vim engine for IDEs based on the IntelliJ platform"
|
||||
|
||||
subProjects(Releases, OldTests, GitHub)
|
||||
|
||||
// VCS roots
|
||||
vcsRoot(Branch_183)
|
||||
vcsRoot(Branch_181)
|
||||
vcsRoot(Branch_191_193)
|
||||
vcsRoot(Branch_201)
|
||||
vcsRoot(Branch_202)
|
||||
vcsRoot(Branch_203_212)
|
||||
vcsRoot(Branch_213_221)
|
||||
vcsRoot(Branch_Release)
|
||||
vcsRoot(GitHubPullRequest)
|
||||
|
||||
// Builds
|
||||
buildType(TestsForIntelliJEAP)
|
||||
buildType(TestsForIntelliJ20222)
|
||||
// Active tests
|
||||
buildType(TestingBuildType("Latest EAP", "<default>", version = "LATEST-EAP-SNAPSHOT"))
|
||||
buildType(TestingBuildType("Latest EAP With Xorg", "<default>", version = "LATEST-EAP-SNAPSHOT"))
|
||||
|
||||
buildType(PropertyBased)
|
||||
buildType(LongRunning)
|
||||
@@ -50,52 +34,22 @@ object Project : Project({
|
||||
buildType(Compatibility)
|
||||
|
||||
buildType(Qodana)
|
||||
|
||||
// Unknown staff generated by TeamCity
|
||||
features {
|
||||
feature {
|
||||
type = "CloudImage"
|
||||
id = "PROJECT_EXT_768"
|
||||
param("agent_pool_id", "41")
|
||||
param("amazon-id", "ami-0fa17ce8238eb8868")
|
||||
param("ebs-optimized", "false")
|
||||
param("image-instances-limit", "")
|
||||
param("image-name-prefix", "BuildAgentsIdeaVim")
|
||||
param("instance-type", "c5d.xlarge")
|
||||
param("key-pair-name", "teamcity-prod-pub")
|
||||
param("profileId", "amazon-48")
|
||||
param("security-group-ids", "sg-eda08696,sg-7332cf0f,")
|
||||
param("source-id", "BuildAgentsIdeaVim")
|
||||
param("spot-instance-price", "0.12")
|
||||
param("subnet-id", "subnet-58839511")
|
||||
param("use-spot-instances", "true")
|
||||
param("user-tags", "project=idea-vim")
|
||||
param("key-pair-name", "")
|
||||
param("spot-instance-price", "")
|
||||
}
|
||||
feature {
|
||||
type = "CloudProfile"
|
||||
id = "amazon-48"
|
||||
param("agentPushPreset", "")
|
||||
param("cloud-code", "amazon")
|
||||
param("description", "")
|
||||
param("enabled", "true")
|
||||
param("max-running-instances", "10")
|
||||
param("name", "Cloud Agents")
|
||||
param("next-hour", "")
|
||||
param("not-checked", "")
|
||||
param("profileId", "amazon-48")
|
||||
param("profileServerUrl", "")
|
||||
param("region", "eu-west-1")
|
||||
param("secure:access-id", "credentialsJSON:dbcdb2a2-de5f-4bc9-9421-292b19e83947")
|
||||
param("secure:secret-key", "credentialsJSON:65a87fe7-0977-4af9-96f1-344f2b82d269")
|
||||
param("system.cloud.profile_id", "amazon-48")
|
||||
param("terminate-idle-time", "15")
|
||||
param("total-work-time", "")
|
||||
param("user-script", "")
|
||||
param("spot-fleet-config", "")
|
||||
param("terminate-after-build", "true")
|
||||
param("name", "Cloud Agents - Single Build")
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
// Common build type for all configurations
|
||||
abstract class IdeaVimBuildType(init: BuildType.() -> Unit) : BuildType({
|
||||
init()
|
||||
|
||||
requirements {
|
||||
// These requirements define Linux-Medium configuration.
|
||||
// Unfortunately, requirement by name (teamcity.agent.name) doesn't work
|
||||
// IDK the reason for it, but on our agents this property is empty
|
||||
equals("teamcity.agent.hardware.cpuCount", "4")
|
||||
equals("teamcity.agent.os.family", "Linux")
|
||||
}
|
||||
|
||||
failureConditions {
|
||||
// Disable detection of the java OOM
|
||||
javaCrash = false
|
||||
}
|
||||
})
|
35
.teamcity/_Self/buildTypes/Compatibility.kt
vendored
35
.teamcity/_Self/buildTypes/Compatibility.kt
vendored
@@ -1,31 +1,46 @@
|
||||
package _Self.buildTypes
|
||||
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
|
||||
import _Self.IdeaVimBuildType
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildFeatures.golang
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.script
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.schedule
|
||||
|
||||
object Compatibility : BuildType({
|
||||
object Compatibility : IdeaVimBuildType({
|
||||
id("IdeaVimCompatibility")
|
||||
name = "IdeaVim compatibility with external plugins"
|
||||
|
||||
vcs {
|
||||
root(DslContext.settingsRoot)
|
||||
branchFilter = "+:<default>"
|
||||
}
|
||||
|
||||
steps {
|
||||
script {
|
||||
name = "Load Verifier"
|
||||
scriptContent = """
|
||||
mkdir verifier1
|
||||
curl -f -L -o verifier1/verifier-cli-dev-all-1.jar "https://packages.jetbrains.team/files/p/ideavim/plugin-verifier/verifier-cli-dev-all-1.jar"
|
||||
""".trimIndent()
|
||||
}
|
||||
script {
|
||||
name = "Check"
|
||||
scriptContent = """
|
||||
java -jar verifier/verifier-cli-dev-all.jar check-plugin '${'$'}org.jetbrains.IdeaVim-EasyMotion' [latest-IU] -team-city
|
||||
java -jar verifier/verifier-cli-dev-all.jar check-plugin '${'$'}io.github.mishkun.ideavimsneak' [latest-IU] -team-city
|
||||
java -jar verifier/verifier-cli-dev-all.jar check-plugin '${'$'}eu.theblob42.idea.whichkey' [latest-IU] -team-city
|
||||
java -jar verifier/verifier-cli-dev-all.jar check-plugin '${'$'}IdeaVimExtension' [latest-IU] -team-city
|
||||
# Outdated java -jar verifier/verifier-cli-dev-all.jar check-plugin '${'$'}github.zgqq.intellij-enhance' [latest-IU] -team-city
|
||||
java -jar verifier/verifier-cli-dev-all.jar check-plugin '${'$'}com.github.copilot' [latest-IU] -team-city
|
||||
java -jar verifier/verifier-cli-dev-all.jar check-plugin '${'$'}com.github.dankinsoid.multicursor' [latest-IU] -team-city
|
||||
java -jar verifier/verifier-cli-dev-all.jar check-plugin '${'$'}com.joshestein.ideavim-quickscope' [latest-IU] -team-city
|
||||
# We use a custom build of verifier that downloads IdeaVim from dev channel
|
||||
# To create a custom build: Download plugin verifier repo, add an if that switches to dev channel for IdeaVim repo
|
||||
# At the moment it's com.jetbrains.pluginverifier.repository.repositories.marketplace.MarketplaceRepository#getLastCompatibleVersionOfPlugin
|
||||
# Build using gradlew :intellij-plugin-verifier:verifier-cli:shadowJar
|
||||
# Upload verifier-cli-dev-all.jar artifact to the repo in IdeaVim space repo
|
||||
|
||||
java --version
|
||||
java -jar verifier1/verifier-cli-dev-all-1.jar check-plugin '${'$'}org.jetbrains.IdeaVim-EasyMotion' [latest-IU] -team-city
|
||||
java -jar verifier1/verifier-cli-dev-all-1.jar check-plugin '${'$'}io.github.mishkun.ideavimsneak' [latest-IU] -team-city
|
||||
java -jar verifier1/verifier-cli-dev-all-1.jar check-plugin '${'$'}eu.theblob42.idea.whichkey' [latest-IU] -team-city
|
||||
java -jar verifier1/verifier-cli-dev-all-1.jar check-plugin '${'$'}IdeaVimExtension' [latest-IU] -team-city
|
||||
# Outdated java -jar verifier/verifier-cli-dev-all.jar check-plugin '${'$'}github.zgqq.intellij-enhance' [latest-IU] -team-city
|
||||
java -jar verifier1/verifier-cli-dev-all-1.jar check-plugin '${'$'}com.github.copilot' [latest-IU] -team-city
|
||||
java -jar verifier1/verifier-cli-dev-all-1.jar check-plugin '${'$'}com.github.dankinsoid.multicursor' [latest-IU] -team-city
|
||||
java -jar verifier1/verifier-cli-dev-all-1.jar check-plugin '${'$'}com.joshestein.ideavim-quickscope' [latest-IU] -team-city
|
||||
""".trimIndent()
|
||||
}
|
||||
}
|
||||
|
77
.teamcity/_Self/buildTypes/GithubTests.kt
vendored
77
.teamcity/_Self/buildTypes/GithubTests.kt
vendored
@@ -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")
|
||||
}
|
||||
})
|
20
.teamcity/_Self/buildTypes/LongRunning.kt
vendored
20
.teamcity/_Self/buildTypes/LongRunning.kt
vendored
@@ -1,13 +1,14 @@
|
||||
package _Self.buildTypes
|
||||
|
||||
import _Self.Constants.LONG_RUNNING_TESTS
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
|
||||
import _Self.IdeaVimBuildType
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.schedule
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
|
||||
|
||||
object LongRunning : BuildType({
|
||||
object LongRunning : IdeaVimBuildType({
|
||||
name = "Long running tests"
|
||||
params {
|
||||
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
|
||||
@@ -17,6 +18,7 @@ object LongRunning : BuildType({
|
||||
|
||||
vcs {
|
||||
root(DslContext.settingsRoot)
|
||||
branchFilter = "+:<default>"
|
||||
|
||||
checkoutMode = CheckoutMode.AUTO
|
||||
}
|
||||
@@ -26,17 +28,19 @@ object LongRunning : BuildType({
|
||||
tasks = "clean testLongRunning"
|
||||
buildFile = ""
|
||||
enableStacktrace = true
|
||||
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
|
||||
}
|
||||
}
|
||||
|
||||
triggers {
|
||||
vcs {
|
||||
branchFilter = ""
|
||||
enabled = false
|
||||
branchFilter = "+:<default>"
|
||||
}
|
||||
schedule {
|
||||
enabled = true
|
||||
schedulingPolicy = daily {
|
||||
hour = 5
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
requirements {
|
||||
noLessThanVer("teamcity.agent.jvm.version", "1.8")
|
||||
}
|
||||
})
|
12
.teamcity/_Self/buildTypes/Nvim.kt
vendored
12
.teamcity/_Self/buildTypes/Nvim.kt
vendored
@@ -1,7 +1,7 @@
|
||||
package _Self.buildTypes
|
||||
|
||||
import _Self.Constants.NVIM_TESTS
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
|
||||
import _Self.IdeaVimBuildType
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
|
||||
@@ -10,7 +10,7 @@ import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.BuildFailu
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.failOnMetricChange
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
|
||||
|
||||
object Nvim : BuildType({
|
||||
object Nvim : IdeaVimBuildType({
|
||||
name = "Tests with nvim"
|
||||
description = "Running tests with nvim integration"
|
||||
|
||||
@@ -23,6 +23,7 @@ object Nvim : BuildType({
|
||||
|
||||
vcs {
|
||||
root(DslContext.settingsRoot)
|
||||
branchFilter = "+:<default>"
|
||||
|
||||
checkoutMode = CheckoutMode.AUTO
|
||||
}
|
||||
@@ -41,20 +42,15 @@ object Nvim : BuildType({
|
||||
tasks = "clean testWithNeovim"
|
||||
buildFile = ""
|
||||
enableStacktrace = true
|
||||
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
|
||||
}
|
||||
}
|
||||
|
||||
triggers {
|
||||
vcs {
|
||||
branchFilter = ""
|
||||
branchFilter = "+:<default>"
|
||||
}
|
||||
}
|
||||
|
||||
requirements {
|
||||
noLessThanVer("teamcity.agent.jvm.version", "1.8")
|
||||
}
|
||||
|
||||
failureConditions {
|
||||
failOnMetricChange {
|
||||
metric = BuildFailureOnMetric.MetricType.TEST_COUNT
|
||||
|
12
.teamcity/_Self/buildTypes/PluginVerifier.kt
vendored
12
.teamcity/_Self/buildTypes/PluginVerifier.kt
vendored
@@ -1,12 +1,12 @@
|
||||
package _Self.buildTypes
|
||||
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
|
||||
import _Self.IdeaVimBuildType
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
|
||||
|
||||
object PluginVerifier : BuildType({
|
||||
object PluginVerifier : IdeaVimBuildType({
|
||||
name = "Plugin verification"
|
||||
params {
|
||||
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
|
||||
@@ -15,6 +15,7 @@ object PluginVerifier : BuildType({
|
||||
|
||||
vcs {
|
||||
root(DslContext.settingsRoot)
|
||||
branchFilter = "+:<default>"
|
||||
|
||||
checkoutMode = CheckoutMode.AUTO
|
||||
}
|
||||
@@ -24,17 +25,12 @@ object PluginVerifier : BuildType({
|
||||
tasks = "clean runPluginVerifier"
|
||||
buildFile = ""
|
||||
enableStacktrace = true
|
||||
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
|
||||
}
|
||||
}
|
||||
|
||||
triggers {
|
||||
vcs {
|
||||
branchFilter = ""
|
||||
branchFilter = "+:<default>"
|
||||
}
|
||||
}
|
||||
|
||||
requirements {
|
||||
noLessThanVer("teamcity.agent.jvm.version", "1.8")
|
||||
}
|
||||
})
|
||||
|
12
.teamcity/_Self/buildTypes/PropertyBased.kt
vendored
12
.teamcity/_Self/buildTypes/PropertyBased.kt
vendored
@@ -1,13 +1,13 @@
|
||||
package _Self.buildTypes
|
||||
|
||||
import _Self.Constants.PROPERTY_TESTS
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
|
||||
import _Self.IdeaVimBuildType
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
|
||||
|
||||
object PropertyBased : BuildType({
|
||||
object PropertyBased : IdeaVimBuildType({
|
||||
name = "Property based tests"
|
||||
params {
|
||||
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
|
||||
@@ -17,6 +17,7 @@ object PropertyBased : BuildType({
|
||||
|
||||
vcs {
|
||||
root(DslContext.settingsRoot)
|
||||
branchFilter = "+:<default>"
|
||||
|
||||
checkoutMode = CheckoutMode.AUTO
|
||||
}
|
||||
@@ -26,17 +27,12 @@ object PropertyBased : BuildType({
|
||||
tasks = "clean testPropertyBased"
|
||||
buildFile = ""
|
||||
enableStacktrace = true
|
||||
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
|
||||
}
|
||||
}
|
||||
|
||||
triggers {
|
||||
vcs {
|
||||
branchFilter = ""
|
||||
branchFilter = "+:<default>"
|
||||
}
|
||||
}
|
||||
|
||||
requirements {
|
||||
noLessThanVer("teamcity.agent.jvm.version", "1.8")
|
||||
}
|
||||
})
|
||||
|
63
.teamcity/_Self/buildTypes/PublishVimEngine.kt
vendored
Normal file
63
.teamcity/_Self/buildTypes/PublishVimEngine.kt
vendored
Normal 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()
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
61
.teamcity/_Self/buildTypes/Qodana.kt
vendored
61
.teamcity/_Self/buildTypes/Qodana.kt
vendored
@@ -1,18 +1,18 @@
|
||||
package _Self.buildTypes
|
||||
|
||||
import _Self.Constants.QODANA_TESTS
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
|
||||
import _Self.IdeaVimBuildType
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.Qodana
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.qodana
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.BuildFailureOnMetric
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.failOnMetricChange
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.ScheduleTrigger
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.schedule
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
|
||||
|
||||
object Qodana : BuildType({
|
||||
object Qodana : IdeaVimBuildType({
|
||||
name = "Qodana checks"
|
||||
params {
|
||||
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
|
||||
@@ -22,48 +22,48 @@ object Qodana : BuildType({
|
||||
|
||||
vcs {
|
||||
root(DslContext.settingsRoot)
|
||||
branchFilter = "+:<default>"
|
||||
|
||||
checkoutMode = CheckoutMode.AUTO
|
||||
}
|
||||
|
||||
steps {
|
||||
gradle {
|
||||
name = "Generate grammar"
|
||||
tasks = "generateGrammarSource"
|
||||
}
|
||||
qodana {
|
||||
name = "Qodana"
|
||||
/*
|
||||
reportAsTestsEnable = ""
|
||||
failBuildOnErrors = ""
|
||||
codeInspectionXmlConfig = "Custom"
|
||||
codeInspectionCustomXmlConfigPath = ".idea/inspectionProfiles/Qodana.xml"
|
||||
reportAsTestsEnable = "true"
|
||||
*/
|
||||
clearConditions()
|
||||
param("licenseaudit-enable", "true")
|
||||
param("clonefinder-languages", "Java")
|
||||
param("clonefinder-mode", "")
|
||||
param("report-version", "")
|
||||
param("clonefinder-languages-container", "Java Kotlin")
|
||||
param("namesAndTagsCustom", "repo.labs.intellij.net/static-analyser/qodana")
|
||||
param("clonefinder-queried-project", "src")
|
||||
param("clonefinder-enable", "true")
|
||||
param("clonefinder-reference-projects", "src")
|
||||
param("yaml-configuration", "")
|
||||
param("clonefinder-languages", "")
|
||||
param("collect-anonymous-statistics", "")
|
||||
param("licenseaudit-enable", "")
|
||||
param("clonefinder-languages-container", "")
|
||||
param("linterVersion", "")
|
||||
param("clonefinder-queried-project", "")
|
||||
param("clonefinder-enable", "")
|
||||
param("clonefinder-reference-projects", "")
|
||||
linter = jvm {
|
||||
version = Qodana.JVMVersion.LATEST
|
||||
}
|
||||
reportAsTests = true
|
||||
additionalDockerArguments = "-e QODANA_TOKEN=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJvcmdhbml6YXRpb24iOiIzUFZrQSIsInByb2plY3QiOiIzN1FlQSIsInRva2VuIjoiM0t2bXoifQ.uohp81tM7iAfvvB6k8faarfpV-OjusAaEbWQ8iNrOgs"
|
||||
additionalQodanaArguments = "--baseline qodana.sarif.json"
|
||||
}
|
||||
}
|
||||
|
||||
triggers {
|
||||
vcs {
|
||||
enabled = true
|
||||
branchFilter = ""
|
||||
enabled = false
|
||||
branchFilter = "+:<default>"
|
||||
}
|
||||
schedule {
|
||||
schedulingPolicy = weekly {
|
||||
dayOfWeek = ScheduleTrigger.DAY.Tuesday
|
||||
schedulingPolicy = daily {
|
||||
hour = 12
|
||||
minute = 0
|
||||
timezone = "SERVER"
|
||||
}
|
||||
branchFilter = ""
|
||||
triggerBuild = always()
|
||||
param("dayOfWeek", "Sunday")
|
||||
enabled = false
|
||||
}
|
||||
}
|
||||
|
||||
@@ -74,11 +74,8 @@ object Qodana : BuildType({
|
||||
comparison = BuildFailureOnMetric.MetricComparison.MORE
|
||||
compareTo = value()
|
||||
metric = BuildFailureOnMetric.MetricType.TEST_FAILED_COUNT
|
||||
param("metricKey", "QodanaProblemsTotal")
|
||||
param("metricKey", "QodanaProblemsNew")
|
||||
enabled = false
|
||||
}
|
||||
}
|
||||
|
||||
requirements {
|
||||
noLessThanVer("teamcity.agent.jvm.version", "1.8")
|
||||
}
|
||||
})
|
||||
|
76
.teamcity/_Self/buildTypes/Release.kt
vendored
76
.teamcity/_Self/buildTypes/Release.kt
vendored
@@ -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()
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
38
.teamcity/_Self/buildTypes/ReleaseDev.kt
vendored
38
.teamcity/_Self/buildTypes/ReleaseDev.kt
vendored
@@ -1,22 +1,22 @@
|
||||
package _Self.buildTypes
|
||||
|
||||
import _Self.Constants.DEV_CHANNEL
|
||||
import _Self.Constants.DEV_VERSION
|
||||
import _Self.Constants.RELEASE_DEV
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
|
||||
import _Self.IdeaVimBuildType
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildFeatures.sshAgent
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.script
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.BuildFailureOnMetric
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.failOnMetricChange
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.schedule
|
||||
|
||||
object ReleaseDev : BuildType({
|
||||
object ReleaseDev : IdeaVimBuildType({
|
||||
name = "Publish Dev Build"
|
||||
description = "Build and publish Dev of IdeaVim plugin"
|
||||
|
||||
artifactRules = "build/distributions/*"
|
||||
buildNumberPattern = "$DEV_VERSION-dev.%build.counter%"
|
||||
|
||||
params {
|
||||
param("env.ORG_GRADLE_PROJECT_ideaVersion", RELEASE_DEV)
|
||||
@@ -25,23 +25,35 @@ object ReleaseDev : BuildType({
|
||||
"credentialsJSON:61a36031-4da1-4226-a876-b8148bf32bde",
|
||||
label = "Password"
|
||||
)
|
||||
param("env.ORG_GRADLE_PROJECT_version", "%build.number%")
|
||||
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
|
||||
param("env.ORG_GRADLE_PROJECT_publishChannels", DEV_CHANNEL)
|
||||
}
|
||||
|
||||
vcs {
|
||||
root(DslContext.settingsRoot)
|
||||
branchFilter = "+:<default>"
|
||||
|
||||
checkoutMode = CheckoutMode.AUTO
|
||||
}
|
||||
|
||||
steps {
|
||||
script {
|
||||
name = "Pull git tags"
|
||||
scriptContent = "git fetch --tags origin"
|
||||
}
|
||||
script {
|
||||
name = "Pull git history"
|
||||
scriptContent = "git fetch --unshallow"
|
||||
}
|
||||
gradle {
|
||||
tasks = "clean publishPlugin"
|
||||
buildFile = ""
|
||||
enableStacktrace = true
|
||||
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
|
||||
name = "Calculate new dev version"
|
||||
tasks = "scripts:calculateNewDevVersion"
|
||||
}
|
||||
gradle {
|
||||
name = "Set TeamCity build number"
|
||||
tasks = "scripts:setTeamCityBuildNumber"
|
||||
}
|
||||
gradle {
|
||||
tasks = "publishPlugin"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -55,6 +67,12 @@ object ReleaseDev : BuildType({
|
||||
}
|
||||
}
|
||||
|
||||
features {
|
||||
sshAgent {
|
||||
teamcitySshKey = "IdeaVim ssh keys"
|
||||
}
|
||||
}
|
||||
|
||||
failureConditions {
|
||||
failOnMetricChange {
|
||||
metric = BuildFailureOnMetric.MetricType.ARTIFACT_SIZE
|
||||
|
70
.teamcity/_Self/buildTypes/ReleaseEap.kt
vendored
70
.teamcity/_Self/buildTypes/ReleaseEap.kt
vendored
@@ -1,22 +1,21 @@
|
||||
package _Self.buildTypes
|
||||
|
||||
import _Self.Constants.DEV_VERSION
|
||||
import _Self.Constants.EAP_CHANNEL
|
||||
import _Self.Constants.RELEASE_EAP
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
|
||||
import _Self.IdeaVimBuildType
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildFeatures.vcsLabeling
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildFeatures.sshAgent
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.script
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.BuildFailureOnMetric
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.failOnMetricChange
|
||||
|
||||
object ReleaseEap : BuildType({
|
||||
object ReleaseEap : IdeaVimBuildType({
|
||||
name = "Publish EAP Build"
|
||||
description = "Build and publish EAP of IdeaVim plugin"
|
||||
|
||||
artifactRules = "build/distributions/*"
|
||||
buildNumberPattern = "$DEV_VERSION-eap.%build.counter%"
|
||||
|
||||
params {
|
||||
param("env.ORG_GRADLE_PROJECT_ideaVersion", RELEASE_EAP)
|
||||
@@ -25,8 +24,6 @@ object ReleaseEap : BuildType({
|
||||
"credentialsJSON:61a36031-4da1-4226-a876-b8148bf32bde",
|
||||
label = "Password"
|
||||
)
|
||||
param("env.ORG_GRADLE_PROJECT_version", "%build.number%")
|
||||
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
|
||||
param("env.ORG_GRADLE_PROJECT_publishChannels", EAP_CHANNEL)
|
||||
password(
|
||||
"env.ORG_GRADLE_PROJECT_slackUrl",
|
||||
@@ -37,25 +34,58 @@ object ReleaseEap : BuildType({
|
||||
|
||||
vcs {
|
||||
root(DslContext.settingsRoot)
|
||||
branchFilter = "+:<default>"
|
||||
|
||||
checkoutMode = CheckoutMode.AUTO
|
||||
}
|
||||
|
||||
steps {
|
||||
script {
|
||||
name = "Pull git tags"
|
||||
scriptContent = "git fetch --tags origin"
|
||||
}
|
||||
script {
|
||||
name = "Pull git history"
|
||||
scriptContent = "git fetch --unshallow"
|
||||
}
|
||||
gradle {
|
||||
tasks = "clean publishPlugin"
|
||||
buildFile = ""
|
||||
enableStacktrace = true
|
||||
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
|
||||
name = "Calculate new eap version"
|
||||
tasks = "scripts:calculateNewEapVersion"
|
||||
}
|
||||
gradle {
|
||||
name = "Set TeamCity build number"
|
||||
tasks = "scripts:setTeamCityBuildNumber"
|
||||
}
|
||||
gradle {
|
||||
name = "Add release tag"
|
||||
tasks = "scripts:addReleaseTag"
|
||||
}
|
||||
gradle {
|
||||
tasks = "publishPlugin"
|
||||
}
|
||||
// Same as the script below. However, jgit can't find ssh keys on TeamCity
|
||||
// gradle {
|
||||
// name = "Push changes to the repo"
|
||||
// tasks = "scripts:pushChanges"
|
||||
// }
|
||||
script {
|
||||
name = "Push changes to the repo"
|
||||
scriptContent = """
|
||||
branch=$(git branch --show-current)
|
||||
echo current branch is ${'$'}branch
|
||||
if [ "master" != "${'$'}branch" ];
|
||||
then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
git push origin %build.number%
|
||||
""".trimIndent()
|
||||
}
|
||||
}
|
||||
|
||||
features {
|
||||
vcsLabeling {
|
||||
vcsRootId = "${DslContext.settingsRoot.id}"
|
||||
labelingPattern = "%system.build.number%"
|
||||
successfulOnly = true
|
||||
branchFilter = ""
|
||||
sshAgent {
|
||||
teamcitySshKey = "IdeaVim ssh keys"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -70,4 +100,12 @@ object ReleaseEap : BuildType({
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
requirements {
|
||||
// These requirements define Linux-XLarge configuration.
|
||||
// Unfortunately, requirement by name (teamcity.agent.name) doesn't work
|
||||
// IDK the reason for it, but on our agents this property is empty
|
||||
// equals("teamcity.agent.hardware.cpuCount", "16")
|
||||
// equals("teamcity.agent.os.family", "Linux")
|
||||
}
|
||||
})
|
||||
|
155
.teamcity/_Self/buildTypes/ReleasePlugin.kt
vendored
Normal file
155
.teamcity/_Self/buildTypes/ReleasePlugin.kt
vendored
Normal 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()
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
@@ -1,6 +1,8 @@
|
||||
@file:Suppress("ClassName")
|
||||
|
||||
package _Self.buildTypes
|
||||
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
|
||||
import _Self.IdeaVimBuildType
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
|
||||
@@ -8,39 +10,47 @@ import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.BuildFailu
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.failOnMetricChange
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
|
||||
|
||||
sealed class ActiveTests(buildName: String, ijVersion: String) : BuildType({
|
||||
name = buildName
|
||||
open class TestingBuildType(
|
||||
private val testName: String,
|
||||
private val branch: String,
|
||||
private val version: String = testName,
|
||||
private val javaVersion: String? = null,
|
||||
private val javaPlugin: Boolean = true,
|
||||
) : IdeaVimBuildType({
|
||||
id("IdeaVimTests_${testName.vanish()}")
|
||||
name = "Tests for IntelliJ $testName"
|
||||
|
||||
params {
|
||||
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
|
||||
param("env.ORG_GRADLE_PROJECT_ideaVersion", ijVersion)
|
||||
param("env.ORG_GRADLE_PROJECT_legacyNoJavaPlugin", javaPlugin.not().toString())
|
||||
param("env.ORG_GRADLE_PROJECT_ideaVersion", version)
|
||||
param("env.ORG_GRADLE_PROJECT_instrumentPluginCode", "false")
|
||||
if (javaVersion != null) {
|
||||
param("env.ORG_GRADLE_PROJECT_javaVersion", javaVersion)
|
||||
}
|
||||
}
|
||||
|
||||
vcs {
|
||||
root(DslContext.settingsRoot)
|
||||
branchFilter = "+:$branch"
|
||||
|
||||
checkoutMode = CheckoutMode.AUTO
|
||||
}
|
||||
|
||||
steps {
|
||||
gradle {
|
||||
tasks = "clean check -x ktlintMainSourceSetCheck -x ktlintTestSourceSetCheck"
|
||||
tasks = "clean test"
|
||||
buildFile = ""
|
||||
enableStacktrace = true
|
||||
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
|
||||
}
|
||||
}
|
||||
|
||||
triggers {
|
||||
vcs {
|
||||
branchFilter = ""
|
||||
branchFilter = "+:$branch"
|
||||
}
|
||||
}
|
||||
|
||||
requirements {
|
||||
noLessThanVer("teamcity.agent.jvm.version", "1.8")
|
||||
}
|
||||
|
||||
failureConditions {
|
||||
failOnMetricChange {
|
||||
metric = BuildFailureOnMetric.MetricType.TEST_COUNT
|
||||
@@ -54,5 +64,9 @@ sealed class ActiveTests(buildName: String, ijVersion: String) : BuildType({
|
||||
}
|
||||
})
|
||||
|
||||
object TestsForIntelliJEAP : ActiveTests("Tests for IntelliJ Latest EAP", "LATEST-EAP-SNAPSHOT")
|
||||
object TestsForIntelliJ20222 : ActiveTests("Tests for IntelliJ 2022.2", "2022.2.1")
|
||||
private fun String.vanish(): String {
|
||||
return this
|
||||
.replace(' ', '_')
|
||||
.replace('.', '_')
|
||||
.replace('-', '_')
|
||||
}
|
@@ -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()
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
@@ -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")
|
@@ -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")
|
@@ -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")
|
@@ -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")
|
@@ -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")
|
@@ -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")
|
71
.teamcity/_Self/subprojects/GitHub.kt
vendored
71
.teamcity/_Self/subprojects/GitHub.kt
vendored
@@ -1,11 +1,78 @@
|
||||
package _Self.subprojects
|
||||
|
||||
import _Self.buildTypes.GithubTests
|
||||
import _Self.Constants
|
||||
import _Self.IdeaVimBuildType
|
||||
import _Self.vcsRoots.GitHubPullRequest
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.Project
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildFeatures.PullRequests
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildFeatures.commitStatusPublisher
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildFeatures.pullRequests
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.VcsTrigger
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
|
||||
|
||||
object GitHub : Project({
|
||||
name = "Pull Requests checks"
|
||||
description = "Automatic checking of GitHub Pull Requests"
|
||||
|
||||
buildType(GithubTests)
|
||||
buildType(Github("clean test", "Tests"))
|
||||
})
|
||||
|
||||
class Github(command: String, desc: String) : IdeaVimBuildType({
|
||||
name = "GitHub Pull Requests $desc"
|
||||
description = "Test GitHub pull requests $desc"
|
||||
|
||||
params {
|
||||
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
|
||||
param("env.ORG_GRADLE_PROJECT_ideaVersion", Constants.GITHUB_TESTS)
|
||||
param("env.ORG_GRADLE_PROJECT_instrumentPluginCode", "false")
|
||||
}
|
||||
|
||||
vcs {
|
||||
root(GitHubPullRequest)
|
||||
|
||||
checkoutMode = CheckoutMode.AUTO
|
||||
branchFilter = """
|
||||
+:*
|
||||
-:<default>
|
||||
""".trimIndent()
|
||||
}
|
||||
|
||||
steps {
|
||||
gradle {
|
||||
tasks = command
|
||||
buildFile = ""
|
||||
enableStacktrace = true
|
||||
}
|
||||
}
|
||||
|
||||
triggers {
|
||||
vcs {
|
||||
quietPeriodMode = VcsTrigger.QuietPeriodMode.USE_DEFAULT
|
||||
branchFilter = ""
|
||||
}
|
||||
}
|
||||
|
||||
features {
|
||||
pullRequests {
|
||||
provider = github {
|
||||
authType = token {
|
||||
token = "credentialsJSON:90f3b439-6e91-40f7-a086-d4dd8e0ea9b8"
|
||||
}
|
||||
filterTargetBranch = "refs/heads/master"
|
||||
filterAuthorRole = PullRequests.GitHubRoleFilter.EVERYBODY
|
||||
}
|
||||
}
|
||||
commitStatusPublisher {
|
||||
vcsRootExtId = "${GitHubPullRequest.id}"
|
||||
publisher = github {
|
||||
githubUrl = "https://api.github.com"
|
||||
authType = personalToken {
|
||||
token = "credentialsJSON:90f3b439-6e91-40f7-a086-d4dd8e0ea9b8"
|
||||
}
|
||||
}
|
||||
param("github_oauth_user", "AlexPl292")
|
||||
}
|
||||
}
|
||||
})
|
||||
|
38
.teamcity/_Self/subprojects/OldTests.kt
vendored
38
.teamcity/_Self/subprojects/OldTests.kt
vendored
@@ -1,33 +1,23 @@
|
||||
package _Self.subprojects
|
||||
|
||||
import _Self.buildTypes.TestsForIntelliJ20181
|
||||
import _Self.buildTypes.TestsForIntelliJ20182
|
||||
import _Self.buildTypes.TestsForIntelliJ20183
|
||||
import _Self.buildTypes.TestsForIntelliJ20191
|
||||
import _Self.buildTypes.TestsForIntelliJ20192
|
||||
import _Self.buildTypes.TestsForIntelliJ20193
|
||||
import _Self.buildTypes.TestsForIntelliJ20201
|
||||
import _Self.buildTypes.TestsForIntelliJ20202
|
||||
import _Self.buildTypes.TestsForIntelliJ20203
|
||||
import _Self.buildTypes.TestsForIntelliJ20211
|
||||
import _Self.buildTypes.TestsForIntelliJ20212
|
||||
import _Self.buildTypes.TestsForIntelliJ20213
|
||||
import _Self.buildTypes.TestingBuildType
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.Project
|
||||
|
||||
object OldTests : Project({
|
||||
name = "Old IdeaVim tests"
|
||||
description = "Tests for older versions of IJ"
|
||||
|
||||
buildType(TestsForIntelliJ20181)
|
||||
buildType(TestsForIntelliJ20182)
|
||||
buildType(TestsForIntelliJ20183)
|
||||
buildType(TestsForIntelliJ20191)
|
||||
buildType(TestsForIntelliJ20192)
|
||||
buildType(TestsForIntelliJ20193)
|
||||
buildType(TestsForIntelliJ20201)
|
||||
buildType(TestsForIntelliJ20202)
|
||||
buildType(TestsForIntelliJ20203)
|
||||
buildType(TestsForIntelliJ20211)
|
||||
buildType(TestsForIntelliJ20212)
|
||||
buildType(TestsForIntelliJ20213)
|
||||
buildType(TestingBuildType("IC-2018.1", "181-182", javaVersion = "1.8", javaPlugin = false))
|
||||
buildType(TestingBuildType("IC-2018.2", "181-182", javaVersion = "1.8", javaPlugin = false))
|
||||
buildType(TestingBuildType("IC-2018.3", "183", javaVersion = "1.8", javaPlugin = false))
|
||||
buildType(TestingBuildType("IC-2019.1", "191-193", javaVersion = "1.8", javaPlugin = false))
|
||||
buildType(TestingBuildType("IC-2019.2", "191-193", javaVersion = "1.8", javaPlugin = false))
|
||||
buildType(TestingBuildType("IC-2019.3", "191-193", javaVersion = "1.8", javaPlugin = false))
|
||||
buildType(TestingBuildType("IC-2020.1", "201", javaVersion = "1.8", javaPlugin = false))
|
||||
buildType(TestingBuildType("IC-2020.2", "202", javaVersion = "1.8", javaPlugin = false))
|
||||
buildType(TestingBuildType("IC-2020.3", "203-212", javaVersion = "1.8", javaPlugin = false))
|
||||
buildType(TestingBuildType("IC-2021.1", "203-212", javaVersion = "1.8", javaPlugin = false))
|
||||
buildType(TestingBuildType("IC-2021.2.2", "203-212", javaVersion = "1.8", javaPlugin = false))
|
||||
buildType(TestingBuildType("IC-2021.3.2", "213-221", javaVersion = "1.8", javaPlugin = false))
|
||||
buildType(TestingBuildType("IC-2022.2.3", branch = "222", javaPlugin = false))
|
||||
})
|
||||
|
30
.teamcity/_Self/subprojects/Releases.kt
vendored
30
.teamcity/_Self/subprojects/Releases.kt
vendored
@@ -1,15 +1,41 @@
|
||||
package _Self.subprojects
|
||||
|
||||
import _Self.buildTypes.Release
|
||||
import _Self.buildTypes.PublishVimEngine
|
||||
import _Self.buildTypes.ReleaseDev
|
||||
import _Self.buildTypes.ReleaseEap
|
||||
import _Self.buildTypes.ReleaseMajor
|
||||
import _Self.buildTypes.ReleaseMinor
|
||||
import _Self.buildTypes.ReleasePatch
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.ParameterDisplay
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.Project
|
||||
|
||||
object Releases : Project({
|
||||
name = "IdeaVim releases"
|
||||
description = "Stable and EAP releases for IdeaVim"
|
||||
|
||||
buildType(Release)
|
||||
params {
|
||||
password(
|
||||
"env.CERTIFICATE_CHAIN",
|
||||
"credentialsJSON:1bab4a88-10e7-4bf9-856c-e6253499dc95",
|
||||
display = ParameterDisplay.HIDDEN
|
||||
)
|
||||
password(
|
||||
"env.PRIVATE_KEY_PASSWORD",
|
||||
"credentialsJSON:7c12c867-fe09-4a2f-884d-6fd0ec0a1e79",
|
||||
display = ParameterDisplay.HIDDEN
|
||||
)
|
||||
password(
|
||||
"env.PRIVATE_KEY",
|
||||
"credentialsJSON:5d8b553d-fd7e-4347-abd2-51d8d0f2b3f7",
|
||||
display = ParameterDisplay.HIDDEN
|
||||
)
|
||||
}
|
||||
|
||||
// buildType(Release)
|
||||
buildType(ReleaseMajor)
|
||||
buildType(ReleaseMinor)
|
||||
buildType(ReleasePatch)
|
||||
buildType(ReleaseEap)
|
||||
buildType(ReleaseDev)
|
||||
buildType(PublishVimEngine)
|
||||
})
|
||||
|
12
.teamcity/_Self/vcsRoots/Branch_181.kt
vendored
12
.teamcity/_Self/vcsRoots/Branch_181.kt
vendored
@@ -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
|
||||
})
|
12
.teamcity/_Self/vcsRoots/Branch_183.kt
vendored
12
.teamcity/_Self/vcsRoots/Branch_183.kt
vendored
@@ -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
|
||||
})
|
12
.teamcity/_Self/vcsRoots/Branch_191_193.kt
vendored
12
.teamcity/_Self/vcsRoots/Branch_191_193.kt
vendored
@@ -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
|
||||
})
|
12
.teamcity/_Self/vcsRoots/Branch_201.kt
vendored
12
.teamcity/_Self/vcsRoots/Branch_201.kt
vendored
@@ -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
|
||||
})
|
12
.teamcity/_Self/vcsRoots/Branch_202.kt
vendored
12
.teamcity/_Self/vcsRoots/Branch_202.kt
vendored
@@ -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
|
||||
})
|
12
.teamcity/_Self/vcsRoots/Branch_203_212.kt
vendored
12
.teamcity/_Self/vcsRoots/Branch_203_212.kt
vendored
@@ -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
|
||||
})
|
12
.teamcity/_Self/vcsRoots/Branch_213_221.kt
vendored
12
.teamcity/_Self/vcsRoots/Branch_213_221.kt
vendored
@@ -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"
|
||||
})
|
11
.teamcity/_Self/vcsRoots/Branch_Release.kt
vendored
11
.teamcity/_Self/vcsRoots/Branch_Release.kt
vendored
@@ -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"
|
||||
})
|
@@ -7,6 +7,6 @@ object GitHubPullRequest : GitVcsRoot({
|
||||
url = "git@github.com:JetBrains/ideavim.git"
|
||||
branchSpec = "+:refs/(pull/*)/head"
|
||||
authMethod = uploadedKey {
|
||||
uploadedKey = "Alex Plate TeamCity key"
|
||||
uploadedKey = "IdeaVim ssh keys"
|
||||
}
|
||||
})
|
||||
|
20
.teamcity/patches/buildTypes/IdeaVimTests_Latest_EAP_With_Xorg.kts
vendored
Normal file
20
.teamcity/patches/buildTypes/IdeaVimTests_Latest_EAP_With_Xorg.kts
vendored
Normal 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")
|
||||
}
|
||||
}
|
||||
}
|
55
.teamcity/patches/buildTypes/Qodana.kts
vendored
55
.teamcity/patches/buildTypes/Qodana.kts
vendored
@@ -1,55 +0,0 @@
|
||||
package patches.buildTypes
|
||||
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.*
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.Qodana
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.qodana
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.ui.*
|
||||
|
||||
/*
|
||||
This patch script was generated by TeamCity on settings change in UI.
|
||||
To apply the patch, change the buildType with id = 'Qodana'
|
||||
accordingly, and delete the patch script.
|
||||
*/
|
||||
changeBuildType(RelativeId("Qodana")) {
|
||||
expectSteps {
|
||||
qodana {
|
||||
name = "Qodana"
|
||||
linter = jvm {
|
||||
version = Qodana.JVMVersion.LATEST
|
||||
}
|
||||
param("clonefinder-enable", "true")
|
||||
param("clonefinder-languages", "Java")
|
||||
param("clonefinder-languages-container", "Java Kotlin")
|
||||
param("clonefinder-mode", "")
|
||||
param("clonefinder-queried-project", "src")
|
||||
param("clonefinder-reference-projects", "src")
|
||||
param("licenseaudit-enable", "true")
|
||||
param("namesAndTagsCustom", "repo.labs.intellij.net/static-analyser/qodana")
|
||||
param("report-version", "")
|
||||
param("yaml-configuration", "")
|
||||
}
|
||||
}
|
||||
steps {
|
||||
insert(0) {
|
||||
gradle {
|
||||
name = "Generate grammar"
|
||||
tasks = "generateGrammarSource"
|
||||
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
|
||||
}
|
||||
}
|
||||
update<Qodana>(1) {
|
||||
clearConditions()
|
||||
reportAsTests = true
|
||||
argumentsCommandDocker = "-e QODANA_TOKEN=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJvcmdhbml6YXRpb24iOiIzUFZrQSIsInByb2plY3QiOiIzN1FlQSIsInRva2VuIjoiM0t2bXoifQ.uohp81tM7iAfvvB6k8faarfpV-OjusAaEbWQ8iNrOgs"
|
||||
argumentsEntryPointDocker = "--baseline qodana.sarif.json"
|
||||
param("clonefinder-languages", "")
|
||||
param("collect-anonymous-statistics", "")
|
||||
param("licenseaudit-enable", "")
|
||||
param("clonefinder-languages-container", "")
|
||||
param("clonefinder-queried-project", "")
|
||||
param("clonefinder-enable", "")
|
||||
param("clonefinder-reference-projects", "")
|
||||
}
|
||||
}
|
||||
}
|
27
.teamcity/patches/buildTypes/ReleaseEap.kts
vendored
27
.teamcity/patches/buildTypes/ReleaseEap.kts
vendored
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
20
.teamcity/patches/buildTypes/ReleasePatch.kts
vendored
Normal file
20
.teamcity/patches/buildTypes/ReleasePatch.kts
vendored
Normal file
@@ -0,0 +1,20 @@
|
||||
package patches.buildTypes
|
||||
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.*
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.ui.*
|
||||
|
||||
/*
|
||||
This patch script was generated by TeamCity on settings change in UI.
|
||||
To apply the patch, change the buildType with id = 'ReleasePatch'
|
||||
accordingly, and delete the patch script.
|
||||
*/
|
||||
changeBuildType(RelativeId("ReleasePatch")) {
|
||||
params {
|
||||
expect {
|
||||
password("env.ORG_GRADLE_PROJECT_youtrackToken", "credentialsJSON:3cd3e867-282c-451f-b958-bc95d56a8450", display = ParameterDisplay.HIDDEN)
|
||||
}
|
||||
update {
|
||||
password("env.ORG_GRADLE_PROJECT_youtrackToken", "credentialsJSON:7bc0eb3a-b86a-4ebd-b622-d4ef12d7e1d3", display = ParameterDisplay.HIDDEN)
|
||||
}
|
||||
}
|
||||
}
|
2
.teamcity/pom.xml
vendored
2
.teamcity/pom.xml
vendored
@@ -22,7 +22,7 @@
|
||||
</repository>
|
||||
<repository>
|
||||
<id>teamcity-server</id>
|
||||
<url>https://teamcity.jetbrains.com/app/dsl-plugins-repository</url>
|
||||
<url>https://ideavim.teamcity.com/app/dsl-plugins-repository</url>
|
||||
<snapshots>
|
||||
<enabled>true</enabled>
|
||||
</snapshots>
|
||||
|
7
.teamcity/settings.kts
vendored
7
.teamcity/settings.kts
vendored
@@ -1,4 +1,5 @@
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.*
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.project
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.version
|
||||
|
||||
/*
|
||||
The settings script is an entry point for defining a single
|
||||
@@ -29,5 +30,5 @@ node (Plugins -> teamcity-configs -> teamcity-configs:generate),
|
||||
the 'Debug' option is available in the context menu for the task.
|
||||
*/
|
||||
|
||||
version = "2020.2"
|
||||
project(_Self.Project)
|
||||
version = "2023.05"
|
||||
project(_Self.Project)
|
||||
|
62
AUTHORS.md
62
AUTHORS.md
@@ -165,7 +165,7 @@ Contributors:
|
||||
|
||||
Pavel Fatin
|
||||
* [![icon][mail]](mailto:tietyt@gmail.com)
|
||||
[![icon][github-off]](#)
|
||||
[![icon][github-off]](https://github.com/DanKaplanSES)
|
||||
|
||||
tieTYT
|
||||
* [![icon][mail]](mailto:nickgieschen@gmail.com)
|
||||
@@ -185,7 +185,7 @@ Contributors:
|
||||
|
||||
Vladimir Parfinenko
|
||||
* [![icon][mail]](mailto:hassmann@hwdev.de)
|
||||
[![icon][github-off]](#)
|
||||
[![icon][github-off]](https://github.com/lumie1337)
|
||||
|
||||
Florian Hassmann
|
||||
* [![icon][mail]](mailto:jpalus@fastmail.com)
|
||||
@@ -193,7 +193,7 @@ Contributors:
|
||||
|
||||
Jan Palus
|
||||
* [![icon][mail]](mailto:kpetrov@ripe.net)
|
||||
[![icon][github-off]](#)
|
||||
[![icon][github-off]](https://github.com/constpetrov)
|
||||
|
||||
Konstantin Petrov
|
||||
* [![icon][mail]](mailto:ya-ikmik2012@yandex.ru)
|
||||
@@ -220,10 +220,6 @@ Contributors:
|
||||
[![icon][github]](https://github.com/johngrib)
|
||||
|
||||
John Grib
|
||||
* [![icon][mail]](mailto:hild@b4mad.net)
|
||||
[![icon][github-off]](#)
|
||||
|
||||
Marcel Hild
|
||||
* [![icon][mail]](mailto:vedranb@gmail.com)
|
||||
[![icon][github]](https://github.com/vedran)
|
||||
|
||||
@@ -319,10 +315,6 @@ Contributors:
|
||||
[![icon][github]](https://github.com/angelbot)
|
||||
|
||||
John Weigel
|
||||
* [![icon][mail]](mailto:kevinz@weghst.com)
|
||||
[![icon][github]](https://github.com/kevin70)
|
||||
|
||||
kk
|
||||
* [![icon][mail]](mailto:runforprogram@163.com)
|
||||
[![icon][github]](https://github.com/runforprogram)
|
||||
|
||||
@@ -455,6 +447,54 @@ Contributors:
|
||||
[![icon][github]](https://github.com/lippfi)
|
||||
|
||||
lippfi
|
||||
* [![icon][mail]](mailto:3237686+Runinho@users.noreply.github.com)
|
||||
[![icon][github]](https://github.com/Runinho)
|
||||
|
||||
Runinho
|
||||
* [![icon][mail]](mailto:me@yuhaowen.com)
|
||||
[![icon][github]](https://github.com/adaext)
|
||||
|
||||
Ada
|
||||
* [![icon][mail]](mailto:dominic.palmer@outlook.com)
|
||||
[![icon][github]](https://github.com/dominicpalmer)
|
||||
|
||||
Dominic Palmer
|
||||
* [![icon][mail]](mailto:kawagh.dev@gmail.com)
|
||||
[![icon][github]](https://github.com/kawagh)
|
||||
|
||||
kawagh
|
||||
* [![icon][mail]](mailto:78074243+danisevas@users.noreply.github.com)
|
||||
[![icon][github]](https://github.com/danisevas)
|
||||
|
||||
Dani Sevastianov
|
||||
* [![icon][mail]](mailto:oskar.persson@polken.se)
|
||||
[![icon][github]](https://github.com/oskarpersson/)
|
||||
|
||||
Oskar Persson
|
||||
* [![icon][mail]](mailto:silence.m@hotmail.com)
|
||||
[![icon][github]](https://github.com/Stzx)
|
||||
|
||||
Silence Tai
|
||||
* [![icon][mail]](mailto:tszsumng90@gmail.com)
|
||||
[![icon][github]](https://github.com/samabcde)
|
||||
|
||||
Sam Ng
|
||||
* [![icon][mail]](mailto:ludwig.valda.vasquez@jetbrains.com)
|
||||
[![icon][github]](https://github.com/ludwig-jb)
|
||||
|
||||
ludwig-jb
|
||||
|
||||
Previous contributors:
|
||||
|
||||
* [![icon][mail]](mailto:hild@b4mad.net)
|
||||
[![icon][github-off]](#)
|
||||
|
||||
Marcel Hild
|
||||
* [![icon][mail]](mailto:kevinz@weghst.com)
|
||||
[![icon][github]](https://github.com/kevin70)
|
||||
|
||||
kk
|
||||
|
||||
|
||||
If you are a contributor and your name is not listed here, feel free to
|
||||
contact the maintainers.
|
||||
|
137
CHANGES.md
137
CHANGES.md
@@ -25,6 +25,139 @@ usual beta standards.
|
||||
|
||||
## To Be Released
|
||||
|
||||
### Fixes:
|
||||
* [VIM-3060](https://youtrack.jetbrains.com/issue/VIM-3060) Clipboard interaction stopped working
|
||||
|
||||
### Merged PRs:
|
||||
* [697](https://github.com/JetBrains/ideavim/pull/697) by [Matt Ellis](https://github.com/citizenmatt): Support per-window "global" values for local-to-window options
|
||||
|
||||
## 2.5.0, 2023-09-01
|
||||
|
||||
### Fixes:
|
||||
* [VIM-802](https://youtrack.jetbrains.com/issue/VIM-802) IdeaVim vs. Vim: discrepancies in using registers
|
||||
* [VIM-2246](https://youtrack.jetbrains.com/issue/VIM-2246) X11/Xorg Primary selection register "* not supported
|
||||
* [VIM-2313](https://youtrack.jetbrains.com/issue/VIM-2313)
|
||||
[VIM-2318](https://youtrack.jetbrains.com/issue/VIM-2318)
|
||||
[VIM-2666](https://youtrack.jetbrains.com/issue/VIM-2666)
|
||||
[VIM-2951](https://youtrack.jetbrains.com/issue/VIM-2951)
|
||||
IdeaVim works correctly in read-only editors like log or tests output.
|
||||
|
||||
### Merged PRs:
|
||||
* [666](https://github.com/JetBrains/ideavim/pull/666) by [Matt Ellis](https://github.com/citizenmatt): Improve formatting of `:set` command output
|
||||
* [667](https://github.com/JetBrains/ideavim/pull/667) by [Matt Ellis](https://github.com/citizenmatt): Eagerly initialise local options and introduce option scope
|
||||
* [672](https://github.com/JetBrains/ideavim/pull/672) by [Matt Ellis](https://github.com/citizenmatt): Fix issue adding back hidden status bar widget
|
||||
* [668](https://github.com/JetBrains/ideavim/pull/668) by [ludwig-jb](https://github.com/ludwig-jb): Handle unicode grapheme clusters
|
||||
|
||||
## 2.4.0, 2023-07-18
|
||||
|
||||
### Fixes:
|
||||
* [VIM-2975](https://youtrack.jetbrains.com/issue/VIM-2975) Fix the offset after the rendered docs
|
||||
* [VIM-2685](https://youtrack.jetbrains.com/issue/VIM-2685) Register command outputs different values for same registers
|
||||
* [VIM-1294](https://youtrack.jetbrains.com/issue/VIM-1294) unvoluntary unfolding when using ideavim
|
||||
* [VIM-2818](https://youtrack.jetbrains.com/issue/VIM-2818) Wrong caret position after multicaret paste
|
||||
|
||||
### Merged PRs:
|
||||
* [662](https://github.com/JetBrains/ideavim/pull/662) by [ludwig-jb](https://github.com/ludwig-jb): Update VimMessages#updateStatusBar to accept VimEditor
|
||||
* [659](https://github.com/JetBrains/ideavim/pull/659) by [Sam Ng](https://github.com/samabcde): VIM-2920 fix select block expansion when enclose boundary is line break
|
||||
|
||||
## 2.3.0, 2023-06-14
|
||||
|
||||
### Features:
|
||||
* Matchit now supports PHP files | [VIM-2678](https://youtrack.jetbrains.com/issue/VIM-2678)
|
||||
|
||||
### Fixes:
|
||||
* [VIM-2909](https://youtrack.jetbrains.com/issue/VIM-2909) Fix incorrect file detection while closing diff window
|
||||
* [VIM-2912](https://youtrack.jetbrains.com/issue/VIM-2912) Fix focus after :q
|
||||
* [VIM-2930](https://youtrack.jetbrains.com/issue/VIM-2930) vim-multiple-cursors + ReplaceWithRegister issue
|
||||
* [VIM-2945](https://youtrack.jetbrains.com/issue/VIM-2945) %-movement mismatches braces
|
||||
* [VIM-2953](https://youtrack.jetbrains.com/issue/VIM-2953) The previous fix for :q command caused weird behavior of tab closing
|
||||
* [VIM-2964](https://youtrack.jetbrains.com/issue/VIM-2964) Fix an issue with leaking caret instance
|
||||
|
||||
### Merged PRs:
|
||||
* [616](https://github.com/JetBrains/ideavim/pull/616) by [Matt Ellis](https://github.com/citizenmatt): Refactor/option delegated properties
|
||||
* [626](https://github.com/JetBrains/ideavim/pull/626) by [Martin Yzeiri](https://github.com/myzeiri): Matchit bug fixes
|
||||
* [619](https://github.com/JetBrains/ideavim/pull/619) by [Matt Ellis](https://github.com/citizenmatt): Fix some local options being used as global options
|
||||
* [638](https://github.com/JetBrains/ideavim/pull/638) by [Sam Ng](https://github.com/samabcde): VIM-2615 add support to sort u command
|
||||
* [646](https://github.com/JetBrains/ideavim/pull/646) by [Sam Ng](https://github.com/samabcde): VIM-1990 fix repeat delete find or till wrong MotionType
|
||||
* [649](https://github.com/JetBrains/ideavim/pull/649) by [Martin Yzeiri](https://github.com/myzeiri): Add Matchit support for PHP
|
||||
|
||||
## 2.2.0, 2023-04-20
|
||||
|
||||
### Features:
|
||||
* Now every secondary caret has its own marks. You can use marks and `gv` in multiple-caret mode now.
|
||||
|
||||
### Fixes:
|
||||
* [VIM-1829](https://youtrack.jetbrains.com/issue/VIM-1829/key-combinations-are-not-working-in-visual-mode-IdeaVim) Fix marks when moving lines up/down
|
||||
* [VIM-2130](https://youtrack.jetbrains.com/issue/VIM-2130/Vim-visual-mode-mapping-isnt-behaving-correctly-in-ideavim-it-leaves-visual-mode-after-its-executed) Fix marks when moving lines up/down
|
||||
* [VIM-2428](https://youtrack.jetbrains.com/issue/VIM-2428/The-gv-command-doesnt-work) Fix marks when moving lines up/down
|
||||
* [VIM-2686](https://youtrack.jetbrains.com/issue/VIM-2686/Multiple-caret-marks) Add individual mark storage for each secondary caret
|
||||
* [VIM-2840](https://youtrack.jetbrains.com/issue/VIM-2840) Replace with register does not work with count
|
||||
* [VIM-658](https://youtrack.jetbrains.com/issue/VIM-658) Stop macro on error
|
||||
* [VIM-2787](https://youtrack.jetbrains.com/issue/VIM-2787) Save ideavimrc loading
|
||||
* [VIM-2850](https://youtrack.jetbrains.com/issue/VIM-2850) Marks exception during IDE startup
|
||||
* [VIM-2804](https://youtrack.jetbrains.com/issue/VIM-2804) IdeaVim multiple-cursors copy and paste issue when "set clipboard+=unnamed"
|
||||
* [VIM-1768](https://youtrack.jetbrains.com/issue/VIM-1768) Delete surrounding character while in multiple cursors mode
|
||||
* [VIM-282](https://youtrack.jetbrains.com/issue/VIM-282) Cursor line wrapping support (whichwrap)
|
||||
* [VIM-2315](https://youtrack.jetbrains.com/issue/VIM-2315) Fix overlapping mappings execution
|
||||
* [VIM-44](https://youtrack.jetbrains.com/issue/VIM-44) Unify navigation history between ideavim and idea
|
||||
* [VIM-1735](https://youtrack.jetbrains.com/issue/VIM-1735) Fix enabling mulple carets after line selection
|
||||
* [VIM-2881](https://youtrack.jetbrains.com/issue/VIM-2881) ReplaceRegister does no longer worker with MultiCursor
|
||||
* [VIM-2244](https://youtrack.jetbrains.com/issue/VIM-2244) nnoremap mapping doesn't work correctly
|
||||
* [VIM-2885](https://youtrack.jetbrains.com/issue/VIM-2885) "v:searchforward" does't work for IdeaVim
|
||||
* [VIM-2733](https://youtrack.jetbrains.com/issue/VIM-2733) vim-surround emulation interacts incorrectly with unmatched quotes on previous lines
|
||||
* [VIM-2884](https://youtrack.jetbrains.com/issue/VIM-2884) Moving multiple lines in visual mode is not working
|
||||
* [VIM-2868](https://youtrack.jetbrains.com/issue/VIM-2868) Pasting in visual mode with P should not replace yank register like when pasting with p
|
||||
* [VIM-2819](https://youtrack.jetbrains.com/issue/VIM-2819) Move command works incorrectly
|
||||
* [VIM-795](https://youtrack.jetbrains.com/issue/VIM-795) Ctrl-w + h doesn't alway work (window navigation to the left window)
|
||||
* [VIM-1551](https://youtrack.jetbrains.com/issue/VIM-1551) Surround: line surround not working
|
||||
* [VIM-1746](https://youtrack.jetbrains.com/issue/VIM-1746) IdeaVim Surround removes unwanted characters
|
||||
* [VIM-1750](https://youtrack.jetbrains.com/issue/VIM-1750) Surround with tag wrong position
|
||||
* [VIM-2286](https://youtrack.jetbrains.com/issue/VIM-2286) Set surround not working for me as expected
|
||||
* [VIM-2433](https://youtrack.jetbrains.com/issue/VIM-2433) Do not clear clipboard after inserting with ideaput
|
||||
* [VIM-2896](https://youtrack.jetbrains.com/issue/VIM-2896) Correct ordering of handlers
|
||||
* [VIM-2912](https://youtrack.jetbrains.com/issue/VIM-2912) Fix focus after :q
|
||||
* [VIM-2909](https://youtrack.jetbrains.com/issue/VIM-2909) Fix incorrect file detection while closing diff window
|
||||
|
||||
### Merged PRs:
|
||||
* [589](https://github.com/JetBrains/ideavim/pull/589) by [Matt Ellis](https://github.com/citizenmatt): Refactor option usage and introduce accessor API
|
||||
* [604](https://github.com/JetBrains/ideavim/pull/604) by [Dominic Palmer](https://github.com/dominicpalmer): VIM-2773: Include empty lines in the selection when dragging backwards from EOL
|
||||
* [603](https://github.com/JetBrains/ideavim/pull/603) by [Dominic Palmer](https://github.com/dominicpalmer): VIM-2773: Prevent viewport displacement on undo
|
||||
* [602](https://github.com/JetBrains/ideavim/pull/602) by [Matt Ellis](https://github.com/citizenmatt): Refactor options service
|
||||
* [612](https://github.com/JetBrains/ideavim/pull/612) by [Dani Sevastianov](https://github.com/danisevas): Fix quick-scope setup documentation
|
||||
* [617](https://github.com/JetBrains/ideavim/pull/617) by [Silence Tai](https://github.com/Stzx): Fix dispose operation
|
||||
|
||||
## 2.1.0, 2023-01-10
|
||||
|
||||
### Features:
|
||||
* Add IdeaVim tutor. You can access it via the status bar icon.
|
||||
|
||||
### Fixes:
|
||||
* [VIM-2797](https://youtrack.jetbrains.com/issue/VIM-2797) Introduce variable to mute default argtextobj mappings
|
||||
* [VIM-758](https://youtrack.jetbrains.com/issue/VIM-758) Support d mappings
|
||||
* [VIM-2577](https://youtrack.jetbrains.com/issue/VIM-2577) Fix paste at the end of notebook cell
|
||||
* [VIM-2813](https://youtrack.jetbrains.com/issue/VIM-2813) Migrate update checker to VimStandalonePluginUpdateChecker
|
||||
* [VIM-2833](https://youtrack.jetbrains.com/issue/VIM-2833) Fix rare deadlock during put in insert mode from clipboard
|
||||
|
||||
### Merged PRs:
|
||||
* [558](https://github.com/JetBrains/ideavim/pull/558) by [Matt Ellis](https://github.com/citizenmatt): Fix incorrect normalising for trailing inlay
|
||||
* [554](https://github.com/JetBrains/ideavim/pull/554) by [Matt Ellis](https://github.com/citizenmatt): Refactor "last column" calculations
|
||||
* [553](https://github.com/JetBrains/ideavim/pull/553) by [Matt Ellis](https://github.com/citizenmatt): Rearrange and rename some code in engine
|
||||
* [560](https://github.com/JetBrains/ideavim/pull/560) by [Runinho](https://github.com/Runinho): Fix(VIM-2577) paste not working at end of notebook cell
|
||||
* [571](https://github.com/JetBrains/ideavim/pull/571) by [Ada](https://github.com/adaext): Remove the redundant quotation mark at the end of "packadd matchit" command
|
||||
* [561](https://github.com/JetBrains/ideavim/pull/561) by [Matt Ellis](https://github.com/citizenmatt): Fix incremental search not scrolling to current match
|
||||
* [559](https://github.com/JetBrains/ideavim/pull/559) by [Runinho](https://github.com/Runinho): Fix(VIM-2760) notebookCommandMode detection
|
||||
* [579](https://github.com/JetBrains/ideavim/pull/579) by [Martin Yzeiri](https://github.com/myzeiri): VIM-2799: Add Matchit support for cshtml files
|
||||
* [580](https://github.com/JetBrains/ideavim/pull/580) by [Martin Yzeiri](https://github.com/myzeiri): Matchit: Add more Rider file types
|
||||
* [583](https://github.com/JetBrains/ideavim/pull/583) by [Matt Ellis](https://github.com/citizenmatt): Introduce ScrollGroup
|
||||
* [586](https://github.com/JetBrains/ideavim/pull/586) by [Patrick Elmquist](https://github.com/patrick-elmquist): Fixed number references in Tutor
|
||||
|
||||
## 2.0.0, 2022-11-01
|
||||
|
||||
### Changes:
|
||||
* IdeaVim changes license from GPL-2.0 or later to MIT. [VIM-2782](https://youtrack.jetbrains.com/issue/VIM-2782)
|
||||
|
||||
## 1.12.0, 2022-11-01
|
||||
|
||||
### Fixes:
|
||||
* [VIM-1758](https://youtrack.jetbrains.com/issue/VIM-1758) Commentary plugin in rider
|
||||
* [VIM-1903](https://youtrack.jetbrains.com/issue/VIM-1903) Autoindent now works in rider
|
||||
@@ -33,6 +166,10 @@ usual beta standards.
|
||||
* [VIM-2718](https://youtrack.jetbrains.com/issue/VIM-2718) Fixed case where the primary caret was changed
|
||||
* [VIM-2766](https://youtrack.jetbrains.com/issue/VIM-2766) Move NERDTree update to background thread
|
||||
* [VIM-2768](https://youtrack.jetbrains.com/issue/VIM-2768) Refactor listeners
|
||||
* [VIM-2776](https://youtrack.jetbrains.com/issue/VIM-2776) Use filename index for file search
|
||||
|
||||
### Merged PRs:
|
||||
* [550](https://github.com/JetBrains/ideavim/pull/550) by [Matt Ellis](https://github.com/citizenmatt): Fix(VIM-2778) Remove override of editor scroll setting
|
||||
|
||||
## 1.11.0, 2022-08-09
|
||||
|
||||
|
@@ -32,6 +32,10 @@ OK, ready to do some coding?
|
||||
Yoo hoo! You’re all set to begin contributing.
|
||||
We've prepared some useful configurations for you:
|
||||
|
||||
- `Start IJ with IdeaVim`
|
||||
- `IdeaVim tests`
|
||||
- `IdeaVim full verification`
|
||||
|
||||

|
||||
|
||||
And here are useful gradle commands:
|
||||
@@ -87,9 +91,16 @@ Here are some guides for testing:
|
||||
|
||||
1. Read the javadoc for the `@VimBehaviorDiffers` annotation in the source code.
|
||||
|
||||
2. Please avoid senseless text like "dhjkwaldjwa", "asdasdasd", "123 123 123 123", etc. Try to choose an example
|
||||
text that is easy to read and understand what is wrong if the test fails. For example, take a few lines from your
|
||||
favorite poem, or use Vladimir Nabokov’s “A Discovery" if you don't have one.
|
||||
2. Please avoid senseless text like "dhjkwaldjwa", "asdasdasd", "123 123 123 123", etc. Use a few lines of code or
|
||||
the following template:
|
||||
```text
|
||||
Lorem Ipsum
|
||||
|
||||
Lorem ipsum dolor sit amet,
|
||||
consectetur adipiscing elit
|
||||
Sed in orci mauris.
|
||||
Cras id tellus in ex imperdiet egestas.
|
||||
```
|
||||
|
||||
3. Don't forget to test your functionality with line start, line end, file start, file end, empty line, multiple
|
||||
carets, dollar motion, etc.
|
||||
@@ -149,7 +160,7 @@ This is just terrible. [You know what to do](https://github.com/JetBrains/ideavi
|
||||
|
||||
### Resources:
|
||||
|
||||
* [Continuous integration builds](https://teamcity.jetbrains.com/project.html?projectId=IdeaVim&guest=1)
|
||||
* [Continuous integration builds](https://ideavim.teamcity.com/)
|
||||
* [Bug tracker](https://youtrack.jetbrains.com/issues/VIM)
|
||||
* [Chat on gitter](https://gitter.im/JetBrains/ideavim)
|
||||
* [IdeaVim Channel](https://jb.gg/bi6zp7) on [JetBrains Server](https://discord.gg/jetbrains)
|
||||
@@ -157,5 +168,5 @@ This is just terrible. [You know what to do](https://github.com/JetBrains/ideavi
|
||||
* [Changelog](CHANGES.md)
|
||||
* [Contributors listing](AUTHORS.md)
|
||||
|
||||
[teamcity-build-status]: https://teamcity.jetbrains.com/viewType.html?buildTypeId=IdeaVim_TestsForIntelliJEAP&guest=1
|
||||
[teamcity-build-status-svg]: https://teamcity.jetbrains.com/app/rest/builds/buildType:(id:IdeaVim_TestsForIntelliJEAP)/statusIcon.svg?guest=1
|
||||
[teamcity-build-status]: https://ideavim.teamcity.com/viewType.html?buildTypeId=Ideavim_IdeaVimTests_Latest_EAP&guest=1
|
||||
[teamcity-build-status-svg]: https://ideavim.teamcity.com/app/rest/builds/buildType:(id:Ideavim_IdeaVimTests_Latest_EAP)/statusIcon.svg?guest=1
|
||||
|
352
LICENSE.txt
352
LICENSE.txt
@@ -1,339 +1,21 @@
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 2, June 1991
|
||||
MIT License
|
||||
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
Copyright (c) 2003-present The IdeaVim authors
|
||||
|
||||
Preamble
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The licenses for most software are designed to take away your
|
||||
freedom to share and change it. By contrast, the GNU General Public
|
||||
License is intended to guarantee your freedom to share and change free
|
||||
software--to make sure the software is free for all its users. This
|
||||
General Public License applies to most of the Free Software
|
||||
Foundation's software and to any other program whose authors commit to
|
||||
using it. (Some other Free Software Foundation software is covered by
|
||||
the GNU Lesser General Public License instead.) You can apply it to
|
||||
your programs, too.
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
this service if you wish), that you receive source code or can get it
|
||||
if you want it, that you can change the software or use pieces of it
|
||||
in new free programs; and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid
|
||||
anyone to deny you these rights or to ask you to surrender the rights.
|
||||
These restrictions translate to certain responsibilities for you if you
|
||||
distribute copies of the software, or if you modify it.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must give the recipients all the rights that
|
||||
you have. You must make sure that they, too, receive or can get the
|
||||
source code. And you must show them these terms so they know their
|
||||
rights.
|
||||
|
||||
We protect your rights with two steps: (1) copyright the software, and
|
||||
(2) offer you this license which gives you legal permission to copy,
|
||||
distribute and/or modify the software.
|
||||
|
||||
Also, for each author's protection and ours, we want to make certain
|
||||
that everyone understands that there is no warranty for this free
|
||||
software. If the software is modified by someone else and passed on, we
|
||||
want its recipients to know that what they have is not the original, so
|
||||
that any problems introduced by others will not reflect on the original
|
||||
authors' reputations.
|
||||
|
||||
Finally, any free program is threatened constantly by software
|
||||
patents. We wish to avoid the danger that redistributors of a free
|
||||
program will individually obtain patent licenses, in effect making the
|
||||
program proprietary. To prevent this, we have made it clear that any
|
||||
patent must be licensed for everyone's free use or not licensed at all.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License applies to any program or other work which contains
|
||||
a notice placed by the copyright holder saying it may be distributed
|
||||
under the terms of this General Public License. The "Program", below,
|
||||
refers to any such program or work, and a "work based on the Program"
|
||||
means either the Program or any derivative work under copyright law:
|
||||
that is to say, a work containing the Program or a portion of it,
|
||||
either verbatim or with modifications and/or translated into another
|
||||
language. (Hereinafter, translation is included without limitation in
|
||||
the term "modification".) Each licensee is addressed as "you".
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of
|
||||
running the Program is not restricted, and the output from the Program
|
||||
is covered only if its contents constitute a work based on the
|
||||
Program (independent of having been made by running the Program).
|
||||
Whether that is true depends on what the Program does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Program's
|
||||
source code as you receive it, in any medium, provided that you
|
||||
conspicuously and appropriately publish on each copy an appropriate
|
||||
copyright notice and disclaimer of warranty; keep intact all the
|
||||
notices that refer to this License and to the absence of any warranty;
|
||||
and give any other recipients of the Program a copy of this License
|
||||
along with the Program.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy, and
|
||||
you may at your option offer warranty protection in exchange for a fee.
|
||||
|
||||
2. You may modify your copy or copies of the Program or any portion
|
||||
of it, thus forming a work based on the Program, and copy and
|
||||
distribute such modifications or work under the terms of Section 1
|
||||
above, provided that you also meet all of these conditions:
|
||||
|
||||
a) You must cause the modified files to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
|
||||
b) You must cause any work that you distribute or publish, that in
|
||||
whole or in part contains or is derived from the Program or any
|
||||
part thereof, to be licensed as a whole at no charge to all third
|
||||
parties under the terms of this License.
|
||||
|
||||
c) If the modified program normally reads commands interactively
|
||||
when run, you must cause it, when started running for such
|
||||
interactive use in the most ordinary way, to print or display an
|
||||
announcement including an appropriate copyright notice and a
|
||||
notice that there is no warranty (or else, saying that you provide
|
||||
a warranty) and that users may redistribute the program under
|
||||
these conditions, and telling the user how to view a copy of this
|
||||
License. (Exception: if the Program itself is interactive but
|
||||
does not normally print such an announcement, your work based on
|
||||
the Program is not required to print an announcement.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Program,
|
||||
and can be reasonably considered independent and separate works in
|
||||
themselves, then this License, and its terms, do not apply to those
|
||||
sections when you distribute them as separate works. But when you
|
||||
distribute the same sections as part of a whole which is a work based
|
||||
on the Program, the distribution of the whole must be on the terms of
|
||||
this License, whose permissions for other licensees extend to the
|
||||
entire whole, and thus to each and every part regardless of who wrote it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest
|
||||
your rights to work written entirely by you; rather, the intent is to
|
||||
exercise the right to control the distribution of derivative or
|
||||
collective works based on the Program.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Program
|
||||
with the Program (or with a work based on the Program) on a volume of
|
||||
a storage or distribution medium does not bring the other work under
|
||||
the scope of this License.
|
||||
|
||||
3. You may copy and distribute the Program (or a work based on it,
|
||||
under Section 2) in object code or executable form under the terms of
|
||||
Sections 1 and 2 above provided that you also do one of the following:
|
||||
|
||||
a) Accompany it with the complete corresponding machine-readable
|
||||
source code, which must be distributed under the terms of Sections
|
||||
1 and 2 above on a medium customarily used for software interchange; or,
|
||||
|
||||
b) Accompany it with a written offer, valid for at least three
|
||||
years, to give any third party, for a charge no more than your
|
||||
cost of physically performing source distribution, a complete
|
||||
machine-readable copy of the corresponding source code, to be
|
||||
distributed under the terms of Sections 1 and 2 above on a medium
|
||||
customarily used for software interchange; or,
|
||||
|
||||
c) Accompany it with the information you received as to the offer
|
||||
to distribute corresponding source code. (This alternative is
|
||||
allowed only for noncommercial distribution and only if you
|
||||
received the program in object code or executable form with such
|
||||
an offer, in accord with Subsection b above.)
|
||||
|
||||
The source code for a work means the preferred form of the work for
|
||||
making modifications to it. For an executable work, complete source
|
||||
code means all the source code for all modules it contains, plus any
|
||||
associated interface definition files, plus the scripts used to
|
||||
control compilation and installation of the executable. However, as a
|
||||
special exception, the source code distributed need not include
|
||||
anything that is normally distributed (in either source or binary
|
||||
form) with the major components (compiler, kernel, and so on) of the
|
||||
operating system on which the executable runs, unless that component
|
||||
itself accompanies the executable.
|
||||
|
||||
If distribution of executable or object code is made by offering
|
||||
access to copy from a designated place, then offering equivalent
|
||||
access to copy the source code from the same place counts as
|
||||
distribution of the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
4. You may not copy, modify, sublicense, or distribute the Program
|
||||
except as expressly provided under this License. Any attempt
|
||||
otherwise to copy, modify, sublicense or distribute the Program is
|
||||
void, and will automatically terminate your rights under this License.
|
||||
However, parties who have received copies, or rights, from you under
|
||||
this License will not have their licenses terminated so long as such
|
||||
parties remain in full compliance.
|
||||
|
||||
5. You are not required to accept this License, since you have not
|
||||
signed it. However, nothing else grants you permission to modify or
|
||||
distribute the Program or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Program (or any work based on the
|
||||
Program), you indicate your acceptance of this License to do so, and
|
||||
all its terms and conditions for copying, distributing or modifying
|
||||
the Program or works based on it.
|
||||
|
||||
6. Each time you redistribute the Program (or any work based on the
|
||||
Program), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute or modify the Program subject to
|
||||
these terms and conditions. You may not impose any further
|
||||
restrictions on the recipients' exercise of the rights granted herein.
|
||||
You are not responsible for enforcing compliance by third parties to
|
||||
this License.
|
||||
|
||||
7. If, as a consequence of a court judgment or allegation of patent
|
||||
infringement or for any other reason (not limited to patent issues),
|
||||
conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot
|
||||
distribute so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you
|
||||
may not distribute the Program at all. For example, if a patent
|
||||
license would not permit royalty-free redistribution of the Program by
|
||||
all those who receive copies directly or indirectly through you, then
|
||||
the only way you could satisfy both it and this License would be to
|
||||
refrain entirely from distribution of the Program.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under
|
||||
any particular circumstance, the balance of the section is intended to
|
||||
apply and the section as a whole is intended to apply in other
|
||||
circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any
|
||||
patents or other property right claims or to contest validity of any
|
||||
such claims; this section has the sole purpose of protecting the
|
||||
integrity of the free software distribution system, which is
|
||||
implemented by public license practices. Many people have made
|
||||
generous contributions to the wide range of software distributed
|
||||
through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing
|
||||
to distribute software through any other system and a licensee cannot
|
||||
impose that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to
|
||||
be a consequence of the rest of this License.
|
||||
|
||||
8. If the distribution and/or use of the Program is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Program under this License
|
||||
may add an explicit geographical distribution limitation excluding
|
||||
those countries, so that distribution is permitted only in or among
|
||||
countries not thus excluded. In such case, this License incorporates
|
||||
the limitation as if written in the body of this License.
|
||||
|
||||
9. The Free Software Foundation may publish revised and/or new versions
|
||||
of the General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Program
|
||||
specifies a version number of this License which applies to it and "any
|
||||
later version", you have the option of following the terms and conditions
|
||||
either of that version or of any later version published by the Free
|
||||
Software Foundation. If the Program does not specify a version number of
|
||||
this License, you may choose any version ever published by the Free Software
|
||||
Foundation.
|
||||
|
||||
10. If you wish to incorporate parts of the Program into other free
|
||||
programs whose distribution conditions are different, write to the author
|
||||
to ask for permission. For software which is copyrighted by the Free
|
||||
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||
make exceptions for this. Our decision will be guided by the two goals
|
||||
of preserving the free status of all derivatives of our free software and
|
||||
of promoting the sharing and reuse of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||
REPAIR OR CORRECTION.
|
||||
|
||||
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
convey the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along
|
||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program is interactive, make it output a short notice like this
|
||||
when it starts in an interactive mode:
|
||||
|
||||
Gnomovision version 69, Copyright (C) year name of author
|
||||
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, the commands you use may
|
||||
be called something other than `show w' and `show c'; they could even be
|
||||
mouse-clicks or menu items--whatever suits your program.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or your
|
||||
school, if any, to sign a "copyright disclaimer" for the program, if
|
||||
necessary. Here is a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
||||
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
||||
|
||||
<signature of Ty Coon>, 1 April 1989
|
||||
Ty Coon, President of Vice
|
||||
|
||||
This General Public License does not permit incorporating your program into
|
||||
proprietary programs. If your program is a subroutine library, you may
|
||||
consider it more useful to permit linking proprietary applications with the
|
||||
library. If this is what you want to do, use the GNU Lesser General
|
||||
Public License instead of this License.
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
38
README.md
38
README.md
@@ -9,6 +9,7 @@ IdeaVim
|
||||
[![Rating][plugin-rating-svg]][plugin-repo]
|
||||
[![Version][plugin-version-svg]][plugin-repo]
|
||||
[![Gitter][gitter-svg]][gitter]
|
||||
[](https://codecov.io/gh/JetBrains/ideavim)
|
||||
[![Twitter][twitter-svg]][twitter]
|
||||
|
||||
IdeaVim is a Vim engine for JetBrains IDEs.
|
||||
@@ -21,9 +22,10 @@ IdeaVim is a Vim engine for JetBrains IDEs.
|
||||
|
||||
##### Resources:
|
||||
|
||||
* [Plugin homepage](https://plugins.jetbrains.com/plugin/164-ideavim)
|
||||
* [Plugin homepage](https://lp.jetbrains.com/ideavim/)
|
||||
* [Plugin on Marketplace](https://plugins.jetbrains.com/plugin/164-ideavim)
|
||||
* [Changelog](CHANGES.md)
|
||||
* [Continuous integration builds](https://teamcity.jetbrains.com/project.html?projectId=IdeaVim&guest=1)
|
||||
* [Continuous integration builds](https://ideavim.teamcity.com/)
|
||||
|
||||
#### Compatibility
|
||||
|
||||
@@ -52,7 +54,7 @@ Would you like to try new features and fixes? Join the Early Access Program and
|
||||
receive EAP builds as updates!
|
||||
|
||||
1. Click the IdeaVim icon <img src="src/main/resources/META-INF/pluginIcon_noBorders.svg" width="16" height="16" alt="icon"/>
|
||||
in the status bar | `Early Access Program` | `Subscibe to EAP`
|
||||
in the status bar | `Early Access Program` | `Subscribe to EAP`
|
||||
|
||||
|
||||
Or subscribe to EAP updates manually:
|
||||
@@ -88,7 +90,7 @@ Here are some examples of supported vim features and commands:
|
||||
* Vim web help
|
||||
* `~/.ideavimrc` configuration file
|
||||
|
||||
[IdeaVim plugins](https://github.com/JetBrains/ideavim/wiki/Emulated-plugins):
|
||||
[IdeaVim plugins](https://github.com/JetBrains/ideavim/wiki/IdeaVim-Plugins):
|
||||
|
||||
* vim-easymotion
|
||||
* NERDTree
|
||||
@@ -102,7 +104,8 @@ Here are some examples of supported vim features and commands:
|
||||
* vim-highlightedyank
|
||||
* vim-paragraph-motion
|
||||
* vim-indent-object
|
||||
* match.it
|
||||
* match.it
|
||||
etc
|
||||
|
||||
See also:
|
||||
|
||||
@@ -201,7 +204,7 @@ Put your settings to `$XDG_CONFIG_HOME/ideavim/ideavimrc` file.
|
||||
IdeaVim Plugins
|
||||
--------------------
|
||||
|
||||
See [doc/emulated-plugins.md](https://github.com/JetBrains/ideavim/wiki/Emulated-plugins)
|
||||
See [doc/IdeaVim Plugins.md](https://github.com/JetBrains/ideavim/wiki/IdeaVim-Plugins)
|
||||
|
||||
Executing IDE Actions
|
||||
---------------------
|
||||
@@ -210,14 +213,14 @@ IdeaVim adds various commands for listing and executing arbitrary IDE actions as
|
||||
Ex commands or via `:map` command mappings:
|
||||
|
||||
### Executing actions:
|
||||
* `:action {action_id}`
|
||||
* Execute an action by `{action_id}`. Works from Ex command line.
|
||||
* Please don't use `:action` in mappings. Use `<Action>` instead.
|
||||
* `<Action>({action_id})`
|
||||
* For the mappings you can use a special `<Action>` keyword. Don't forget the parentheses.
|
||||
* E.g. `map gh <Action>(ShowErrorDescription)` <- execute hover on `gh`.
|
||||
* :warning: Mappings to `<Action>` don't work with `noremap`.
|
||||
If you know the case when it's needed, please [let us know](https://github.com/JetBrains/ideavim#contact-maintainers).
|
||||
* `:action {action_id}`
|
||||
* Execute an action by `{action_id}`. Works from Ex command line.
|
||||
* Please don't use `:action` in mappings. Use `<Action>` instead.
|
||||
|
||||
### Finding action ids:
|
||||
|
||||
@@ -350,9 +353,12 @@ is the source of this knowledge.
|
||||
[Here](https://github.com/vim/vim/blob/759d81549c1340185f0d92524c563bb37697ea88/src/normal.c#L5365)
|
||||
is the full list of synonyms.
|
||||
|
||||
- You can read a [post](https://github.com/JetBrains/ideavim/wiki/how-many-modes-does-vim-have) about how modes work in Vim and IdeaVim.
|
||||
|
||||
- Have you ever used `U` after `dd`? [Don't even try](https://github.com/vim/vim/blob/759d81549c1340185f0d92524c563bb37697ea88/src/ops.c#L874).
|
||||
|
||||
- A lot of variables that refers to visual mode start with two uppercase letters, e.g. `VIsual_active`. [Some examples](https://github.com/vim/vim/blob/master/src/normal.c#L17).
|
||||
- A lot of variables that refer to visual mode start with two uppercase letters, e.g. `VIsual_active`. [Some examples](https://github.com/vim/vim/blob/master/src/normal.c#L17).
|
||||
As mentioned [here](https://vi.stackexchange.com/a/42885/12441), this was done this way to avoid the clash with X11.
|
||||
|
||||
- Other [strange things](https://github.com/vim/vim/blob/759d81549c1340185f0d92524c563bb37697ea88/src/ex_docmd.c#L1845) from vi:
|
||||
* ":3" jumps to line 3
|
||||
@@ -361,11 +367,19 @@ is the full list of synonyms.
|
||||
|
||||
- Vim script doesn't skip white space before comma. `F(a ,b)` => E475.
|
||||
|
||||
- Fancy constants for [undolevels](https://vimhelp.org/options.txt.html#%27undolevels%27):
|
||||
> The local value is set to -123456 when the global value is to be used.
|
||||
|
||||
License
|
||||
-------
|
||||
|
||||
IdeaVim is licensed under the terms of the GNU Public License version 2
|
||||
or any later version.
|
||||
IdeaVim is licensed under the MIT license.
|
||||
|
||||
Third-party components and licenses are listed in [ThirdPartyLicenses.md](ThirdPartyLicenses.md).
|
||||
|
||||
All releases before 2.0.0 were licensed under terms of GPL-2.0 or later.
|
||||
The last commit before switch to MIT is 05852b07c6090ad40fde7d3cafe0b074604f7ac5.
|
||||
You can read more about the license change here: https://github.com/JetBrains/ideavim/discussions/543
|
||||
|
||||
|
||||
<!-- Badges -->
|
||||
|
86
ThirdPartyLicenses.md
Normal file
86
ThirdPartyLicenses.md
Normal file
@@ -0,0 +1,86 @@
|
||||
IdeaVim project is licensed under MIT license except the following parts of it:
|
||||
|
||||
* File [RegExp.kt](src/main/java/com/maddyhome/idea/vim/regexp/RegExp.kt) is licensed under Vim License.
|
||||
* File [ScrollViewHelper.kt](com/maddyhome/idea/vim/helper/ScrollViewHelper.kt) is licensed under Vim License.
|
||||
* File [Tutor.kt](src/main/java/com/maddyhome/idea/vim/ui/Tutor.kt) is licensed under Vim License.
|
||||
|
||||
```
|
||||
VIM LICENSE
|
||||
|
||||
I) There are no restrictions on distributing unmodified copies of Vim except
|
||||
that they must include this license text. You can also distribute
|
||||
unmodified parts of Vim, likewise unrestricted except that they must
|
||||
include this license text. You are also allowed to include executables
|
||||
that you made from the unmodified Vim sources, plus your own usage
|
||||
examples and Vim scripts.
|
||||
|
||||
II) It is allowed to distribute a modified (or extended) version of Vim,
|
||||
including executables and/or source code, when the following four
|
||||
conditions are met:
|
||||
1) This license text must be included unmodified.
|
||||
2) The modified Vim must be distributed in one of the following five ways:
|
||||
a) If you make changes to Vim yourself, you must clearly describe in
|
||||
the distribution how to contact you. When the maintainer asks you
|
||||
(in any way) for a copy of the modified Vim you distributed, you
|
||||
must make your changes, including source code, available to the
|
||||
maintainer without fee. The maintainer reserves the right to
|
||||
include your changes in the official version of Vim. What the
|
||||
maintainer will do with your changes and under what license they
|
||||
will be distributed is negotiable. If there has been no negotiation
|
||||
then this license, or a later version, also applies to your changes.
|
||||
The current maintainers are listed here: https://github.com/orgs/vim/people.
|
||||
If this changes it will be announced in appropriate places (most likely
|
||||
vim.sf.net, www.vim.org and/or comp.editors). When it is completely
|
||||
impossible to contact the maintainer, the obligation to send him
|
||||
your changes ceases. Once the maintainer has confirmed that he has
|
||||
received your changes they will not have to be sent again.
|
||||
b) If you have received a modified Vim that was distributed as
|
||||
mentioned under a) you are allowed to further distribute it
|
||||
unmodified, as mentioned at I). If you make additional changes the
|
||||
text under a) applies to those changes.
|
||||
c) Provide all the changes, including source code, with every copy of
|
||||
the modified Vim you distribute. This may be done in the form of a
|
||||
context diff. You can choose what license to use for new code you
|
||||
add. The changes and their license must not restrict others from
|
||||
making their own changes to the official version of Vim.
|
||||
d) When you have a modified Vim which includes changes as mentioned
|
||||
under c), you can distribute it without the source code for the
|
||||
changes if the following three conditions are met:
|
||||
- The license that applies to the changes permits you to distribute
|
||||
the changes to the Vim maintainer without fee or restriction, and
|
||||
permits the Vim maintainer to include the changes in the official
|
||||
version of Vim without fee or restriction.
|
||||
- You keep the changes for at least three years after last
|
||||
distributing the corresponding modified Vim. When the maintainer
|
||||
or someone who you distributed the modified Vim to asks you (in
|
||||
any way) for the changes within this period, you must make them
|
||||
available to him.
|
||||
- You clearly describe in the distribution how to contact you. This
|
||||
contact information must remain valid for at least three years
|
||||
after last distributing the corresponding modified Vim, or as long
|
||||
as possible.
|
||||
e) When the GNU General Public License (GPL) applies to the changes,
|
||||
you can distribute the modified Vim under the GNU GPL version 2 or
|
||||
any later version.
|
||||
3) A message must be added, at least in the output of the ":version"
|
||||
command and in the intro screen, such that the user of the modified Vim
|
||||
is able to see that it was modified. When distributing as mentioned
|
||||
under 2)e) adding the message is only required for as far as this does
|
||||
not conflict with the license used for the changes.
|
||||
4) The contact information as required under 2)a) and 2)d) must not be
|
||||
removed or changed, except that the person himself can make
|
||||
corrections.
|
||||
|
||||
III) If you distribute a modified version of Vim, you are encouraged to use
|
||||
the Vim license for your changes and make them available to the
|
||||
maintainer, including the source code. The preferred way to do this is
|
||||
by e-mail or by uploading the files to a server and e-mailing the URL.
|
||||
If the number of changes is small (e.g., a modified Makefile) e-mailing a
|
||||
context diff will do. The e-mail address to be used is
|
||||
<maintainer@vim.org>
|
||||
|
||||
IV) It is not allowed to remove this license from the distribution of the Vim
|
||||
sources, parts of it or from a modified version. You may use this
|
||||
license for previous Vim releases instead of the license that they came
|
||||
with, at your option.
|
||||
```
|
42
annotation-processors/.gitignore
vendored
Normal file
42
annotation-processors/.gitignore
vendored
Normal 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
|
23
annotation-processors/build.gradle.kts
Normal file
23
annotation-processors/build.gradle.kts
Normal 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")
|
||||
}
|
@@ -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)
|
@@ -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)
|
@@ -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) }
|
||||
}
|
||||
}
|
||||
}
|
@@ -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) }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -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)
|
||||
}
|
||||
}
|
@@ -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)
|
||||
}
|
||||
}
|
@@ -0,0 +1,2 @@
|
||||
com.intellij.vim.providers.VimscriptFunctionProcessorProvider
|
||||
com.intellij.vim.providers.ExCommandProcessorProvider
|
489
build.gradle.kts
489
build.gradle.kts
@@ -1,6 +1,39 @@
|
||||
/*
|
||||
* Copyright 2003-2023 The IdeaVim authors
|
||||
*
|
||||
* Use of this source code is governed by an MIT-style
|
||||
* license that can be found in the LICENSE.txt file or at
|
||||
* https://opensource.org/licenses/MIT.
|
||||
*/
|
||||
|
||||
import dev.feedforward.markdownto.DownParser
|
||||
import io.ktor.client.*
|
||||
import io.ktor.client.call.*
|
||||
import io.ktor.client.engine.cio.*
|
||||
import io.ktor.client.plugins.auth.*
|
||||
import io.ktor.client.plugins.auth.providers.*
|
||||
import io.ktor.client.plugins.contentnegotiation.*
|
||||
import io.ktor.client.request.*
|
||||
import io.ktor.http.*
|
||||
import io.ktor.serialization.kotlinx.json.*
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import kotlinx.serialization.json.Json
|
||||
import kotlinx.serialization.json.JsonArray
|
||||
import kotlinx.serialization.json.JsonObject
|
||||
import kotlinx.serialization.json.addJsonObject
|
||||
import kotlinx.serialization.json.buildJsonObject
|
||||
import kotlinx.serialization.json.jsonArray
|
||||
import kotlinx.serialization.json.jsonObject
|
||||
import kotlinx.serialization.json.jsonPrimitive
|
||||
import kotlinx.serialization.json.put
|
||||
import kotlinx.serialization.json.putJsonArray
|
||||
import kotlinx.serialization.json.putJsonObject
|
||||
import org.eclipse.jgit.api.Git
|
||||
import org.eclipse.jgit.lib.RepositoryBuilder
|
||||
import org.intellij.markdown.ast.getTextInNode
|
||||
import org.jetbrains.changelog.Changelog
|
||||
import org.jetbrains.changelog.exceptions.MissingVersionException
|
||||
import org.kohsuke.github.GHUser
|
||||
import java.net.HttpURLConnection
|
||||
import java.net.URL
|
||||
|
||||
@@ -11,11 +44,20 @@ buildscript {
|
||||
}
|
||||
|
||||
dependencies {
|
||||
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.21")
|
||||
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.21")
|
||||
classpath("com.github.AlexPl292:mark-down-to-slack:1.1.2")
|
||||
classpath("org.eclipse.jgit:org.eclipse.jgit:6.1.0.202203080745-r")
|
||||
classpath("org.eclipse.jgit:org.eclipse.jgit:6.6.0.202305301015-r")
|
||||
|
||||
// This is needed for jgit to connect to ssh
|
||||
classpath("org.eclipse.jgit:org.eclipse.jgit.ssh.apache:6.7.0.202309050840-r")
|
||||
classpath("org.kohsuke:github-api:1.305")
|
||||
|
||||
classpath("io.ktor:ktor-client-core:2.3.4")
|
||||
classpath("io.ktor:ktor-client-cio:2.3.4")
|
||||
classpath("io.ktor:ktor-client-auth:2.3.4")
|
||||
classpath("io.ktor:ktor-client-content-negotiation:2.3.4")
|
||||
classpath("io.ktor:ktor-serialization-kotlinx-json:2.3.4")
|
||||
|
||||
// This comes from the changelog plugin
|
||||
// classpath("org.jetbrains:markdown:0.3.1")
|
||||
}
|
||||
@@ -24,13 +66,31 @@ buildscript {
|
||||
plugins {
|
||||
antlr
|
||||
java
|
||||
kotlin("jvm") version "1.6.21"
|
||||
kotlin("jvm") version "1.8.21"
|
||||
application
|
||||
|
||||
id("org.jetbrains.intellij") version "1.10.0-SNAPSHOT"
|
||||
id("org.jetbrains.changelog") version "1.3.1"
|
||||
id("org.jetbrains.intellij") version "1.15.0"
|
||||
id("org.jetbrains.changelog") version "2.2.0"
|
||||
|
||||
// ktlint linter - read more: https://github.com/JLLeitschuh/ktlint-gradle
|
||||
id("org.jlleitschuh.gradle.ktlint") version "10.3.0"
|
||||
// id("org.jlleitschuh.gradle.ktlint") version "11.3.1"
|
||||
|
||||
id("org.jetbrains.kotlinx.kover") version "0.6.1"
|
||||
id("com.dorongold.task-tree") version "2.1.1"
|
||||
|
||||
id("com.google.devtools.ksp") version "1.8.21-1.0.11"
|
||||
}
|
||||
|
||||
ksp {
|
||||
arg("generated_directory", "$projectDir/src/main/resources")
|
||||
arg("vimscript_functions_file", "intellij_vimscript_functions.json")
|
||||
arg("ex_commands_file", "intellij_ex_commands.json")
|
||||
}
|
||||
|
||||
afterEvaluate {
|
||||
// tasks.named("kspKotlin").configure { dependsOn("clean") }
|
||||
tasks.named("kspKotlin").configure { dependsOn("generateGrammarSource") }
|
||||
tasks.named("kspTestKotlin").configure { enabled = false }
|
||||
}
|
||||
|
||||
// Import variables from gradle.properties file
|
||||
@@ -46,6 +106,7 @@ val publishChannels: String by project
|
||||
val publishToken: String by project
|
||||
|
||||
val slackUrl: String by project
|
||||
val youtrackToken: String by project
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
@@ -53,8 +114,8 @@ repositories {
|
||||
}
|
||||
|
||||
dependencies {
|
||||
compileOnly("org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlinVersion")
|
||||
compileOnly("org.jetbrains:annotations:23.0.0")
|
||||
compileOnly("org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion")
|
||||
compileOnly("org.jetbrains:annotations:24.0.1")
|
||||
|
||||
// https://mvnrepository.com/artifact/com.ensarsarajcic.neovim.java/neovim-api
|
||||
testImplementation("com.ensarsarajcic.neovim.java:neovim-api:0.2.3")
|
||||
@@ -64,7 +125,7 @@ dependencies {
|
||||
testImplementation("org.jetbrains.kotlin:kotlin-test:$kotlinVersion")
|
||||
|
||||
// https://mvnrepository.com/artifact/org.mockito.kotlin/mockito-kotlin
|
||||
testImplementation("org.mockito.kotlin:mockito-kotlin:4.0.0")
|
||||
testImplementation("org.mockito.kotlin:mockito-kotlin:5.1.0")
|
||||
|
||||
testImplementation("com.intellij.remoterobot:remote-robot:$remoteRobotVersion")
|
||||
testImplementation("com.intellij.remoterobot:remote-fixtures:$remoteRobotVersion")
|
||||
@@ -74,7 +135,14 @@ dependencies {
|
||||
|
||||
api(project(":vim-engine"))
|
||||
|
||||
testApi("com.squareup.okhttp3:okhttp:4.10.0")
|
||||
ksp(project(":annotation-processors"))
|
||||
compileOnly(project(":annotation-processors"))
|
||||
|
||||
testApi("com.squareup.okhttp3:okhttp:4.11.0")
|
||||
|
||||
testImplementation("org.junit.jupiter:junit-jupiter-api:5.10.0")
|
||||
testImplementation("org.junit.jupiter:junit-jupiter-engine:5.10.0")
|
||||
testImplementation("org.junit.jupiter:junit-jupiter-params:5.10.0")
|
||||
}
|
||||
|
||||
configurations {
|
||||
@@ -91,16 +159,19 @@ tasks.register<Test>("testWithNeovim") {
|
||||
exclude("/ui/**")
|
||||
exclude("**/longrunning/**")
|
||||
exclude("**/propertybased/**")
|
||||
useJUnitPlatform()
|
||||
}
|
||||
|
||||
tasks.register<Test>("testPropertyBased") {
|
||||
group = "verification"
|
||||
// include("**/propertybased/**")
|
||||
useJUnitPlatform()
|
||||
}
|
||||
|
||||
tasks.register<Test>("testLongRunning") {
|
||||
group = "verification"
|
||||
// include("**/longrunning/**")
|
||||
useJUnitPlatform()
|
||||
}
|
||||
|
||||
tasks {
|
||||
@@ -173,8 +244,9 @@ java {
|
||||
}
|
||||
|
||||
kotlin {
|
||||
explicitApi()
|
||||
jvmToolchain {
|
||||
(this as JavaToolchainSpec).languageVersion.set(JavaLanguageVersion.of(javaVersion))
|
||||
languageVersion.set(JavaLanguageVersion.of(javaVersion))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -197,7 +269,7 @@ intellij {
|
||||
instrumentCode.set(instrumentPluginCode.toBoolean())
|
||||
intellijRepository.set("https://www.jetbrains.com/intellij-repository")
|
||||
// Yaml is only used for testing. It's part of the IdeaIC distribution, but needs to be included as a reference
|
||||
plugins.set(listOf("java", "AceJump:3.8.4", "yaml"))
|
||||
plugins.set(listOf("java", "AceJump:3.8.11", "yaml"/*, "Pythonid:231.8109.2", "com.intellij.clion-swift:231.8109.4"*/))
|
||||
}
|
||||
|
||||
tasks {
|
||||
@@ -210,6 +282,12 @@ tasks {
|
||||
token.set(publishToken)
|
||||
}
|
||||
|
||||
signPlugin {
|
||||
certificateChain.set(providers.environmentVariable("CERTIFICATE_CHAIN"))
|
||||
privateKey.set(providers.environmentVariable("PRIVATE_KEY"))
|
||||
password.set(providers.environmentVariable("PRIVATE_KEY_PASSWORD"))
|
||||
}
|
||||
|
||||
runIdeForUiTests {
|
||||
systemProperty("robot-server.port", "8082")
|
||||
systemProperty("ide.mac.message.dialogs.as.sheets", "false")
|
||||
@@ -232,17 +310,27 @@ tasks {
|
||||
named("compileKotlin") {
|
||||
dependsOn("generateGrammarSource")
|
||||
}
|
||||
named("compileTestKotlin") {
|
||||
dependsOn("generateTestGrammarSource")
|
||||
}
|
||||
|
||||
// Add plugin open API sources to the plugin ZIP
|
||||
val createOpenApiSourceJar by registering(Jar::class) {
|
||||
dependsOn("generateGrammarSource")
|
||||
// Java sources
|
||||
from(sourceSets.main.get().java) {
|
||||
include("**/com/maddyhome/idea/vim/**/*.java")
|
||||
}
|
||||
from(project(":vim-engine").sourceSets.main.get().java) {
|
||||
include("**/com/maddyhome/idea/vim/**/*.java")
|
||||
}
|
||||
// Kotlin sources
|
||||
from(kotlin.sourceSets.main.get().kotlin) {
|
||||
include("**/com/maddyhome/idea/vim/**/*.kt")
|
||||
}
|
||||
from(project(":vim-engine").kotlin.sourceSets.main.get().kotlin) {
|
||||
include("**/com/maddyhome/idea/vim/**/*.kt")
|
||||
}
|
||||
destinationDirectory.set(layout.buildDirectory.dir("libs"))
|
||||
archiveClassifier.set("src")
|
||||
}
|
||||
@@ -252,23 +340,41 @@ tasks {
|
||||
from(createOpenApiSourceJar) { into("lib/src") }
|
||||
}
|
||||
|
||||
val pluginVersion = version
|
||||
// Don't forget to update plugin.xml
|
||||
patchPluginXml {
|
||||
sinceBuild.set("222")
|
||||
sinceBuild.set("231.7515.13")
|
||||
|
||||
// Get the latest available change notes from the changelog file
|
||||
changeNotes.set(
|
||||
provider {
|
||||
with(changelog) {
|
||||
val log = try {
|
||||
getUnreleased()
|
||||
} catch (e: MissingVersionException) {
|
||||
getOrNull(pluginVersion.toString()) ?: getLatest()
|
||||
}
|
||||
renderItem(
|
||||
log,
|
||||
org.jetbrains.changelog.Changelog.OutputType.HTML,
|
||||
)
|
||||
}
|
||||
},
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
// --- Linting
|
||||
|
||||
ktlint {
|
||||
disabledRules.add("no-wildcard-imports")
|
||||
version.set("0.43.0")
|
||||
}
|
||||
//ktlint {
|
||||
// version.set("0.48.2")
|
||||
//}
|
||||
|
||||
// --- Tests
|
||||
|
||||
tasks {
|
||||
test {
|
||||
useJUnitPlatform()
|
||||
exclude("**/propertybased/**")
|
||||
exclude("**/longrunning/**")
|
||||
exclude("/ui/**")
|
||||
@@ -277,6 +383,7 @@ tasks {
|
||||
|
||||
tasks.register<Test>("testUi") {
|
||||
group = "verification"
|
||||
useJUnitPlatform()
|
||||
include("/ui/**")
|
||||
}
|
||||
|
||||
@@ -292,11 +399,19 @@ changelog {
|
||||
// version = "0.60"
|
||||
}
|
||||
|
||||
tasks.register("getUnreleasedChangelog") {
|
||||
group = "changelog"
|
||||
doLast {
|
||||
val log = changelog.getUnreleased().toHTML()
|
||||
println(log)
|
||||
// --- Kover
|
||||
|
||||
koverMerged {
|
||||
enable()
|
||||
}
|
||||
|
||||
kover {
|
||||
instrumentation {
|
||||
// set of test tasks names to exclude from instrumentation. The results of their execution will not be presented in the report
|
||||
excludeTasks += "testPropertyBased"
|
||||
excludeTasks += "testLongRunning"
|
||||
excludeTasks += "testWithNeovim"
|
||||
excludeTasks += "testUi"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -308,7 +423,8 @@ tasks.register("slackNotification") {
|
||||
println("Slack Url is not defined")
|
||||
return@doLast
|
||||
}
|
||||
val changeLog = changelog.getLatest().toText()
|
||||
|
||||
val changeLog = changelog.renderItem(changelog.getLatest(), Changelog.OutputType.PLAIN_TEXT)
|
||||
val slackDown = DownParser(changeLog, true).toSlack().toString()
|
||||
|
||||
//language=JSON
|
||||
@@ -364,6 +480,7 @@ tasks.register("updateAuthors") {
|
||||
"aleksei.plate@TeamCity",
|
||||
"alex.plate@192.168.0.109",
|
||||
"nikita.koshcheev@TeamCity",
|
||||
"TeamCity@TeamCity",
|
||||
)
|
||||
updateAuthors(uncheckedEmails)
|
||||
}
|
||||
@@ -388,6 +505,85 @@ tasks.register("updateChangelog") {
|
||||
}
|
||||
}
|
||||
|
||||
tasks.register("updateYoutrackOnCommit") {
|
||||
doLast {
|
||||
updateYoutrackOnCommit()
|
||||
}
|
||||
}
|
||||
|
||||
val vimProjectId = "22-43"
|
||||
val fixVersionsFieldId = "123-285"
|
||||
val fixVersionsFieldType = "VersionProjectCustomField"
|
||||
val fixVersionsElementType = "VersionBundleElement"
|
||||
|
||||
tasks.register("releaseActions") {
|
||||
group = "other"
|
||||
doLast {
|
||||
val tickets = getYoutrackTicketsByQuery("%23%7BReady+To+Release%7D")
|
||||
if (tickets.isNotEmpty()) {
|
||||
println("Updating statuses for tickets: $tickets")
|
||||
setYoutrackStatus(tickets, "Fixed")
|
||||
if (getVersionIdByName(version.toString()) != null) {
|
||||
addReleaseToYoutrack(version.toString())
|
||||
} else {
|
||||
println("Version $version is already exists in YouTrack")
|
||||
}
|
||||
setYoutrackFixVersion(tickets, version.toString())
|
||||
} else {
|
||||
println("No tickets to update statuses")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
tasks.register("integrationsTest") {
|
||||
group = "other"
|
||||
doLast {
|
||||
val testTicketId = "VIM-2784"
|
||||
|
||||
// YouTrack set to Ready To Release on Fix commit
|
||||
setYoutrackStatus(listOf(testTicketId), "Ready To Release")
|
||||
if ("Ready To Release" != getYoutrackStatus(testTicketId)) {
|
||||
error("Ticket status was not updated")
|
||||
}
|
||||
setYoutrackStatus(listOf(testTicketId), "Open")
|
||||
|
||||
// Check YouTrack requests
|
||||
val prevStatus = getYoutrackStatus(testTicketId)
|
||||
setYoutrackStatus(listOf(testTicketId), "Ready To Release")
|
||||
val tickets = getYoutrackTicketsByQuery("%23%7BReady+To+Release%7D")
|
||||
if (testTicketId !in tickets) {
|
||||
error("Test ticket is not found in request")
|
||||
}
|
||||
setYoutrackStatus(listOf(testTicketId), prevStatus)
|
||||
|
||||
// Check adding and removing release
|
||||
val existingVersionId = getVersionIdByName("TEST_VERSION")
|
||||
if (existingVersionId != null) {
|
||||
deleteVersionById(existingVersionId)
|
||||
}
|
||||
val versionId = addReleaseToYoutrack("TEST_VERSION")
|
||||
guard(getVersionIdByName("TEST_VERSION") != null) { "Test version isn't created" }
|
||||
setYoutrackStatus(listOf(testTicketId), "Fixed")
|
||||
setYoutrackFixVersion(listOf(testTicketId), "TEST_VERSION")
|
||||
deleteVersionById(versionId)
|
||||
setYoutrackStatus(listOf(testTicketId), "Open")
|
||||
guard(getVersionIdByName("TEST_VERSION") == null) { "Test version isn't deleted" }
|
||||
|
||||
updateMergedPr(525)
|
||||
// TODO: test Ticket parsing
|
||||
// TODO: test Update CHANGES
|
||||
// TODO: test Update AUTHORS
|
||||
// TODO: test Slack notification
|
||||
// TODO: Add a comment on EAP release
|
||||
}
|
||||
}
|
||||
|
||||
fun guard(check: Boolean, ifWrong: () -> String) {
|
||||
if (!check) {
|
||||
error(ifWrong())
|
||||
}
|
||||
}
|
||||
|
||||
tasks.register("testUpdateChangelog") {
|
||||
group = "verification"
|
||||
description = "This is a task to manually assert the correctness of the update tasks"
|
||||
@@ -404,37 +600,152 @@ tasks.register("testUpdateChangelog") {
|
||||
}
|
||||
}
|
||||
|
||||
fun addReleaseToYoutrack(name: String): String {
|
||||
val client = httpClient()
|
||||
println("Creating new release version in YouTrack: $name")
|
||||
|
||||
return runBlocking {
|
||||
val response = client.post("https://youtrack.jetbrains.com/api/admin/projects/$vimProjectId/customFields/$fixVersionsFieldId/bundle/values?fields=id,name") {
|
||||
contentType(ContentType.Application.Json)
|
||||
accept(ContentType.Application.Json)
|
||||
val request = buildJsonObject {
|
||||
put("name", name)
|
||||
put("\$type", fixVersionsElementType)
|
||||
}
|
||||
setBody(request)
|
||||
}
|
||||
response.body<JsonObject>().getValue("id").jsonPrimitive.content
|
||||
}
|
||||
}
|
||||
|
||||
fun getVersionIdByName(name: String): String? {
|
||||
val client = httpClient()
|
||||
|
||||
return runBlocking {
|
||||
val response = client.get("https://youtrack.jetbrains.com/api/admin/projects/$vimProjectId/customFields/$fixVersionsFieldId/bundle/values?fields=id,name&query=$name")
|
||||
response.body<JsonArray>().singleOrNull()?.jsonObject?.get("id")?.jsonPrimitive?.content
|
||||
}
|
||||
}
|
||||
|
||||
fun deleteVersionById(id: String) {
|
||||
val client = httpClient()
|
||||
|
||||
runBlocking {
|
||||
client.delete("https://youtrack.jetbrains.com/api/admin/projects/$vimProjectId/customFields/$fixVersionsFieldId/bundle/values/$id")
|
||||
}
|
||||
}
|
||||
|
||||
fun updateYoutrackOnCommit() {
|
||||
println("Start updating youtrack")
|
||||
println(projectDir)
|
||||
|
||||
val newFixes = changes()
|
||||
val newTickets = newFixes.map { it.id }
|
||||
println("Set new status for $newTickets")
|
||||
setYoutrackStatus(newTickets, "Ready To Release")
|
||||
}
|
||||
|
||||
fun getYoutrackTicketsByQuery(query: String): Set<String> {
|
||||
val client = httpClient()
|
||||
|
||||
return runBlocking {
|
||||
val response = client.get("https://youtrack.jetbrains.com/api/issues/?fields=idReadable&query=project:VIM+$query")
|
||||
response.body<JsonArray>().mapTo(HashSet()) { it.jsonObject.getValue("idReadable").jsonPrimitive.content }
|
||||
}
|
||||
}
|
||||
|
||||
fun setYoutrackStatus(tickets: Collection<String>, status: String) {
|
||||
val client = httpClient()
|
||||
|
||||
runBlocking {
|
||||
for (ticket in tickets) {
|
||||
println("Try to set $ticket to $status")
|
||||
val response = client.post("https://youtrack.jetbrains.com/api/issues/$ticket?fields=customFields(id,name,value(id,name))") {
|
||||
contentType(ContentType.Application.Json)
|
||||
accept(ContentType.Application.Json)
|
||||
val request = buildJsonObject {
|
||||
putJsonArray("customFields") {
|
||||
addJsonObject {
|
||||
put("name", "State")
|
||||
put("\$type", "SingleEnumIssueCustomField")
|
||||
putJsonObject("value") {
|
||||
put("name", status)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
setBody(request)
|
||||
}
|
||||
println(response)
|
||||
println(response.body<String>())
|
||||
if (!response.status.isSuccess()) {
|
||||
error("Request failed. $ticket, ${response.body<String>()}")
|
||||
}
|
||||
val finalState = response.body<JsonObject>()["customFields"]!!.jsonArray
|
||||
.single { it.jsonObject["name"]!!.jsonPrimitive.content == "State" }
|
||||
.jsonObject["value"]!!
|
||||
.jsonObject["name"]!!
|
||||
.jsonPrimitive.content
|
||||
if (finalState != status) {
|
||||
error("Ticket $ticket is not updated! Expected status $status, but actually $finalState")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun setYoutrackFixVersion(tickets: Collection<String>, version: String) {
|
||||
val client = httpClient()
|
||||
|
||||
runBlocking {
|
||||
for (ticket in tickets) {
|
||||
println("Try to set fix version $version for $ticket")
|
||||
val response = client.post("https://youtrack.jetbrains.com/api/issues/$ticket?fields=customFields(id,name,value(id,name))") {
|
||||
contentType(ContentType.Application.Json)
|
||||
accept(ContentType.Application.Json)
|
||||
val request = buildJsonObject {
|
||||
putJsonArray("customFields") {
|
||||
addJsonObject {
|
||||
put("name", "Fix versions")
|
||||
put("\$type", "MultiVersionIssueCustomField")
|
||||
putJsonArray("value") {
|
||||
addJsonObject { put("name", version) }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
setBody(request)
|
||||
}
|
||||
println(response)
|
||||
println(response.body<String>())
|
||||
if (!response.status.isSuccess()) {
|
||||
error("Request failed. $ticket, ${response.body<String>()}")
|
||||
}
|
||||
val finalState = response.body<JsonObject>()["customFields"]!!.jsonArray
|
||||
.single { it.jsonObject["name"]!!.jsonPrimitive.content == "Fix versions" }
|
||||
.jsonObject["value"]!!
|
||||
.jsonArray[0]
|
||||
.jsonObject["name"]!!
|
||||
.jsonPrimitive.content
|
||||
if (finalState != version) {
|
||||
error("Ticket $ticket is not updated! Expected fix version $version, but actually $finalState")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun getYoutrackStatus(ticket: String): String {
|
||||
val client = httpClient()
|
||||
|
||||
return runBlocking {
|
||||
val response = client.get("https://youtrack.jetbrains.com/api/issues/$ticket/customFields/123-129?fields=value(name)")
|
||||
response.body<JsonObject>()["value"]!!.jsonObject.getValue("name").jsonPrimitive.content
|
||||
}
|
||||
}
|
||||
|
||||
fun updateChangelog() {
|
||||
println("Start update authors")
|
||||
println(projectDir)
|
||||
val repository = org.eclipse.jgit.lib.RepositoryBuilder().setGitDir(File("$projectDir/.git")).build()
|
||||
val git = org.eclipse.jgit.api.Git(repository)
|
||||
val lastSuccessfulCommit = System.getenv("SUCCESS_COMMIT")!!
|
||||
val messages = git.log().call()
|
||||
.takeWhile {
|
||||
!it.id.name.equals(lastSuccessfulCommit, ignoreCase = true)
|
||||
}
|
||||
.map { it.shortMessage }
|
||||
|
||||
// Collect fixes
|
||||
val newFixes = mutableListOf<Change>()
|
||||
println("Last successful commit: $lastSuccessfulCommit")
|
||||
println("Amount of commits: ${messages.size}")
|
||||
println("Start emails processing")
|
||||
for (message in messages) {
|
||||
println("Processing '$message'...")
|
||||
val lowercaseMessage = message.toLowerCase()
|
||||
val regex = "^fix\\((vim-\\d+)\\):".toRegex()
|
||||
val findResult = regex.find(lowercaseMessage)
|
||||
if (findResult != null) {
|
||||
println("Message matches")
|
||||
val value = findResult.groups[1]!!.value.toUpperCase()
|
||||
val shortMessage = message.drop(findResult.range.last + 1).trim()
|
||||
newFixes += Change(value, shortMessage)
|
||||
} else {
|
||||
println("Message doesn't match")
|
||||
}
|
||||
}
|
||||
val newFixes = changes()
|
||||
|
||||
// Update changes file
|
||||
val changesFile = File("$projectDir/CHANGES.md")
|
||||
@@ -460,8 +771,8 @@ fun updateChangelog() {
|
||||
fun updateAuthors(uncheckedEmails: Set<String>) {
|
||||
println("Start update authors")
|
||||
println(projectDir)
|
||||
val repository = org.eclipse.jgit.lib.RepositoryBuilder().setGitDir(File("$projectDir/.git")).build()
|
||||
val git = org.eclipse.jgit.api.Git(repository)
|
||||
val repository = RepositoryBuilder().setGitDir(File("$projectDir/.git")).build()
|
||||
val git = Git(repository)
|
||||
val lastSuccessfulCommit = System.getenv("SUCCESS_COMMIT")!!
|
||||
val hashesAndEmailes = git.log().call()
|
||||
.takeWhile {
|
||||
@@ -486,7 +797,15 @@ fun updateAuthors(uncheckedEmails: Set<String>) {
|
||||
println("Email '$email' is from dependabot. Skip it")
|
||||
continue
|
||||
}
|
||||
val user = ghRepository.getCommit(hash).author
|
||||
if ("tcuser" in email) {
|
||||
println("Email '$email' is from teamcity. Skip it")
|
||||
continue
|
||||
}
|
||||
val user: GHUser? = ghRepository.getCommit(hash).author
|
||||
if (user == null) {
|
||||
println("Cant get the commit author. Email: $email. Commit: $hash")
|
||||
continue
|
||||
}
|
||||
val htmlUrl = user.htmlUrl.toString()
|
||||
val name = user.name ?: user.login
|
||||
users.add(Author(name, htmlUrl, email))
|
||||
@@ -504,7 +823,7 @@ fun updateAuthors(uncheckedEmails: Set<String>) {
|
||||
for (child in contributorsSection.children) {
|
||||
if (child.children.size > 1) {
|
||||
existingEmails.add(
|
||||
child.children[1].children[0].children[2].children[2].getTextInNode(authors).toString()
|
||||
child.children[1].children[0].children[2].children[2].getTextInNode(authors).toString(),
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -537,7 +856,9 @@ data class Author(val name: String, val url: String, val mail: String)
|
||||
data class Change(val id: String, val text: String)
|
||||
|
||||
fun updateMergedPr(number: Int) {
|
||||
val gitHub = org.kohsuke.github.GitHub.connect()
|
||||
val token = System.getenv("GITHUB_OAUTH")
|
||||
println("Token size: ${token.length}")
|
||||
val gitHub = org.kohsuke.github.GitHubBuilder().withOAuthToken(token).build()
|
||||
println("Connecting to the repo...")
|
||||
val repository = gitHub.getRepository("JetBrains/ideavim")
|
||||
println("Getting pull requests...")
|
||||
@@ -554,7 +875,7 @@ fun updateMergedPr(number: Int) {
|
||||
if (pullRequest.user.login == "dependabot[bot]") return
|
||||
|
||||
val prNumber = pullRequest.number
|
||||
val userName = pullRequest.user.name
|
||||
val userName = pullRequest.user.name ?: pullRequest.user.login
|
||||
val login = pullRequest.user.login
|
||||
val title = pullRequest.title
|
||||
val section =
|
||||
@@ -632,3 +953,57 @@ val sections = listOf(
|
||||
"### Fixes:",
|
||||
"### Merged PRs:",
|
||||
)
|
||||
|
||||
fun changes(): List<Change> {
|
||||
val repository = RepositoryBuilder().setGitDir(File("$projectDir/.git")).build()
|
||||
val git = Git(repository)
|
||||
val lastSuccessfulCommit = System.getenv("SUCCESS_COMMIT")!!
|
||||
val messages = git.log().call()
|
||||
.takeWhile {
|
||||
!it.id.name.equals(lastSuccessfulCommit, ignoreCase = true)
|
||||
}
|
||||
.map { it.shortMessage }
|
||||
|
||||
// Collect fixes
|
||||
val newFixes = mutableListOf<Change>()
|
||||
println("Last successful commit: $lastSuccessfulCommit")
|
||||
println("Amount of commits: ${messages.size}")
|
||||
println("Start changes processing")
|
||||
for (message in messages) {
|
||||
println("Processing '$message'...")
|
||||
val lowercaseMessage = message.toLowerCase()
|
||||
val regex = "^fix\\((vim-\\d+)\\):".toRegex()
|
||||
val findResult = regex.find(lowercaseMessage)
|
||||
if (findResult != null) {
|
||||
println("Message matches")
|
||||
val value = findResult.groups[1]!!.value.toUpperCase()
|
||||
val shortMessage = message.drop(findResult.range.last + 1).trim()
|
||||
newFixes += Change(value, shortMessage)
|
||||
} else {
|
||||
println("Message doesn't match")
|
||||
}
|
||||
}
|
||||
return newFixes
|
||||
}
|
||||
|
||||
fun httpClient(): HttpClient {
|
||||
return HttpClient(CIO) {
|
||||
expectSuccess = true
|
||||
install(Auth) {
|
||||
bearer {
|
||||
loadTokens {
|
||||
val accessToken = youtrackToken.ifBlank { System.getenv("YOUTRACK_TOKEN")!! }
|
||||
BearerTokens(accessToken, "")
|
||||
}
|
||||
}
|
||||
}
|
||||
install(ContentNegotiation) {
|
||||
json(
|
||||
Json {
|
||||
prettyPrint = true
|
||||
isLenient = true
|
||||
},
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -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>
|
@@ -1,248 +0,0 @@
|
||||
Emulated Vim Plugins
|
||||
--------------------
|
||||
|
||||
IdeaVim extensions emulate plugins of the original Vim. In order to use
|
||||
IdeaVim extensions, you have to enable them via this command in your `~/.ideavimrc`:
|
||||
|
||||
```
|
||||
Plug '<extension-github-reference>'
|
||||
```
|
||||
|
||||
If you reuse your existing `.vimrc` file using `source ~/.vimrc`, IdeaVim can parse and enable plugins that are defined
|
||||
using [vim-plug](https://github.com/junegunn/vim-plug) or [vundle](https://github.com/VundleVim/Vundle.vim).
|
||||
No additional set commands in `~/.ideavimrc` are required.
|
||||
If you'd like to disable some plugin that's enabled in `.vimrc`, you can use `set no<extension-name>`
|
||||
in `~/.ideavimrc`. E.g. `set nosurround`.
|
||||
|
||||
Available extensions:
|
||||
|
||||
## easymotion
|
||||
|
||||
* Setup:
|
||||
* Install [IdeaVim-EasyMotion](https://plugins.jetbrains.com/plugin/13360-ideavim-easymotion/)
|
||||
and [AceJump](https://plugins.jetbrains.com/plugin/7086-acejump/) plugins.
|
||||
* `Plug 'easymotion/vim-easymotion'`
|
||||
* <details>
|
||||
<summary>Alternative syntax</summary>
|
||||
<code>Plug 'https://github.com/easymotion/vim-easymotion'</code>
|
||||
<br/>
|
||||
<code>Plug 'vim-easymotion'</code>
|
||||
<br/>
|
||||
<code>set easymotion</code>
|
||||
</details>
|
||||
* Emulates [vim-easymotion](https://github.com/easymotion/vim-easymotion)
|
||||
* Commands: All commands with the mappings are supported. See the [full list of supported commands](https://github.com/AlexPl292/IdeaVim-EasyMotion#supported-commands).
|
||||
|
||||
## NERDTree
|
||||
* Setup: `Plug 'preservim/nerdtree'`
|
||||
* <details>
|
||||
<summary>Alternative vim-plug / vundle syntax</summary>
|
||||
<code>Plug 'https://github.com/preservim/nerdtree'</code>
|
||||
<br/>
|
||||
<code>Plug 'nerdtree'</code>
|
||||
<br/>
|
||||
<code>set NERDTree</code>
|
||||
</details>
|
||||
* Emulates [NERDTree](https://github.com/preservim/nerdtree)
|
||||
* Commands: [[see here|NERDTree-support]]
|
||||
|
||||
## surround
|
||||
|
||||
* Setup: `Plug 'tpope/vim-surround'`
|
||||
* <details>
|
||||
<summary>Alternative vim-plug / vundle syntax</summary>
|
||||
<code>Plug 'https://github.com/tpope/vim-surround'</code>
|
||||
<br/>
|
||||
<code>Plug 'vim-surround'</code>
|
||||
<br/>
|
||||
<code>Plug 'https://www.vim.org/scripts/script.php?script_id=1697'</code>
|
||||
<br/>
|
||||
<code>set surround</code>
|
||||
</details>
|
||||
* Emulates [vim-surround](https://github.com/tpope/vim-surround)
|
||||
* Commands: `ys`, `cs`, `ds`, `S`
|
||||
|
||||
## multiple-cursors
|
||||
|
||||
* Setup: `Plug 'terryma/vim-multiple-cursors'`
|
||||
* <details>
|
||||
<summary>Alternative vim-plug / vundle syntax</summary>
|
||||
<code>Plug 'https://github.com/terryma/vim-multiple-cursors'</code>
|
||||
<br/>
|
||||
<code>Plug 'vim-multiple-cursors'</code>
|
||||
<br/>
|
||||
<code>set multiple-cursors</code>
|
||||
</details>
|
||||
* Emulates [vim-multiple-cursors](https://github.com/terryma/vim-multiple-cursors)
|
||||
* Commands: `<A-n>`, `<A-x>`, `<A-p>`, `g<A-n>`
|
||||
|
||||
## commentary
|
||||
|
||||
* Setup: `Plug 'tpope/vim-commentary'`
|
||||
* <details>
|
||||
<summary>Alternative vim-plug / vundle syntax</summary>
|
||||
<code>Plug 'https://github.com/tpope/vim-commentary'</code>
|
||||
<br/>
|
||||
<code>Plug 'vim-commentary'</code>
|
||||
<br/>
|
||||
<code>Plug 'https://www.vim.org/scripts/script.php?script_id=3695'</code>
|
||||
<br/>
|
||||
<code>Plug 'tomtom/tcomment_vim'</code>
|
||||
<br/>
|
||||
<code>Plug 'tcomment_vim'</code>
|
||||
<br/>
|
||||
<code>Plug 'https://www.vim.org/scripts/script.php?script_id=1173'</code>
|
||||
<br/>
|
||||
<code>set commentary</code>
|
||||
</details>
|
||||
* Emulates [commentary.vim](https://github.com/tpope/vim-commentary)
|
||||
* Commands: `gcc`, `gc + motion`, `v_gc`
|
||||
* By [Daniel Leong](https://github.com/dhleong)
|
||||
|
||||
## ReplaceWithRegister
|
||||
|
||||
* Setup: `Plug 'vim-scripts/ReplaceWithRegister'`
|
||||
* <details>
|
||||
<summary>Alternative vim-plug / vundle syntax</summary>
|
||||
<code>Plug 'https://github.com/vim-scripts/ReplaceWithRegister'</code>
|
||||
<br/>
|
||||
<code>Plug 'ReplaceWithRegister'</code>
|
||||
<br/>
|
||||
<code>Plug 'https://github.com/inkarkat/vim-ReplaceWithRegister'</code>
|
||||
<br/>
|
||||
<code>Plug 'inkarkat/vim-ReplaceWithRegister'</code>
|
||||
<br/>
|
||||
<code>Plug 'vim-ReplaceWithRegister'</code>
|
||||
<br/>
|
||||
<code>Plug 'https://www.vim.org/scripts/script.php?script_id=2703'</code>
|
||||
<br/>
|
||||
<code>set ReplaceWithRegister</code>
|
||||
</details>
|
||||
* Emulates [ReplaceWithRegister](https://github.com/vim-scripts/ReplaceWithRegister)
|
||||
* Commands: `gr`, `grr`
|
||||
* By [igrekster](https://github.com/igrekster)
|
||||
|
||||
## argtextobj
|
||||
|
||||
* Setup:
|
||||
* `Plug 'vim-scripts/argtextobj.vim'`
|
||||
* <details>
|
||||
<summary>Alternative vim-plug / vundle syntax</summary>
|
||||
<code>Plug 'https://github.com/vim-scripts/argtextobj.vim'</code>
|
||||
<br/>
|
||||
<code>Plug 'argtextobj.vim'</code>
|
||||
<br/>
|
||||
<code>Plug 'https://www.vim.org/scripts/script.php?script_id=2699'</code>
|
||||
<br/>
|
||||
<code>set argtextobj</code>
|
||||
</details>
|
||||
* By default, only the arguments inside parenthesis are considered. To extend the functionality
|
||||
to other types of brackets, set `g:argtextobj_pairs` variable to a comma-separated
|
||||
list of colon-separated pairs (same as VIM's `matchpairs` option), like
|
||||
`let g:argtextobj_pairs="(:),{:},<:>"`. The order of pairs matters when
|
||||
handling symbols that can also be operators: `func(x << 5, 20) >> 17`. To handle
|
||||
this syntax parenthesis, must come before angle brackets in the list.
|
||||
* Emulates [argtextobj.vim](https://www.vim.org/scripts/script.php?script_id=2699)
|
||||
* Additional text objects: `aa`, `ia`
|
||||
|
||||
## exchange
|
||||
|
||||
* Setup: `Plug 'tommcdo/vim-exchange'`
|
||||
* <details>
|
||||
<summary>Alternative vim-plug / vundle syntax</summary>
|
||||
<code>Plug 'https://github.com/tommcdo/vim-exchange'</code>
|
||||
<br/>
|
||||
<code>Plug 'vim-exchange'</code>
|
||||
<br/>
|
||||
<code>set exchange</code>
|
||||
</details>
|
||||
* Emulates [vim-exchange](https://github.com/tommcdo/vim-exchange)
|
||||
* Commands: `cx`, `cxx`, `X`, `cxc`
|
||||
* By [fan-tom](https://github.com/fan-tom)
|
||||
|
||||
## textobj-entire
|
||||
|
||||
* Setup: `Plug 'kana/vim-textobj-entire'`
|
||||
* <details>
|
||||
<summary>Alternative vim-plug / vundle syntax</summary>
|
||||
<code>Plug 'https://github.com/kana/vim-textobj-entire'</code>
|
||||
<br/>
|
||||
<code>Plug 'vim-textobj-entire'</code>
|
||||
<br/>
|
||||
<code>Plug 'https://www.vim.org/scripts/script.php?script_id=2610'</code>
|
||||
<br/>
|
||||
<code>set textobj-entire</code>
|
||||
</details>
|
||||
* Emulates [vim-textobj-entire](https://github.com/kana/vim-textobj-entire)
|
||||
* Additional text objects: `ae`, `ie`
|
||||
* By [Alexandre Grison](https://github.com/agrison)
|
||||
|
||||
## highlightedyank
|
||||
|
||||
* Setup:
|
||||
* `Plug 'machakann/vim-highlightedyank'`
|
||||
* <details>
|
||||
<summary>Alternative vim-plug / vundle syntax</summary>
|
||||
<code>Plug 'https://github.com/machakann/vim-highlightedyank'</code>
|
||||
<br/>
|
||||
<code>Plug 'vim-highlightedyank'</code>
|
||||
<br/>
|
||||
<code>set highlightedyank</code>
|
||||
</details>
|
||||
* if you want to optimize highlight duration, assign a time in milliseconds:
|
||||
`let g:highlightedyank_highlight_duration = "1000"`
|
||||
A negative number makes the highlight persistent.
|
||||
`let g:highlightedyank_highlight_duration = "-1"`
|
||||
* if you want to change background color of highlight you can provide the rgba of the color you want e.g.
|
||||
`let g:highlightedyank_highlight_color = "rgba(160, 160, 160, 155)"`
|
||||
* Emulates [vim-highlightedyank](https://github.com/machakann/vim-highlightedyank)
|
||||
* By [KostkaBrukowa](https://github.com/KostkaBrukowa)
|
||||
|
||||
## vim-paragraph-motion
|
||||
|
||||
* Setup: `Plug 'dbakker/vim-paragraph-motion'`
|
||||
* <details>
|
||||
<summary>Alternative vim-plug / vundle syntax</summary>
|
||||
<code>Plug 'https://github.com/dbakker/vim-paragraph-motion'</code>
|
||||
<br/>
|
||||
<code>Plug 'vim-paragraph-motion'</code>
|
||||
<br/>
|
||||
<code>Plug 'https://github.com/vim-scripts/Improved-paragraph-motion'</code>
|
||||
<br/>
|
||||
<code>Plug 'vim-scripts/Improved-paragraph-motion'</code>
|
||||
<br/>
|
||||
<code>Plug 'Improved-paragraph-motion'</code>
|
||||
<br/>
|
||||
<code>set vim-paragraph-motion</code>
|
||||
</details>
|
||||
* Emulates [vim-paragraph-motion](https://github.com/dbakker/vim-paragraph-motion)
|
||||
|
||||
## vim-indent-object
|
||||
|
||||
* Setup: `Plug 'michaeljsmith/vim-indent-object'`
|
||||
* <details>
|
||||
<summary>Alternative vim-plug / vundle syntax</summary>
|
||||
<code>Plug 'https://github.com/michaeljsmith/vim-indent-object'</code>
|
||||
<br/>
|
||||
<code>Plug 'vim-indent-object'</code>
|
||||
<br/>
|
||||
<code>set textobj-indent</code>
|
||||
</details>
|
||||
* Emulates [vim-indent-object](https://github.com/michaeljsmith/vim-indent-object)
|
||||
* Additional text objects: `ai`, `ii`, `aI`
|
||||
* By [Shrikant Sharat Kandula](https://github.com/sharat87)
|
||||
|
||||
## matchit.vim
|
||||
|
||||
* Setup: `packadd matchit`
|
||||
* <details>
|
||||
<summary>Alternative vim-plug / vundle syntax</summary>
|
||||
<code>Plug 'vim-matchit'</code>
|
||||
<br/>
|
||||
<code>Plug 'chrisbra/matchit'</code>
|
||||
<br/>
|
||||
<code>set matchit</code>
|
||||
</details>
|
||||
* Emulates [matchit.vim](https://github.com/chrisbra/matchit)
|
||||
* Currently works for HTML/XML and ruby
|
||||
* By [Martin Yzeiri](https://github.com/myzeiri)
|
@@ -1,6 +1,6 @@
|
||||
Welcome to the IdeaVim wiki!
|
||||
|
||||
- List of emulated plugins: [[plugins|Emulated-plugins]]
|
||||
- Examples of `ideajoin` option (also known as "smart join"): [["ideajoin" examples|"ideajoin"-examples]]
|
||||
- List of "set" commands: [["set" commands|"set"-commands]]
|
||||
- List of IdeaVim plugins: [[plugins|IdeaVim Plugins]]
|
||||
- Examples of `ideajoin` option (also known as "smart join"): [["ideajoin" examples|ideajoin-examples]]
|
||||
- List of "set" commands: [["set" commands|set-commands]]
|
||||
- Docs about "select" mode in vim: [[select mode|Select-mode]]
|
||||
|
398
doc/IdeaVim Plugins.md
Normal file
398
doc/IdeaVim Plugins.md
Normal file
@@ -0,0 +1,398 @@
|
||||
IdeaVim Plugins
|
||||
--------------------
|
||||
|
||||
IdeaVim plugins work like the original Vim plugins. If you want to turn any of them on, you have to enable it via this command in your `~/.ideavimrc`:
|
||||
|
||||
```
|
||||
Plug '<plugin-github-reference>'
|
||||
```
|
||||
|
||||
If you reuse your existing `.vimrc` file using `source ~/.vimrc`, IdeaVim can parse and enable plugins that are defined
|
||||
using [vim-plug](https://github.com/junegunn/vim-plug) or [vundle](https://github.com/VundleVim/Vundle.vim).
|
||||
No additional set commands in `~/.ideavimrc` are required.
|
||||
If you'd like to disable some plugin that's enabled in `.vimrc`, you can use `set no<extension-name>`
|
||||
in `~/.ideavimrc`. E.g. `set nosurround`.
|
||||
|
||||
Available plugins:
|
||||
|
||||
<details>
|
||||
<summary><h2>easymotion</h2></summary>
|
||||
|
||||
Original plugin: [vim-easymotion](https://github.com/easymotion/vim-easymotion).
|
||||
|
||||
### Setup:
|
||||
- Install [IdeaVim-EasyMotion](https://plugins.jetbrains.com/plugin/13360-ideavim-easymotion/)
|
||||
and [AceJump](https://plugins.jetbrains.com/plugin/7086-acejump/) plugins.
|
||||
- Add the following command to `~/.ideavimrc`: `Plug 'easymotion/vim-easymotion'`
|
||||
<details>
|
||||
<summary>Alternative syntax</summary>
|
||||
<code>Plugin 'easymotion/vim-easymotion'</code>
|
||||
<br/>
|
||||
<code>Plug 'https://github.com/easymotion/vim-easymotion'</code>
|
||||
<br/>
|
||||
<code>Plug 'vim-easymotion'</code>
|
||||
<br/>
|
||||
<code>set easymotion</code>
|
||||
</details>
|
||||
|
||||
### Instructions
|
||||
|
||||
All commands with the mappings are supported. See the [full list of supported commands](https://github.com/AlexPl292/IdeaVim-EasyMotion#supported-commands).
|
||||
|
||||
</details>
|
||||
|
||||
|
||||
<details>
|
||||
<summary><h2>sneak</h2></summary>
|
||||
|
||||
Original plugin: [vim-sneak](https://github.com/justinmk/vim-sneak).
|
||||
|
||||
### Setup:
|
||||
- Install [IdeaVim-sneak](https://plugins.jetbrains.com/plugin/15348-ideavim-sneak) plugin.
|
||||
- Add the following command to `~/.ideavimrc`: `set sneak`
|
||||
|
||||
### Instructions
|
||||
|
||||
See the [docs](https://github.com/Mishkun/ideavim-sneak#usage)
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><h2>NERDTree</h2></summary>
|
||||
|
||||
Original plugin: [NERDTree](https://github.com/preservim/nerdtree).
|
||||
|
||||
### Setup:
|
||||
- Add the following command to `~/.ideavimrc`: `Plug 'preservim/nerdtree'`
|
||||
<details>
|
||||
<summary>Alternative syntax</summary>
|
||||
<code>Plugin 'preservim/nerdtree'</code>
|
||||
<br/>
|
||||
<code>Plug 'https://github.com/preservim/nerdtree'</code>
|
||||
<br/>
|
||||
<code>Plug 'nerdtree'</code>
|
||||
<br/>
|
||||
<code>set NERDTree</code>
|
||||
</details>
|
||||
|
||||
### Instructions
|
||||
|
||||
[[See here|NERDTree-support]].
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><h2>surround</h2></summary>
|
||||
|
||||
Original plugin: [vim-surround](https://github.com/tpope/vim-surround).
|
||||
|
||||
### Setup:
|
||||
- Add the following command to `~/.ideavimrc`: `Plug 'tpope/vim-surround'`
|
||||
<details>
|
||||
<summary>Alternative syntax</summary>
|
||||
<code>Plugin 'tpope/vim-surround'</code>
|
||||
<br/>
|
||||
<code>Plug 'https://www.vim.org/scripts/script.php?script_id=1697'</code>
|
||||
<br/>
|
||||
<code>Plug 'vim-surround'</code>
|
||||
<br/>
|
||||
<code>set surround</code>
|
||||
</details>
|
||||
|
||||
### Instructions
|
||||
|
||||
https://github.com/tpope/vim-surround/blob/master/doc/surround.txt
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><h2>multiple-cursors</h2></summary>
|
||||
|
||||
Original plugin: [vim-multiple-cursors](https://github.com/terryma/vim-multiple-cursors).
|
||||
|
||||
### Setup:
|
||||
- Add the following command to `~/.ideavimrc`: `Plug 'terryma/vim-multiple-cursors'`
|
||||
<details>
|
||||
<summary>Alternative syntax</summary>
|
||||
<code>Plugin 'terryma/vim-multiple-cursors'</code>
|
||||
<br/>
|
||||
<code>Plug 'https://github.com/terryma/vim-multiple-cursors'</code>
|
||||
<br/>
|
||||
<code>Plug 'vim-multiple-cursors'</code>
|
||||
<br/>
|
||||
<code>set multiple-cursors</code>
|
||||
</details>
|
||||
|
||||
### Instructions
|
||||
|
||||
https://github.com/terryma/vim-multiple-cursors/blob/master/doc/multiple_cursors.txt
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><h2>commentary</h2></summary>
|
||||
|
||||
By [Daniel Leong](https://github.com/dhleong)
|
||||
Original plugin: [commentary.vim](https://github.com/tpope/vim-commentary).
|
||||
|
||||
### Setup:
|
||||
- Add the following command to `~/.ideavimrc`: `Plug 'tpope/vim-commentary'`
|
||||
<details>
|
||||
<summary>Alternative syntax</summary>
|
||||
<code>Plugin 'tpope/vim-commentary'</code>
|
||||
<br/>
|
||||
<code>Plug 'https://github.com/tpope/vim-commentary'</code>
|
||||
<br/>
|
||||
<code>Plug 'vim-commentary'</code>
|
||||
<br/>
|
||||
<code>Plug 'tcomment_vim'</code>
|
||||
<br/>
|
||||
<code>set commentary</code>
|
||||
</details>
|
||||
|
||||
### Instructions
|
||||
|
||||
https://github.com/tpope/vim-commentary/blob/master/doc/commentary.txt
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><h2>ReplaceWithRegister</h2></summary>
|
||||
|
||||
By [igrekster](https://github.com/igrekster)
|
||||
Original plugin: [ReplaceWithRegister](https://github.com/vim-scripts/ReplaceWithRegister).
|
||||
|
||||
### Setup:
|
||||
- Add the following command to `~/.ideavimrc`: `Plug 'vim-scripts/ReplaceWithRegister'`
|
||||
<details>
|
||||
<summary>Alternative syntax</summary>
|
||||
<code>Plugin 'vim-scripts/ReplaceWithRegister'</code>
|
||||
<br/>
|
||||
<code>Plug 'ReplaceWithRegister'</code>
|
||||
<br/>
|
||||
<code>Plug 'https://github.com/inkarkat/vim-ReplaceWithRegister'</code>
|
||||
<br/>
|
||||
<code>Plug 'inkarkat/vim-ReplaceWithRegister'</code>
|
||||
<br/>
|
||||
<code>Plug 'vim-ReplaceWithRegister'</code>
|
||||
<br/>
|
||||
<code>Plug 'https://www.vim.org/scripts/script.php?script_id=2703'</code>
|
||||
<br/>
|
||||
<code>set ReplaceWithRegister</code>
|
||||
</details>
|
||||
|
||||
### Instructions
|
||||
|
||||
https://github.com/vim-scripts/ReplaceWithRegister/blob/master/doc/ReplaceWithRegister.txt
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><h2>argtextobj</h2></summary>
|
||||
|
||||
Original plugin: [argtextobj.vim](https://www.vim.org/scripts/script.php?script_id=2699).
|
||||
|
||||
### Setup:
|
||||
- Add the following command to `~/.ideavimrc`: `Plug 'vim-scripts/argtextobj.vim'`
|
||||
<details>
|
||||
<summary>Alternative syntax</summary>
|
||||
<code>Plugin 'vim-scripts/argtextobj.vim'</code>
|
||||
<br/>
|
||||
<code>Plug 'https://github.com/vim-scripts/argtextobj.vim'</code>
|
||||
<br/>
|
||||
<code>Plug 'argtextobj.vim'</code>
|
||||
<br/>
|
||||
<code>Plug 'https://www.vim.org/scripts/script.php?script_id=2699'</code>
|
||||
<br/>
|
||||
<code>set argtextobj</code>
|
||||
</details>
|
||||
|
||||
### Instructions
|
||||
|
||||
By default, only the arguments inside parenthesis are considered. To extend the functionality
|
||||
to other types of brackets, set `g:argtextobj_pairs` variable to a comma-separated
|
||||
list of colon-separated pairs (same as VIM's `matchpairs` option), like
|
||||
`let g:argtextobj_pairs="(:),{:},<:>"`. The order of pairs matters when
|
||||
handling symbols that can also be operators: `func(x << 5, 20) >> 17`. To handle
|
||||
this syntax parenthesis, must come before angle brackets in the list.
|
||||
|
||||
https://www.vim.org/scripts/script.php?script_id=2699
|
||||
|
||||
</details>
|
||||
|
||||
|
||||
<details>
|
||||
<summary><h2>exchange</h2></summary>
|
||||
|
||||
By [fan-tom](https://github.com/fan-tom)
|
||||
Original plugin: [vim-exchange](https://github.com/tommcdo/vim-exchange).
|
||||
|
||||
### Setup:
|
||||
- Add the following command to `~/.ideavimrc`: `Plug 'tommcdo/vim-exchange'`
|
||||
<details>
|
||||
<summary>Alternative syntax</summary>
|
||||
<code>Plugin 'tommcdo/vim-exchange'</code>
|
||||
<br/>
|
||||
<code>Plug 'https://github.com/tommcdo/vim-exchange'</code>
|
||||
<br/>
|
||||
<code>Plug 'vim-exchange'</code>
|
||||
<br/>
|
||||
<code>set exchange</code>
|
||||
</details>
|
||||
|
||||
### Instructions
|
||||
|
||||
https://github.com/tommcdo/vim-exchange/blob/master/doc/exchange.txt
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><h2>textobj-entire</h2></summary>
|
||||
|
||||
By [Alexandre Grison](https://github.com/agrison)
|
||||
Original plugin: [vim-textobj-entire](https://github.com/kana/vim-textobj-entire).
|
||||
|
||||
### Setup:
|
||||
- Add the following command to `~/.ideavimrc`: `Plug 'kana/vim-textobj-entire'`
|
||||
<details>
|
||||
<summary>Alternative syntax</summary>
|
||||
<code>Plugin 'kana/vim-textobj-entire'</code>
|
||||
<br/>
|
||||
<code>Plug 'vim-textobj-entire'</code>
|
||||
<br/>
|
||||
<code>Plug 'https://www.vim.org/scripts/script.php?script_id=2610'</code>
|
||||
<br/>
|
||||
<code>set textobj-entire</code>
|
||||
</details>
|
||||
|
||||
### Instructions
|
||||
|
||||
https://github.com/kana/vim-textobj-entire/blob/master/doc/textobj-entire.txt
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><h2>highlightedyank</h2></summary>
|
||||
|
||||
By [KostkaBrukowa](https://github.com/KostkaBrukowa)
|
||||
Original plugin: [vim-highlightedyank](https://github.com/machakann/vim-highlightedyank).
|
||||
|
||||
### Setup:
|
||||
- Add the following command to `~/.ideavimrc`: `Plug 'machakann/vim-highlightedyank'`
|
||||
<details>
|
||||
<summary>Alternative syntax</summary>
|
||||
<code>Plugin 'machakann/vim-highlightedyank'</code>
|
||||
<br/>
|
||||
<code>Plug 'https://github.com/machakann/vim-highlightedyank'</code>
|
||||
<br/>
|
||||
<code>Plug 'vim-highlightedyank'</code>
|
||||
<br/>
|
||||
<code>set highlightedyank</code>
|
||||
</details>
|
||||
|
||||
### Instructions
|
||||
|
||||
If you want to optimize highlight duration, assign a time in milliseconds:
|
||||
`let g:highlightedyank_highlight_duration = "1000"`
|
||||
A negative number makes the highlight persistent.
|
||||
|
||||
If you want to change background color of highlight you can provide the rgba of the color you want e.g.
|
||||
`let g:highlightedyank_highlight_color = "rgba(160, 160, 160, 155)"`
|
||||
|
||||
https://github.com/machakann/vim-highlightedyank/blob/master/doc/highlightedyank.txt
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><h2>vim-paragraph-motion</h2></summary>
|
||||
|
||||
Original plugin: [vim-paragraph-motion](https://github.com/dbakker/vim-paragraph-motion).
|
||||
|
||||
### Setup:
|
||||
- Add the following command to `~/.ideavimrc`: `Plug 'dbakker/vim-paragraph-motion'`
|
||||
<details>
|
||||
<summary>Alternative syntax</summary>
|
||||
<code>Plugin 'dbakker/vim-paragraph-motion'</code>
|
||||
<br/>
|
||||
<code>Plug 'https://github.com/dbakker/vim-paragraph-motion'</code>
|
||||
<br/>
|
||||
<code>Plug 'vim-paragraph-motion'</code>
|
||||
<br/>
|
||||
<code>Plug 'https://github.com/vim-scripts/Improved-paragraph-motion'</code>
|
||||
<br/>
|
||||
<code>Plug 'vim-scripts/Improved-paragraph-motion'</code>
|
||||
<br/>
|
||||
<code>Plug 'Improved-paragraph-motion'</code>
|
||||
<br/>
|
||||
<code>set vim-paragraph-motion</code>
|
||||
</details>
|
||||
|
||||
### Instructions
|
||||
|
||||
https://github.com/dbakker/vim-paragraph-motion#vim-paragraph-motion
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><h2>vim-indent-object</h2></summary>
|
||||
|
||||
By [Shrikant Sharat Kandula](https://github.com/sharat87)
|
||||
Original plugin: [vim-indent-object](https://github.com/michaeljsmith/vim-indent-object).
|
||||
|
||||
### Setup:
|
||||
- Add the following command to `~/.ideavimrc`: `Plug 'michaeljsmith/vim-indent-object'`
|
||||
<details>
|
||||
<summary>Alternative syntax</summary>
|
||||
<code>Plugin 'michaeljsmith/vim-indent-object'</code>
|
||||
<br/>
|
||||
<code>Plug 'https://github.com/michaeljsmith/vim-indent-object'</code>
|
||||
<br/>
|
||||
<code>Plug 'vim-indent-object'</code>
|
||||
<br/>
|
||||
<code>set textobj-indent</code>
|
||||
</details>
|
||||
|
||||
### Instructions
|
||||
|
||||
https://github.com/michaeljsmith/vim-indent-object/blob/master/doc/indent-object.txt
|
||||
|
||||
</details>
|
||||
|
||||
|
||||
<details>
|
||||
<summary><h2>matchit.vim</h2></summary>
|
||||
|
||||
By [Martin Yzeiri](https://github.com/myzeiri)
|
||||
Original plugin: [matchit.vim](https://github.com/chrisbra/matchit).
|
||||
|
||||
### Setup:
|
||||
- Add the following command to `~/.ideavimrc`: `packadd matchit`
|
||||
<details>
|
||||
<summary>Alternative syntax</summary>
|
||||
<code>Plug 'vim-matchit'</code>
|
||||
<br/>
|
||||
<code>Plug 'chrisbra/matchit'</code>
|
||||
<br/>
|
||||
<code>set matchit</code>
|
||||
</details>
|
||||
|
||||
### Instructions
|
||||
|
||||
https://github.com/adelarsq/vim-matchit/blob/master/doc/matchit.txt
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><h2>IdeaVim-Quickscope</h2></summary>
|
||||
|
||||
Original plugin: [quick-scope](https://github.com/unblevable/quick-scope).
|
||||
|
||||
### Setup:
|
||||
- Install [IdeaVim-Quickscope](https://plugins.jetbrains.com/plugin/19417-ideavim-quickscope) plugin.
|
||||
- Add the following command to `~/.ideavimrc`: `set quickscope`
|
||||
|
||||
### Instructions
|
||||
|
||||
https://plugins.jetbrains.com/plugin/19417-ideavim-quickscope
|
||||
|
||||
</details>
|
@@ -1,8 +1,8 @@
|
||||
# NERDTree
|
||||
|
||||
IdeaVim supports emulation of the NERDTree plugin. Update your `~/.ideavimrc` to turn it on:
|
||||
IdeaVim supports the NERDTree plugin. Update your `~/.ideavimrc` to turn it on:
|
||||
```vim
|
||||
Plug 'preservim/nerdtree`
|
||||
Plug 'preservim/nerdtree'
|
||||
```
|
||||
or
|
||||
```vim
|
||||
@@ -15,7 +15,7 @@ Use `set noNERDTree` to disable this extension.
|
||||
|
||||
```vim
|
||||
set NERDTree
|
||||
Plug 'preservim/nerdtree`
|
||||
Plug 'preservim/nerdtree'
|
||||
Plug 'https://github.com/preservim/nerdtree'
|
||||
Plug 'https://github.com/scrooloose/nerdtree'
|
||||
Plug 'scrooloose/nerdtree'
|
||||
|
BIN
doc/images/action-id-notification.png
Normal file
BIN
doc/images/action-id-notification.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 46 KiB |
13
doc/marketplace-plugin-example.md
Normal file
13
doc/marketplace-plugin-example.md
Normal 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)```
|
43
doc/posts/how-many-modes-does-vim-have.md
Normal file
43
doc/posts/how-many-modes-does-vim-have.md
Normal 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)). What’s 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 doesn’t 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 Vim’s 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
38
doc/support-guide.md
Normal 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.
|
@@ -1,19 +1,36 @@
|
||||
#
|
||||
# Copyright 2003-2023 The IdeaVim authors
|
||||
#
|
||||
# Use of this source code is governed by an MIT-style
|
||||
# license that can be found in the LICENSE.txt file or at
|
||||
# https://opensource.org/licenses/MIT.
|
||||
#
|
||||
|
||||
# suppress inspection "UnusedProperty" for whole file
|
||||
|
||||
ideaVersion=2022.2.2
|
||||
ideaVersion=2023.2.1
|
||||
downloadIdeaSources=true
|
||||
instrumentPluginCode=true
|
||||
version=chylex-13
|
||||
version=chylex-16
|
||||
javaVersion=17
|
||||
remoteRobotVersion=0.11.15
|
||||
remoteRobotVersion=0.11.17
|
||||
antlrVersion=4.10.1
|
||||
|
||||
kotlin.incremental.useClasspathSnapshot=false
|
||||
|
||||
# Please don't forget to update kotlin version in buildscript section
|
||||
kotlinVersion=1.6.21
|
||||
kotlinVersion=1.8.21
|
||||
publishToken=token
|
||||
publishChannels=eap
|
||||
|
||||
slackUrl=
|
||||
youtrackToken=
|
||||
|
||||
# Gradle settings
|
||||
org.gradle.jvmargs='-Dfile.encoding=UTF-8'
|
||||
|
||||
# Disable warning from gradle-intellij-plugin. Kotlin stdlib is included as compileOnly, so the warning is unnecessary
|
||||
kotlin.stdlib.default.dependency=false
|
||||
|
||||
# Disable incremental annotation processing
|
||||
ksp.incremental=false
|
||||
|
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
Binary file not shown.
3
gradle/wrapper/gradle-wrapper.properties
vendored
3
gradle/wrapper/gradle-wrapper.properties
vendored
@@ -1,5 +1,6 @@
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-bin.zip
|
||||
networkTimeout=10000
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
|
25
gradlew
vendored
25
gradlew
vendored
@@ -55,7 +55,7 @@
|
||||
# Darwin, MinGW, and NonStop.
|
||||
#
|
||||
# (3) This script is generated from the Groovy template
|
||||
# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
|
||||
# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
|
||||
# within the Gradle project.
|
||||
#
|
||||
# You can find Gradle at https://github.com/gradle/gradle/.
|
||||
@@ -80,13 +80,10 @@ do
|
||||
esac
|
||||
done
|
||||
|
||||
APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
|
||||
|
||||
APP_NAME="Gradle"
|
||||
# This is normally unused
|
||||
# shellcheck disable=SC2034
|
||||
APP_BASE_NAME=${0##*/}
|
||||
|
||||
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
|
||||
APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
|
||||
|
||||
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
||||
MAX_FD=maximum
|
||||
@@ -143,12 +140,16 @@ fi
|
||||
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
|
||||
case $MAX_FD in #(
|
||||
max*)
|
||||
# In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
|
||||
# shellcheck disable=SC3045
|
||||
MAX_FD=$( ulimit -H -n ) ||
|
||||
warn "Could not query maximum file descriptor limit"
|
||||
esac
|
||||
case $MAX_FD in #(
|
||||
'' | soft) :;; #(
|
||||
*)
|
||||
# In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
|
||||
# shellcheck disable=SC3045
|
||||
ulimit -n "$MAX_FD" ||
|
||||
warn "Could not set maximum file descriptor limit to $MAX_FD"
|
||||
esac
|
||||
@@ -193,6 +194,10 @@ if "$cygwin" || "$msys" ; then
|
||||
done
|
||||
fi
|
||||
|
||||
|
||||
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
|
||||
|
||||
# Collect all arguments for the java command;
|
||||
# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
|
||||
# shell script including quotes and variable substitutions, so put them in
|
||||
@@ -205,6 +210,12 @@ set -- \
|
||||
org.gradle.wrapper.GradleWrapperMain \
|
||||
"$@"
|
||||
|
||||
# Stop when "xargs" is not available.
|
||||
if ! command -v xargs >/dev/null 2>&1
|
||||
then
|
||||
die "xargs is not available"
|
||||
fi
|
||||
|
||||
# Use "xargs" to parse quoted args.
|
||||
#
|
||||
# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
|
||||
|
15
gradlew.bat
vendored
15
gradlew.bat
vendored
@@ -14,7 +14,7 @@
|
||||
@rem limitations under the License.
|
||||
@rem
|
||||
|
||||
@if "%DEBUG%" == "" @echo off
|
||||
@if "%DEBUG%"=="" @echo off
|
||||
@rem ##########################################################################
|
||||
@rem
|
||||
@rem Gradle startup script for Windows
|
||||
@@ -25,7 +25,8 @@
|
||||
if "%OS%"=="Windows_NT" setlocal
|
||||
|
||||
set DIRNAME=%~dp0
|
||||
if "%DIRNAME%" == "" set DIRNAME=.
|
||||
if "%DIRNAME%"=="" set DIRNAME=.
|
||||
@rem This is normally unused
|
||||
set APP_BASE_NAME=%~n0
|
||||
set APP_HOME=%DIRNAME%
|
||||
|
||||
@@ -40,7 +41,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome
|
||||
|
||||
set JAVA_EXE=java.exe
|
||||
%JAVA_EXE% -version >NUL 2>&1
|
||||
if "%ERRORLEVEL%" == "0" goto execute
|
||||
if %ERRORLEVEL% equ 0 goto execute
|
||||
|
||||
echo.
|
||||
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||
@@ -75,13 +76,15 @@ set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
|
||||
|
||||
:end
|
||||
@rem End local scope for the variables with windows NT shell
|
||||
if "%ERRORLEVEL%"=="0" goto mainEnd
|
||||
if %ERRORLEVEL% equ 0 goto mainEnd
|
||||
|
||||
:fail
|
||||
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
|
||||
rem the _cmd.exe /c_ return code!
|
||||
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
|
||||
exit /b 1
|
||||
set EXIT_CODE=%ERRORLEVEL%
|
||||
if %EXIT_CODE% equ 0 set EXIT_CODE=1
|
||||
if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
|
||||
exit /b %EXIT_CODE%
|
||||
|
||||
:mainEnd
|
||||
if "%OS%"=="Windows_NT" endlocal
|
||||
|
105737
qodana.sarif.json
105737
qodana.sarif.json
File diff suppressed because one or more lines are too long
11
qodana.yaml
11
qodana.yaml
@@ -19,7 +19,10 @@ exclude:
|
||||
- src/test/java/org/jetbrains/plugins/ideavim/propertybased/samples/JavaText.kt
|
||||
- src/test/java/org/jetbrains/plugins/ideavim/propertybased/samples/LoremText.kt
|
||||
- src/test/java/org/jetbrains/plugins/ideavim/propertybased/samples/SimpleText.kt
|
||||
- src/main/java/com/maddyhome/idea/vim/vimscript/parser/generated/VimscriptListener.java
|
||||
- src/main/java/com/maddyhome/idea/vim/vimscript/parser/generated/VimscriptLexer.java
|
||||
- src/main/java/com/maddyhome/idea/vim/vimscript/parser/generated/VimscriptParser.java
|
||||
- src/main/java/com/maddyhome/idea/vim/vimscript/parser/generated/VimscriptVisitor.java
|
||||
- src/main/java/com/maddyhome/idea/vim/vimscript/parser/generated
|
||||
- src/main/java/com/maddyhome/idea/vim/package-info.java
|
||||
dependencyIgnores:
|
||||
- name: "acejump"
|
||||
- name: "icu4j"
|
||||
- name: "antlr-runtime"
|
||||
- name: "javax.json"
|
141
scripts/build.gradle.kts
Normal file
141
scripts/build.gradle.kts
Normal file
@@ -0,0 +1,141 @@
|
||||
/*
|
||||
* Copyright 2003-2023 The IdeaVim authors
|
||||
*
|
||||
* Use of this source code is governed by an MIT-style
|
||||
* license that can be found in the LICENSE.txt file or at
|
||||
* https://opensource.org/licenses/MIT.
|
||||
*/
|
||||
|
||||
plugins {
|
||||
java
|
||||
kotlin("jvm")
|
||||
application
|
||||
}
|
||||
|
||||
// group 'org.jetbrains.ideavim'
|
||||
// version 'SNAPSHOT'
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
}
|
||||
|
||||
dependencies {
|
||||
compileOnly("org.jetbrains.kotlin:kotlin-stdlib:1.9.10")
|
||||
|
||||
implementation("io.ktor:ktor-client-core:2.3.4")
|
||||
implementation("io.ktor:ktor-client-cio:2.3.4")
|
||||
implementation("io.ktor:ktor-client-content-negotiation:2.3.4")
|
||||
implementation("io.ktor:ktor-serialization-kotlinx-json:2.3.4")
|
||||
implementation("io.ktor:ktor-client-auth:2.3.4")
|
||||
implementation("org.eclipse.jgit:org.eclipse.jgit:6.6.0.202305301015-r")
|
||||
|
||||
// This is needed for jgit to connect to ssh
|
||||
implementation("org.eclipse.jgit:org.eclipse.jgit.ssh.apache:6.7.0.202309050840-r")
|
||||
implementation("com.vdurmont:semver4j:3.1.0")
|
||||
}
|
||||
|
||||
val releaseType: String? by project
|
||||
|
||||
tasks {
|
||||
compileKotlin {
|
||||
kotlinOptions {
|
||||
freeCompilerArgs = listOf("-Xjvm-default=all-compatibility")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
tasks.register("generateIdeaVimConfigurations", JavaExec::class) {
|
||||
group = "verification"
|
||||
description = "This job tracks if there are any new plugins in marketplace we don't know about"
|
||||
mainClass.set("scripts.MainKt")
|
||||
classpath = sourceSets["main"].runtimeClasspath
|
||||
}
|
||||
|
||||
tasks.register("checkNewPluginDependencies", JavaExec::class) {
|
||||
group = "verification"
|
||||
description = "This job tracks if there are any new plugins in marketplace we don't know about"
|
||||
mainClass.set("scripts.CheckNewPluginDependenciesKt")
|
||||
classpath = sourceSets["main"].runtimeClasspath
|
||||
}
|
||||
|
||||
tasks.register("updateAffectedRates", JavaExec::class) {
|
||||
group = "verification"
|
||||
description = "This job updates Affected Rate field on YouTrack"
|
||||
mainClass.set("scripts.YouTrackUsersAffectedKt")
|
||||
classpath = sourceSets["main"].runtimeClasspath
|
||||
}
|
||||
|
||||
tasks.register("calculateNewVersion", JavaExec::class) {
|
||||
group = "release"
|
||||
mainClass.set("scripts.release.CalculateNewVersionKt")
|
||||
classpath = sourceSets["main"].runtimeClasspath
|
||||
args = listOf("${rootProject.rootDir}", releaseType ?: "")
|
||||
}
|
||||
|
||||
tasks.register("changelogUpdateUnreleased", JavaExec::class) {
|
||||
group = "release"
|
||||
mainClass.set("scripts.release.ChangelogUpdateUnreleasedKt")
|
||||
classpath = sourceSets["main"].runtimeClasspath
|
||||
args = listOf(project.version.toString(), rootProject.rootDir.toString(), releaseType ?: "")
|
||||
}
|
||||
|
||||
tasks.register("commitChanges", JavaExec::class) {
|
||||
group = "release"
|
||||
mainClass.set("scripts.release.CommitChangesKt")
|
||||
classpath = sourceSets["main"].runtimeClasspath
|
||||
args = listOf(project.version.toString(), rootProject.rootDir.toString(), releaseType ?: "")
|
||||
}
|
||||
|
||||
tasks.register("addReleaseTag", JavaExec::class) {
|
||||
group = "release"
|
||||
mainClass.set("scripts.release.AddReleaseTagKt")
|
||||
classpath = sourceSets["main"].runtimeClasspath
|
||||
args = listOf(project.version.toString(), rootProject.rootDir.toString(), releaseType ?: "")
|
||||
}
|
||||
|
||||
tasks.register("resetReleaseBranch", JavaExec::class) {
|
||||
group = "release"
|
||||
mainClass.set("scripts.release.ResetReleaseBranchKt")
|
||||
classpath = sourceSets["main"].runtimeClasspath
|
||||
args = listOf(project.version.toString(), rootProject.rootDir.toString(), releaseType ?: "")
|
||||
}
|
||||
|
||||
tasks.register("pushChanges", JavaExec::class) {
|
||||
mainClass.set("scripts.PushChangesKt")
|
||||
classpath = sourceSets["main"].runtimeClasspath
|
||||
args = listOf(rootProject.rootDir.toString())
|
||||
}
|
||||
|
||||
tasks.register("pushChangesWithReleaseBranch", JavaExec::class) {
|
||||
mainClass.set("scripts.PushChangesWithReleaseBranchKt")
|
||||
classpath = sourceSets["main"].runtimeClasspath
|
||||
args = listOf(rootProject.rootDir.toString(), releaseType ?: "")
|
||||
}
|
||||
|
||||
tasks.register("selectBranch", JavaExec::class) {
|
||||
group = "release"
|
||||
mainClass.set("scripts.release.SelectBranchKt")
|
||||
classpath = sourceSets["main"].runtimeClasspath
|
||||
args = listOf(project.version.toString(), rootProject.rootDir.toString(), releaseType ?: "")
|
||||
}
|
||||
|
||||
tasks.register("calculateNewEapVersion", JavaExec::class) {
|
||||
group = "release"
|
||||
mainClass.set("scripts.release.CalculateNewEapVersionKt")
|
||||
classpath = sourceSets["main"].runtimeClasspath
|
||||
args = listOf("${rootProject.rootDir}")
|
||||
}
|
||||
|
||||
tasks.register("calculateNewDevVersion", JavaExec::class) {
|
||||
group = "release"
|
||||
mainClass.set("scripts.release.CalculateNewDevVersionKt")
|
||||
classpath = sourceSets["main"].runtimeClasspath
|
||||
args = listOf("${rootProject.rootDir}")
|
||||
}
|
||||
|
||||
tasks.register("setTeamCityBuildNumber", JavaExec::class) {
|
||||
group = "release"
|
||||
mainClass.set("scripts.release.SetTeamCityBuildNumberKt")
|
||||
classpath = sourceSets["main"].runtimeClasspath
|
||||
args = listOf(project.version.toString(), rootProject.rootDir.toString(), releaseType ?: "")
|
||||
}
|
13
scripts/src/main/kotlin/scripts/Main.kt
Normal file
13
scripts/src/main/kotlin/scripts/Main.kt
Normal file
@@ -0,0 +1,13 @@
|
||||
/*
|
||||
* Copyright 2003-2023 The IdeaVim authors
|
||||
*
|
||||
* Use of this source code is governed by an MIT-style
|
||||
* license that can be found in the LICENSE.txt file or at
|
||||
* https://opensource.org/licenses/MIT.
|
||||
*/
|
||||
|
||||
package scripts
|
||||
|
||||
fun main() {
|
||||
println("Hello")
|
||||
}
|
@@ -0,0 +1,66 @@
|
||||
/*
|
||||
* Copyright 2003-2023 The IdeaVim authors
|
||||
*
|
||||
* Use of this source code is governed by an MIT-style
|
||||
* license that can be found in the LICENSE.txt file or at
|
||||
* https://opensource.org/licenses/MIT.
|
||||
*/
|
||||
|
||||
package scripts
|
||||
|
||||
import io.ktor.client.call.*
|
||||
import io.ktor.client.request.*
|
||||
import kotlinx.serialization.json.JsonObject
|
||||
import kotlinx.serialization.json.jsonPrimitive
|
||||
|
||||
/**
|
||||
* Marketplace has an API to get all plugins that depend on our plugin.
|
||||
* Here we have a list of dependent plugins at some moment, and we check if something changed in that.
|
||||
* If so, we need to update our list of plugins.
|
||||
*
|
||||
* This script makes no actions and aimed to notify the devs in case they need to update the list of IdeaVim plugins.
|
||||
*/
|
||||
|
||||
@Suppress("SpellCheckingInspection")
|
||||
val knownPlugins = listOf(
|
||||
"IdeaVimExtension",
|
||||
"github.zgqq.intellij-enhance",
|
||||
"org.jetbrains.IdeaVim-EasyMotion",
|
||||
"io.github.mishkun.ideavimsneak",
|
||||
"eu.theblob42.idea.whichkey",
|
||||
"com.github.copilot",
|
||||
"com.github.dankinsoid.multicursor",
|
||||
"com.joshestein.ideavim-quickscope",
|
||||
"ca.alexgirard.HarpoonIJ",
|
||||
|
||||
// "cc.implicated.intellij.plugins.bunny", // I don't want to include this plugin in the list of IdeaVim plugins as I don't understand what this is for
|
||||
)
|
||||
|
||||
suspend fun main() {
|
||||
val response = client.get("https://plugins.jetbrains.com/api/plugins/") {
|
||||
parameter("dependency", "IdeaVIM")
|
||||
parameter("includeOptional", true)
|
||||
}
|
||||
val output = response.body<List<String>>()
|
||||
println(output)
|
||||
if (knownPlugins != output) {
|
||||
val newPlugins = (output - knownPlugins).map { it to (getPluginLinkByXmlId(it) ?: "Can't find plugin link") }
|
||||
val removedPlugins = (knownPlugins - output.toSet()).map { it to (getPluginLinkByXmlId(it) ?: "Can't find plugin link") }
|
||||
error(
|
||||
"""
|
||||
|
||||
Unregistered plugins:
|
||||
${if (newPlugins.isNotEmpty()) newPlugins.joinToString(separator = "\n") { it.first + "(" + it.second + ")" } else "No unregistered plugins"}
|
||||
|
||||
Removed plugins:
|
||||
${if (removedPlugins.isNotEmpty()) removedPlugins.joinToString(separator = "\n") { it.first + "(" + it.second + ")" } else "No removed plugins"}
|
||||
""".trimIndent()
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
private suspend fun getPluginLinkByXmlId(it: String): String? {
|
||||
val newPluginLink = client.get("https://plugins.jetbrains.com/api/plugins/intellij/$it")
|
||||
.body<JsonObject>()["link"]?.jsonPrimitive?.content
|
||||
return newPluginLink?.let { "https://plugins.jetbrains.com$it" }
|
||||
}
|
49
scripts/src/main/kotlin/scripts/ktor.kt
Normal file
49
scripts/src/main/kotlin/scripts/ktor.kt
Normal 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
|
||||
},
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
37
scripts/src/main/kotlin/scripts/pushChanges.kt
Normal file
37
scripts/src/main/kotlin/scripts/pushChanges.kt
Normal 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")
|
||||
}
|
||||
}
|
@@ -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")
|
||||
}
|
||||
}
|
27
scripts/src/main/kotlin/scripts/release/addReleaseTag.kt
Normal file
27
scripts/src/main/kotlin/scripts/release/addReleaseTag.kt
Normal 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'")
|
||||
}
|
||||
}
|
@@ -0,0 +1,37 @@
|
||||
/*
|
||||
* Copyright 2003-2023 The IdeaVim authors
|
||||
*
|
||||
* Use of this source code is governed by an MIT-style
|
||||
* license that can be found in the LICENSE.txt file or at
|
||||
* https://opensource.org/licenses/MIT.
|
||||
*/
|
||||
|
||||
package scripts.release
|
||||
|
||||
fun main(args: Array<String>) {
|
||||
println("HI!")
|
||||
val projectDir = args[0]
|
||||
println("Working directory: $projectDir")
|
||||
val (lastVersion, objectId) = getVersion(projectDir, onlyStable = true)
|
||||
println("Last version: $lastVersion, hash: ${objectId.name}")
|
||||
|
||||
val branch = withRepo(projectDir) { it.branch }
|
||||
check(branch == "master") {
|
||||
"We should be on master branch"
|
||||
}
|
||||
withGit(projectDir) { git ->
|
||||
val log = git.log().setMaxCount(500).call().toList()
|
||||
println("First commit hash in log: " + log.first().name + " log size: ${log.size}")
|
||||
val logDiff = log.takeWhile { it.id.name != objectId.name }
|
||||
val numCommits = logDiff.size
|
||||
println("Log diff size is $numCommits")
|
||||
check(numCommits < 450) {
|
||||
"More than 450 commits detected since the last release. This is suspicious."
|
||||
}
|
||||
|
||||
val nextVersion = lastVersion.nextMinor().withSuffix("dev.$numCommits")
|
||||
|
||||
println("Next dev version: $nextVersion")
|
||||
println("##teamcity[setParameter name='env.ORG_GRADLE_PROJECT_version' value='$nextVersion']")
|
||||
}
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user