Compare commits
2153 Commits
0.55.2-EAP
...
VIM-2227
Author | SHA1 | Date | |
---|---|---|---|
f2b532a8dc
|
|||
![]() |
9dbe3c3363 | ||
![]() |
8a98f46235 | ||
![]() |
9ed8db4d4a | ||
![]() |
5b94276836 | ||
![]() |
f1e427e2ff | ||
![]() |
a112cfe35f | ||
![]() |
412b60d6b4 | ||
![]() |
11d9ef7507 | ||
![]() |
ca143272f3 | ||
![]() |
072449825c | ||
![]() |
38ed9c206a | ||
![]() |
8235a649a1 | ||
![]() |
09efdd076e | ||
![]() |
da9b6ea762 | ||
![]() |
437450a93b | ||
![]() |
50fff8871e | ||
![]() |
350e9cfca2 | ||
![]() |
5639edf173 | ||
![]() |
f72313df9c | ||
![]() |
f52eb5e124 | ||
![]() |
5da9c5e1cd | ||
![]() |
53fdd891fb | ||
![]() |
94820d7a83 | ||
![]() |
fe66d06ce2 | ||
![]() |
b6e917a2d7 | ||
![]() |
a6a39d249b | ||
![]() |
518784c371 | ||
![]() |
51c50cb902 | ||
![]() |
6355d7765e | ||
![]() |
c083631590 | ||
![]() |
f62575c870 | ||
![]() |
01e367cadf | ||
![]() |
e248bb5565 | ||
![]() |
1744ec74c7 | ||
![]() |
905f8003da | ||
![]() |
3b3a036806 | ||
![]() |
ccf48d1e53 | ||
![]() |
d7a74fdf5e | ||
![]() |
462c1bc75e | ||
![]() |
96b05dcc94 | ||
![]() |
ceafe9d4e7 | ||
![]() |
fc9b09cf72 | ||
![]() |
11c80b2ea9 | ||
![]() |
eb536766db | ||
![]() |
f3b6687d79 | ||
![]() |
adf483a748 | ||
![]() |
7332cd1ed1 | ||
![]() |
7726f4347b | ||
![]() |
ee092d988b | ||
![]() |
b3db3bb940 | ||
![]() |
edcb17a436 | ||
![]() |
f3b4933ef2 | ||
![]() |
c6fdf9cdf4 | ||
![]() |
2244d0f776 | ||
![]() |
d7c4e4a8dd | ||
![]() |
b7c54d02cb | ||
![]() |
620eca3a0d | ||
![]() |
aa3b2e988f | ||
![]() |
753f589ea5 | ||
![]() |
831e4e8c42 | ||
![]() |
329722f338 | ||
![]() |
2ff429cc76 | ||
![]() |
47d4aee986 | ||
![]() |
938325b93e | ||
![]() |
12d0a2ffb7 | ||
![]() |
4ff7e9aefa | ||
![]() |
f52792e7f0 | ||
![]() |
cbc6662ef7 | ||
![]() |
26ffc2ad32 | ||
![]() |
df32e573b0 | ||
![]() |
19647d96b2 | ||
![]() |
b1714a2fc1 | ||
![]() |
83199d5475 | ||
![]() |
4c0af66dff | ||
![]() |
ccd7204b21 | ||
![]() |
b82f1e6602 | ||
![]() |
4104258219 | ||
![]() |
11054f908b | ||
![]() |
e0dc6f7214 | ||
![]() |
735686c415 | ||
![]() |
385bcbc383 | ||
![]() |
f273620466 | ||
![]() |
acb27d5ccc | ||
![]() |
62c79e1470 | ||
![]() |
1a99918819 | ||
![]() |
7e3a9e0b38 | ||
![]() |
f51d74f2b8 | ||
![]() |
987cba6072 | ||
![]() |
770e6371df | ||
![]() |
30e660cf19 | ||
![]() |
8ccf0b5364 | ||
![]() |
3ef86186eb | ||
![]() |
b8b3669b04 | ||
![]() |
ac41890759 | ||
![]() |
cf85e0f25e | ||
![]() |
a4b52be833 | ||
![]() |
4cb8f27ca5 | ||
![]() |
9a06ee97c4 | ||
![]() |
d7dfc6dc05 | ||
![]() |
5a6de3afaa | ||
![]() |
cd242511a8 | ||
![]() |
745ae6caa4 | ||
![]() |
acc7d0954d | ||
![]() |
330d64c7cb | ||
![]() |
673e43dd77 | ||
![]() |
c2c5c60899 | ||
![]() |
7d5176829b | ||
![]() |
fd0dc0d445 | ||
![]() |
be11317667 | ||
![]() |
22fce51640 | ||
![]() |
4223da47d6 | ||
![]() |
64100fea59 | ||
![]() |
2244c65233 | ||
![]() |
e08bffd7ba | ||
![]() |
0d5aa52af2 | ||
![]() |
e617fc4c34 | ||
![]() |
c34a7f123d | ||
![]() |
cc029fc98e | ||
![]() |
feae15c48c | ||
![]() |
07485727c4 | ||
![]() |
8b0ad7680b | ||
![]() |
43d70cd467 | ||
![]() |
d73b605ef0 | ||
![]() |
5afd4df69a | ||
![]() |
323c611f87 | ||
![]() |
0dd0a4976b | ||
![]() |
48820d4dff | ||
![]() |
2fbab395f1 | ||
![]() |
a9fd32f64e | ||
![]() |
da7a2226d4 | ||
![]() |
44b37339dc | ||
![]() |
db1ec29470 | ||
![]() |
713c3f0a3c | ||
![]() |
c6c2bc5e74 | ||
![]() |
c8352158b8 | ||
![]() |
8927c0acfa | ||
![]() |
02dfac8a34 | ||
![]() |
8ab3664992 | ||
![]() |
03e6101747 | ||
![]() |
9f47995c10 | ||
![]() |
d58f36ea1a | ||
![]() |
442970a986 | ||
![]() |
fcc6c8a3c5 | ||
![]() |
1dbd4b4391 | ||
![]() |
1943c72c1c | ||
![]() |
7816da3f2d | ||
![]() |
b25d7e358d | ||
![]() |
04b62e6392 | ||
![]() |
4ecfb796d4 | ||
![]() |
de9fa81da3 | ||
![]() |
be484d381c | ||
![]() |
351e3b15ea | ||
![]() |
2b9b48ac2f | ||
![]() |
7c4ac5f561 | ||
![]() |
def09b0be8 | ||
![]() |
2415b167fb | ||
![]() |
dfc7aef07d | ||
![]() |
276ad276ec | ||
![]() |
83da2d304e | ||
![]() |
6ddc40d080 | ||
![]() |
42fb5487e5 | ||
![]() |
1ce35ac233 | ||
![]() |
2734202e12 | ||
![]() |
6a31fd2732 | ||
![]() |
5d84aa6939 | ||
![]() |
7173b7960d | ||
![]() |
bb1c30d6c8 | ||
![]() |
d70abf6e27 | ||
![]() |
8931fdf82a | ||
![]() |
25ba72e46b | ||
![]() |
ebd71d41dc | ||
![]() |
4b49bb4737 | ||
![]() |
eeac47e522 | ||
![]() |
335267c0af | ||
![]() |
c4254dc6dd | ||
![]() |
12cb359967 | ||
![]() |
d73cb274b4 | ||
![]() |
6cb6afe032 | ||
![]() |
3686f0eb24 | ||
![]() |
6cc24fe99e | ||
![]() |
3784f1957f | ||
![]() |
69fd8d68af | ||
![]() |
301d72c169 | ||
![]() |
ca11974b12 | ||
![]() |
8917dbf4bb | ||
![]() |
56afa6d564 | ||
![]() |
8ecac1a8cf | ||
![]() |
f742e414e6 | ||
![]() |
c462af2d10 | ||
![]() |
66ede93d95 | ||
![]() |
c97f5be3fa | ||
![]() |
c4d35849fd | ||
![]() |
88c191bc61 | ||
![]() |
a1e6318bce | ||
![]() |
3606f5ea14 | ||
![]() |
38c3b206e2 | ||
![]() |
e69bf9760d | ||
![]() |
0b763e23cf | ||
![]() |
311cb0bada | ||
![]() |
a78782b73a | ||
![]() |
54df803ee1 | ||
![]() |
2819b782c9 | ||
![]() |
38c12660b0 | ||
![]() |
3917a8c5e3 | ||
![]() |
17c642d5ed | ||
![]() |
2d84e2d788 | ||
![]() |
ca19d2bfd5 | ||
![]() |
cd56fb87d0 | ||
![]() |
7290edd3ae | ||
![]() |
8d4e9b8514 | ||
![]() |
db87b51784 | ||
![]() |
96dc9af1e3 | ||
![]() |
a453cb2582 | ||
![]() |
b0d53330bb | ||
![]() |
99ebcacf31 | ||
![]() |
3ec90194d7 | ||
![]() |
5ce52f7189 | ||
![]() |
d163837d8d | ||
![]() |
81811530de | ||
![]() |
7276bc49a7 | ||
![]() |
90cff7e574 | ||
![]() |
c673550901 | ||
![]() |
5b360b6de2 | ||
![]() |
8e2783962f | ||
![]() |
866b319c5b | ||
![]() |
6eb47567e8 | ||
![]() |
d27f87fbb8 | ||
![]() |
b2a2299347 | ||
![]() |
905862ab9f | ||
![]() |
5c307fd22c | ||
![]() |
e92b69ad3f | ||
![]() |
c6a5f9c268 | ||
![]() |
54f91f2a64 | ||
![]() |
4b2ed33cdd | ||
![]() |
5fa48fc7dd | ||
![]() |
e028c269b7 | ||
![]() |
9798c7aca2 | ||
![]() |
b5bca78ef4 | ||
![]() |
1c619cfc74 | ||
![]() |
dc5832a44c | ||
![]() |
8fd64afc90 | ||
![]() |
1484f4e370 | ||
![]() |
32df1597c4 | ||
![]() |
707b750ff1 | ||
![]() |
3388c8517b | ||
![]() |
60a8e0d5f5 | ||
![]() |
5a757a58b5 | ||
![]() |
2e555b6eaa | ||
![]() |
c57277cc15 | ||
![]() |
bf035d42af | ||
![]() |
8cb6f9b65f | ||
![]() |
fcbc4a0688 | ||
![]() |
42bc15c8ea | ||
![]() |
992231bcad | ||
![]() |
6d494c99e3 | ||
![]() |
a848f2175a | ||
![]() |
4e6a2f951b | ||
![]() |
5a41bbe806 | ||
![]() |
066e6619af | ||
![]() |
f0dbabd20f | ||
![]() |
35c0e33ec4 | ||
![]() |
a5715dac7d | ||
![]() |
cdb9af5ab6 | ||
![]() |
19c05c23f3 | ||
![]() |
12c744c1ba | ||
![]() |
604a6a5140 | ||
![]() |
62aae7b7c4 | ||
![]() |
2ea899330c | ||
![]() |
3574db020f | ||
![]() |
b2ae2a38ec | ||
![]() |
04ebb6077a | ||
![]() |
d5062944d0 | ||
![]() |
dc181ce0ce | ||
![]() |
042e3388b0 | ||
![]() |
d4a1ffa9a9 | ||
![]() |
54927d0af7 | ||
![]() |
d26765e217 | ||
![]() |
277b4e63c3 | ||
![]() |
848514405b | ||
![]() |
7b8fd0ee55 | ||
![]() |
d373ebac58 | ||
![]() |
370ccc5254 | ||
![]() |
9272fc8cd7 | ||
![]() |
22cfdbae0a | ||
![]() |
f49f5e5d25 | ||
![]() |
118c12e7fe | ||
![]() |
02a7eb34ee | ||
![]() |
739390739e | ||
![]() |
6b2ead0d4e | ||
![]() |
1eaf9e7b17 | ||
![]() |
954e1a9099 | ||
![]() |
5aeff6f914 | ||
![]() |
fb15049fbf | ||
![]() |
6f3a9c210e | ||
![]() |
6fdd6d839e | ||
![]() |
ac1101a410 | ||
![]() |
2fd33e6ec2 | ||
![]() |
779c69a982 | ||
![]() |
3494286e66 | ||
![]() |
139b78d7f4 | ||
![]() |
daee2f615c | ||
![]() |
710825ec28 | ||
![]() |
478539911b | ||
![]() |
b21d984cf8 | ||
![]() |
1a92cebf6b | ||
![]() |
fd3f939526 | ||
![]() |
7d28760fa1 | ||
![]() |
4a0a1c95a9 | ||
![]() |
9da0c10141 | ||
![]() |
43b9ecdf3c | ||
![]() |
987952a2f2 | ||
![]() |
92f6ac57ad | ||
![]() |
b4af51f3cc | ||
![]() |
4ba6e62ada | ||
![]() |
58d5924e80 | ||
![]() |
8f55551339 | ||
![]() |
9229497be8 | ||
![]() |
99e77cd8ed | ||
![]() |
8d8809238c | ||
![]() |
f03d574e86 | ||
![]() |
cbb5fbe92e | ||
![]() |
6a376ad62c | ||
![]() |
8e61853459 | ||
![]() |
b17bc1bb3e | ||
![]() |
1343c7603b | ||
![]() |
5b5a4b1347 | ||
![]() |
62fb3f9c5a | ||
![]() |
986378db42 | ||
![]() |
ce99c26c03 | ||
![]() |
3571595838 | ||
![]() |
c0c450124f | ||
![]() |
aa62022218 | ||
![]() |
71c27babfd | ||
![]() |
2ff93270d7 | ||
![]() |
c07719dd3d | ||
![]() |
6b7ef88418 | ||
![]() |
ee9f12180d | ||
![]() |
8df3bc57c5 | ||
![]() |
0aabb2971e | ||
![]() |
e5740bf496 | ||
![]() |
e8f1dff61c | ||
![]() |
267fc62865 | ||
![]() |
05a64f51f7 | ||
![]() |
e5460d7a31 | ||
![]() |
1826a31e2f | ||
![]() |
2bb44c414f | ||
![]() |
ef7442c488 | ||
![]() |
775bde62c8 | ||
![]() |
c5a504bde3 | ||
![]() |
f7f7e010c4 | ||
![]() |
aa82f7ed64 | ||
![]() |
684d192b4b | ||
![]() |
aed2d1159d | ||
![]() |
d2500df05e | ||
![]() |
8922303a72 | ||
![]() |
cea4de03cd | ||
![]() |
9529c19b9b | ||
![]() |
b0f5c502d9 | ||
![]() |
c3fc369bc4 | ||
![]() |
a5ef0d5edf | ||
![]() |
26e9056f17 | ||
![]() |
1553aa774b | ||
![]() |
2ebdbc5ac4 | ||
![]() |
e3ca172101 | ||
![]() |
17d4ec6c29 | ||
![]() |
bec317615d | ||
![]() |
d00fd767ff | ||
![]() |
557652c526 | ||
![]() |
e138541495 | ||
![]() |
f6dfbcad0d | ||
![]() |
2518be2704 | ||
![]() |
42ec2b9dce | ||
![]() |
9484599bfd | ||
![]() |
5e6d3ddae8 | ||
![]() |
13cce3afcc | ||
![]() |
9743cb1424 | ||
![]() |
dbbcf3860a | ||
![]() |
ae983be0a8 | ||
![]() |
f8156fbbca | ||
![]() |
1909547543 | ||
![]() |
e47c0c1914 | ||
![]() |
1a122337fe | ||
![]() |
bcf2578da9 | ||
![]() |
06cd41ba0e | ||
![]() |
64ec421cfc | ||
![]() |
86fcda5afc | ||
![]() |
e799d40803 | ||
![]() |
c84325a37c | ||
![]() |
3b6d57849c | ||
![]() |
9b4825db77 | ||
![]() |
6a4bb7395b | ||
![]() |
c8463d9b3e | ||
![]() |
376ca4e93b | ||
![]() |
6a43e558fd | ||
![]() |
05414276f2 | ||
![]() |
bec73749c2 | ||
![]() |
0d4f9891c3 | ||
![]() |
f082ab4b68 | ||
![]() |
d4f4765ffd | ||
![]() |
8902c0839c | ||
![]() |
66fc8034ba | ||
![]() |
109cb58d68 | ||
![]() |
a71916df84 | ||
![]() |
5f10eb808e | ||
![]() |
6c1e7b0b60 | ||
![]() |
792c22a90a | ||
![]() |
eff2cd02f9 | ||
![]() |
163e7751f2 | ||
![]() |
370c22b2f5 | ||
![]() |
a251ac55e5 | ||
![]() |
987df6958e | ||
![]() |
60ae189442 | ||
![]() |
ce734906d4 | ||
![]() |
3b26572731 | ||
![]() |
4d9c606c79 | ||
![]() |
22050fc16d | ||
![]() |
2fb419253c | ||
![]() |
3bb4fc67bf | ||
![]() |
a0a009cb59 | ||
![]() |
ce2bb85e18 | ||
![]() |
7ff8ac76fa | ||
![]() |
935c51c985 | ||
![]() |
a8d0e698eb | ||
![]() |
5b13ad6726 | ||
![]() |
e88d0d1493 | ||
![]() |
898af47f89 | ||
![]() |
84868c0fb5 | ||
![]() |
8e2b7d2089 | ||
![]() |
f359ac49f3 | ||
![]() |
37ce0925a5 | ||
![]() |
23985aea7d | ||
![]() |
3bd5ab970f | ||
![]() |
fbdcbdc626 | ||
![]() |
f197ee54d1 | ||
![]() |
efa0489f7b | ||
![]() |
66dd90a090 | ||
![]() |
68cfb12746 | ||
![]() |
4ad14f3404 | ||
![]() |
4bcf44570b | ||
![]() |
3637022890 | ||
![]() |
5f3a78e7ce | ||
![]() |
c7872ad841 | ||
![]() |
9eeab756e4 | ||
![]() |
ef971a1236 | ||
![]() |
5ec851a120 | ||
![]() |
2a94ff2ef6 | ||
![]() |
1738892500 | ||
![]() |
765d876a51 | ||
![]() |
a0c8e26b38 | ||
![]() |
4b4f4b3d8f | ||
![]() |
63fe7a88eb | ||
![]() |
871ee1a6b6 | ||
![]() |
6a36599a29 | ||
![]() |
d11ab20617 | ||
![]() |
ea713edfb5 | ||
![]() |
ff48a9dea2 | ||
![]() |
0a1812ec8c | ||
![]() |
113d4ac078 | ||
![]() |
4d49385529 | ||
![]() |
94a8455267 | ||
![]() |
406d2a054c | ||
![]() |
932296afb6 | ||
![]() |
27fb36a6c5 | ||
![]() |
f5e0f21869 | ||
![]() |
180c35d5c2 | ||
![]() |
4bd25f3220 | ||
![]() |
1299f107dd | ||
![]() |
43ae40e077 | ||
![]() |
1af0b00892 | ||
![]() |
36f7219964 | ||
![]() |
529ad853ee | ||
![]() |
4e37ccfff8 | ||
![]() |
134c68c705 | ||
![]() |
ea61e87b31 | ||
![]() |
6e82008ffa | ||
![]() |
016bcc00d8 | ||
![]() |
936e7508e3 | ||
![]() |
34220ab759 | ||
![]() |
51ba63faae | ||
![]() |
f4f1e397cb | ||
![]() |
721117ce1b | ||
![]() |
b6128418be | ||
![]() |
2da917add7 | ||
![]() |
678c53dc39 | ||
![]() |
d57359b2ff | ||
![]() |
3796d9f8b4 | ||
b6d84e0e66 | |||
![]() |
3dbdbefc58 | ||
![]() |
23570c7270 | ||
![]() |
4d5024f8b8 | ||
![]() |
ea8670702a | ||
![]() |
b8828f48c9 | ||
![]() |
b468fef242 | ||
![]() |
358f8eeca3 | ||
![]() |
150a70e69f | ||
![]() |
b9fb0f2bcd | ||
![]() |
d4a8b8e400 | ||
![]() |
8009c9a5f9 | ||
![]() |
177115e2fc | ||
![]() |
85bc12df59 | ||
![]() |
1da818b0d5 | ||
![]() |
c23d3f1442 | ||
![]() |
6500ce9154 | ||
![]() |
63ecaff1bc | ||
![]() |
e29c268d0b | ||
![]() |
2758e89a51 | ||
![]() |
d0670d0244 | ||
![]() |
1e2005451c | ||
![]() |
29a95ca592 | ||
![]() |
5bfff2a398 | ||
![]() |
4d26947208 | ||
![]() |
f1de741bd5 | ||
![]() |
3394d93b43 | ||
![]() |
02c64feff8 | ||
![]() |
f2ba162359 | ||
![]() |
16c5d11ead | ||
![]() |
3e97c5d5fc | ||
![]() |
cb5499f82f | ||
![]() |
3d71c1bcbe | ||
![]() |
a12793e67a | ||
![]() |
affec9bb61 | ||
![]() |
fb62ec4c77 | ||
![]() |
c48cf1a2f7 | ||
![]() |
cf5cc92258 | ||
![]() |
ca934fe514 | ||
![]() |
d6ca75006a | ||
![]() |
51a9878363 | ||
![]() |
7664c44697 | ||
![]() |
5a8ee72622 | ||
![]() |
492b2de520 | ||
![]() |
900d3212a4 | ||
![]() |
d8997e1239 | ||
![]() |
e1001534e4 | ||
![]() |
59a69ed486 | ||
![]() |
437574328e | ||
![]() |
87af7ada40 | ||
![]() |
aa01730c13 | ||
![]() |
0803b401e7 | ||
![]() |
6d974d799b | ||
![]() |
1fa779b21f | ||
![]() |
2c5442c044 | ||
![]() |
db4324c478 | ||
![]() |
a8afca4ccf | ||
![]() |
6849bab741 | ||
![]() |
ff72f24433 | ||
![]() |
19ea1b204c | ||
![]() |
a9e8dc7b9f | ||
![]() |
ee14eac009 | ||
![]() |
3c1bbd5a7f | ||
![]() |
218cfaca44 | ||
![]() |
8a78d76a20 | ||
![]() |
1ead9f1443 | ||
![]() |
c53dd48437 | ||
![]() |
001a1d648c | ||
![]() |
6bbd162c72 | ||
![]() |
8fb8476994 | ||
![]() |
8d7a2faf1b | ||
![]() |
df946f8525 | ||
![]() |
58f8c315e6 | ||
![]() |
c6a379048e | ||
![]() |
02dd52ccb9 | ||
![]() |
abb93af3fb | ||
![]() |
06b18b8fb9 | ||
![]() |
88772a0d8e | ||
![]() |
89c2bf0932 | ||
![]() |
9a0e6336b7 | ||
![]() |
550a754fab | ||
![]() |
5921f7f889 | ||
![]() |
e097880e95 | ||
![]() |
99a0dc6c53 | ||
![]() |
ef7e4a752d | ||
![]() |
cded8e54fb | ||
![]() |
f17a903555 | ||
![]() |
191aba1f95 | ||
![]() |
e8d7a7f8bf | ||
![]() |
836c1084c4 | ||
![]() |
649bfdc220 | ||
![]() |
8d6529ccf1 | ||
![]() |
c936692403 | ||
![]() |
c3d3f2ab50 | ||
![]() |
f289b19310 | ||
![]() |
9866231129 | ||
![]() |
e0b5b54dda | ||
![]() |
2687ecc02e | ||
![]() |
3699920515 | ||
![]() |
4481da75b7 | ||
![]() |
037b636be9 | ||
![]() |
12ded24cd4 | ||
![]() |
2b5c13e3da | ||
![]() |
043f07190c | ||
![]() |
dc0758274e | ||
![]() |
0d9aa85a6a | ||
![]() |
810440abe7 | ||
![]() |
177aaebaf8 | ||
![]() |
ba11c565d8 | ||
![]() |
5320d3a4fd | ||
![]() |
82f181b80b | ||
![]() |
eb43fa7c4c | ||
![]() |
86c0357725 | ||
![]() |
844dac6106 | ||
![]() |
0a923e98ab | ||
![]() |
a85a5bd055 | ||
![]() |
ca51798445 | ||
![]() |
73146ea643 | ||
![]() |
f186f4aa5c | ||
![]() |
a4d89af418 | ||
![]() |
4eb755fed6 | ||
![]() |
95837605b8 | ||
![]() |
3f4bf3f6fd | ||
![]() |
adb71068e3 | ||
![]() |
68f898dbf8 | ||
![]() |
296b714282 | ||
![]() |
d88f38cf2a | ||
![]() |
a8098c2c4c | ||
![]() |
1eb91889d4 | ||
![]() |
ac451d0fcd | ||
![]() |
5d7e0a1260 | ||
![]() |
8344207608 | ||
![]() |
cc45168e25 | ||
![]() |
81c898dd9e | ||
![]() |
87aa50c7be | ||
![]() |
a080047632 | ||
![]() |
bb4b3dfe61 | ||
![]() |
55aaa6e2c6 | ||
![]() |
1fc866eeee | ||
![]() |
15e0692b41 | ||
![]() |
6db42dc736 | ||
![]() |
c1d86a4238 | ||
![]() |
ec761dbe3d | ||
![]() |
1328a314de | ||
![]() |
06b0a1292f | ||
![]() |
11a16a54fc | ||
![]() |
548cbb4bda | ||
637ae21089 | |||
![]() |
6febc4d2fc | ||
![]() |
8253db1486 | ||
![]() |
8fe1b0891b | ||
![]() |
ff1d7f7f1c | ||
![]() |
c437a18288 | ||
![]() |
0992c39132 | ||
![]() |
610f978c44 | ||
![]() |
84ea9266c2 | ||
![]() |
54abaebe17 | ||
![]() |
a16c860ba8 | ||
![]() |
b1b7e3439f | ||
![]() |
1df75fe25c | ||
![]() |
4d0e0b8ef8 | ||
![]() |
36002def70 | ||
![]() |
8247ac54a1 | ||
![]() |
f4fe80b28a | ||
![]() |
9e052d6e3a | ||
![]() |
0da18b81b6 | ||
![]() |
fc81c6329b | ||
![]() |
3d92b989ce | ||
![]() |
b942e8a950 | ||
![]() |
29131b4644 | ||
![]() |
b897b118ca | ||
![]() |
145af2b6ee | ||
![]() |
09a38a854c | ||
![]() |
995779a294 | ||
![]() |
67f38fc646 | ||
![]() |
316f1fa925 | ||
![]() |
21f5ad6c0a | ||
![]() |
6e6e52f316 | ||
![]() |
71c19b3ef2 | ||
![]() |
0befc6385d | ||
![]() |
22371b4b07 | ||
![]() |
913d711b80 | ||
![]() |
d17d12c805 | ||
![]() |
4d64109e2c | ||
![]() |
d66d807cff | ||
![]() |
e7a68f06b3 | ||
![]() |
fd49e86e17 | ||
![]() |
337621ca4a | ||
![]() |
0e38a4e4f0 | ||
![]() |
c19a160c9c | ||
![]() |
c390e06e63 | ||
![]() |
00d6a948d0 | ||
![]() |
6f1c2a1a81 | ||
![]() |
47ba907eb7 | ||
![]() |
a14252493f | ||
![]() |
328c4288c2 | ||
![]() |
b7c11ff852 | ||
![]() |
add1d6225d | ||
![]() |
182424ba05 | ||
![]() |
bf86cd2a51 | ||
![]() |
2085e9cafd | ||
![]() |
fb51236ae2 | ||
![]() |
9509b5825c | ||
![]() |
b8a8acdad7 | ||
![]() |
898e5f8bda | ||
![]() |
30a39497aa | ||
![]() |
852a220076 | ||
![]() |
a34d56b7df | ||
![]() |
13feaa7581 | ||
![]() |
14df9ea705 | ||
![]() |
6bd2bb884a | ||
![]() |
89cdaa611a | ||
![]() |
cc476a26b4 | ||
![]() |
14d132638d | ||
![]() |
9e62636059 | ||
![]() |
a3b2b4920a | ||
![]() |
e7f128ee59 | ||
![]() |
e1069c265e | ||
![]() |
e0b356c12d | ||
![]() |
769d900383 | ||
![]() |
8d99100601 | ||
![]() |
0c1c8080a6 | ||
![]() |
1742541b03 | ||
![]() |
d66e6967ee | ||
![]() |
559879301d | ||
![]() |
c524c92062 | ||
![]() |
b329329333 | ||
![]() |
5df8ef98a1 | ||
![]() |
55154b2996 | ||
![]() |
89aa6aecff | ||
![]() |
970456e6b0 | ||
![]() |
97effae8dc | ||
![]() |
f26755045d | ||
![]() |
067af8356c | ||
![]() |
ee743674c2 | ||
![]() |
362f8a3c99 | ||
![]() |
9f0ecd7f73 | ||
![]() |
d01f582646 | ||
![]() |
cdc8f159f5 | ||
![]() |
b481b6e1b5 | ||
![]() |
505aeff544 | ||
![]() |
dbf0444110 | ||
![]() |
07d753f413 | ||
![]() |
f516e89a5f | ||
![]() |
5f15bca561 | ||
![]() |
d98acd8c39 | ||
![]() |
97502a5bd5 | ||
![]() |
806184aa5d | ||
![]() |
d93fb1fdfc | ||
![]() |
9cf922ae80 | ||
![]() |
2070efc35a | ||
![]() |
1dc4dbf7af | ||
![]() |
c10634f1e3 | ||
![]() |
c0f8fd8c6b | ||
![]() |
95f89792d4 | ||
![]() |
a299abf18f | ||
![]() |
0cc15390a4 | ||
![]() |
379b23b42d | ||
![]() |
160b1b240a | ||
![]() |
5af69377e5 | ||
![]() |
bcee0a5964 | ||
![]() |
804128c3d3 | ||
![]() |
4e3ee024ac | ||
![]() |
c300fdbfb1 | ||
![]() |
840ff11335 | ||
![]() |
8d76b51683 | ||
![]() |
a78bb51831 | ||
![]() |
db19d0819e | ||
![]() |
72b76221f7 | ||
![]() |
9eb32034b7 | ||
![]() |
24f88b5ffe | ||
![]() |
d27ebad011 | ||
![]() |
1cebd8551b | ||
![]() |
446d5aeb15 | ||
![]() |
58f8ce605d | ||
![]() |
3fae2fdae5 | ||
![]() |
c268407ce3 | ||
![]() |
cd435c5f41 | ||
![]() |
74b0e3bded | ||
![]() |
edc0a14ef1 | ||
![]() |
011be78b27 | ||
![]() |
58008e6758 | ||
![]() |
ae21727c12 | ||
![]() |
a480372d3d | ||
![]() |
0bc298014d | ||
![]() |
63f85a8099 | ||
![]() |
cc16d5ba15 | ||
![]() |
fa3afe188e | ||
![]() |
6df2db86c3 | ||
![]() |
7791de490d | ||
![]() |
754a8c7250 | ||
![]() |
88b0f31590 | ||
![]() |
b17dbb37e4 | ||
![]() |
4ec360219a | ||
![]() |
b4d4da7250 | ||
![]() |
8bf809a888 | ||
![]() |
90e0cee86c | ||
![]() |
5b571362e3 | ||
![]() |
9537003a6d | ||
![]() |
bdc50283d2 | ||
![]() |
85c8968d75 | ||
![]() |
1466ad9bef | ||
![]() |
0cda2241ed | ||
![]() |
3ac96d9ed4 | ||
![]() |
9f7b6a281b | ||
![]() |
96bd5f8259 | ||
![]() |
62917c2a50 | ||
![]() |
10ea780cdc | ||
![]() |
19561bb1f1 | ||
![]() |
8088789f51 | ||
![]() |
5dec91caa3 | ||
![]() |
0c28a9a79b | ||
![]() |
8c2b715f93 | ||
![]() |
0fe75031a9 | ||
![]() |
0ec01f8d6f | ||
![]() |
fbcb3f8cbc | ||
![]() |
3f6a454052 | ||
![]() |
088fda12f8 | ||
![]() |
b207b30108 | ||
![]() |
f12b67088f | ||
![]() |
2643daf0b2 | ||
![]() |
21188dad73 | ||
![]() |
0476854d7c | ||
![]() |
b9ab4f6484 | ||
![]() |
759d92db4d | ||
![]() |
263fea1c52 | ||
![]() |
949e9216ff | ||
![]() |
547835f59d | ||
![]() |
464ed17741 | ||
![]() |
1ca8b06d74 | ||
![]() |
5312549db1 | ||
![]() |
21a8a0467f | ||
![]() |
c5dfd43e48 | ||
![]() |
879bc9bd98 | ||
![]() |
5a484c3952 | ||
![]() |
a1dd917227 | ||
![]() |
6186fa7e1b | ||
![]() |
2c227955c7 | ||
![]() |
1ac50714f5 | ||
![]() |
fd1d6a98f1 | ||
![]() |
43b5e7e644 | ||
![]() |
13ab68e5b1 | ||
![]() |
165caab526 | ||
![]() |
187e5a752a | ||
![]() |
dc81568c45 | ||
![]() |
9fe9d92e04 | ||
![]() |
1e550ac0a3 | ||
![]() |
1190209409 | ||
![]() |
c7cc6b54bf | ||
![]() |
c1afce2939 | ||
![]() |
aa40c04302 | ||
![]() |
bddf07efee | ||
![]() |
c8a45cb085 | ||
![]() |
f6720b3d37 | ||
![]() |
dc8f5e9b25 | ||
![]() |
8a2d3e1aed | ||
![]() |
afeaf4444b | ||
![]() |
f69a284b3f | ||
![]() |
9f1bb44824 | ||
![]() |
037a29551c | ||
![]() |
b4ea970c29 | ||
![]() |
719b80baa1 | ||
![]() |
f6002f05e0 | ||
![]() |
0867654347 | ||
![]() |
687a6d8693 | ||
![]() |
6fc362cae2 | ||
![]() |
5d03bae931 | ||
![]() |
408e51535d | ||
![]() |
d4749f4eb8 | ||
![]() |
829501c1b1 | ||
![]() |
88ef5a3467 | ||
![]() |
e52948efcc | ||
![]() |
56466f889b | ||
![]() |
5ecfab65fa | ||
![]() |
98fc65ec43 | ||
![]() |
3e37e2cdc4 | ||
![]() |
2efb08197f | ||
![]() |
dd7cb72a25 | ||
![]() |
b73fc88313 | ||
![]() |
465db2cd22 | ||
![]() |
73c1dc8118 | ||
![]() |
509a202f93 | ||
![]() |
09a9884b9f | ||
![]() |
6afc5aa98e | ||
![]() |
9e497fb5e8 | ||
![]() |
16476256c3 | ||
![]() |
623430359a | ||
![]() |
6ab53802df | ||
![]() |
d5f877b83d | ||
![]() |
0b33702712 | ||
![]() |
10fce45248 | ||
![]() |
b39e5ba1d5 | ||
![]() |
700df030f0 | ||
![]() |
a44fe15fea | ||
![]() |
12d1553f5a | ||
![]() |
503c2580d7 | ||
![]() |
8ab9509ceb | ||
![]() |
197eded6d0 | ||
![]() |
1813ad400a | ||
![]() |
a1b048a2f9 | ||
![]() |
cb43ad3488 | ||
![]() |
e8daf67276 | ||
![]() |
00ef191ad0 | ||
![]() |
e8d559f6d0 | ||
![]() |
82ed892166 | ||
![]() |
45bd4a72a4 | ||
![]() |
7196d83833 | ||
![]() |
2b7c311a2b | ||
![]() |
7ef4e45945 | ||
![]() |
db08ea1587 | ||
![]() |
af3227684b | ||
![]() |
46788cc6c6 | ||
![]() |
70a45f3dc8 | ||
![]() |
d63e3dadbc | ||
![]() |
93109f1e19 | ||
![]() |
c4e74ee8a5 | ||
![]() |
534fbe1a6b | ||
![]() |
e9f0c032a4 | ||
![]() |
293307e63d | ||
![]() |
2701522605 | ||
![]() |
98666855ad | ||
![]() |
adca9cf292 | ||
![]() |
fc20acd8cb | ||
![]() |
6744e86b62 | ||
![]() |
5ad202f482 | ||
![]() |
80edb3b8f2 | ||
![]() |
3bc8c80422 | ||
![]() |
4ac19ef8da | ||
![]() |
797bce2eac | ||
![]() |
807e80780d | ||
![]() |
a58ca80fc9 | ||
![]() |
4158bf1663 | ||
![]() |
cd0c594efb | ||
![]() |
648d4d961d | ||
![]() |
9bca6f77d6 | ||
![]() |
c33718c39d | ||
![]() |
19b51a4a69 | ||
![]() |
f9e5bc43c6 | ||
![]() |
42383948b7 | ||
![]() |
5f8a1723ba | ||
![]() |
b8086cb509 | ||
![]() |
e2cd0d1246 | ||
![]() |
9fbb9ac957 | ||
![]() |
f64439dab9 | ||
![]() |
fe423d0b46 | ||
![]() |
5018b0e9ff | ||
![]() |
8b0a650631 | ||
![]() |
81076d9c43 | ||
![]() |
b610af30ab | ||
![]() |
bbc10cd3db | ||
![]() |
6690139c66 | ||
![]() |
df9d5bfe25 | ||
![]() |
4a0dd31b2c | ||
![]() |
afbfacb462 | ||
![]() |
5d68e76b30 | ||
![]() |
246cc1479a | ||
![]() |
408cd0e037 | ||
![]() |
43884c791f | ||
![]() |
c15eccf49a | ||
![]() |
ddb159eec8 | ||
![]() |
af8edae1d3 | ||
![]() |
91585e1059 | ||
![]() |
d6a99d4354 | ||
![]() |
0d840b2c41 | ||
![]() |
0288a0f2b5 | ||
![]() |
fe7dc4902b | ||
![]() |
1caf380505 | ||
![]() |
628ce16e99 | ||
![]() |
f822b04a6f | ||
![]() |
a61747cd94 | ||
![]() |
86c97f5566 | ||
![]() |
31e633f55e | ||
![]() |
e3aa3e24f5 | ||
![]() |
b7396fdf8c | ||
![]() |
e8f0e31a27 | ||
![]() |
d759c6bc24 | ||
![]() |
f76d0d2f81 | ||
![]() |
ec8b02e1c1 | ||
![]() |
c27ac06f1b | ||
![]() |
24f8f9ca14 | ||
![]() |
8b8bbba85d | ||
![]() |
64be75142e | ||
![]() |
f2070bad08 | ||
![]() |
52a3b680a6 | ||
![]() |
735bfbae3b | ||
![]() |
9140234b2c | ||
![]() |
cbf35c276e | ||
![]() |
ab1b8572f3 | ||
![]() |
960de8647c | ||
![]() |
acf80417d1 | ||
![]() |
43a3db178f | ||
![]() |
f05123123c | ||
![]() |
2f73dac57a | ||
![]() |
a6087dd08f | ||
![]() |
b4d40fae3b | ||
![]() |
ad19dc0100 | ||
![]() |
d19c776ec3 | ||
![]() |
ccd792bf62 | ||
![]() |
8a55199d62 | ||
![]() |
9cf0a1ac26 | ||
![]() |
43620c280d | ||
![]() |
98ffb3bf9e | ||
![]() |
4cc4fb4d3c | ||
![]() |
1f9718a3c1 | ||
![]() |
16d9a3ba8b | ||
![]() |
a01fc5d72c | ||
![]() |
f4e777b8df | ||
![]() |
e8b55881bd | ||
![]() |
232dd34717 | ||
![]() |
e244109073 | ||
![]() |
e6324a2182 | ||
![]() |
46bc66d08c | ||
![]() |
73fe85018e | ||
![]() |
982d6921cb | ||
![]() |
bb28b76a5b | ||
![]() |
67fed0da9e | ||
![]() |
e3cf50b4c9 | ||
![]() |
f72bb31b8e | ||
![]() |
001f13398c | ||
![]() |
dcfe93e4a1 | ||
![]() |
d3e7b5838f | ||
![]() |
8788d109e3 | ||
![]() |
8b1839ff1b | ||
![]() |
9f46e1960e | ||
![]() |
e93a619859 | ||
![]() |
287ba7055e | ||
![]() |
dfbec1f23a | ||
![]() |
55dedb4c4d | ||
![]() |
9c71b444c6 | ||
![]() |
e859b1c131 | ||
![]() |
6c4bd9cc10 | ||
![]() |
b50281f8d5 | ||
![]() |
2be0f5cedb | ||
![]() |
646a89d52a | ||
![]() |
fea71903de | ||
![]() |
0220d2b40f | ||
![]() |
c751c51b25 | ||
![]() |
8fedf78e03 | ||
![]() |
bd3c86e068 | ||
![]() |
46d459bd73 | ||
![]() |
d1feaad5a9 | ||
![]() |
b5b6c8f37a | ||
![]() |
067aaa798d | ||
![]() |
c85d7dcd7a | ||
![]() |
c1b1f1efd8 | ||
![]() |
68dcd21c4e | ||
![]() |
748484e129 | ||
![]() |
293e9988c7 | ||
![]() |
c390a295cd | ||
![]() |
bdf1f3c33d | ||
![]() |
a0b8685f7d | ||
![]() |
06fc25cf3b | ||
![]() |
18e76c5f12 | ||
![]() |
53e1bc5b83 | ||
![]() |
f3b77663f8 | ||
![]() |
fb25ea7cf9 | ||
![]() |
33dec9746a | ||
![]() |
079006e3ce | ||
![]() |
b32befe5df | ||
![]() |
91139005dc | ||
![]() |
9c53f8608a | ||
![]() |
7144491d0c | ||
![]() |
a9831ccf40 | ||
![]() |
fa3e18fe58 | ||
![]() |
08f29bacfd | ||
![]() |
5a6803551b | ||
![]() |
a5f612c85a | ||
![]() |
dab69249d0 | ||
![]() |
e1f0098164 | ||
![]() |
14428aaf49 | ||
![]() |
f9ebfcc467 | ||
![]() |
07446309d3 | ||
![]() |
d2de23481a | ||
![]() |
d8ead10c0f | ||
![]() |
6a38188602 | ||
![]() |
13884e9524 | ||
![]() |
1ff629e257 | ||
![]() |
67649a1746 | ||
![]() |
3a2f370c8c | ||
![]() |
6380608fa2 | ||
![]() |
4df53701a1 | ||
![]() |
3050b19366 | ||
![]() |
4c0a9b3797 | ||
![]() |
7850508cfe | ||
![]() |
dfbb36eb53 | ||
![]() |
e55fbe9159 | ||
![]() |
8a3af47b35 | ||
![]() |
11dc8cf982 | ||
![]() |
b91a3c16fc | ||
![]() |
abfe2bbe37 | ||
![]() |
f8bc330909 | ||
![]() |
999cf39aec | ||
![]() |
661a6563b0 | ||
![]() |
e33cf5b4ed | ||
![]() |
d401b6483c | ||
![]() |
5a855659b0 | ||
![]() |
e21e1b0b3d | ||
![]() |
232cb3ee7d | ||
![]() |
8bdefd85d4 | ||
![]() |
1719775ffc | ||
![]() |
86296e4066 | ||
![]() |
8c8c2ae271 | ||
![]() |
25f1674619 | ||
![]() |
29b3d6de3f | ||
![]() |
d6c76c9298 | ||
![]() |
b0168f46d7 | ||
![]() |
117990cd46 | ||
![]() |
6d238b382f | ||
![]() |
75fb384109 | ||
![]() |
e2a7a3686b | ||
![]() |
e29b42c4b1 | ||
![]() |
717806e821 | ||
![]() |
0a4f20b60c | ||
![]() |
90de8f3900 | ||
![]() |
09d4c727b1 | ||
![]() |
5a88c982cb | ||
![]() |
13a0e1d725 | ||
![]() |
7c06243d54 | ||
![]() |
ecd3b90300 | ||
![]() |
dc5a38ccba | ||
![]() |
406675f750 | ||
![]() |
a5e0572600 | ||
![]() |
3e5106525d | ||
![]() |
60b1e14e54 | ||
![]() |
31e667a421 | ||
![]() |
02428776a7 | ||
![]() |
7c1ab73f11 | ||
![]() |
8b5758fc37 | ||
![]() |
cb9eb8f67e | ||
![]() |
b496f13c3c | ||
![]() |
f21a0622b0 | ||
![]() |
5ddf8f2c34 | ||
![]() |
31655aace4 | ||
![]() |
32dca0799c | ||
![]() |
79cb90e642 | ||
![]() |
56bde906d9 | ||
![]() |
315af4cd5b | ||
![]() |
4abc72f05a | ||
![]() |
393aba90e9 | ||
![]() |
90624c03d2 | ||
![]() |
f75599805f | ||
![]() |
cc343fae9e | ||
![]() |
c22b299bed | ||
![]() |
28c806bfee | ||
![]() |
0bde71d4dd | ||
![]() |
aa51dcddc6 | ||
![]() |
8ca865e5aa | ||
![]() |
a9f1d2ac14 | ||
![]() |
018e5cba83 | ||
![]() |
bbcfee3ad6 | ||
![]() |
df52f37b69 | ||
![]() |
308ab4b4f5 | ||
![]() |
f07b6e28c1 | ||
![]() |
790fc92916 | ||
![]() |
bb5632c98d | ||
![]() |
879a73494b | ||
![]() |
93d80b8dfb | ||
![]() |
edf6a04a36 | ||
![]() |
b1662cdc1a | ||
![]() |
cec56e78bf | ||
![]() |
b0bfd0f56e | ||
![]() |
4312aceae7 | ||
![]() |
a646a59d8d | ||
![]() |
c9eafe1db3 | ||
![]() |
270ba9d196 | ||
![]() |
7300d252f8 | ||
![]() |
9b73cc16e6 | ||
![]() |
b7da57d6d1 | ||
![]() |
dee78cd503 | ||
![]() |
383e1d5245 | ||
![]() |
2ec9329f2e | ||
![]() |
15fc2c01bd | ||
![]() |
4fdd9b4710 | ||
![]() |
7765c464f3 | ||
![]() |
43eba0aa1d | ||
![]() |
e097cd2daa | ||
![]() |
ad6b5719d2 | ||
![]() |
5d344e3193 | ||
![]() |
0cd86282d2 | ||
![]() |
6b8d00decf | ||
![]() |
85aae4d408 | ||
![]() |
92b0a3abb2 | ||
![]() |
444a48f2a1 | ||
![]() |
039b44b07a | ||
![]() |
d7ed33c351 | ||
![]() |
0edff4665c | ||
![]() |
66b2fee823 | ||
![]() |
2139e31754 | ||
![]() |
3752d35229 | ||
![]() |
9a90e80da1 | ||
![]() |
5d3ec771c4 | ||
![]() |
6785d17ab3 | ||
![]() |
99a0415235 | ||
![]() |
0fe3f50d93 | ||
![]() |
06647a4cf6 | ||
![]() |
66b1e4a327 | ||
![]() |
a5e1a8116f | ||
![]() |
0bf77e1737 | ||
![]() |
038f0a5135 | ||
![]() |
e7d4dde9d9 | ||
![]() |
96dbbcff3e | ||
![]() |
1479742fe8 | ||
![]() |
45bebd898d | ||
![]() |
2f99cf81fc | ||
![]() |
0aa5450dc6 | ||
![]() |
5cdca0b7c1 | ||
![]() |
58ed857724 | ||
![]() |
66536a59a9 | ||
![]() |
35ab292c9f | ||
![]() |
341f1e915f | ||
![]() |
28da9da752 | ||
![]() |
6ce9330d3b | ||
![]() |
c251ee2d22 | ||
![]() |
cee5137603 | ||
![]() |
fd5c6d0024 | ||
![]() |
3d5a962332 | ||
![]() |
f096b290a7 | ||
![]() |
5a9281ece4 | ||
![]() |
b1367ec0a9 | ||
![]() |
e73d919ed7 | ||
![]() |
9bcb5e73ba | ||
![]() |
87f7510007 | ||
![]() |
814e3d8ee7 | ||
![]() |
d2cc6cca36 | ||
![]() |
ea5a95d536 | ||
![]() |
a845eb3942 | ||
![]() |
f87fb34943 | ||
![]() |
4dc9c1f433 | ||
![]() |
d885a63c7d | ||
![]() |
62833f2fa9 | ||
![]() |
e6ff69d6fc | ||
![]() |
176f840cb6 | ||
![]() |
76f06170ad | ||
![]() |
b6561cd940 | ||
![]() |
878d7070a4 | ||
![]() |
5f71198c88 | ||
![]() |
8d941913aa | ||
![]() |
599571e6ea | ||
![]() |
90709ef4d0 | ||
![]() |
378aa1026d | ||
![]() |
4fb1761fa5 | ||
![]() |
254193eb8c | ||
![]() |
d92e260ffd | ||
![]() |
8f5a5e4d57 | ||
![]() |
d0d9535d2f | ||
![]() |
df1409af76 | ||
![]() |
cfe34733e9 | ||
![]() |
e916cbe762 | ||
![]() |
a8a4142cef | ||
![]() |
3b3fffe838 | ||
![]() |
d32b8a1e71 | ||
![]() |
05e547edb5 | ||
![]() |
1b25430fe7 | ||
![]() |
278dc6880c | ||
![]() |
0bd1761077 | ||
![]() |
b1ae964ca3 | ||
![]() |
56cbb9e9af | ||
![]() |
70558574a8 | ||
![]() |
dab8375f5e | ||
![]() |
ccd9d05ac7 | ||
![]() |
69a045c144 | ||
![]() |
8f7b609c7c | ||
![]() |
0019dd6c7a | ||
![]() |
305a99afc8 | ||
![]() |
eec23d9640 | ||
![]() |
76f28ef94a | ||
![]() |
3b89d96553 | ||
![]() |
0fba78f885 | ||
![]() |
ee38944cf9 | ||
![]() |
c24cbcfbc0 | ||
![]() |
28c01f0a43 | ||
![]() |
182f671e35 | ||
![]() |
788495aac8 | ||
![]() |
7cbeb821f5 | ||
![]() |
36901194dc | ||
![]() |
58071007bd | ||
![]() |
07bafdf416 | ||
![]() |
f7bb5ec500 | ||
![]() |
b92114fec6 | ||
![]() |
fe9bb2a712 | ||
![]() |
81996f8051 | ||
![]() |
a0a976c345 | ||
![]() |
9315f36f16 | ||
![]() |
cdc03836d2 | ||
![]() |
a14e95ad6c | ||
![]() |
dd230f720f | ||
![]() |
fa781de76f | ||
![]() |
377e085aa0 | ||
![]() |
3642b32ed6 | ||
![]() |
8a6ecf005b | ||
![]() |
6866fdbdf5 | ||
![]() |
78bc4060b3 | ||
![]() |
16b901ea9e | ||
![]() |
26a3974477 | ||
![]() |
9a10d6fe6c | ||
![]() |
eb72def6d0 | ||
![]() |
3fe2a2e3b0 | ||
![]() |
d22d0f67b5 | ||
![]() |
e56e944309 | ||
![]() |
2d853d8d28 | ||
![]() |
e5d086dace | ||
![]() |
eccdd725b7 | ||
![]() |
284e0b4bf5 | ||
![]() |
47becb2721 | ||
![]() |
0b64e26235 | ||
![]() |
d90db8157c | ||
![]() |
11da530151 | ||
![]() |
c067c67e34 | ||
![]() |
89913ad4d7 | ||
![]() |
b73f34ad8c | ||
![]() |
17cf68d8a5 | ||
![]() |
5c1795ee03 | ||
![]() |
19a8480a88 | ||
![]() |
e0e80d2ea8 | ||
![]() |
adab2326ed | ||
![]() |
4ef629950d | ||
![]() |
39197df0c7 | ||
![]() |
1d3d6f0ea1 | ||
![]() |
9272ffa52c | ||
![]() |
187e5864ac | ||
![]() |
e0711248a0 | ||
![]() |
bbbcf0502e | ||
![]() |
0498fac291 | ||
![]() |
fa007148da | ||
![]() |
7e69e5704a | ||
![]() |
8579229797 | ||
![]() |
59d8f4c1cf | ||
![]() |
d05942ebe1 | ||
![]() |
1b9457bdff | ||
![]() |
05f2848d41 | ||
![]() |
ab3a28e50d | ||
![]() |
121daa81cc | ||
![]() |
17e1d75238 | ||
![]() |
597cdf4398 | ||
![]() |
215ca7806e | ||
![]() |
92f0d28d24 | ||
![]() |
d964a0c375 | ||
![]() |
332f04fdfe | ||
![]() |
291ea3bfb0 | ||
![]() |
51dbef9060 | ||
![]() |
d6f771f6c3 | ||
![]() |
d659ee2880 | ||
![]() |
7b37a5e611 | ||
![]() |
b99f2a23a8 | ||
![]() |
a54d8af051 | ||
![]() |
62a309cba6 | ||
![]() |
b7c0e4725d | ||
![]() |
53a21fb5fe | ||
![]() |
5802f7c2c5 | ||
![]() |
3c2640c90d | ||
![]() |
6f2ea9e893 | ||
![]() |
8b06bdfc29 | ||
![]() |
b6a5e60b68 | ||
![]() |
e16857457c | ||
![]() |
20663ec854 | ||
![]() |
f0166dd18f | ||
![]() |
5b8fe2393e | ||
![]() |
b08408c3c7 | ||
![]() |
060f8ece8a | ||
![]() |
eedc50b4fe | ||
![]() |
d7a636e4de | ||
![]() |
9e9319f117 | ||
![]() |
928162798f | ||
![]() |
b5b71a2dc6 | ||
![]() |
033b792b54 | ||
![]() |
7ab53edbbf | ||
![]() |
624c3bf223 | ||
![]() |
cf28312740 | ||
![]() |
a1e2beb1cf | ||
![]() |
4af9ab0bcb | ||
![]() |
8d3bde86e3 | ||
![]() |
7011a4fe07 | ||
![]() |
76f14fc4ba | ||
![]() |
923c0fee7a | ||
![]() |
b62680137e | ||
![]() |
cd5c4247a6 | ||
![]() |
d1e1692581 | ||
![]() |
c9fd0782ae | ||
![]() |
c5779935d3 | ||
![]() |
70154d4526 | ||
![]() |
070dfae93d | ||
![]() |
4e5fc734e2 | ||
![]() |
9004749754 | ||
![]() |
e42e7b81ef | ||
![]() |
e788221099 | ||
![]() |
e96b383339 | ||
![]() |
e63044e72f | ||
![]() |
0ac530eb86 | ||
![]() |
c1fd63ab25 | ||
![]() |
fd0d010908 | ||
![]() |
de159d6e3a | ||
![]() |
27293c3d36 | ||
![]() |
ffe55f05ba | ||
![]() |
d3b9a5af37 | ||
![]() |
d7772bec48 | ||
![]() |
c2e32d8989 | ||
![]() |
cdbff1ef64 | ||
![]() |
7d20053401 | ||
![]() |
7029346d8d | ||
![]() |
544f268ab8 | ||
![]() |
7dd10474c4 | ||
![]() |
f851794cf2 | ||
![]() |
0ccc0f0846 | ||
![]() |
40d1b2ddd5 | ||
![]() |
a219be6810 | ||
![]() |
fee3f03e17 | ||
![]() |
62128a14e7 | ||
![]() |
47b604c6a7 | ||
![]() |
9fc9cdc9f3 | ||
![]() |
5daa654d10 | ||
![]() |
8c51c699e9 | ||
![]() |
913fb0648b | ||
![]() |
1eacb09f3c | ||
![]() |
efcfceef39 | ||
![]() |
e977ae9e88 | ||
![]() |
b7c8d2f34c | ||
![]() |
51f1e6f866 | ||
![]() |
28abf15720 | ||
![]() |
6b9a295549 | ||
![]() |
c63a0200b3 | ||
![]() |
5fdb817bfd | ||
![]() |
1b5bdf5db3 | ||
![]() |
8022ed450c | ||
![]() |
255734acc5 | ||
![]() |
34b0c93ecd | ||
![]() |
2221e5234d | ||
![]() |
8dd8cce491 | ||
![]() |
d74965d36d | ||
![]() |
cb9e6c4c69 | ||
![]() |
1d93edd35b | ||
![]() |
4c071b9d97 | ||
![]() |
570eceb653 | ||
![]() |
a34a01745c | ||
![]() |
a4b9fa0f69 | ||
![]() |
2da18fe59f | ||
![]() |
5a969d573a | ||
![]() |
0eff36a38e | ||
![]() |
241bacfd49 | ||
![]() |
b292644531 | ||
![]() |
3264837478 | ||
![]() |
70bf5033b5 | ||
![]() |
9ffe114aeb | ||
![]() |
75f6e08d85 | ||
![]() |
3b0c19fbfc | ||
![]() |
e4d10eb622 | ||
![]() |
9cc4783415 | ||
![]() |
762bd81611 | ||
![]() |
6afdfb55ca | ||
![]() |
cb3508b30d | ||
![]() |
171ffc6862 | ||
![]() |
0f19b7415f | ||
![]() |
38019cdb91 | ||
![]() |
89bcb43271 | ||
![]() |
5101dc00b3 | ||
![]() |
a7774349e5 | ||
![]() |
b309e9d4bd | ||
![]() |
ba3fdbe142 | ||
![]() |
645d53f13b | ||
![]() |
838c6361de | ||
![]() |
6cb1d4ad1f | ||
![]() |
28dfda1370 | ||
![]() |
c73b8cf795 | ||
![]() |
807777f022 | ||
![]() |
866488ac0f | ||
![]() |
10097e3d6e | ||
![]() |
becb22a6b0 | ||
![]() |
37fcecfdd8 | ||
![]() |
c4144eb3d2 | ||
![]() |
d29244efcc | ||
![]() |
8901ba0128 | ||
![]() |
b07342baef | ||
![]() |
4d69f984b8 | ||
![]() |
e1149907ce | ||
![]() |
263376ae92 | ||
![]() |
07abc2e2e0 | ||
![]() |
7eba54f09a | ||
![]() |
1eac924291 | ||
![]() |
3ffe250f78 | ||
![]() |
15d173e628 | ||
![]() |
b24424330c | ||
![]() |
ebffa83f17 | ||
![]() |
6abc71a57d | ||
![]() |
8afb20c53b | ||
![]() |
501541b8be | ||
![]() |
e56f63dc0f | ||
![]() |
7e0c33f9a0 | ||
![]() |
bb1b8363d9 | ||
![]() |
e5e585443d | ||
![]() |
82e39c9236 | ||
![]() |
1e69e98b92 | ||
![]() |
d0888a063f | ||
![]() |
bd5781a039 | ||
![]() |
a643c75e7f | ||
![]() |
d4db40f9cc | ||
![]() |
788489119b | ||
![]() |
665adaa44b | ||
![]() |
9f19ee9586 | ||
![]() |
bb84b0e368 | ||
![]() |
7976fdd019 | ||
![]() |
0d3b45189b | ||
![]() |
7005cb0268 | ||
![]() |
81421d918a | ||
![]() |
e3fe198fc1 | ||
![]() |
76d62771e0 | ||
![]() |
4da538302d | ||
![]() |
b981193f19 | ||
![]() |
c656da5c75 | ||
![]() |
dcedf6abca | ||
![]() |
849a71bdac | ||
![]() |
534cc1d1fe | ||
![]() |
40ec6c53fa | ||
![]() |
b7cb3c0945 | ||
![]() |
69d3c7b754 | ||
![]() |
542f11804e | ||
![]() |
8526054aa8 | ||
![]() |
93700bddc7 | ||
![]() |
494500041b | ||
![]() |
011a5a3b23 | ||
![]() |
03726858f0 | ||
![]() |
c8c42cc4b2 | ||
![]() |
0b22b454e6 | ||
![]() |
f4fe03c582 | ||
![]() |
964e87fd6a | ||
![]() |
ec4c0a0d0d | ||
![]() |
f9cf62472c | ||
![]() |
ace584d294 | ||
![]() |
5cd669202b | ||
![]() |
4a09848720 | ||
![]() |
f998f1be9f | ||
![]() |
3352bdfabb | ||
![]() |
ce43a9648f | ||
![]() |
440a0bf393 | ||
![]() |
64a7555f42 | ||
![]() |
3aa6fe3dc0 | ||
![]() |
3522228d45 | ||
![]() |
9b42d9a5c6 | ||
![]() |
4e8d98f956 | ||
![]() |
f6c3d27bbc | ||
![]() |
21daf83fbd | ||
![]() |
7f1203c207 | ||
![]() |
89b1f90973 | ||
![]() |
8002a5497f | ||
![]() |
770d12d79b | ||
![]() |
7e4ac22d23 | ||
![]() |
4f4b26d3e1 | ||
![]() |
4ea7c421a8 | ||
![]() |
3c8b7e2de4 | ||
![]() |
b13acaf823 | ||
![]() |
709cd6ad6e | ||
![]() |
1316ccc56f | ||
![]() |
881ddd0e11 | ||
![]() |
49611ee6b9 | ||
![]() |
539465bb56 | ||
![]() |
bc54a73d69 | ||
![]() |
5eb12f5d14 | ||
![]() |
557e47650f | ||
![]() |
f50753bfd7 | ||
![]() |
7a164d6d5f | ||
![]() |
60bc936cd9 | ||
![]() |
d097e636ea | ||
![]() |
3ce2bbb624 | ||
![]() |
4926d2554e | ||
![]() |
eae135acba | ||
![]() |
8ce3801b87 | ||
![]() |
0c7c11f817 | ||
![]() |
b3a39c05d7 | ||
![]() |
7370012667 | ||
![]() |
412838fd4b | ||
![]() |
273a614389 | ||
![]() |
3944c80ae2 | ||
![]() |
726ab3f91b | ||
![]() |
ab307dd78f | ||
![]() |
e3079912ae | ||
![]() |
52da3ed0e4 | ||
![]() |
cda85169ea | ||
![]() |
978d1df598 | ||
![]() |
f90d22cc20 | ||
![]() |
bae69d92ae | ||
![]() |
b910239825 | ||
![]() |
6421a5969a | ||
![]() |
5c9faba7f4 | ||
![]() |
c1af738cc5 | ||
![]() |
23a80a9260 | ||
![]() |
d9d92f7eee | ||
![]() |
c8be6c203e | ||
![]() |
612c599d9b | ||
![]() |
1292c7d1ae | ||
![]() |
69f07967b5 | ||
![]() |
aedd427c07 | ||
![]() |
9b6c3dc511 | ||
![]() |
b4fa7f4317 | ||
![]() |
f053d305d5 | ||
![]() |
1d95b7ddf7 | ||
![]() |
01a6964d68 | ||
![]() |
d661f96a9b | ||
![]() |
c79fae8ab3 | ||
![]() |
121f130893 | ||
![]() |
da9a0a414a | ||
![]() |
e0732e041b | ||
![]() |
6fc5b3189a | ||
![]() |
2a0c9cb749 | ||
![]() |
7ad131b448 | ||
![]() |
3e7186bd60 | ||
![]() |
132f8cce53 | ||
![]() |
5c07f42afb | ||
![]() |
1f7a2594c8 | ||
![]() |
ec64d19a36 | ||
![]() |
5cb67470d5 | ||
![]() |
c03f01a96a | ||
![]() |
26b67a43ae | ||
![]() |
a93ca3a205 | ||
![]() |
dcc647ba3c | ||
![]() |
fe44f59239 | ||
![]() |
80dba0babf | ||
![]() |
34acf9a91e | ||
![]() |
cb859dbb7b | ||
![]() |
20c04b1e62 | ||
![]() |
69eaf8ed0c | ||
![]() |
62c828d722 | ||
![]() |
251e8e8ff4 | ||
![]() |
acc41ec72e | ||
![]() |
f9ebcf2ee4 | ||
![]() |
f3df231dc2 | ||
![]() |
75a1bb7cc5 | ||
![]() |
7d6a64315a | ||
![]() |
2758071d31 | ||
![]() |
3881b905be | ||
![]() |
073c62f868 | ||
![]() |
d8e0f26bea | ||
![]() |
04c24ab5d0 | ||
![]() |
bfb0ba1ab9 | ||
![]() |
fb7d48af1f | ||
![]() |
559989ce4b | ||
![]() |
81f59e3c18 | ||
![]() |
b6adf9f7a9 | ||
![]() |
b972a01cf0 | ||
![]() |
0296cae712 | ||
![]() |
c38b18e16b | ||
![]() |
8d65c3ed26 | ||
![]() |
995bb966ad | ||
![]() |
dbda1a76ca | ||
![]() |
ed6f990d9a | ||
![]() |
4f86d9cc77 | ||
![]() |
d55774abab | ||
![]() |
d5591ba08d | ||
![]() |
f67d483c4e | ||
![]() |
f26ddd4a27 | ||
![]() |
dbbea642bc | ||
![]() |
0539e39977 | ||
![]() |
65235d32a1 | ||
![]() |
ecfcdf5a8c | ||
![]() |
cf127ba7f9 | ||
![]() |
1fba77d925 | ||
![]() |
5752b116f6 | ||
![]() |
cdf7fd8ce6 | ||
![]() |
8fe07e7b20 | ||
![]() |
b800237606 | ||
![]() |
fed02e5b8a | ||
![]() |
2d4d3e9410 | ||
![]() |
880d4c6888 | ||
![]() |
6a3d606032 | ||
![]() |
612a86c4d9 | ||
![]() |
14abc25c01 | ||
![]() |
52673d1a02 | ||
![]() |
b7caee119e | ||
![]() |
a148446912 | ||
![]() |
1ee9075976 | ||
![]() |
b03627a110 | ||
![]() |
04ac0ab743 | ||
![]() |
e7aa985ad5 | ||
![]() |
4177f4e4f3 | ||
![]() |
c1e415b76a | ||
![]() |
8ae656dee3 | ||
![]() |
d48576f48a | ||
![]() |
c0c5075072 | ||
![]() |
59d106b8c4 | ||
![]() |
d96c313ecb | ||
![]() |
212c708150 | ||
![]() |
3739eb173e | ||
![]() |
0d3ecce8a2 | ||
![]() |
164d7a4200 | ||
![]() |
1258e602e6 | ||
![]() |
8a5ad713ea | ||
![]() |
12be65fa09 | ||
![]() |
0720431c91 | ||
![]() |
6f1ac1de97 | ||
![]() |
99d2d4b594 | ||
![]() |
2bf9b97e49 | ||
![]() |
c6600f3348 | ||
![]() |
e29ab54b0e | ||
![]() |
197565d4cb | ||
![]() |
3d570d2020 | ||
![]() |
fe364dc6dc | ||
![]() |
5d0e82781f | ||
![]() |
24f005a340 | ||
![]() |
1743c08091 | ||
![]() |
81b095c899 | ||
![]() |
965e8f71a0 | ||
![]() |
efc789fbf4 | ||
![]() |
f9cf49a9dd | ||
![]() |
0b41bd30cd | ||
![]() |
7c79615c6a | ||
![]() |
10be7354cd | ||
![]() |
1e9925f092 | ||
![]() |
838079b249 | ||
![]() |
a9bf5c93df | ||
![]() |
d4ec7e1f69 | ||
![]() |
12e9774d4c | ||
![]() |
7bccaa8717 | ||
![]() |
319874b973 | ||
![]() |
daf8799c39 | ||
![]() |
f45d4e1451 | ||
![]() |
7458d126bc | ||
![]() |
a90ffb7a48 | ||
![]() |
d1e39903dd | ||
![]() |
f23793f3f3 | ||
![]() |
800390921c | ||
![]() |
9650450426 | ||
![]() |
7225ab1f1b | ||
![]() |
72dbc45457 | ||
![]() |
3d14f916ef | ||
![]() |
5598de70f1 | ||
![]() |
bfccdd6b35 | ||
![]() |
35f36070a4 | ||
![]() |
8f0c50a010 | ||
![]() |
25d6d3694b | ||
![]() |
6c784ec01e | ||
![]() |
ebc81c55c2 | ||
![]() |
d08d9fce99 | ||
![]() |
d1bfce1974 | ||
![]() |
0d0f326c26 | ||
![]() |
2072fa1e13 | ||
![]() |
fd98274e78 | ||
![]() |
e72c7d6cb7 | ||
![]() |
5860c0031b | ||
![]() |
a43232ba6c | ||
![]() |
b20bec610a | ||
![]() |
3a9f5ea33a | ||
![]() |
5d1caa21d8 | ||
![]() |
70b3156375 | ||
![]() |
d388a75f98 | ||
![]() |
b2a6d0e687 | ||
![]() |
462f5bab54 | ||
![]() |
e89e0466eb | ||
![]() |
c9d0d7aef6 | ||
![]() |
90c7d5a74a | ||
![]() |
b19e11b5b6 | ||
![]() |
2d002c044d | ||
![]() |
9a7b2bd158 | ||
![]() |
461c874de6 | ||
![]() |
992ff97877 | ||
![]() |
96689eab23 | ||
![]() |
0dd47c192b | ||
![]() |
5875ce58fb | ||
![]() |
1c21968259 | ||
![]() |
1d8ac4fc02 | ||
![]() |
0a863f32b2 | ||
![]() |
cd0d503402 | ||
![]() |
0bac6bf8b6 | ||
![]() |
6436a59528 | ||
![]() |
2dc54ea882 | ||
![]() |
63db148aae | ||
![]() |
78f1c8499a | ||
![]() |
26dae9b4e0 | ||
![]() |
10f1d75f2e | ||
![]() |
5b3984ce7a | ||
![]() |
43810ba730 | ||
![]() |
5bf2818b2a | ||
![]() |
76587d672f | ||
![]() |
890d48769f | ||
![]() |
fffe8e2499 | ||
![]() |
fffc2d3b11 | ||
![]() |
007f33be0b | ||
![]() |
fa17af8d33 | ||
![]() |
eabe43061c | ||
![]() |
64502fb31b | ||
![]() |
d693906905 | ||
![]() |
cf25f7e201 | ||
![]() |
df3a533515 | ||
![]() |
53a687fd53 | ||
![]() |
2091bbc025 | ||
![]() |
eb46ed8f00 | ||
![]() |
3096c2e7ad | ||
![]() |
f8d66f354a | ||
![]() |
67c5601fdc | ||
![]() |
62601686aa | ||
![]() |
e92c0d5098 | ||
![]() |
5ca0298497 | ||
![]() |
7321099a0f | ||
![]() |
63d9a33d80 | ||
![]() |
a7ba6d6004 | ||
![]() |
5008d5c8c4 | ||
![]() |
33f8a00679 | ||
![]() |
be0adb833f | ||
![]() |
8f90ff8a65 | ||
![]() |
c8a1938155 | ||
![]() |
3cf42c86f3 | ||
![]() |
632e9fad2e | ||
![]() |
a5de935192 | ||
![]() |
111c1ebe32 | ||
![]() |
8a42bff6ad | ||
![]() |
d878c3e05d | ||
![]() |
d08da77b2f | ||
![]() |
86d6876db4 | ||
![]() |
a7985e1e9b | ||
![]() |
879ca456f7 | ||
![]() |
1863cbdef0 | ||
![]() |
ac4755a6ff | ||
![]() |
61600b07a4 | ||
![]() |
6be6e7f173 | ||
![]() |
e597e06324 | ||
![]() |
4cebaa865b | ||
![]() |
589e43f825 | ||
![]() |
61a70704c5 | ||
![]() |
174f86f91e | ||
![]() |
77a462702e | ||
![]() |
d20955900d | ||
![]() |
b952d2b96a | ||
![]() |
428d1d6699 | ||
![]() |
35863581e9 | ||
![]() |
041f6af607 | ||
![]() |
0e8a1bfc87 | ||
![]() |
442e739447 | ||
![]() |
47bb155989 | ||
![]() |
bd733b72a7 | ||
![]() |
e01327ab29 | ||
![]() |
2a10247653 | ||
![]() |
e3b7ed7657 | ||
![]() |
d4357ce801 | ||
![]() |
5bdeaed416 | ||
![]() |
a44d93283f | ||
![]() |
804f69e9c8 | ||
![]() |
086c2f201b | ||
![]() |
0b22360891 | ||
![]() |
808fb24bbc | ||
![]() |
febd8eccf0 | ||
![]() |
22b1209eb5 | ||
![]() |
485c5501b3 | ||
![]() |
81ceba8926 | ||
![]() |
3edd95da4e | ||
![]() |
c1bb364cbe | ||
![]() |
db8fa31503 | ||
![]() |
1a5a65dcb1 | ||
![]() |
1c96f4491e | ||
![]() |
30ddb4071f | ||
![]() |
dccc793fc7 | ||
![]() |
f070a57148 | ||
![]() |
2dde2cfb3b | ||
![]() |
e0fef4f017 | ||
![]() |
3a40b9689c | ||
![]() |
3937a395b7 | ||
![]() |
7e3d532075 | ||
![]() |
4f658c4734 | ||
![]() |
26aa753d9e | ||
![]() |
bd9c40aabc | ||
![]() |
008edc7e33 | ||
![]() |
2901bf45b7 | ||
![]() |
24e7f655fc | ||
![]() |
ab8de509d9 | ||
![]() |
4fc4ed7675 | ||
![]() |
b35ad2bb9d | ||
![]() |
895c7f1af1 | ||
![]() |
fbca5712e3 | ||
![]() |
58850960b8 | ||
![]() |
1c874d3957 | ||
![]() |
a42a19a174 | ||
![]() |
bbe39d5942 | ||
![]() |
f5fb844442 | ||
![]() |
cb186a686e | ||
![]() |
0c22bb2f4f | ||
![]() |
49756c5c2f | ||
![]() |
7efc2e1631 | ||
![]() |
ed23f5958c | ||
![]() |
0ea53f3445 | ||
![]() |
4531b38c89 | ||
![]() |
2114725dab | ||
![]() |
6877ffcb47 | ||
![]() |
c4a3cc6718 | ||
![]() |
a53ed1705a | ||
![]() |
ae13eed152 | ||
![]() |
2c2c023200 | ||
![]() |
1dbe7735df | ||
![]() |
a321e77e2e | ||
![]() |
9b52b496b2 | ||
![]() |
deeddc22be | ||
![]() |
680693448f | ||
![]() |
b4b5c0c77e | ||
![]() |
3f3305706d | ||
![]() |
bd942e2ea1 | ||
![]() |
a4c3fd8f0b | ||
![]() |
f54fc09a37 | ||
![]() |
fd6bdde5b0 | ||
![]() |
85c8007084 | ||
![]() |
8a82d60172 | ||
![]() |
8b3f5d5e81 | ||
![]() |
e222294c6e | ||
![]() |
a04b536df8 | ||
![]() |
2a0bd8722e | ||
![]() |
742187919f | ||
![]() |
aece559400 | ||
![]() |
8b6e41afb8 | ||
![]() |
9eed5802d6 | ||
![]() |
437932d023 | ||
![]() |
e8dd4f2e59 | ||
![]() |
93cdf3828b | ||
![]() |
99a91404ce | ||
![]() |
28ae3a104a | ||
![]() |
bc08839b16 | ||
![]() |
15ebcb5b6a | ||
![]() |
93fd8b0ff7 | ||
![]() |
6d0f280f19 | ||
![]() |
3b26a4c26d | ||
![]() |
60315744d1 | ||
![]() |
40a6617816 | ||
![]() |
a6964a37ac | ||
![]() |
9249ae073c | ||
![]() |
2a216728f1 | ||
![]() |
b186cb585e | ||
![]() |
4e26f62391 | ||
![]() |
ddb502acb3 | ||
![]() |
89cb6867d4 | ||
![]() |
f7892b33c8 | ||
![]() |
e04e0e69f3 | ||
![]() |
7172faf7b5 | ||
![]() |
6e1761a1f5 | ||
![]() |
baa7d4f098 | ||
![]() |
baa5557010 | ||
![]() |
5ce25ebc23 | ||
![]() |
1f4d5b0140 | ||
![]() |
ddd1a0a5f0 | ||
![]() |
802c887b60 | ||
![]() |
e15fd8fa24 | ||
![]() |
034cc3a725 | ||
![]() |
f34dcc0386 | ||
![]() |
a7b278553f | ||
![]() |
bd52eb12bd | ||
![]() |
2d9a0a7559 | ||
![]() |
67d3698a40 | ||
![]() |
7b40281875 | ||
![]() |
dc1d01c91d | ||
![]() |
1e2618fddc | ||
![]() |
85194b772b | ||
![]() |
5a048139d6 | ||
![]() |
7809842348 | ||
![]() |
c7948374fd | ||
![]() |
f8afdf304b | ||
![]() |
29d617f7bb | ||
![]() |
0e7b05e360 | ||
![]() |
5f18e99128 | ||
![]() |
b2e0af587f | ||
![]() |
b0b0817668 | ||
![]() |
a6ef654c05 | ||
![]() |
e428b9fa0a | ||
![]() |
7008185735 | ||
![]() |
e4bbc7b962 | ||
![]() |
68704a2e3d | ||
![]() |
6f0222c55e | ||
![]() |
e0646541e8 | ||
![]() |
2d1fee0516 | ||
![]() |
149899c34e | ||
![]() |
c6573b48c2 | ||
![]() |
476ba265d2 | ||
![]() |
9904de1946 | ||
![]() |
e73aec2e9e | ||
![]() |
d6658a1771 | ||
![]() |
583988034b | ||
![]() |
e57d6f3d97 | ||
![]() |
55e553c2a0 | ||
![]() |
44a3263a86 | ||
![]() |
80723a6cad | ||
![]() |
ca15c60d52 | ||
![]() |
8be075b36a | ||
![]() |
ca203f8297 | ||
![]() |
934c3065b9 | ||
![]() |
5d95917727 | ||
![]() |
a53b67f0ef | ||
![]() |
eff13180b3 | ||
![]() |
354aec4713 | ||
![]() |
d2acb88dd4 | ||
![]() |
e96ece23b8 | ||
![]() |
a3a3db9bc8 | ||
![]() |
ede0737261 | ||
![]() |
dc7efad420 | ||
![]() |
423d51a6f9 | ||
![]() |
c350650f9c | ||
![]() |
8c3cbc49b3 | ||
![]() |
786b7193d0 | ||
![]() |
2a6acba07f | ||
![]() |
e5a5d112ca | ||
![]() |
9e2cfe548b | ||
![]() |
f4d595f5c2 | ||
![]() |
c1e5b7d111 | ||
![]() |
1eccc60cb3 | ||
![]() |
9f8095ae52 | ||
![]() |
3674cf4aad | ||
![]() |
6b0d2157c8 | ||
![]() |
5a629d6256 | ||
![]() |
b8909f97aa | ||
![]() |
8c83ed6b55 | ||
![]() |
b161346171 | ||
![]() |
330e717518 | ||
![]() |
dafc031ef6 | ||
![]() |
b00a2d3b79 | ||
![]() |
c64ec34a1f | ||
![]() |
8ed709c7bb | ||
![]() |
8e8e52c6f9 | ||
![]() |
f3e806c4a6 | ||
![]() |
3bae95ae5b | ||
![]() |
0adde753f4 | ||
![]() |
5f28a22666 | ||
![]() |
a975b53894 | ||
![]() |
98aee5d0ab | ||
![]() |
f57af8bf9e | ||
![]() |
c6c3b6643e | ||
![]() |
af94079b92 | ||
![]() |
7203cc5cb3 | ||
![]() |
028423cf58 | ||
![]() |
2ead6af96a | ||
![]() |
bf853e3c0c | ||
![]() |
660b243056 | ||
![]() |
c85f41e65b | ||
![]() |
2759bed1b2 | ||
![]() |
89c2a8ec9b | ||
![]() |
aa2c1257ac | ||
![]() |
f9fa15b7ac | ||
![]() |
93a9be41bc | ||
![]() |
ecd2f2032c | ||
![]() |
de5ce5f635 | ||
![]() |
2eb6fd6819 | ||
![]() |
22ea4e7ffa | ||
![]() |
3d98f3035f | ||
![]() |
ec1d6ac477 | ||
![]() |
0dc236cb5b | ||
![]() |
98349a49fd | ||
![]() |
ab8be2cada | ||
![]() |
b8c22d0928 | ||
![]() |
c6cf77e4b8 | ||
![]() |
6c0511a898 | ||
![]() |
366c862bcf | ||
![]() |
03493e2390 | ||
![]() |
8f9c71dd55 | ||
![]() |
11beb1e331 | ||
![]() |
01b4dc233a | ||
![]() |
9f1e80e969 | ||
![]() |
7e319e11c6 | ||
![]() |
d11bf1c4d2 | ||
![]() |
3e2f18b757 | ||
![]() |
61677aa811 | ||
![]() |
fb04e835ef | ||
![]() |
bb133922d6 | ||
![]() |
44dd5ef872 | ||
![]() |
bcc8e1c055 | ||
![]() |
71117ed335 | ||
![]() |
de07fb3b74 | ||
![]() |
e31d5a4dcf | ||
![]() |
e14aae761d | ||
![]() |
47db2a247c | ||
![]() |
e449bb9692 | ||
![]() |
b8fc72b6a7 | ||
![]() |
64c01c1bd1 | ||
![]() |
0a0e3df42b | ||
![]() |
949c69a7e9 | ||
![]() |
69caf7a604 | ||
![]() |
23860ad5f9 | ||
![]() |
ace5234d8d | ||
![]() |
4654f821a9 | ||
![]() |
927e0e7865 | ||
![]() |
d47c9735b5 | ||
![]() |
6100433636 | ||
![]() |
43f79e8183 | ||
![]() |
f58fda0c87 | ||
![]() |
64b49e37d7 | ||
![]() |
e44418d410 | ||
![]() |
ca8d05ff13 | ||
![]() |
626871e34d | ||
![]() |
4b659fe643 | ||
![]() |
d5055506b0 | ||
![]() |
55f54b2e82 | ||
![]() |
1b18065e68 | ||
![]() |
053dc02152 | ||
![]() |
b8cb4a1295 | ||
![]() |
cd2cbf68a1 | ||
![]() |
73f3be8af0 | ||
![]() |
8cce059fb4 | ||
![]() |
db641ec6f6 | ||
![]() |
9d8239b68d | ||
![]() |
4ec0bac275 | ||
![]() |
613c234cfb | ||
![]() |
83dca71f69 | ||
![]() |
f7ea9cdb6e | ||
![]() |
762cb1804f | ||
![]() |
962cfb7ae2 | ||
![]() |
9bc2ec7d8a | ||
![]() |
8415d104e9 | ||
![]() |
abd0f9b961 | ||
![]() |
0a4683d908 | ||
![]() |
4c280b0193 | ||
![]() |
e88a3deafd | ||
![]() |
7de08e08d0 | ||
![]() |
bd172b3300 | ||
![]() |
95c7a13cb5 | ||
![]() |
b1ddf03385 | ||
![]() |
a83c326736 | ||
![]() |
b1acb56247 | ||
![]() |
caa4731a13 | ||
![]() |
5b0ece7a91 | ||
![]() |
a4cd94847e | ||
![]() |
a0a7386b51 | ||
![]() |
535a72000f | ||
![]() |
60531b9cd2 | ||
![]() |
8f86ad696d | ||
![]() |
c9bda98a6a | ||
![]() |
9ea08da133 | ||
![]() |
5762ec0518 | ||
![]() |
7db74460fa | ||
![]() |
c8d64e0a06 | ||
![]() |
1a3dea0de6 | ||
![]() |
17b642280e | ||
![]() |
1c1717b78b | ||
![]() |
4bbbdf8108 | ||
![]() |
04a193309d | ||
![]() |
f106ffa176 | ||
![]() |
8d5d099542 | ||
![]() |
4849992ca9 | ||
![]() |
623105650e | ||
![]() |
5e2c01daa6 | ||
![]() |
58bf3a4d30 | ||
![]() |
2d434c38b9 | ||
![]() |
246f5cd8cf | ||
![]() |
5a174d21f1 | ||
![]() |
e632c653f6 | ||
![]() |
174d17b088 | ||
![]() |
3a35c931e4 | ||
![]() |
b768b26c85 | ||
![]() |
123ce6ebaf | ||
![]() |
276c8db512 | ||
![]() |
f898b8d181 | ||
![]() |
e9f9e531e4 | ||
![]() |
a7d813cb86 | ||
![]() |
75b6eedb12 | ||
![]() |
ec6860aa90 | ||
![]() |
5cf661c6ae | ||
![]() |
8c62caae7c | ||
![]() |
cc6fe21af6 | ||
![]() |
1902151efa | ||
![]() |
b7af1e6289 | ||
![]() |
0c77b320db | ||
![]() |
ee41adc4e9 | ||
![]() |
93462d7505 | ||
![]() |
2f148255f7 | ||
![]() |
cb00b8b335 | ||
![]() |
559b56c8a2 | ||
![]() |
6ec39314ee | ||
![]() |
158cea51db | ||
![]() |
33d34f35e9 | ||
![]() |
1f4f40fd7c | ||
![]() |
7c908b247e | ||
![]() |
41c822fde1 | ||
![]() |
2a6569742d | ||
![]() |
14c8b6a248 | ||
![]() |
9b71215cde | ||
![]() |
8be572f976 | ||
![]() |
4f43bcffb9 | ||
![]() |
29e4dc5fb5 | ||
![]() |
0dc95cb13c | ||
![]() |
9fad4a74ed |
14
.github/dependabot.yml
vendored
Normal file
@@ -0,0 +1,14 @@
|
||||
# https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
|
||||
|
||||
version: 2
|
||||
updates:
|
||||
- package-ecosystem: "gradle"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
day: "wednesday"
|
||||
- package-ecosystem: "maven"
|
||||
directory: "/.teamcity/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
day: "wednesday"
|
67
.github/workflows/codeql-analysis.yml
vendored
Normal file
@@ -0,0 +1,67 @@
|
||||
# For most projects, this workflow file will not need changing; you simply need
|
||||
# to commit it to your repository.
|
||||
#
|
||||
# You may wish to alter this file to override the set of languages analyzed,
|
||||
# or to provide custom queries or build logic.
|
||||
#
|
||||
# ******** NOTE ********
|
||||
# We have attempted to detect the languages in your repository. Please check
|
||||
# the `language` matrix defined below to confirm you have the correct set of
|
||||
# supported CodeQL languages.
|
||||
#
|
||||
name: "CodeQL"
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ master ]
|
||||
pull_request:
|
||||
# The branches below must be a subset of the branches above
|
||||
branches: [ master ]
|
||||
schedule:
|
||||
- cron: '44 12 * * 4'
|
||||
|
||||
jobs:
|
||||
analyze:
|
||||
name: Analyze
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
language: [ 'java' ]
|
||||
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ]
|
||||
# Learn more:
|
||||
# https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v2
|
||||
|
||||
# Initializes the CodeQL tools for scanning.
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@v1
|
||||
with:
|
||||
languages: ${{ matrix.language }}
|
||||
# If you wish to specify custom queries, you can do so here or in a config file.
|
||||
# By default, queries listed here will override any specified in a config file.
|
||||
# Prefix the list here with "+" to use these queries and those in the config file.
|
||||
# queries: ./path/to/local/query, your-org/your-repo/queries@main
|
||||
|
||||
# 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
|
||||
|
||||
# ℹ️ Command-line programs to run using the OS shell.
|
||||
# 📚 https://git.io/JvXDl
|
||||
|
||||
# ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
|
||||
# and modify them (or add more) to build your code if your project
|
||||
# uses a compiled language
|
||||
|
||||
#- run: |
|
||||
# make bootstrap
|
||||
# make release
|
||||
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@v1
|
42
.github/workflows/mergePr.yml
vendored
Normal file
@@ -0,0 +1,42 @@
|
||||
# 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
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
types: [ closed ]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
|
||||
if: github.event.pull_request.merged == true
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
fetch-depth: 50
|
||||
- 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: Update authors
|
||||
id: update_authors
|
||||
run: ./gradlew updateMergedPr -PprId=${{ github.event.number }}
|
||||
env:
|
||||
GITHUB_OAUTH: ${{ secrets.AUTOMATION_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>
|
||||
file_pattern: CHANGES.md
|
77
.github/workflows/runUiTests.yml
vendored
Normal file
@@ -0,0 +1,77 @@
|
||||
name: Run UI Tests
|
||||
on:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: '0 12 * * *'
|
||||
jobs:
|
||||
build-for-ui-test-mac-os:
|
||||
runs-on: macos-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Setup Java
|
||||
uses: actions/setup-java@v2.1.0
|
||||
with:
|
||||
distribution: zulu
|
||||
java-version: 11
|
||||
- name: Setup FFmpeg
|
||||
uses: FedericoCarboni/setup-ffmpeg@v1
|
||||
with:
|
||||
# Not strictly necessary, but it may prevent rate limit
|
||||
# errors especially on GitHub-hosted macos machines.
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
- name: Build Plugin
|
||||
run: gradle :buildPlugin
|
||||
- name: Run Idea
|
||||
run: |
|
||||
mkdir -p build/reports
|
||||
gradle :runIdeForUiTests > build/reports/idea.log &
|
||||
- name: Wait for Idea started
|
||||
uses: jtalk/url-health-check-action@1.5
|
||||
with:
|
||||
url: http://127.0.0.1:8082
|
||||
max-attempts: 20
|
||||
retry-delay: 10s
|
||||
- name: Tests
|
||||
run: gradle :testUi
|
||||
- name: Move video
|
||||
if: ${{ failure() }}
|
||||
run: mv video build/reports
|
||||
- name: Save fails report
|
||||
if: ${{ failure() }}
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: ui-test-fails-report-mac
|
||||
path: |
|
||||
build/reports
|
||||
# build-for-ui-test-linux:
|
||||
# runs-on: ubuntu-latest
|
||||
# steps:
|
||||
# - uses: actions/checkout@v2
|
||||
# - name: Setup Java
|
||||
# uses: actions/setup-java@v2.1.0
|
||||
# with:
|
||||
# distribution: zulu
|
||||
# java-version: 11
|
||||
# - name: Build Plugin
|
||||
# run: gradle :buildPlugin
|
||||
# - name: Run Idea
|
||||
# run: |
|
||||
# export DISPLAY=:99.0
|
||||
# Xvfb -ac :99 -screen 0 1920x1080x16 &
|
||||
# mkdir -p build/reports
|
||||
# gradle :runIdeForUiTests #> build/reports/idea.log
|
||||
# - name: Wait for Idea started
|
||||
# uses: jtalk/url-health-check-action@1.5
|
||||
# with:
|
||||
# url: http://127.0.0.1:8082
|
||||
# max-attempts: 15
|
||||
# retry-delay: 30s
|
||||
# - name: Tests
|
||||
# run: gradle :testUi
|
||||
# - name: Save fails report
|
||||
# if: ${{ failure() }}
|
||||
# uses: actions/upload-artifact@v2
|
||||
# with:
|
||||
# name: ui-test-fails-report-linux
|
||||
# path: |
|
||||
# ui-test-example/build/reports
|
49
.github/workflows/updateAuthors.yml
vendored
Normal file
@@ -0,0 +1,49 @@
|
||||
# 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 Authors
|
||||
|
||||
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
|
||||
|
||||
- uses: nrwl/last-successful-commit-action@v1
|
||||
id: last_successful_commit
|
||||
with:
|
||||
branch: 'master'
|
||||
workflow_id: 'updateAuthors.yml'
|
||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Update authors
|
||||
id: update_authors
|
||||
run: ./gradlew updateAuthors --stacktrace
|
||||
env:
|
||||
SUCCESS_COMMIT: ${{ steps.last_successful_commit.outputs.commit_hash }}
|
||||
GITHUB_OAUTH: ${{ secrets.AUTOMATION_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>
|
||||
file_pattern: AUTHORS.md
|
47
.github/workflows/updateChangelog.yml
vendored
Normal file
@@ -0,0 +1,47 @@
|
||||
# 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:
|
||||
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
|
||||
|
||||
- uses: nrwl/last-successful-commit-action@v1
|
||||
id: last_successful_commit
|
||||
with:
|
||||
branch: 'master'
|
||||
workflow_id: 'updateChangelog.yml'
|
||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Update changelog
|
||||
run: ./gradlew updateChangelog
|
||||
env:
|
||||
SUCCESS_COMMIT: ${{ steps.last_successful_commit.outputs.commit_hash }}
|
||||
|
||||
- name: Commit changes
|
||||
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
|
37
.github/workflows/updateFormatting.yml
vendored
Normal file
@@ -0,0 +1,37 @@
|
||||
# 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 Formatting
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: '0 0 * * 0'
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
build:
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
fetch-depth: 50
|
||||
- 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: Format files
|
||||
run: ./gradlew ktlintFormat
|
||||
|
||||
- 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>
|
27
.gitignore
vendored
@@ -1,6 +1,27 @@
|
||||
*.swp
|
||||
/.gradle/
|
||||
|
||||
/.idea/
|
||||
/build/
|
||||
/out/
|
||||
/tmp/
|
||||
!/.idea/scopes
|
||||
!/.idea/copyright
|
||||
!/.idea/icon.png
|
||||
!/.idea/inspectionProfiles
|
||||
!/.idea/fileTemplates
|
||||
!/.idea/runConfigurations
|
||||
!/.idea/codeStyles
|
||||
|
||||
**/build/
|
||||
**/out/
|
||||
**/tmp/
|
||||
|
||||
*.DS_Store
|
||||
|
||||
.teamcity/.idea
|
||||
.teamcity/target
|
||||
.teamcity/*.iml
|
||||
|
||||
# Generated by gradle task "generateGrammarSource"
|
||||
src/main/java/com/maddyhome/idea/vim/vimscript/parser/generated
|
||||
|
||||
# Created by github automation
|
||||
settings.xml
|
||||
|
196
.idea/codeStyles/Project.xml
generated
Normal file
@@ -0,0 +1,196 @@
|
||||
<component name="ProjectCodeStyleConfiguration">
|
||||
<code_scheme name="Project" version="173">
|
||||
<option name="AUTODETECT_INDENTS" value="false" />
|
||||
<option name="OTHER_INDENT_OPTIONS">
|
||||
<value>
|
||||
<option name="CONTINUATION_INDENT_SIZE" value="4" />
|
||||
</value>
|
||||
</option>
|
||||
<JavaCodeStyleSettings>
|
||||
<option name="FIELD_NAME_PREFIX" value="my" />
|
||||
<option name="STATIC_FIELD_NAME_PREFIX" value="our" />
|
||||
</JavaCodeStyleSettings>
|
||||
<JetCodeStyleSettings>
|
||||
<option name="NAME_COUNT_TO_USE_STAR_IMPORT" value="2147483647" />
|
||||
<option name="NAME_COUNT_TO_USE_STAR_IMPORT_FOR_MEMBERS" value="2147483647" />
|
||||
<option name="ALLOW_TRAILING_COMMA" value="true" />
|
||||
<option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
|
||||
</JetCodeStyleSettings>
|
||||
<ScalaCodeStyleSettings>
|
||||
<option name="MULTILINE_STRING_CLOSING_QUOTES_ON_NEW_LINE" value="true" />
|
||||
</ScalaCodeStyleSettings>
|
||||
<ADDITIONAL_INDENT_OPTIONS fileType="rb">
|
||||
<option name="INDENT_SIZE" value="2" />
|
||||
</ADDITIONAL_INDENT_OPTIONS>
|
||||
<codeStyleSettings language="CFML">
|
||||
<option name="KEEP_LINE_BREAKS" value="false" />
|
||||
<option name="ELSE_ON_NEW_LINE" value="true" />
|
||||
<option name="WHILE_ON_NEW_LINE" value="true" />
|
||||
<option name="CATCH_ON_NEW_LINE" value="true" />
|
||||
<option name="ALIGN_MULTILINE_PARAMETERS_IN_CALLS" value="true" />
|
||||
<option name="ALIGN_MULTILINE_BINARY_OPERATION" value="true" />
|
||||
<option name="ALIGN_MULTILINE_TERNARY_OPERATION" value="true" />
|
||||
<option name="CALL_PARAMETERS_WRAP" value="1" />
|
||||
<option name="METHOD_PARAMETERS_WRAP" value="5" />
|
||||
<option name="BINARY_OPERATION_WRAP" value="5" />
|
||||
<option name="TERNARY_OPERATION_WRAP" value="5" />
|
||||
<option name="TERNARY_OPERATION_SIGNS_ON_NEXT_LINE" value="true" />
|
||||
<option name="FOR_STATEMENT_WRAP" value="5" />
|
||||
<option name="ASSIGNMENT_WRAP" value="1" />
|
||||
</codeStyleSettings>
|
||||
<codeStyleSettings language="ECMA Script Level 4">
|
||||
<option name="KEEP_LINE_BREAKS" value="false" />
|
||||
<option name="ELSE_ON_NEW_LINE" value="true" />
|
||||
<option name="WHILE_ON_NEW_LINE" value="true" />
|
||||
<option name="CATCH_ON_NEW_LINE" value="true" />
|
||||
<option name="FINALLY_ON_NEW_LINE" value="true" />
|
||||
<option name="ALIGN_MULTILINE_PARAMETERS_IN_CALLS" value="true" />
|
||||
<option name="ALIGN_MULTILINE_BINARY_OPERATION" value="true" />
|
||||
<option name="ALIGN_MULTILINE_TERNARY_OPERATION" value="true" />
|
||||
<option name="ALIGN_MULTILINE_EXTENDS_LIST" value="true" />
|
||||
<option name="CALL_PARAMETERS_WRAP" value="1" />
|
||||
<option name="METHOD_PARAMETERS_WRAP" value="5" />
|
||||
<option name="EXTENDS_LIST_WRAP" value="1" />
|
||||
<option name="EXTENDS_KEYWORD_WRAP" value="1" />
|
||||
<option name="BINARY_OPERATION_WRAP" value="5" />
|
||||
<option name="TERNARY_OPERATION_WRAP" value="5" />
|
||||
<option name="TERNARY_OPERATION_SIGNS_ON_NEXT_LINE" value="true" />
|
||||
<option name="FOR_STATEMENT_WRAP" value="5" />
|
||||
<option name="ARRAY_INITIALIZER_WRAP" value="1" />
|
||||
<option name="ASSIGNMENT_WRAP" value="1" />
|
||||
<option name="IF_BRACE_FORCE" value="1" />
|
||||
<option name="DOWHILE_BRACE_FORCE" value="1" />
|
||||
<option name="WHILE_BRACE_FORCE" value="1" />
|
||||
<option name="FOR_BRACE_FORCE" value="1" />
|
||||
</codeStyleSettings>
|
||||
<codeStyleSettings language="GSP">
|
||||
<indentOptions>
|
||||
<option name="INDENT_SIZE" value="2" />
|
||||
</indentOptions>
|
||||
</codeStyleSettings>
|
||||
<codeStyleSettings language="Groovy">
|
||||
<option name="KEEP_LINE_BREAKS" value="false" />
|
||||
<option name="ELSE_ON_NEW_LINE" value="true" />
|
||||
<option name="CATCH_ON_NEW_LINE" value="true" />
|
||||
<option name="FINALLY_ON_NEW_LINE" value="true" />
|
||||
<option name="ALIGN_MULTILINE_PARAMETERS_IN_CALLS" value="true" />
|
||||
<option name="ALIGN_MULTILINE_BINARY_OPERATION" value="true" />
|
||||
<option name="ALIGN_MULTILINE_ASSIGNMENT" value="true" />
|
||||
<option name="ALIGN_MULTILINE_TERNARY_OPERATION" value="true" />
|
||||
<option name="ALIGN_MULTILINE_THROWS_LIST" value="true" />
|
||||
<option name="ALIGN_MULTILINE_EXTENDS_LIST" value="true" />
|
||||
<option name="SPACE_AFTER_TYPE_CAST" value="false" />
|
||||
<option name="CALL_PARAMETERS_WRAP" value="1" />
|
||||
<option name="METHOD_PARAMETERS_WRAP" value="5" />
|
||||
<option name="EXTENDS_LIST_WRAP" value="1" />
|
||||
<option name="THROWS_LIST_WRAP" value="5" />
|
||||
<option name="EXTENDS_KEYWORD_WRAP" value="1" />
|
||||
<option name="THROWS_KEYWORD_WRAP" value="1" />
|
||||
<option name="METHOD_CALL_CHAIN_WRAP" value="1" />
|
||||
<option name="BINARY_OPERATION_WRAP" value="5" />
|
||||
<option name="TERNARY_OPERATION_WRAP" value="5" />
|
||||
<option name="FOR_STATEMENT_WRAP" value="5" />
|
||||
<option name="ASSIGNMENT_WRAP" value="1" />
|
||||
<option name="IF_BRACE_FORCE" value="1" />
|
||||
<option name="WHILE_BRACE_FORCE" value="1" />
|
||||
<option name="FOR_BRACE_FORCE" value="1" />
|
||||
<option name="FIELD_ANNOTATION_WRAP" value="0" />
|
||||
<indentOptions>
|
||||
<option name="INDENT_SIZE" value="2" />
|
||||
</indentOptions>
|
||||
</codeStyleSettings>
|
||||
<codeStyleSettings language="HTML">
|
||||
<indentOptions>
|
||||
<option name="INDENT_SIZE" value="2" />
|
||||
<option name="CONTINUATION_INDENT_SIZE" value="4" />
|
||||
<option name="TAB_SIZE" value="8" />
|
||||
</indentOptions>
|
||||
</codeStyleSettings>
|
||||
<codeStyleSettings language="JAVA">
|
||||
<option name="LINE_COMMENT_AT_FIRST_COLUMN" value="false" />
|
||||
<option name="BLOCK_COMMENT_AT_FIRST_COLUMN" value="false" />
|
||||
<option name="KEEP_LINE_BREAKS" value="false" />
|
||||
<option name="ELSE_ON_NEW_LINE" value="true" />
|
||||
<option name="WHILE_ON_NEW_LINE" value="true" />
|
||||
<option name="CATCH_ON_NEW_LINE" value="true" />
|
||||
<option name="FINALLY_ON_NEW_LINE" value="true" />
|
||||
<option name="ALIGN_MULTILINE_PARAMETERS_IN_CALLS" value="true" />
|
||||
<option name="ALIGN_MULTILINE_BINARY_OPERATION" value="true" />
|
||||
<option name="ALIGN_MULTILINE_ASSIGNMENT" value="true" />
|
||||
<option name="ALIGN_MULTILINE_TERNARY_OPERATION" value="true" />
|
||||
<option name="ALIGN_MULTILINE_THROWS_LIST" value="true" />
|
||||
<option name="ALIGN_MULTILINE_EXTENDS_LIST" value="true" />
|
||||
<option name="ALIGN_MULTILINE_PARENTHESIZED_EXPRESSION" value="true" />
|
||||
<option name="SPACE_AFTER_TYPE_CAST" value="false" />
|
||||
<option name="CALL_PARAMETERS_WRAP" value="1" />
|
||||
<option name="METHOD_PARAMETERS_WRAP" value="5" />
|
||||
<option name="EXTENDS_LIST_WRAP" value="1" />
|
||||
<option name="THROWS_LIST_WRAP" value="5" />
|
||||
<option name="EXTENDS_KEYWORD_WRAP" value="1" />
|
||||
<option name="THROWS_KEYWORD_WRAP" value="1" />
|
||||
<option name="METHOD_CALL_CHAIN_WRAP" value="1" />
|
||||
<option name="BINARY_OPERATION_WRAP" value="5" />
|
||||
<option name="TERNARY_OPERATION_WRAP" value="5" />
|
||||
<option name="TERNARY_OPERATION_SIGNS_ON_NEXT_LINE" value="true" />
|
||||
<option name="FOR_STATEMENT_WRAP" value="5" />
|
||||
<option name="ARRAY_INITIALIZER_WRAP" value="1" />
|
||||
<option name="ASSIGNMENT_WRAP" value="1" />
|
||||
<option name="IF_BRACE_FORCE" value="1" />
|
||||
<option name="DOWHILE_BRACE_FORCE" value="1" />
|
||||
<option name="WHILE_BRACE_FORCE" value="1" />
|
||||
<option name="FOR_BRACE_FORCE" value="1" />
|
||||
<option name="FIELD_ANNOTATION_WRAP" value="0" />
|
||||
<indentOptions>
|
||||
<option name="INDENT_SIZE" value="2" />
|
||||
<option name="CONTINUATION_INDENT_SIZE" value="4" />
|
||||
<option name="TAB_SIZE" value="8" />
|
||||
</indentOptions>
|
||||
</codeStyleSettings>
|
||||
<codeStyleSettings language="JSON">
|
||||
<option name="KEEP_LINE_BREAKS" value="false" />
|
||||
</codeStyleSettings>
|
||||
<codeStyleSettings language="JSP">
|
||||
<indentOptions>
|
||||
<option name="INDENT_SIZE" value="2" />
|
||||
<option name="CONTINUATION_INDENT_SIZE" value="4" />
|
||||
<option name="TAB_SIZE" value="8" />
|
||||
</indentOptions>
|
||||
</codeStyleSettings>
|
||||
<codeStyleSettings language="JavaScript">
|
||||
<option name="KEEP_LINE_BREAKS" value="false" />
|
||||
<option name="ELSE_ON_NEW_LINE" value="true" />
|
||||
<option name="WHILE_ON_NEW_LINE" value="true" />
|
||||
<option name="CATCH_ON_NEW_LINE" value="true" />
|
||||
<option name="FINALLY_ON_NEW_LINE" value="true" />
|
||||
<option name="ALIGN_MULTILINE_PARAMETERS_IN_CALLS" value="true" />
|
||||
<option name="ALIGN_MULTILINE_BINARY_OPERATION" value="true" />
|
||||
<option name="ALIGN_MULTILINE_TERNARY_OPERATION" value="true" />
|
||||
<option name="CALL_PARAMETERS_WRAP" value="1" />
|
||||
<option name="METHOD_PARAMETERS_WRAP" value="5" />
|
||||
<option name="BINARY_OPERATION_WRAP" value="5" />
|
||||
<option name="TERNARY_OPERATION_WRAP" value="5" />
|
||||
<option name="TERNARY_OPERATION_SIGNS_ON_NEXT_LINE" value="true" />
|
||||
<option name="FOR_STATEMENT_WRAP" value="5" />
|
||||
<option name="ARRAY_INITIALIZER_WRAP" value="1" />
|
||||
<option name="ASSIGNMENT_WRAP" value="1" />
|
||||
<option name="IF_BRACE_FORCE" value="1" />
|
||||
<option name="DOWHILE_BRACE_FORCE" value="1" />
|
||||
<option name="WHILE_BRACE_FORCE" value="1" />
|
||||
<option name="FOR_BRACE_FORCE" value="1" />
|
||||
</codeStyleSettings>
|
||||
<codeStyleSettings language="Python">
|
||||
<option name="KEEP_LINE_BREAKS" value="false" />
|
||||
<option name="PARENT_SETTINGS_INSTALLED" value="true" />
|
||||
</codeStyleSettings>
|
||||
<codeStyleSettings language="XML">
|
||||
<indentOptions>
|
||||
<option name="INDENT_SIZE" value="2" />
|
||||
<option name="CONTINUATION_INDENT_SIZE" value="4" />
|
||||
<option name="TAB_SIZE" value="8" />
|
||||
</indentOptions>
|
||||
</codeStyleSettings>
|
||||
<codeStyleSettings language="kotlin">
|
||||
<option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
|
||||
</codeStyleSettings>
|
||||
</code_scheme>
|
||||
</component>
|
5
.idea/codeStyles/codeStyleConfig.xml
generated
Normal file
@@ -0,0 +1,5 @@
|
||||
<component name="ProjectCodeStyleConfiguration">
|
||||
<state>
|
||||
<option name="USE_PER_PROJECT_SETTINGS" value="true" />
|
||||
</state>
|
||||
</component>
|
6
.idea/copyright/IdeaVim.xml
generated
Normal file
@@ -0,0 +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="myName" value="IdeaVim" />
|
||||
</copyright>
|
||||
</component>
|
7
.idea/copyright/profiles_settings.xml
generated
Normal file
@@ -0,0 +1,7 @@
|
||||
<component name="CopyrightManager">
|
||||
<settings>
|
||||
<module2copyright>
|
||||
<element module="Copyright" copyright="IdeaVim" />
|
||||
</module2copyright>
|
||||
</settings>
|
||||
</component>
|
1
.idea/fileTemplates/code/I18nized Concatenation.java
generated
Normal file
@@ -0,0 +1 @@
|
||||
com.maddyhome.idea.vim.helper.MessageHelper.message("${PROPERTY_KEY}", ${PARAMETERS})
|
1
.idea/fileTemplates/code/I18nized Expression.java
generated
Normal file
@@ -0,0 +1 @@
|
||||
com.maddyhome.idea.vim.helper.MessageHelper.message("${PROPERTY_KEY}")
|
BIN
.idea/icon.png
generated
Normal file
After Width: | Height: | Size: 113 KiB |
69
.idea/inspectionProfiles/Project_Default.xml
generated
Normal file
@@ -0,0 +1,69 @@
|
||||
<component name="InspectionProjectProfileManager">
|
||||
<profile version="1.0">
|
||||
<option name="myName" value="Project Default" />
|
||||
<inspection_tool class="BooleanMethodIsAlwaysInverted" enabled="false" level="WARNING" enabled_by_default="false" />
|
||||
<inspection_tool class="HardCodedStringLiteral" enabled="false" level="WARNING" enabled_by_default="false">
|
||||
<scope name="Production" level="WARNING" enabled="false">
|
||||
<option name="ignoreForAssertStatements" value="true" />
|
||||
<option name="ignoreForExceptionConstructors" value="true" />
|
||||
<option name="ignoreForSpecifiedExceptionConstructors" value="" />
|
||||
<option name="ignoreForJUnitAsserts" value="true" />
|
||||
<option name="ignoreForClassReferences" value="true" />
|
||||
<option name="ignoreForPropertyKeyReferences" value="true" />
|
||||
<option name="ignoreForNonAlpha" value="true" />
|
||||
<option name="ignoreAssignedToConstants" value="false" />
|
||||
<option name="ignoreToString" value="true" />
|
||||
<option name="nonNlsCommentPattern" value="NON-NLS" />
|
||||
</scope>
|
||||
<option name="ignoreForAssertStatements" value="true" />
|
||||
<option name="ignoreForExceptionConstructors" value="true" />
|
||||
<option name="ignoreForSpecifiedExceptionConstructors" value="" />
|
||||
<option name="ignoreForJUnitAsserts" value="true" />
|
||||
<option name="ignoreForClassReferences" value="true" />
|
||||
<option name="ignoreForPropertyKeyReferences" value="true" />
|
||||
<option name="ignoreForNonAlpha" value="true" />
|
||||
<option name="ignoreAssignedToConstants" value="false" />
|
||||
<option name="ignoreToString" value="false" />
|
||||
<option name="nonNlsCommentPattern" value="NON-NLS" />
|
||||
</inspection_tool>
|
||||
<inspection_tool class="MissortedModifiers" enabled="true" level="WARNING" enabled_by_default="true">
|
||||
<option name="m_requireAnnotationsFirst" value="true" />
|
||||
</inspection_tool>
|
||||
<inspection_tool class="MoveVariableDeclarationIntoWhen" enabled="false" level="WEAK WARNING" enabled_by_default="false" />
|
||||
<inspection_tool class="PluginXmlI18n" enabled="true" level="WARNING" enabled_by_default="true" />
|
||||
<inspection_tool class="SSBasedInspection" enabled="true" level="WARNING" enabled_by_default="true">
|
||||
<replaceConfiguration name="IdeaVim run for each caret" description="Please use IdeaVim version of `runForEachCaret` function" suppressId="ideavimRunForEachCaret" problemDescriptor="Replace with IdeaVim version" text="$editor$.caretModel.runForEachCaret { $expr$ }" recursive="false" caseInsensitive="false" type="Kotlin" pattern_context="default" reformatAccordingToStyle="true" shortenFQN="false" replacement="$editor$.vimForEachCaret { $expr$ }">
|
||||
<constraint name="__context__" within="" contains="" />
|
||||
<constraint name="editor" within="" contains="" />
|
||||
<constraint name="expr" minCount="0" maxCount="2147483647" within="" contains="" />
|
||||
</replaceConfiguration>
|
||||
<replaceConfiguration name="Use IdeaVim method instead of the fixture" uuid="0f74da52-7360-33ae-9b40-d771aa128de6" description="Use assertState and other functions instead of myFixture.checkResult. This function also preformes assertion in neovim" suppressId="IdeaVimAssertState" problemDescriptor="Use IdeaVim testing methods" text="$fixture$.$check$($data$)" recursive="false" caseInsensitive="false" type="Kotlin" pattern_context="default" reformatAccordingToStyle="true" shortenFQN="false" replacement="assertState($data$)">
|
||||
<constraint name="__context__" within="" contains="" />
|
||||
<constraint name="fixture" regexp="myFixture" nameOfExprType="CodeInsightTestFixture" within="" contains="" />
|
||||
<constraint name="check" regexp="checkResult" within="" contains="" />
|
||||
<constraint name="data" within="" contains="" />
|
||||
</replaceConfiguration>
|
||||
<replaceConfiguration name="Use IdeaVim method instead of the fixture" uuid="0f74da52-7360-33ae-9b40-d771aa128de6" text="$fixture$.$check$($fileName$, $text$)" recursive="false" caseInsensitive="false" type="Kotlin" pattern_context="default" reformatAccordingToStyle="true" shortenFQN="false" replacement="configureByText($text$)">
|
||||
<constraint name="__context__" within="" contains="" />
|
||||
<constraint name="fixture" regexp="myFixture" nameOfExprType="CodeInsightTestFixture" within="" contains="" />
|
||||
<constraint name="check" regexp="configureByText" within="" contains="" />
|
||||
<constraint name="text" within="" contains="" />
|
||||
<constraint name="fileName" within="" contains="" />
|
||||
</replaceConfiguration>
|
||||
<replaceConfiguration name="Use IdeaVim method instead of the fixture" uuid="0f74da52-7360-33ae-9b40-d771aa128de6" text="$fixture$.$check$($data$)" recursive="false" caseInsensitive="false" type="JAVA" pattern_context="default" reformatAccordingToStyle="true" shortenFQN="true" replacement="assertState($data$)">
|
||||
<constraint name="__context__" within="" contains="" />
|
||||
<constraint name="fixture" regexp="myFixture" within="" contains="" />
|
||||
<constraint name="check" regexp="checkResult" within="" contains="" />
|
||||
<constraint name="data" within="" contains="" />
|
||||
</replaceConfiguration>
|
||||
<replaceConfiguration name="Use IdeaVim method instead of the fixture" uuid="0f74da52-7360-33ae-9b40-d771aa128de6" text="$fixture$.$configure$($first$, $second$)" recursive="false" caseInsensitive="false" type="JAVA" pattern_context="default" reformatAccordingToStyle="true" shortenFQN="true" replacement="configureByText($second$)">
|
||||
<constraint name="__context__" within="" contains="" />
|
||||
<constraint name="fixture" regexp="myFixture" within="" contains="" />
|
||||
<constraint name="configure" regexp="configureByText" within="" contains="" />
|
||||
<constraint name="first" within="" contains="" />
|
||||
<constraint name="second" within="" contains="" />
|
||||
</replaceConfiguration>
|
||||
</inspection_tool>
|
||||
<inspection_tool class="UnstableApiUsage" enabled="false" level="WARNING" enabled_by_default="false" />
|
||||
</profile>
|
||||
</component>
|
48
.idea/inspectionProfiles/Qodana.xml
generated
Normal file
@@ -0,0 +1,48 @@
|
||||
<component name="InspectionProjectProfileManager">
|
||||
<profile version="1.0">
|
||||
<description>Inspections profile for Qodana</description>
|
||||
<option name="myName" value="Qodana" />
|
||||
<inspection_tool class="BooleanMethodIsAlwaysInverted" enabled="false" level="WARNING" enabled_by_default="false" />
|
||||
<inspection_tool class="CanBeFinal" enabled="false" level="WARNING" enabled_by_default="false">
|
||||
<option name="REPORT_CLASSES" value="false" />
|
||||
<option name="REPORT_METHODS" value="false" />
|
||||
<option name="REPORT_FIELDS" value="true" />
|
||||
</inspection_tool>
|
||||
<inspection_tool class="GrUnresolvedAccess" enabled="false" level="WEAK WARNING" enabled_by_default="false" />
|
||||
<inspection_tool class="HardCodedStringLiteral" enabled="false" level="WARNING" enabled_by_default="false">
|
||||
<scope name="Production" level="WARNING" enabled="false">
|
||||
<option name="ignoreForAssertStatements" value="true" />
|
||||
<option name="ignoreForExceptionConstructors" value="true" />
|
||||
<option name="ignoreForSpecifiedExceptionConstructors" value="" />
|
||||
<option name="ignoreForJUnitAsserts" value="true" />
|
||||
<option name="ignoreForClassReferences" value="true" />
|
||||
<option name="ignoreForPropertyKeyReferences" value="true" />
|
||||
<option name="ignoreForNonAlpha" value="true" />
|
||||
<option name="ignoreAssignedToConstants" value="false" />
|
||||
<option name="ignoreToString" value="true" />
|
||||
<option name="nonNlsCommentPattern" value="NON-NLS" />
|
||||
</scope>
|
||||
<option name="ignoreForAssertStatements" value="true" />
|
||||
<option name="ignoreForExceptionConstructors" value="true" />
|
||||
<option name="ignoreForSpecifiedExceptionConstructors" value="" />
|
||||
<option name="ignoreForJUnitAsserts" value="true" />
|
||||
<option name="ignoreForClassReferences" value="true" />
|
||||
<option name="ignoreForPropertyKeyReferences" value="true" />
|
||||
<option name="ignoreForNonAlpha" value="true" />
|
||||
<option name="ignoreAssignedToConstants" value="false" />
|
||||
<option name="ignoreToString" value="false" />
|
||||
<option name="nonNlsCommentPattern" value="NON-NLS" />
|
||||
</inspection_tool>
|
||||
<inspection_tool class="MissortedModifiers" enabled="true" level="WARNING" enabled_by_default="true">
|
||||
<option name="m_requireAnnotationsFirst" value="true" />
|
||||
</inspection_tool>
|
||||
<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" />
|
||||
<option name="processLiterals" value="true" />
|
||||
<option name="processComments" value="true" />
|
||||
</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" />
|
||||
</profile>
|
||||
</component>
|
25
.idea/runConfigurations/IdeaVim_full_verification.xml
generated
Normal file
@@ -0,0 +1,25 @@
|
||||
<component name="ProjectRunConfigurationManager">
|
||||
<configuration default="false" name="IdeaVim full verification" type="GradleRunConfiguration" factoryName="Gradle">
|
||||
<log_file alias="idea.log" path="$PROJECT_DIR$/build/idea-sandbox/system/log/idea.log" />
|
||||
<ExternalSystemSettings>
|
||||
<option name="executionName" />
|
||||
<option name="externalProjectPath" value="$PROJECT_DIR$" />
|
||||
<option name="externalSystemIdString" value="GRADLE" />
|
||||
<option name="scriptParameters" value="" />
|
||||
<option name="taskDescriptions">
|
||||
<list />
|
||||
</option>
|
||||
<option name="taskNames">
|
||||
<list>
|
||||
<option value="check" />
|
||||
<option value="runPluginVerifier" />
|
||||
</list>
|
||||
</option>
|
||||
<option name="vmOptions" value="" />
|
||||
</ExternalSystemSettings>
|
||||
<ExternalSystemDebugServerProcess>true</ExternalSystemDebugServerProcess>
|
||||
<ExternalSystemReattachDebugProcess>true</ExternalSystemReattachDebugProcess>
|
||||
<DebugAllEnabled>false</DebugAllEnabled>
|
||||
<method v="2" />
|
||||
</configuration>
|
||||
</component>
|
24
.idea/runConfigurations/IdeaVim_tests.xml
generated
Normal file
@@ -0,0 +1,24 @@
|
||||
<component name="ProjectRunConfigurationManager">
|
||||
<configuration default="false" name="IdeaVim tests" type="GradleRunConfiguration" factoryName="Gradle">
|
||||
<log_file alias="idea.log" path="$PROJECT_DIR$/build/idea-sandbox/system/log/idea.log" />
|
||||
<ExternalSystemSettings>
|
||||
<option name="executionName" />
|
||||
<option name="externalProjectPath" value="$PROJECT_DIR$" />
|
||||
<option name="externalSystemIdString" value="GRADLE" />
|
||||
<option name="scriptParameters" value="" />
|
||||
<option name="taskDescriptions">
|
||||
<list />
|
||||
</option>
|
||||
<option name="taskNames">
|
||||
<list>
|
||||
<option value="test" />
|
||||
</list>
|
||||
</option>
|
||||
<option name="vmOptions" value="" />
|
||||
</ExternalSystemSettings>
|
||||
<ExternalSystemDebugServerProcess>true</ExternalSystemDebugServerProcess>
|
||||
<ExternalSystemReattachDebugProcess>true</ExternalSystemReattachDebugProcess>
|
||||
<DebugAllEnabled>false</DebugAllEnabled>
|
||||
<method v="2" />
|
||||
</configuration>
|
||||
</component>
|
24
.idea/runConfigurations/Start_IJ_with_IdeaVim.xml
generated
Normal file
@@ -0,0 +1,24 @@
|
||||
<component name="ProjectRunConfigurationManager">
|
||||
<configuration default="false" name="Start IJ with IdeaVim" type="GradleRunConfiguration" factoryName="Gradle">
|
||||
<log_file alias="idea.log" path="$PROJECT_DIR$/build/idea-sandbox/system/log/idea.log" />
|
||||
<ExternalSystemSettings>
|
||||
<option name="executionName" />
|
||||
<option name="externalProjectPath" value="$PROJECT_DIR$" />
|
||||
<option name="externalSystemIdString" value="GRADLE" />
|
||||
<option name="scriptParameters" value="" />
|
||||
<option name="taskDescriptions">
|
||||
<list />
|
||||
</option>
|
||||
<option name="taskNames">
|
||||
<list>
|
||||
<option value="runIde" />
|
||||
</list>
|
||||
</option>
|
||||
<option name="vmOptions" value="" />
|
||||
</ExternalSystemSettings>
|
||||
<ExternalSystemDebugServerProcess>true</ExternalSystemDebugServerProcess>
|
||||
<ExternalSystemReattachDebugProcess>true</ExternalSystemReattachDebugProcess>
|
||||
<DebugAllEnabled>false</DebugAllEnabled>
|
||||
<method v="2" />
|
||||
</configuration>
|
||||
</component>
|
3
.idea/scopes/Copyright.xml
generated
Normal file
@@ -0,0 +1,3 @@
|
||||
<component name="DependencyValidationManager">
|
||||
<scope name="Copyright" pattern="(file[IdeaVIM.main]:*/||file[IdeaVIM.test]:*/)&&!file[IdeaVIM.main]:resources//*" />
|
||||
</component>
|
19
.teamcity/_Self/Constants.kt
vendored
Normal file
@@ -0,0 +1,19 @@
|
||||
package _Self
|
||||
|
||||
object Constants {
|
||||
const val DEFAULT_CHANNEL = "default"
|
||||
const val EAP_CHANNEL = "eap"
|
||||
const val DEV_CHANNEL = "Dev"
|
||||
|
||||
const val VERSION = "1.10.3"
|
||||
const val DEV_VERSION = "1.11.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 = "2021.3"
|
||||
const val RELEASE_DEV = "LATEST-EAP-SNAPSHOT"
|
||||
const val RELEASE_EAP = "LATEST-EAP-SNAPSHOT"
|
||||
}
|
91
.teamcity/_Self/Project.kt
vendored
Normal file
@@ -0,0 +1,91 @@
|
||||
package _Self
|
||||
|
||||
import _Self.buildTypes.*
|
||||
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_Release
|
||||
import _Self.vcsRoots.GitHubPullRequest
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.Project
|
||||
|
||||
object Project : Project({
|
||||
description = "Vim emulation plugin for the IntelliJ platform products"
|
||||
|
||||
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_Release)
|
||||
vcsRoot(GitHubPullRequest)
|
||||
|
||||
// Builds
|
||||
buildType(TestsForIntelliJ20213)
|
||||
buildType(TestsForIntelliJEAP)
|
||||
|
||||
buildType(PropertyBased)
|
||||
buildType(LongRunning)
|
||||
|
||||
buildType(Nvim)
|
||||
buildType(PluginVerifier)
|
||||
|
||||
buildType(Qodana)
|
||||
|
||||
// Unknown staff generated by TeamCity
|
||||
features {
|
||||
feature {
|
||||
type = "CloudImage"
|
||||
id = "PROJECT_EXT_768"
|
||||
param("agent_pool_id", "41")
|
||||
param("amazon-id", "ami-0d1a6a32faa92923e")
|
||||
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")
|
||||
}
|
||||
}
|
||||
})
|
58
.teamcity/_Self/buildTypes/ActiveTests.kt
vendored
Normal file
@@ -0,0 +1,58 @@
|
||||
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.DslContext
|
||||
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 ActiveTests(buildName: String, ijVersion: String) : BuildType({
|
||||
name = buildName
|
||||
params {
|
||||
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
|
||||
param("env.ORG_GRADLE_PROJECT_ideaVersion", ijVersion)
|
||||
param("env.ORG_GRADLE_PROJECT_instrumentPluginCode", "false")
|
||||
}
|
||||
|
||||
vcs {
|
||||
root(DslContext.settingsRoot)
|
||||
|
||||
checkoutMode = CheckoutMode.AUTO
|
||||
}
|
||||
|
||||
steps {
|
||||
gradle {
|
||||
tasks = "clean check -x ktlintMainSourceSetCheck -x ktlintTestSourceSetCheck"
|
||||
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 TestsForIntelliJEAP : ActiveTests("Tests for IntelliJ Latest EAP", "LATEST-EAP-SNAPSHOT")
|
||||
object TestsForIntelliJ20213 : ActiveTests("Tests for IntelliJ 2021.3", "2021.3.2")
|
77
.teamcity/_Self/buildTypes/GithubTests.kt
vendored
Normal file
@@ -0,0 +1,77 @@
|
||||
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")
|
||||
}
|
||||
})
|
42
.teamcity/_Self/buildTypes/LongRunning.kt
vendored
Normal file
@@ -0,0 +1,42 @@
|
||||
package _Self.buildTypes
|
||||
|
||||
import _Self.Constants.LONG_RUNNING_TESTS
|
||||
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.buildSteps.gradle
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
|
||||
|
||||
object LongRunning : BuildType({
|
||||
name = "Long running tests"
|
||||
params {
|
||||
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
|
||||
param("env.ORG_GRADLE_PROJECT_ideaVersion", LONG_RUNNING_TESTS)
|
||||
param("env.ORG_GRADLE_PROJECT_instrumentPluginCode", "false")
|
||||
}
|
||||
|
||||
vcs {
|
||||
root(DslContext.settingsRoot)
|
||||
|
||||
checkoutMode = CheckoutMode.AUTO
|
||||
}
|
||||
|
||||
steps {
|
||||
gradle {
|
||||
tasks = "clean testLongRunning"
|
||||
buildFile = ""
|
||||
enableStacktrace = true
|
||||
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
|
||||
}
|
||||
}
|
||||
|
||||
triggers {
|
||||
vcs {
|
||||
branchFilter = ""
|
||||
}
|
||||
}
|
||||
|
||||
requirements {
|
||||
noLessThanVer("teamcity.agent.jvm.version", "1.8")
|
||||
}
|
||||
})
|
69
.teamcity/_Self/buildTypes/Nvim.kt
vendored
Normal file
@@ -0,0 +1,69 @@
|
||||
package _Self.buildTypes
|
||||
|
||||
import _Self.Constants.NVIM_TESTS
|
||||
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.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.vcs
|
||||
|
||||
object Nvim : BuildType({
|
||||
name = "Tests with nvim"
|
||||
description = "Running tests with nvim integration"
|
||||
|
||||
params {
|
||||
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
|
||||
param("env.ORG_GRADLE_PROJECT_ideaVersion", NVIM_TESTS)
|
||||
param("env.ORG_GRADLE_PROJECT_instrumentPluginCode", "false")
|
||||
param("env.ideavim.nvim.path", "./nvim-linux64/bin/nvim")
|
||||
}
|
||||
|
||||
vcs {
|
||||
root(DslContext.settingsRoot)
|
||||
|
||||
checkoutMode = CheckoutMode.AUTO
|
||||
}
|
||||
|
||||
steps {
|
||||
script {
|
||||
name = "Set up NeoVim"
|
||||
scriptContent = """
|
||||
wget https://github.com/neovim/neovim/releases/download/v0.4.4/nvim-linux64.tar.gz
|
||||
tar xzf nvim-linux64.tar.gz
|
||||
cd nvim-linux64/bin
|
||||
chmod +x nvim
|
||||
""".trimIndent()
|
||||
}
|
||||
gradle {
|
||||
tasks = "clean testWithNeovim"
|
||||
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()
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
40
.teamcity/_Self/buildTypes/PluginVerifier.kt
vendored
Normal file
@@ -0,0 +1,40 @@
|
||||
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.DslContext
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
|
||||
|
||||
object PluginVerifier : BuildType({
|
||||
name = "Plugin verification"
|
||||
params {
|
||||
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
|
||||
param("env.ORG_GRADLE_PROJECT_instrumentPluginCode", "false")
|
||||
}
|
||||
|
||||
vcs {
|
||||
root(DslContext.settingsRoot)
|
||||
|
||||
checkoutMode = CheckoutMode.AUTO
|
||||
}
|
||||
|
||||
steps {
|
||||
gradle {
|
||||
tasks = "clean runPluginVerifier"
|
||||
buildFile = ""
|
||||
enableStacktrace = true
|
||||
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
|
||||
}
|
||||
}
|
||||
|
||||
triggers {
|
||||
vcs {
|
||||
branchFilter = ""
|
||||
}
|
||||
}
|
||||
|
||||
requirements {
|
||||
noLessThanVer("teamcity.agent.jvm.version", "1.8")
|
||||
}
|
||||
})
|
42
.teamcity/_Self/buildTypes/PropertyBased.kt
vendored
Normal file
@@ -0,0 +1,42 @@
|
||||
package _Self.buildTypes
|
||||
|
||||
import _Self.Constants.PROPERTY_TESTS
|
||||
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.buildSteps.gradle
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
|
||||
|
||||
object PropertyBased : BuildType({
|
||||
name = "Property based tests"
|
||||
params {
|
||||
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
|
||||
param("env.ORG_GRADLE_PROJECT_ideaVersion", PROPERTY_TESTS)
|
||||
param("env.ORG_GRADLE_PROJECT_instrumentPluginCode", "false")
|
||||
}
|
||||
|
||||
vcs {
|
||||
root(DslContext.settingsRoot)
|
||||
|
||||
checkoutMode = CheckoutMode.AUTO
|
||||
}
|
||||
|
||||
steps {
|
||||
gradle {
|
||||
tasks = "clean testPropertyBased"
|
||||
buildFile = ""
|
||||
enableStacktrace = true
|
||||
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
|
||||
}
|
||||
}
|
||||
|
||||
triggers {
|
||||
vcs {
|
||||
branchFilter = ""
|
||||
}
|
||||
}
|
||||
|
||||
requirements {
|
||||
noLessThanVer("teamcity.agent.jvm.version", "1.8")
|
||||
}
|
||||
})
|
80
.teamcity/_Self/buildTypes/Qodana.kt
vendored
Normal file
@@ -0,0 +1,80 @@
|
||||
package _Self.buildTypes
|
||||
|
||||
import _Self.Constants.QODANA_TESTS
|
||||
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.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({
|
||||
name = "Qodana checks"
|
||||
params {
|
||||
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
|
||||
param("env.ORG_GRADLE_PROJECT_ideaVersion", QODANA_TESTS)
|
||||
param("env.ORG_GRADLE_PROJECT_instrumentPluginCode", "false")
|
||||
}
|
||||
|
||||
vcs {
|
||||
root(DslContext.settingsRoot)
|
||||
|
||||
checkoutMode = CheckoutMode.AUTO
|
||||
}
|
||||
|
||||
steps {
|
||||
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", "")
|
||||
}
|
||||
}
|
||||
|
||||
triggers {
|
||||
vcs {
|
||||
enabled = false
|
||||
branchFilter = ""
|
||||
}
|
||||
schedule {
|
||||
schedulingPolicy = weekly {
|
||||
dayOfWeek = ScheduleTrigger.DAY.Tuesday
|
||||
}
|
||||
branchFilter = ""
|
||||
triggerBuild = always()
|
||||
}
|
||||
}
|
||||
|
||||
failureConditions {
|
||||
failOnMetricChange {
|
||||
threshold = 0
|
||||
units = BuildFailureOnMetric.MetricUnit.DEFAULT_UNIT
|
||||
comparison = BuildFailureOnMetric.MetricComparison.MORE
|
||||
compareTo = value()
|
||||
metric = BuildFailureOnMetric.MetricType.TEST_FAILED_COUNT
|
||||
param("metricKey", "QodanaProblemsTotal")
|
||||
}
|
||||
}
|
||||
|
||||
requirements {
|
||||
noLessThanVer("teamcity.agent.jvm.version", "1.8")
|
||||
}
|
||||
})
|
76
.teamcity/_Self/buildTypes/Release.kt
vendored
Normal file
@@ -0,0 +1,76 @@
|
||||
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()
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
69
.teamcity/_Self/buildTypes/ReleaseDev.kt
vendored
Normal file
@@ -0,0 +1,69 @@
|
||||
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 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.failureConditions.BuildFailureOnMetric
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.failOnMetricChange
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.schedule
|
||||
|
||||
object ReleaseDev : BuildType({
|
||||
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)
|
||||
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", DEV_CHANNEL)
|
||||
}
|
||||
|
||||
vcs {
|
||||
root(DslContext.settingsRoot)
|
||||
|
||||
checkoutMode = CheckoutMode.AUTO
|
||||
}
|
||||
|
||||
steps {
|
||||
gradle {
|
||||
tasks = "clean publishPlugin"
|
||||
buildFile = ""
|
||||
enableStacktrace = true
|
||||
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
|
||||
}
|
||||
}
|
||||
|
||||
triggers {
|
||||
schedule {
|
||||
enabled = true
|
||||
schedulingPolicy = daily {
|
||||
hour = 2
|
||||
}
|
||||
branchFilter = ""
|
||||
}
|
||||
}
|
||||
|
||||
failureConditions {
|
||||
failOnMetricChange {
|
||||
metric = BuildFailureOnMetric.MetricType.ARTIFACT_SIZE
|
||||
threshold = 5
|
||||
units = BuildFailureOnMetric.MetricUnit.PERCENTS
|
||||
comparison = BuildFailureOnMetric.MetricComparison.DIFF
|
||||
compareTo = build {
|
||||
buildRule = lastSuccessful()
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
73
.teamcity/_Self/buildTypes/ReleaseEap.kt
vendored
Normal file
@@ -0,0 +1,73 @@
|
||||
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 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 ReleaseEap : BuildType({
|
||||
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)
|
||||
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", EAP_CHANNEL)
|
||||
password(
|
||||
"env.ORG_GRADLE_PROJECT_slackUrl",
|
||||
"credentialsJSON:a8ab8150-e6f8-4eaf-987c-bcd65eac50b5",
|
||||
label = "Slack Token"
|
||||
)
|
||||
}
|
||||
|
||||
vcs {
|
||||
root(DslContext.settingsRoot)
|
||||
|
||||
checkoutMode = CheckoutMode.AUTO
|
||||
}
|
||||
|
||||
steps {
|
||||
gradle {
|
||||
tasks = "clean publishPlugin"
|
||||
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()
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
58
.teamcity/_Self/buildTypes/TestsForIntelliJ20183.kt
vendored
Normal file
@@ -0,0 +1,58 @@
|
||||
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()
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
61
.teamcity/_Self/buildTypes/TestsForIntelliJ_181-182.kt
vendored
Normal file
@@ -0,0 +1,61 @@
|
||||
@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")
|
63
.teamcity/_Self/buildTypes/TestsForIntelliJ_191-193.kt
vendored
Normal file
@@ -0,0 +1,63 @@
|
||||
@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")
|
60
.teamcity/_Self/buildTypes/TestsForIntelliJ_201.kt
vendored
Normal file
@@ -0,0 +1,60 @@
|
||||
@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")
|
60
.teamcity/_Self/buildTypes/TestsForIntelliJ_202.kt
vendored
Normal file
@@ -0,0 +1,60 @@
|
||||
@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")
|
64
.teamcity/_Self/buildTypes/TestsForIntelliJ_203-212.kt
vendored
Normal file
@@ -0,0 +1,64 @@
|
||||
@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")
|
11
.teamcity/_Self/subprojects/GitHub.kt
vendored
Normal file
@@ -0,0 +1,11 @@
|
||||
package _Self.subprojects
|
||||
|
||||
import _Self.buildTypes.GithubTests
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.Project
|
||||
|
||||
object GitHub : Project({
|
||||
name = "Pull Requests checks"
|
||||
description = "Automatic checking of GitHub Pull Requests"
|
||||
|
||||
buildType(GithubTests)
|
||||
})
|
31
.teamcity/_Self/subprojects/OldTests.kt
vendored
Normal file
@@ -0,0 +1,31 @@
|
||||
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 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)
|
||||
})
|
15
.teamcity/_Self/subprojects/Releases.kt
vendored
Normal file
@@ -0,0 +1,15 @@
|
||||
package _Self.subprojects
|
||||
|
||||
import _Self.buildTypes.Release
|
||||
import _Self.buildTypes.ReleaseDev
|
||||
import _Self.buildTypes.ReleaseEap
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.Project
|
||||
|
||||
object Releases : Project({
|
||||
name = "IdeaVim releases"
|
||||
description = "Stable and EAP releases for IdeaVim"
|
||||
|
||||
buildType(Release)
|
||||
buildType(ReleaseEap)
|
||||
buildType(ReleaseDev)
|
||||
})
|
12
.teamcity/_Self/vcsRoots/Branch_181.kt
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
@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
Normal file
@@ -0,0 +1,12 @@
|
||||
@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
Normal file
@@ -0,0 +1,12 @@
|
||||
@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
Normal file
@@ -0,0 +1,12 @@
|
||||
@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
Normal file
@@ -0,0 +1,12 @@
|
||||
@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
Normal file
@@ -0,0 +1,12 @@
|
||||
@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
|
||||
})
|
11
.teamcity/_Self/vcsRoots/Branch_Release.kt
vendored
Normal file
@@ -0,0 +1,11 @@
|
||||
@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"
|
||||
})
|
12
.teamcity/_Self/vcsRoots/GitHubPullRequest.kt
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
package _Self.vcsRoots
|
||||
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.vcs.GitVcsRoot
|
||||
|
||||
object GitHubPullRequest : GitVcsRoot({
|
||||
name = "IdeaVim Pull Requests"
|
||||
url = "git@github.com:JetBrains/ideavim.git"
|
||||
branchSpec = "+:refs/(pull/*)/head"
|
||||
authMethod = uploadedKey {
|
||||
uploadedKey = "Alex Plate TeamCity key"
|
||||
}
|
||||
})
|
25
.teamcity/patches/buildTypes/Nvim.kts
vendored
Normal file
@@ -0,0 +1,25 @@
|
||||
package patches.buildTypes
|
||||
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.*
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.VcsTrigger
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.ui.*
|
||||
|
||||
/*
|
||||
This patch script was generated by TeamCity on settings change in UI.
|
||||
To apply the patch, change the buildType with id = 'Nvim'
|
||||
accordingly, and delete the patch script.
|
||||
*/
|
||||
changeBuildType(RelativeId("Nvim")) {
|
||||
triggers {
|
||||
val trigger1 = find<VcsTrigger> {
|
||||
vcs {
|
||||
branchFilter = ""
|
||||
}
|
||||
}
|
||||
trigger1.apply {
|
||||
enabled = false
|
||||
|
||||
}
|
||||
}
|
||||
}
|
25
.teamcity/patches/buildTypes/PluginVerifier.kts
vendored
Normal file
@@ -0,0 +1,25 @@
|
||||
package patches.buildTypes
|
||||
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.*
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.VcsTrigger
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.ui.*
|
||||
|
||||
/*
|
||||
This patch script was generated by TeamCity on settings change in UI.
|
||||
To apply the patch, change the buildType with id = 'PluginVerifier'
|
||||
accordingly, and delete the patch script.
|
||||
*/
|
||||
changeBuildType(RelativeId("PluginVerifier")) {
|
||||
triggers {
|
||||
val trigger1 = find<VcsTrigger> {
|
||||
vcs {
|
||||
branchFilter = ""
|
||||
}
|
||||
}
|
||||
trigger1.apply {
|
||||
enabled = false
|
||||
|
||||
}
|
||||
}
|
||||
}
|
60
.teamcity/patches/buildTypes/Qodana.kts
vendored
Normal file
@@ -0,0 +1,60 @@
|
||||
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.qodana
|
||||
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.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"
|
||||
reportAsTests = true
|
||||
inspectionProfile = customProfile {
|
||||
path = ".idea/inspectionProfiles/Qodana.xml"
|
||||
}
|
||||
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("fail-build-on-errors", "")
|
||||
param("licenseaudit-enable", "true")
|
||||
param("namesAndTagsCustom", "repo.labs.intellij.net/static-analyser/qodana")
|
||||
param("report-version", "")
|
||||
param("yaml-configuration", "")
|
||||
}
|
||||
}
|
||||
steps {
|
||||
update<Qodana>(0) {
|
||||
clearConditions()
|
||||
linter = jvm {
|
||||
version = Qodana.JVMVersion.LATEST
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
triggers {
|
||||
val trigger1 = find<ScheduleTrigger> {
|
||||
schedule {
|
||||
schedulingPolicy = weekly {
|
||||
dayOfWeek = ScheduleTrigger.DAY.Tuesday
|
||||
}
|
||||
branchFilter = ""
|
||||
triggerBuild = always()
|
||||
}
|
||||
}
|
||||
trigger1.apply {
|
||||
enabled = false
|
||||
|
||||
}
|
||||
}
|
||||
}
|
104
.teamcity/pom.xml
vendored
Normal file
@@ -0,0 +1,104 @@
|
||||
<?xml version="1.0"?>
|
||||
<project>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<name>IdeaVim Config DSL Script</name>
|
||||
<groupId>IdeaVim</groupId>
|
||||
<artifactId>IdeaVim_dsl</artifactId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
|
||||
<parent>
|
||||
<groupId>org.jetbrains.teamcity</groupId>
|
||||
<artifactId>configs-dsl-kotlin-parent</artifactId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<repositories>
|
||||
<repository>
|
||||
<id>jetbrains-all</id>
|
||||
<url>https://download.jetbrains.com/teamcity-repository</url>
|
||||
<snapshots>
|
||||
<enabled>true</enabled>
|
||||
</snapshots>
|
||||
</repository>
|
||||
<repository>
|
||||
<id>teamcity-server</id>
|
||||
<url>https://teamcity.jetbrains.com/app/dsl-plugins-repository</url>
|
||||
<snapshots>
|
||||
<enabled>true</enabled>
|
||||
</snapshots>
|
||||
</repository>
|
||||
</repositories>
|
||||
|
||||
<pluginRepositories>
|
||||
<pluginRepository>
|
||||
<id>JetBrains</id>
|
||||
<url>https://download.jetbrains.com/teamcity-repository</url>
|
||||
</pluginRepository>
|
||||
</pluginRepositories>
|
||||
|
||||
<build>
|
||||
<sourceDirectory>${basedir}</sourceDirectory>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<artifactId>kotlin-maven-plugin</artifactId>
|
||||
<groupId>org.jetbrains.kotlin</groupId>
|
||||
<version>${kotlin.version}</version>
|
||||
|
||||
<configuration/>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>compile</id>
|
||||
<phase>process-sources</phase>
|
||||
<goals>
|
||||
<goal>compile</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>test-compile</id>
|
||||
<phase>process-test-sources</phase>
|
||||
<goals>
|
||||
<goal>test-compile</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.jetbrains.teamcity</groupId>
|
||||
<artifactId>teamcity-configs-maven-plugin</artifactId>
|
||||
<version>${teamcity.dsl.version}</version>
|
||||
<configuration>
|
||||
<format>kotlin</format>
|
||||
<dstDir>target/generated-configs</dstDir>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.jetbrains.teamcity</groupId>
|
||||
<artifactId>configs-dsl-kotlin</artifactId>
|
||||
<version>${teamcity.dsl.version}</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.jetbrains.teamcity</groupId>
|
||||
<artifactId>configs-dsl-kotlin-plugins</artifactId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
<type>pom</type>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.jetbrains.kotlin</groupId>
|
||||
<artifactId>kotlin-stdlib-jdk8</artifactId>
|
||||
<version>${kotlin.version}</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.jetbrains.kotlin</groupId>
|
||||
<artifactId>kotlin-script-runtime</artifactId>
|
||||
<version>${kotlin.version}</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
33
.teamcity/settings.kts
vendored
Normal file
@@ -0,0 +1,33 @@
|
||||
import jetbrains.buildServer.configs.kotlin.v2019_2.*
|
||||
|
||||
/*
|
||||
The settings script is an entry point for defining a single
|
||||
TeamCity project. TeamCity looks for the 'settings.kts' file in a
|
||||
project directory and runs it if it's found, so the script name
|
||||
shouldn't be changed and its package should be the same as the
|
||||
project's id.
|
||||
|
||||
The script should contain a single call to the project() function
|
||||
with a Project instance or an init function as an argument.
|
||||
|
||||
VcsRoots, BuildTypes, and Templates of this project must be
|
||||
registered inside project using the vcsRoot(), buildType(), and
|
||||
template() methods respectively.
|
||||
|
||||
Subprojects can be defined either in their own settings.kts or by
|
||||
calling the subProjects() method in this project.
|
||||
|
||||
To debug settings scripts in command-line, run the
|
||||
|
||||
mvnDebug org.jetbrains.teamcity:teamcity-configs-maven-plugin:generate
|
||||
|
||||
command and attach your debugger to the port 8000.
|
||||
|
||||
To debug in IntelliJ Idea, open the 'Maven Projects' tool window (View ->
|
||||
Tool Windows -> Maven Projects), find the generate task
|
||||
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)
|
147
AUTHORS.md
@@ -10,10 +10,6 @@ The original author:
|
||||
|
||||
The current maintainers:
|
||||
|
||||
* [![icon][mail]](mailto:andrey.vlasovskikh@gmail.com)
|
||||
[![icon][github]](https://github.com/vlasovskikh)
|
||||
|
||||
Andrey Vlasovskikh
|
||||
* [![icon][mail]](mailto:alexpl292@gmail.com)
|
||||
[![icon][github]](https://github.com/AlexPl292)
|
||||
|
||||
@@ -25,8 +21,13 @@ Previous maintainers:
|
||||
[![icon][github]](https://github.com/olegs)
|
||||
|
||||
Oleg Shpynov
|
||||
* [![icon][mail]](mailto:andrey.vlasovskikh@gmail.com)
|
||||
[![icon][github]](https://github.com/vlasovskikh)
|
||||
|
||||
Andrey Vlasovskikh
|
||||
|
||||
Contributors:
|
||||
|
||||
* [![icon][mail]](mailto:yole@jetbrains.com)
|
||||
[![icon][github]](https://github.com/yole)
|
||||
|
||||
@@ -283,13 +284,145 @@ 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)
|
||||
|
||||
runforprogram
|
||||
* [![icon][mail]](mailto:valery.isaev@jetbrains.com)
|
||||
[![icon][github]](https://github.com/valis)
|
||||
|
||||
valis
|
||||
* [![icon][mail]](mailto:pmikulski@voleon.com)
|
||||
[![icon][github]](https://github.com/pmnoxx)
|
||||
|
||||
Piotr Mikulski
|
||||
* [![icon][mail]](mailto:14farresa@gmail.com)
|
||||
[![icon][github]](https://github.com/adriafarres)
|
||||
|
||||
Adrià Farrés
|
||||
* [![icon][mail]](mailto:patrick.j.elmquist@gmail.com)
|
||||
[![icon][github]](https://github.com/patrick-elmquist)
|
||||
|
||||
Patrick Elmquist
|
||||
* [![icon][mail]](mailto:rieon@rieon.cn)
|
||||
[![icon][github]](https://github.com/rieonke)
|
||||
|
||||
Rieon Ke
|
||||
* [![icon][mail]](mailto:jiirra@gmail.com)
|
||||
[![icon][github]](https://github.com/KostkaBrukowa)
|
||||
|
||||
KostkaBrukowa
|
||||
* [![icon][mail]](mailto:wangyaohuicn@gmail.com)
|
||||
[![icon][github]](https://github.com/yaohui-wyh)
|
||||
|
||||
Yaohui Wang
|
||||
* [![icon][mail]](mailto:iain.ballard@bjss.com)
|
||||
[![icon][github]](https://github.com/i-e-b)
|
||||
|
||||
Iain Ballard
|
||||
* [![icon][mail]](mailto:brandoncc@gmail.com)
|
||||
[![icon][github]](https://github.com/brandoncc)
|
||||
|
||||
Brandon Conway
|
||||
* [![icon][mail]](mailto:ga@anadoxin.org)
|
||||
[![icon][github]](https://github.com/antekone)
|
||||
|
||||
Grzegorz Antoniak
|
||||
* [![icon][mail]](mailto:shaunpatterson@gmail.com)
|
||||
[![icon][github]](https://github.com/shaunpatterson)
|
||||
|
||||
Shaun Patterson
|
||||
* [![icon][mail]](mailto:vladimir.petrenko@jetbrains.com)
|
||||
[![icon][github]](https://github.com/vladimir-petrenko)
|
||||
|
||||
Vladimir Petrenko
|
||||
* [![icon][mail]](mailto:sergey.vorobyov@jetbrains.com)
|
||||
[![icon][github]](https://github.com/DeveloperHacker)
|
||||
|
||||
Sergei Vorobyov
|
||||
* [![icon][mail]](mailto:daya0576@gmail.com)
|
||||
[![icon][github]](https://github.com/daya0576)
|
||||
|
||||
大牙(Henry Zhu)
|
||||
* [![icon][mail]](mailto:mplacek@skilltech.pl)
|
||||
[![icon][github]](https://github.com/MichalPlacek)
|
||||
|
||||
MichalPlacek
|
||||
* [![icon][mail]](mailto:shrikantsharat.k@gmail.com)
|
||||
[![icon][github]](https://github.com/sharat87)
|
||||
|
||||
Shrikant Sharat Kandula
|
||||
* [![icon][mail]](mailto:michal.placek@yandex.com)
|
||||
[![icon][github]](https://github.com/MichalPlacek)
|
||||
|
||||
Michal Placek
|
||||
* [![icon][mail]](mailto:eugene.nizienko@jetbrains.com)
|
||||
[![icon][github]](https://github.com/nizienko)
|
||||
|
||||
eugene nizienko
|
||||
* [![icon][mail]](mailto:x@lipp.fi)
|
||||
[![icon][github]](https://github.com/lippfi)
|
||||
|
||||
Filipp Vakhitov
|
||||
* [![icon][mail]](mailto:yzeiri.1@osu.edu)
|
||||
[![icon][github]](https://github.com/myzeiri)
|
||||
|
||||
Martin Yzeiri
|
||||
* [![icon][mail]](mailto:jeyko1@gmail.com)
|
||||
[![icon][github]](https://github.com/wrightwriter)
|
||||
|
||||
Petar Guglev
|
||||
* [![icon][mail]](mailto:contact@chylex.com)
|
||||
[![icon][github]](https://github.com/chylex)
|
||||
|
||||
chylex
|
||||
* [![icon][mail]](mailto:daniel.egger@gmail.com)
|
||||
[![icon][github]](https://github.com/DanEEStar)
|
||||
|
||||
DanEEStar
|
||||
* [![icon][mail]](mailto:ksrbkevinsuen@gmail.com)
|
||||
[![icon][github]](https://github.com/ksrb)
|
||||
|
||||
Kevin Suen
|
||||
* [![icon][mail]](mailto:michael.schertenleib@inftec.ch)
|
||||
[![icon][github]](https://github.com/cravay)
|
||||
|
||||
Michael Schertenleib
|
||||
* [![icon][mail]](mailto:piotr@near.org)
|
||||
[![icon][github]](https://github.com/pmnoxx)
|
||||
|
||||
Piotr Mikulski
|
||||
* [![icon][mail]](mailto:lonrevip@gmail.com)
|
||||
[![icon][github]](https://github.com/lonre)
|
||||
|
||||
Lonre Wang
|
||||
* [![icon][mail]](mailto:AlexPl292@gmail.com)
|
||||
[![icon][github]](https://github.com/AlexPl292)
|
||||
|
||||
Alex Pláte
|
||||
* [![icon][mail]](mailto:david@dadon.fr)
|
||||
[![icon][github]](https://github.com/ddadon10)
|
||||
|
||||
David Dadon
|
||||
* [![icon][mail]](mailto:hollandpirates@gmail.com)
|
||||
[![icon][github]](https://github.com/PHPirates)
|
||||
|
||||
Thomas Schouten
|
||||
* [![icon][mail]](mailto:sr@mail25.de)
|
||||
[![icon][github]](https://github.com/Vvalter)
|
||||
|
||||
Simon Rainer
|
||||
|
||||
If you are a contributor and your name is not listed here, feel free to
|
||||
contact the maintainers.
|
||||
|
||||
<a href="https://icons8.com">Icons by Icons8</a>
|
||||
|
||||
[mail]: resources/icons/mail.png
|
||||
[github]: resources/icons/github.png
|
||||
[mail]: assets/icons/mail.png
|
||||
[github]: assets/icons/github.png
|
||||
|
||||
[github-off]: resources/icons/github-off.png
|
||||
[github-off]: assets/icons/github-off.png
|
||||
|
592
CHANGES.md
@@ -3,12 +3,19 @@ The Changelog
|
||||
|
||||
History of changes in IdeaVim for the IntelliJ platform.
|
||||
|
||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
Before version 1.7.0:
|
||||
Stable versions use X.Y format.
|
||||
EAP ([Early Access Program](https://jb.gg/ideavim-eap)) versions use X.Y.Z format.
|
||||
|
||||
|
||||
Get an Early Access
|
||||
-------------------
|
||||
|
||||
Would you like to try new features and fixes? Join the Early Access Program and
|
||||
receive EAP builds as updates! Use the `EAP` option in the status bar or
|
||||
receive EAP builds as updates! Use the `Early Access Program` option in the status bar or
|
||||
add this URL to "Settings | Plugins | Manage Plugin Repositories":
|
||||
`https://plugins.jetbrains.com/plugins/eap/ideavim`
|
||||
|
||||
@@ -16,41 +23,475 @@ It is important to distinguish EAP from traditional pre-release software.
|
||||
Please note that the quality of EAP versions may at times be way below even
|
||||
usual beta standards.
|
||||
|
||||
To Be Released
|
||||
--------------
|
||||
## To Be Released
|
||||
|
||||
_Available since 0.55.1 EAP:_
|
||||
### Features:
|
||||
* Add `gcu` command for Commentary plugin
|
||||
* Add `:Commentary` command, which works great for commands such as `:%g/fun/Commentary`
|
||||
* Support `gc` – commentary text objects. E.g. `dgc`: delete commented text.
|
||||
* Support `redo-register feature` | [VIM-2643](https://youtrack.jetbrains.com/issue/VIM-2643/Dot-operator-doesn-t-increment-number-register-after-pasting-fro) | [viminfo](http://vimdoc.sourceforge.net/htmldoc/undo.html#redo-register)
|
||||
|
||||
**Fixes:**
|
||||
* [VIM-1284](https://youtrack.jetbrains.com/issue/VIM-1284) Fix mapping of digits
|
||||
* Fix handling of counts on both operator and motion, e.g. `3d2w` deletes 6 words, instead of 32
|
||||
* Allow mapping of `<C-K>` and `<C-V>`/`<C-Q>`
|
||||
* [VIM-1899](https://youtrack.jetbrains.com/issue/VIM-1899) Add argument to `:registers` command
|
||||
* [VIM-1835](https://youtrack.jetbrains.com/issue/VIM-1835) Macros record input keystrokes instead of mapped keystrokes
|
||||
* [VIM-1900](https://youtrack.jetbrains.com/issue/VIM-1900) Ensure non-printable output for `:registers`, `:marks` and `:jumps` is encoded correctly
|
||||
### Changes:
|
||||
* Uses the same mappings as Commentary, so custom bindings for the Vim plugin will work with IdeaVim, too.
|
||||
E.g. `<Plug>Commentary` instead of `<Plug>(CommentMotion)`. Old mappings are maintained for compatibility.
|
||||
* If you open `~/.ideavimrc` in IDE, remove a mapping, and reload the config using the reload button,
|
||||
the mapping will actually be unmapped.
|
||||
|
||||
_Available since 0.55.2 EAP:_
|
||||
### Fixes:
|
||||
* [VIM-2587](https://youtrack.jetbrains.com/issue/VIM-2587) Use ctrl-6 as ctrl-^
|
||||
* [VIM-2590](https://youtrack.jetbrains.com/issue/VIM-2590) Fix caret shape in PyCharm
|
||||
* [VIM-2553](https://youtrack.jetbrains.com/issue/VIM-2553) Substitute consecutive matches
|
||||
* [VIM-1687](https://youtrack.jetbrains.com/issue/VIM-1687) Support count for `gcc`
|
||||
* [VIM-2381](https://youtrack.jetbrains.com/issue/VIM-2381) Fall back to line comment if block comment is not available
|
||||
* [VIM-2589](https://youtrack.jetbrains.com/issue/VIM-2589) Add `gc` text object
|
||||
* [VIM-2604](https://youtrack.jetbrains.com/issue/VIM-2604) Update action execution rules
|
||||
* [VIM-2654](https://youtrack.jetbrains.com/issue/VIM-2654) Add support for `return` without expression
|
||||
* [VIM-2630](https://youtrack.jetbrains.com/issue/VIM-2630/Please-fix-warning-Shall-not-be-called-on-a-template-presentatio) Fix IDE freeze
|
||||
* [VIM-2661](https://youtrack.jetbrains.com/issue/VIM-2661/Spamming-does-not-work) Fix repeating the `@@` command
|
||||
* [VIM-2668](https://youtrack.jetbrains.com/issue/VIM-2668/tabm-or-tabm-with-no-number-does-not-match-vim-behavior) Fix omitted numbers in `tabm` command
|
||||
* [VIM-2595](https://youtrack.jetbrains.com/issue/VIM-2595) Support plugins in macro execution
|
||||
* [VIM-2671](https://youtrack.jetbrains.com/issue/VIM-2671) Fix using plugins from mappings
|
||||
* [VIM-2675](https://youtrack.jetbrains.com/issue/VIM-2675) Fix numbering register in visual mode
|
||||
* [VIM-696](https://youtrack.jetbrains.com/issue/VIM-696/vim-selection-issue-after-undo) Fix selection after undo
|
||||
* [VIM-744](https://youtrack.jetbrains.com/issue/VIM-744/Use-undoredo-with-count-modifier) Add count to undo/redo
|
||||
* [VIM-1862](https://youtrack.jetbrains.com/issue/VIM-1862/Ex-commands-executed-in-keymaps-and-macros-are-added-to-the-command-history) Fix command history
|
||||
|
||||
**Features:**
|
||||
* `argtextobj.vim` plugin emulation ([argtextobj.vim](https://vim.sourceforge.io/scripts/script.php?script_id=2699))
|
||||
* `vim-textobj-entire` plugin emulation ([vim-textobj-entire](https://github.com/kana/vim-textobj-entire))
|
||||
* Support `ls/buffers/files` commands
|
||||
### Merged PRs:
|
||||
* [468](https://github.com/JetBrains/ideavim/pull/468) by [Thomas Schouten](https://github.com/PHPirates): Implement UserDataHolder for EditorDataContext
|
||||
* [483](https://github.com/JetBrains/ideavim/pull/483) by [Simon Rainer](https://github.com/Vvalter): Fix(VIM-2553): Substitute consecutive matches
|
||||
* [488](https://github.com/JetBrains/ideavim/pull/488) by [Martin Yzeiri](https://github.com/myzeiri): Add Matchit support for the C family of languages
|
||||
* [493](https://github.com/JetBrains/ideavim/pull/493) by [Matt Ellis](https://github.com/citizenmatt): Improvements to Commentary extension
|
||||
* [494](https://github.com/JetBrains/ideavim/pull/494) by [Matt Ellis](https://github.com/citizenmatt): Cleanup pre-212 CaretVisualAttributes compatibility code
|
||||
* [504](https://github.com/JetBrains/ideavim/pull/504) by [Matt Ellis](https://github.com/citizenmatt): Minor bug fixes
|
||||
|
||||
**Changes:**
|
||||
## 1.10.0, 2022-02-17
|
||||
|
||||
### Features:
|
||||
* Add register support to let command | [VIM-749](https://youtrack.jetbrains.com/issue/VIM-749), [VIM-1783](https://youtrack.jetbrains.com/issue/VIM-1783)
|
||||
* Add tabmove command | [VIM-1164](https://youtrack.jetbrains.com/issue/VIM-1164)
|
||||
|
||||
### Fixes:
|
||||
* [VIM-2502](https://youtrack.jetbrains.com/issue/VIM-2502) Fix the shape of new carets
|
||||
* [VIM-2499](https://youtrack.jetbrains.com/issue/VIM-2499) Fix mapping to esc
|
||||
* [VIM-2500](https://youtrack.jetbrains.com/issue/VIM-2500) Fix esc for normal mode
|
||||
* [VIM-2523](https://youtrack.jetbrains.com/issue/VIM-2523) `i` command for the folder in the project tree
|
||||
* [VIM-2471](https://youtrack.jetbrains.com/issue/VIM-2471) Multiple [{ and ]} actions
|
||||
* [VIM-2504](https://youtrack.jetbrains.com/issue/VIM-2504) Fix esc with using python notebooks
|
||||
* [VIM-2540](https://youtrack.jetbrains.com/issue/VIM-2540) Fix option listeners
|
||||
* [VIM-2548](https://youtrack.jetbrains.com/issue/VIM-2548) Fix paste
|
||||
* [VIM-2470](https://youtrack.jetbrains.com/issue/VIM-2470) Fix incorrect reset of cursor shape
|
||||
* [VIM-2223](https://youtrack.jetbrains.com/issue/VIM-2223), [VIM-1684](https://youtrack.jetbrains.com/issue/VIM-1684), [VIM-2491](https://youtrack.jetbrains.com/issue/VIM-2491) Fix `gv`
|
||||
|
||||
### Merged PRs:
|
||||
* [441](https://github.com/JetBrains/ideavim/pull/441) by [DanEEStar](https://github.com/DanEEStar): Add Matchit support for Vue.js files
|
||||
* [440](https://github.com/JetBrains/ideavim/pull/440) by [Kevin Suen](https://github.com/ksrb): Add matchit support for handlebars
|
||||
* [448](https://github.com/JetBrains/ideavim/pull/448) by [Michael Schertenleib](https://github.com/cravay): Support custom element names in vim-surround
|
||||
* [435](https://github.com/JetBrains/ideavim/pull/435) by [Piotr Mikulski](https://github.com/pmnoxx): Print stderr when running a command just like vim does
|
||||
* [449](https://github.com/JetBrains/ideavim/pull/449) by [Lonre Wang](https://github.com/lonre): Typo fix
|
||||
* [453](https://github.com/JetBrains/ideavim/pull/453) by [Matt Ellis](https://github.com/citizenmatt): fix(VIM-2470): Fix incorrect reset of cursor shape
|
||||
* [461](https://github.com/JetBrains/ideavim/pull/461) by [David Dadon](https://github.com/ddadon10): Add shortcut to ideajoin example
|
||||
|
||||
## 1.9.0, 2021-12-10
|
||||
|
||||
### Features:
|
||||
* Make IdeaVim compatible with CodeWithMe | [VIM-2332](https://youtrack.jetbrains.com/issue/VIM-2332)
|
||||
* expression register `<C-R>=` | [VIM-521](https://youtrack.jetbrains.com/issue/VIM-521)
|
||||
|
||||
### Fixes:
|
||||
* [VIM-2442](https://youtrack.jetbrains.com/issue/VIM-2442) Fix `!` command
|
||||
* [VIM-2255](https://youtrack.jetbrains.com/issue/VIM-2255) Fix reload icon on windows
|
||||
* [VIM-2199](https://youtrack.jetbrains.com/issue/VIM-2199) Fix autocompletion for AppCode
|
||||
* [VIM-2445](https://youtrack.jetbrains.com/issue/VIM-2445) Fix spaces in range
|
||||
* [VIM-2450](https://youtrack.jetbrains.com/issue/VIM-2450) Fix set command
|
||||
* [VIM-2451](https://youtrack.jetbrains.com/issue/VIM-2451) Fix comments
|
||||
* [VIM-2452](https://youtrack.jetbrains.com/issue/VIM-2452) Fix augroup
|
||||
* [VIM-2453](https://youtrack.jetbrains.com/issue/VIM-2453) Fix split command
|
||||
* [VIM-2397](https://youtrack.jetbrains.com/issue/VIM-2397) Fix dollar motion as an operator
|
||||
* [VIM-2432](https://youtrack.jetbrains.com/issue/VIM-2432) Fix ctrl-d and ctrl-u motions with scrolloff
|
||||
* [VIM-2462](https://youtrack.jetbrains.com/issue/VIM-2462) Reset caret shape when disabling plugin
|
||||
* [VIM-2449](https://youtrack.jetbrains.com/issue/VIM-2449) Fix `I` for one-line block selection
|
||||
* [VIM-2213](https://youtrack.jetbrains.com/issue/VIM-2213) Close VCS change popup on esc
|
||||
* [VIM-2435](https://youtrack.jetbrains.com/issue/VIM-2435) Close diff window on esc
|
||||
* [VIM-2461](https://youtrack.jetbrains.com/issue/VIM-2461) Show action id before action execution
|
||||
* [VIM-2026](https://youtrack.jetbrains.com/issue/VIM-2026) Keep global marks after restart
|
||||
* [VIM-1691](https://youtrack.jetbrains.com/issue/VIM-1691) Fix default path for `!` command
|
||||
* [VIM-2487](https://youtrack.jetbrains.com/issue/VIM-2487)
|
||||
[VIM-2434](https://youtrack.jetbrains.com/issue/VIM-2434)
|
||||
Fix IdeaVim in PyCharm notebooks
|
||||
|
||||
### Merged PRs:
|
||||
* [390](https://github.com/JetBrains/ideavim/pull/390) by [chylex](https://github.com/chylex): [VIM-2255] Missing reload icon in .ideavimrc on Windows
|
||||
* [391](https://github.com/JetBrains/ideavim/pull/391) by [Matt Ellis](https://github.com/citizenmatt): fix(VIM-2432): handle scrolloff with <C-D> and <C-U>
|
||||
* [401](https://github.com/JetBrains/ideavim/pull/401) by [Matt Ellis](https://github.com/citizenmatt): Reset caret shape when disabling plugin
|
||||
* [407](https://github.com/JetBrains/ideavim/pull/407) by [eugene nizienko](https://github.com/nizienko): Video recording for ui tests
|
||||
* [418](https://github.com/JetBrains/ideavim/pull/418) by [chylex](https://github.com/chylex): Fix compile errors in unit tests on Windows
|
||||
|
||||
## 1.8.0, 2021-10-27
|
||||
|
||||
### Features:
|
||||
* Support `matchit.vim` extension for Ruby and XML/HTML [VIM-539](https://youtrack.jetbrains.com/issue/VIM-539) | [matchit.vim](https://github.com/chrisbra/matchit)
|
||||
* IDE-specific configuration [VIM-1573](https://youtrack.jetbrains.com/issue/VIM-1573)
|
||||
* Call command [VIM-2416](https://youtrack.jetbrains.com/issue/VIM-2416)
|
||||
|
||||
### Fixes:
|
||||
* [VIM-2417](https://youtrack.jetbrains.com/issue/VIM-2417) Fix bars in substitute command
|
||||
* [VIM-2425](https://youtrack.jetbrains.com/issue/VIM-2425) Fix reload button
|
||||
* [VIM-2422](https://youtrack.jetbrains.com/issue/VIM-2422) Fix freeze
|
||||
* [VIM-2420](https://youtrack.jetbrains.com/issue/VIM-2420) Fix freeze
|
||||
* [VIM-2359](https://youtrack.jetbrains.com/issue/VIM-2359) Fix selection with VimExchange
|
||||
* [VIM-2426](https://youtrack.jetbrains.com/issue/VIM-2426) Fix marks in commands
|
||||
* [VIM-2438](https://youtrack.jetbrains.com/issue/VIM-2438) Fix marks in commands
|
||||
* [DISCUSSION-386](https://github.com/JetBrains/ideavim/discussions/386) Fixed command with no spaces before argument
|
||||
|
||||
### Merged PRs:
|
||||
* [337](https://github.com/JetBrains/ideavim/pull/337) by [Matt Ellis](https://github.com/citizenmatt): guicursor!
|
||||
* [343](https://github.com/JetBrains/ideavim/pull/343) by [Martin Yzeiri](https://github.com/myzeiri): Emulate matchit.vim
|
||||
* [387](https://github.com/JetBrains/ideavim/pull/387) by [Petar Guglev](https://github.com/wrightwriter): Update README.md link
|
||||
|
||||
## 1.7.2, 2021-09-30
|
||||
|
||||
### Fixes:
|
||||
* [VIM-2405](https://youtrack.jetbrains.com/issue/VIM-2405) ExExceptions during `map <expr>` execution are now displayed in status bar
|
||||
* [VIM-2406](https://youtrack.jetbrains.com/issue/VIM-2406) Fix go to line command
|
||||
* [VIM-2408](https://youtrack.jetbrains.com/issue/VIM-2408) Fix vim script parser
|
||||
* [VIM-2409](https://youtrack.jetbrains.com/issue/VIM-2409) Fix substitute command
|
||||
* [VIM-2411](https://youtrack.jetbrains.com/issue/VIM-2411) Fix vim script parser
|
||||
|
||||
## 1.7.1, 2021-09-20
|
||||
|
||||
### Fixes:
|
||||
* [VIM-2400](https://youtrack.jetbrains.com/issue/VIM-2400) Fix vim script parser
|
||||
* [VIM-2401](https://youtrack.jetbrains.com/issue/VIM-2401) Exceptions occurred during execution of `map<expr>` are now shown in status bar
|
||||
* [VIM-2404](https://youtrack.jetbrains.com/issue/VIM-2404) Fix multiple pastes from unnamed clipboard
|
||||
|
||||
## 1.7.0, 2021-09-16
|
||||
|
||||
### Features:
|
||||
* New engine for Vim Script execution. Check out the [GitHub Discussion](https://jb.gg/vim-script-discussion).
|
||||
* Mapping keys to expressions (map \<expr>). See `:h map-expression`.
|
||||
|
||||
### Fixes:
|
||||
* [VIM-2368](https://youtrack.jetbrains.com/issue/VIM-2368) Do not remove selection on right click
|
||||
* [VIM-2392](https://youtrack.jetbrains.com/issue/VIM-2392) Fix possible out of bounds exception
|
||||
* [VIM-2387](https://youtrack.jetbrains.com/issue/VIM-2387) Fix coping with unnamed and ideaput
|
||||
|
||||
### Changes:
|
||||
* New versioning scheme. Current version is `1.7.0` instead of `0.70`.
|
||||
|
||||
### Merged PRs:
|
||||
* [349](https://github.com/JetBrains/ideavim/pull/349) by [eugene nizienko](https://github.com/nizienko): Run UI test ci
|
||||
|
||||
## 0.69, 2021-07-20
|
||||
|
||||
### Features:
|
||||
* Support several buffer management commands [VIM-1062](https://youtrack.jetbrains.com/issue/VIM-1062), [VIM-2335](https://youtrack.jetbrains.com/issue/VIM-2335)
|
||||
|
||||
### Fixes:
|
||||
* [VIM-2317](https://youtrack.jetbrains.com/issue/VIM-2317) Fix memory leak
|
||||
* [VIM-1357](https://youtrack.jetbrains.com/issue/VIM-1357)
|
||||
[VIM-1566](https://youtrack.jetbrains.com/issue/VIM-1566) Fix external filters
|
||||
* [VIM-2336](https://youtrack.jetbrains.com/issue/VIM-2336) Fix repeat for the `T` movement
|
||||
* [VIM-1192](https://youtrack.jetbrains.com/issue/VIM-1192) Fix dollar motion from single command
|
||||
* [VIM-1672](https://youtrack.jetbrains.com/issue/VIM-1672) IdeaVim correctly populates clipboard history
|
||||
* [VIM-2351](https://youtrack.jetbrains.com/issue/VIM-2351) Correctly select last character when selecting with mouse
|
||||
|
||||
### Merged PRs:
|
||||
* [332](https://github.com/JetBrains/ideavim/pull/332) by [Matt Ellis](https://github.com/citizenmatt): VIM-1357+VIM-1566: Use OS shell to run filter command
|
||||
* [333](https://github.com/JetBrains/ideavim/pull/333) by [Michal Placek](https://github.com/MichalPlacek): VIM-1062
|
||||
* [334](https://github.com/JetBrains/ideavim/pull/334) by [Michal Placek](https://github.com/MichalPlacek): vim-2335 Support for navigation to previous buffer with :b#
|
||||
|
||||
## 0.68, 2021-06-22
|
||||
|
||||
### Features:
|
||||
* Support `:global` and `:vglobal` commands [VIM-831](https://youtrack.jetbrains.com/issue/VIM-831), [VIM-832](https://youtrack.jetbrains.com/issue/VIM-832)
|
||||
* Support `vim-indent-object` extension [VIM-1151](https://youtrack.jetbrains.com/issue/VIM-1151) | [vim-indent-object](https://github.com/michaeljsmith/vim-indent-object)
|
||||
* Support `:print` command
|
||||
|
||||
### Fixes:
|
||||
* [VIM-2308](https://youtrack.jetbrains.com/issue/VIM-2308) Go to next tab doesn't move scrolling
|
||||
|
||||
### Merged PRs:
|
||||
* [261](https://github.com/JetBrains/ideavim/pull/261) by [Shrikant Sharat Kandula](https://github.com/sharat87): New extension: Indentation based text objects
|
||||
* [308](https://github.com/JetBrains/ideavim/pull/308) by [Matt Ellis](https://github.com/citizenmatt): Fix unnecessary caret movement when switching tabs
|
||||
|
||||
## 0.67, 2021-05-20
|
||||
|
||||
### Features:
|
||||
* Support `sethandler` command to configure shortcuts conflicts via `~/.ideavimrc` file. See [docs](https://jb.gg/vim-sethandler).
|
||||
* Support `vim-paragraph-motion` extension [VIM-2290](https://youtrack.jetbrains.com/issue/VIM-2290) | [vim-paragraph-motion](https://github.com/dbakker/vim-paragraph-motion)
|
||||
* Add "Reset Handlers" button for "Conflicting Shortcuts" setting table
|
||||
|
||||
### Changes:
|
||||
* Rename "Vim Emulation" in settings to "Vim"
|
||||
|
||||
### Fixes:
|
||||
* [VIM-2230](https://youtrack.jetbrains.com/issue/VIM-2230) Tweak caret position with inline rename options inlay
|
||||
* [VIM-2177](https://youtrack.jetbrains.com/issue/VIM-2177) Fix scrolling issues near bottom of file
|
||||
* [VIM-2276](https://youtrack.jetbrains.com/issue/VIM-2276) `:ls` returns correct path for files on Microsoft Windows.
|
||||
* [VIM-1953](https://youtrack.jetbrains.com/issue/VIM-1953) Execute live testing for `:w` command
|
||||
* [VIM-2284](https://youtrack.jetbrains.com/issue/VIM-2284) Values are not duplicated in set command
|
||||
* [VIM-2289](https://youtrack.jetbrains.com/issue/VIM-2289) Fix `<End>` command behaviour
|
||||
* [VIM-1476](https://youtrack.jetbrains.com/issue/VIM-1476) Last inserted text is stored in `.` register
|
||||
* [VIM-2295](https://youtrack.jetbrains.com/issue/VIM-2295) Fix `<S-Space>` in insert mode with an existing mapping
|
||||
* [VIM-1401](https://youtrack.jetbrains.com/issue/VIM-1401) IdeaVim triggers readonly handler
|
||||
* [VIM-1856](https://youtrack.jetbrains.com/issue/VIM-1856) Support defining shortcuts in .ideavimrc
|
||||
* [VIM-1523](https://youtrack.jetbrains.com/issue/VIM-1523) Allow different shortcut handlers in different modes
|
||||
|
||||
### Merged PRs:
|
||||
* [280](https://github.com/JetBrains/ideavim/pull/280) by [Matt Ellis](https://github.com/citizenmatt): Caret position and view scrolling fixes
|
||||
* [289](https://github.com/JetBrains/ideavim/pull/289) by [MichalPlacek](https://github.com/MichalPlacek): VIM-2276 ls returns "absolute path" for files on Microsoft Windows.
|
||||
* [295](https://github.com/JetBrains/ideavim/pull/295) by [MichalPlacek](https://github.com/MichalPlacek): VIM-1476
|
||||
|
||||
## 0.66, 2021-04-09
|
||||
|
||||
Not a lot of changes for this release. Focused on internal improvements.
|
||||
|
||||
### Features:
|
||||
* Support `startofline` option
|
||||
|
||||
### Fixes:
|
||||
* [VIM-2238](https://youtrack.jetbrains.com/issue/VIM-2238) Fix `M` command for small files
|
||||
|
||||
### Merged PRs:
|
||||
* [275](https://github.com/JetBrains/ideavim/pull/275) by [Matt Ellis](https://github.com/citizenmatt): Fix edge cases for H, L and M and introduce 'startofline' option
|
||||
* [276](https://github.com/JetBrains/ideavim/pull/276) by [Matt Ellis](https://github.com/citizenmatt): More refactoring of SearchGroup
|
||||
|
||||
## 0.65, 2021-02-17
|
||||
|
||||
### Features:
|
||||
* Support `NERDTree` extension [VIM-1042](https://youtrack.jetbrains.com/issue/VIM-1042) | [NERDTree](https://github.com/preservim/nerdtree)
|
||||
|
||||
* <details>
|
||||
<summary><strong>Click to see details</strong></summary>
|
||||
<img src="assets/changes/0.65/nerdtree.gif" alt="NERDTree example"/>
|
||||
</details>
|
||||
* Support `maxmapdepth` option to define the maximum depth of mappings
|
||||
|
||||
### Fixes:
|
||||
* [VIM-2202](https://youtrack.jetbrains.com/issue/VIM-2202) Fix macro recording for ex command and search
|
||||
* [VIM-1799](https://youtrack.jetbrains.com/issue/VIM-1799)
|
||||
[VIM-1794](https://youtrack.jetbrains.com/issue/VIM-1794)
|
||||
Special characters are not interpreted on yanking
|
||||
* [VIM-2218](https://youtrack.jetbrains.com/issue/VIM-2218) Fix some shortcuts for 2021.+
|
||||
* [VIM-2217](https://youtrack.jetbrains.com/issue/VIM-2217) Fix adding new line at the end of the file for the AppCode
|
||||
* [VIM-2220](https://youtrack.jetbrains.com/issue/VIM-2220) Do not try to get a commandState for null editor
|
||||
* [VIM-2153](https://youtrack.jetbrains.com/issue/VIM-2153) Fix storing special characters after IDE closing
|
||||
|
||||
### Merged PRs:
|
||||
* [269](https://github.com/JetBrains/ideavim/pull/269) by [大牙(Henry Zhu)](https://github.com/daya0576): fix invalid link of submodule docs
|
||||
|
||||
## 0.64, 2020-12-23
|
||||
|
||||
### Merged PRs:
|
||||
* [260](https://github.com/JetBrains/ideavim/pull/260) by [Matt Ellis](https://github.com/citizenmatt): Refactor SearchGroup
|
||||
|
||||
### Fixes:
|
||||
* [VIM-2194](https://youtrack.jetbrains.com/issue/VIM-2194) Fix caret shape during editing a new file
|
||||
|
||||
## 0.63, 2020-12-16
|
||||
|
||||
### Changes:
|
||||
* Update the minimal required IJ version: 2020.2+
|
||||
|
||||
### Fixes:
|
||||
* [CWM-927](https://youtrack.jetbrains.com/issue/CWM-927) Fix typing for CodeWithMe and IdeaVim
|
||||
|
||||
### Merged PRs:
|
||||
* [259](https://github.com/JetBrains/ideavim/pull/259) by [Vladimir Petrenko](https://github.com/vladimir-petrenko): CWM-927 disable vim for client's hidden editor on host
|
||||
|
||||
## 0.62, 2020-12-15
|
||||
|
||||
### Features:
|
||||
* Support `unmap` and `mapclear` commands [VIM-1491](https://youtrack.jetbrains.com/issue/VIM-1491)
|
||||
* Support mappings in ex panel (`cmap`) [VIM-1227](https://youtrack.jetbrains.com/issue/VIM-1227)
|
||||
|
||||
### Changes:
|
||||
* `octal` is now disabled by default for `nrformats`. [VIM-2181](https://youtrack.jetbrains.com/issue/VIM-2181)
|
||||
|
||||
### Fixes:
|
||||
* [VIM-2113](https://youtrack.jetbrains.com/issue/VIM-2113) Fix `cit` for empty tags
|
||||
* [VIM-2114](https://youtrack.jetbrains.com/issue/VIM-2114) Unnamed register isn't changed after deleting empty tag
|
||||
* [VIM-1475](https://youtrack.jetbrains.com/issue/VIM-1475) Enable block caret to be used in insert mode.
|
||||
* [VIM-2170](https://youtrack.jetbrains.com/issue/VIM-2170) Fix an alternative range format for `s` command
|
||||
* [VIM-1913](https://youtrack.jetbrains.com/issue/VIM-1913)
|
||||
[VIM-2154](https://youtrack.jetbrains.com/issue/VIM-2154) Several fixes for AppCode templates
|
||||
* [VIM-1756](https://youtrack.jetbrains.com/issue/VIM-1756) Fix startsel from insert mode
|
||||
|
||||
### Merged PRs:
|
||||
* [249](https://github.com/JetBrains/ideavim/pull/249) by [Jan Palus](https://github.com/jpalus): VIM-2113 Increase tag range only in visual mode
|
||||
* [250](https://github.com/JetBrains/ideavim/pull/250) by [Jan Palus](https://github.com/jpalus): VIM-2114 Do not override registers when deleting empty range
|
||||
* [256](https://github.com/JetBrains/ideavim/pull/256) by [Brandon Conway](https://github.com/brandoncc): Fix typo
|
||||
* [254](https://github.com/JetBrains/ideavim/pull/254) by [Grzegorz Antoniak](https://github.com/antekone): VIM-1475: Add an option to use block caret in insert mode
|
||||
* [225](https://github.com/JetBrains/ideavim/pull/225) by [sumoooru2](https://github.com/sumoooru2): Implement cmap
|
||||
* [258](https://github.com/JetBrains/ideavim/pull/258) by [Matt Ellis](https://github.com/citizenmatt): Show the correct handler class in :map
|
||||
* [257](https://github.com/JetBrains/ideavim/pull/257) by [Matt Ellis](https://github.com/citizenmatt): Extract SearchHighlightsHelper from SearchGroup
|
||||
* [251](https://github.com/JetBrains/ideavim/pull/251) by [Shaun Patterson](https://github.com/shaunpatterson): VIM-1756: startSel works in insert mode
|
||||
|
||||
## 0.61, 2020-11-12
|
||||
|
||||
### Features:
|
||||
* Ability to map IDE actions via the `<Action>` keyword. E.g. `map <C-K> <Action>(CommentByLineComment)`.
|
||||
Check out `README.md` for the details.
|
||||
* `IdeaVim: track action Ids` command to find action ids for the `:action` command.
|
||||
Enable this option in "Search everywhere" (double shift).
|
||||
* Ability to enable extensions using `vim-plug` or `vundle` syntax.
|
||||
E.g. to enable commentary extension you can use one of the following commands:
|
||||
```vim
|
||||
set commentary
|
||||
Plug 'tpope/vim-commentary'
|
||||
Plug 'https://github.com/tpope/vim-commentary'
|
||||
Plugin 'tpope/vim-commentary'
|
||||
...
|
||||
```
|
||||
This approach is especially handy if you have `.vimrc` with plugins registered via `vim-plug` or `vundle`.
|
||||
|
||||
|
||||
### Changes:
|
||||
* Fix `<Esc>` for dialogs. Now `<Esc>` will exit insert / visual mode and close the dialog from normal mode.
|
||||
* Add option to disable IdeaVim in dialogs / single line editors. [VIM-765](https://youtrack.jetbrains.com/issue/VIM-765)
|
||||
Use `set ideavimsupport=` to disable IdeaVim in dialog editors.
|
||||
* Reposition cursor when `scrolloff` changes
|
||||
|
||||
### Fixes:
|
||||
* [VIM-2150](https://youtrack.jetbrains.com/issue/VIM-2150) `Shift-D` should not delete an empty line
|
||||
* [VIM-2157](https://youtrack.jetbrains.com/issue/VIM-2157) Fix tab with an active template
|
||||
* [VIM-2156](https://youtrack.jetbrains.com/issue/VIM-2156) Correct up/down motions with inlays
|
||||
* [VIM-2144](https://youtrack.jetbrains.com/issue/VIM-2144) Correct text position after block insert with inlays
|
||||
* [VIM-2158](https://youtrack.jetbrains.com/issue/VIM-2158) Fix scrolling when `scrolloff` is over half screen height, but less than full height
|
||||
|
||||
### Merged PRs:
|
||||
* [255](https://github.com/JetBrains/ideavim/pull/255) by [Matt Ellis](https://github.com/citizenmatt): Fix various scrolling issues
|
||||
|
||||
## 0.60, 2020-10-09
|
||||
|
||||
### Features:
|
||||
* Support of `virtualedit=onemore` ([VIM-844](https://youtrack.jetbrains.com/issue/VIM-844))
|
||||
|
||||
### Fixes:
|
||||
* [VIM-2097](https://youtrack.jetbrains.com/issue/VIM-2097) Do not apply mappings for register selecting
|
||||
* [VIM-2080](https://youtrack.jetbrains.com/issue/VIM-2080) Fix S command with count
|
||||
* [VIM-2099](https://youtrack.jetbrains.com/issue/VIM-2099) Fix operations with backward inclusive motions
|
||||
* [VIM-2104](https://youtrack.jetbrains.com/issue/VIM-2104) Use `sidescrolloff` for horizontal offset
|
||||
* [VIM-1080](https://youtrack.jetbrains.com/issue/VIM-1080) Fix `zt` for virtual space enabled
|
||||
* [VIM-1556](https://youtrack.jetbrains.com/issue/VIM-1556) Fix horizontal scrolling
|
||||
* [VIM-1770](https://youtrack.jetbrains.com/issue/VIM-1770) Fix goto end with large inline hints
|
||||
* [VIM-2110](https://youtrack.jetbrains.com/issue/VIM-2110) Fix scrolling for non-monospaced fonts
|
||||
|
||||
### Changes:
|
||||
* `:w` works as `:wa` by default. This can be disabled with `ideawrite` option.
|
||||
|
||||
Now features like `Prettier on save` or `Run on save for files` would work with `:w` command as well.
|
||||
|
||||
See [VIM-1968](https://youtrack.jetbrains.com/issue/VIM-1968).
|
||||
|
||||
### Merged PRs:
|
||||
* [248](https://github.com/JetBrains/ideavim/pull/248) by [Yaohui Wang](https://github.com/yaohui-wyh): Check if project is disposed when editorDeinit
|
||||
* [242](https://github.com/JetBrains/ideavim/pull/242) by [Iain Ballard](https://github.com/i-e-b): Partial implementation of virtualedit config
|
||||
* [252](https://github.com/JetBrains/ideavim/pull/252) by [Matt Ellis](https://github.com/citizenmatt): Fixes for scrolling
|
||||
|
||||
## 0.59, 2020-08-25
|
||||
|
||||
### Features:
|
||||
* `vim-highlightedyank` plugin emulation ([VIM-1970](https://youtrack.jetbrains.com/issue/VIM-1970) | [vim-highlightedyank](https://github.com/machakann/vim-highlightedyank)).
|
||||
|
||||
* <details>
|
||||
<summary><strong>Click to see details</strong></summary>
|
||||
<img src="assets/changes/0.59/highlight_yank.gif" alt="highlight yank"/>
|
||||
</details>
|
||||
|
||||
* [VIM-2068](https://youtrack.jetbrains.com/issue/VIM-2068) `:tabclose` command
|
||||
|
||||
### Fixes:
|
||||
* [VIM-1421](https://youtrack.jetbrains.com/issue/VIM-1421) Escape key finishes `t` and `f` motions
|
||||
* [VIM-2075](https://youtrack.jetbrains.com/issue/VIM-2075) Fix zR command
|
||||
* [VIM-2059](https://youtrack.jetbrains.com/issue/VIM-2059) Fixed macro editing
|
||||
|
||||
### Merged PRs:
|
||||
* [237](https://github.com/JetBrains/ideavim/pull/237) by [Adrià Farrés](https://github.com/adriafarres): Reset operator-pending commands on escape
|
||||
* [241](https://github.com/JetBrains/ideavim/pull/241) by [Patrick Elmquist](https://github.com/patrick-elmquist): Properly reset when pressing Esc in the middle of command
|
||||
* [244](https://github.com/JetBrains/ideavim/pull/244) by [Rieon Ke](https://github.com/rieonke): Implement tabc[lose] ex command
|
||||
* [240](https://github.com/JetBrains/ideavim/pull/240) by [Rieon Ke](https://github.com/rieonke): add support for putting & editing macros
|
||||
* [245](https://github.com/JetBrains/ideavim/pull/245) by [KostkaBrukowa](https://github.com/KostkaBrukowa): VIM-1970 | Working solution of plugin vim-highlightedyank
|
||||
|
||||
## 0.58, 2020-07-07
|
||||
|
||||
### Features:
|
||||
* `exchange` plugin emulation ([VIM-921](https://youtrack.jetbrains.com/issue/VIM-921) | [vim-exchange](https://github.com/tommcdo/vim-exchange)).
|
||||
* `~/.ideavimrc` file can be reloaded using the new floating action.
|
||||
|
||||
* <details>
|
||||
<summary><strong>Click to see details</strong></summary>
|
||||
<img src="assets/changes/0.58/reload_ideavimrc.png" alt="IdeaVimRc reload"/>
|
||||
</details>
|
||||
|
||||
* Add `:buffer` command.
|
||||
|
||||
### Changes:
|
||||
* Support IntelliJ's smooth scrolling. Use "Enable smooth scrolling" checkbox in _Preferences | Editor | General_ to disable.
|
||||
|
||||
### Fixes:
|
||||
* [VIM-1994](https://youtrack.jetbrains.com/issue/VIM-1994) Correct paste after `y}P` command.
|
||||
* [VIM-1924](https://youtrack.jetbrains.com/issue/VIM-1924) Select next occurrence doesn't become block selection.
|
||||
* [VIM-2038](https://youtrack.jetbrains.com/issue/VIM-2038) Last line is now accessible in normal mode
|
||||
* [VIM-1934](https://youtrack.jetbrains.com/issue/VIM-1934) Line number is not clipped for relative line numbers
|
||||
* [VIM-1852](https://youtrack.jetbrains.com/issue/VIM-1852) Line number doesn't flickers for relative line numbers
|
||||
* [VIM-2021](https://youtrack.jetbrains.com/issue/VIM-2021) Line numbers don't reactivating
|
||||
* Fix mappings to `"\<SPACE>"` including `let mapleader="\<SPACE>"`
|
||||
|
||||
|
||||
### Merged PRs:
|
||||
* [233](https://github.com/JetBrains/ideavim/pull/233) by [valis](https://github.com/valis): [VIM-1994] Correct paste after `y}P` command.
|
||||
* [224](https://github.com/JetBrains/ideavim/pull/224) by [pmnoxx](https://github.com/pmnoxx): Populate intelij navigation history together with ideavim jumplist.
|
||||
* [227](https://github.com/JetBrains/ideavim/pull/227) by [angelbot](https://github.com/angelbot): Add support for buffer command.
|
||||
* [230](https://github.com/JetBrains/ideavim/pull/230) by [fan-tom](https://github.com/fan-tom): VIM-1924.
|
||||
* [231](https://github.com/JetBrains/ideavim/pull/231) by [citizenmatt](https://github.com/citizenmatt): Support smooth scrolling.
|
||||
* [239](https://github.com/JetBrains/ideavim/pull/239) by [citizenmatt](https://github.com/citizenmatt): Use new API for relative line numbers
|
||||
|
||||
## 0.57, 2020-04-28
|
||||
|
||||
### Fixes:
|
||||
* [VIM-1992](https://youtrack.jetbrains.com/issue/VIM-1992) Fix mappings to `<S-Letter>`
|
||||
* [VIM-1991](https://youtrack.jetbrains.com/issue/VIM-1991) Fix working with number registers
|
||||
|
||||
### Merged PRs:
|
||||
* [234](https://github.com/JetBrains/ideavim/pull/234) by [runforprogram](https://github.com/runforprogram): [VIM-1991] fix >0 number register not work
|
||||
|
||||
## 0.56, 2020-04-09
|
||||
|
||||
### Features:
|
||||
* `ReplaceWithRegister` plugin emulation ([ReplaceWithRegister](https://www.vim.org/scripts/script.php?script_id=2703)).
|
||||
* `argtextobj.vim` plugin emulation ([argtextobj.vim](https://vim.sourceforge.io/scripts/script.php?script_id=2699)).
|
||||
* `vim-textobj-entire` plugin emulation ([vim-textobj-entire](https://github.com/kana/vim-textobj-entire)).
|
||||
* [VIM-434](https://youtrack.jetbrains.com/issue/VIM-434) Add `'showcmd'` support, on by default.
|
||||
* Support `ls/buffers/files` commands.
|
||||
|
||||
### Changes:
|
||||
* Replace `ideastatusbar` option with `ideastatusicon`. Now you can make the icon gray.
|
||||
|
||||
**Fixes:**
|
||||
* [VIM-1008](https://youtrack.jetbrains.com/issue/VIM-1008) Correct `ci{` behavior
|
||||
### Deprecations:
|
||||
* `ideastatusbar` option is deprecated now. See `ideastatusicon`.
|
||||
|
||||
0.55, 2020-01-20
|
||||
--------------
|
||||
### Fixes:
|
||||
* [VIM-1284](https://youtrack.jetbrains.com/issue/VIM-1284) Fix mapping of digits.
|
||||
* Fix handling of counts on both operator and motion, e.g. `3d2w` deletes 6 words, instead of 32.
|
||||
* Allow mapping of `<C-K>` and `<C-V>`/`<C-Q>`.
|
||||
* [VIM-1899](https://youtrack.jetbrains.com/issue/VIM-1899) Add argument to `:registers` command.
|
||||
* [VIM-1835](https://youtrack.jetbrains.com/issue/VIM-1835) Macros record input keystrokes instead of mapped keystrokes.
|
||||
* [VIM-1900](https://youtrack.jetbrains.com/issue/VIM-1900) Ensure non-printable output for `:registers`, `:marks` and `:jumps` is encoded correctly.
|
||||
* [VIM-570](https://youtrack.jetbrains.com/issue/VIM-570) Print non-ascii characters in ex panel.
|
||||
* [VIM-926](https://youtrack.jetbrains.com/issue/VIM-926) Fix `<S-Space>` mapping.
|
||||
* [VIM-1958](https://youtrack.jetbrains.com/issue/VIM-1958) Fix `X` command for linewise selection.
|
||||
* [VIM-1911](https://youtrack.jetbrains.com/issue/VIM-1911) Lookup keys respect `IDE` handler.
|
||||
* [VIM-1008](https://youtrack.jetbrains.com/issue/VIM-1008) Correct `ci{` behavior.
|
||||
|
||||
**Features:**
|
||||
## 0.55, 2020-01-20
|
||||
|
||||
### Features:
|
||||
* Surround and Commentary extensions support repeating with a dot command ([VIM-1118](https://youtrack.jetbrains.com/issue/VIM-1118))
|
||||
* Support XDG settings standard ([VIM-664](https://youtrack.jetbrains.com/issue/VIM-664))
|
||||
* Add option to remove the status bar icon ([VIM-1847](https://youtrack.jetbrains.com/issue/VIM-1847))
|
||||
|
||||
**Fixes:**
|
||||
### Fixes:
|
||||
* [VIM-1823](https://youtrack.jetbrains.com/issue/VIM-1823) Fix multiple carets with ignorecase
|
||||
* [VIM-1053](https://youtrack.jetbrains.com/issue/VIM-1053)
|
||||
[VIM-1038](https://youtrack.jetbrains.com/issue/VIM-1038)
|
||||
@@ -73,21 +514,20 @@ _Available since 0.55.2 EAP:_
|
||||
* [VIM-1884](https://youtrack.jetbrains.com/issue/VIM-1884) Show quickDoc during popup with `CTRL-J`
|
||||
* [VIM-987](https://youtrack.jetbrains.com/issue/VIM-987) Fix arrow keys for the NEO keyboard
|
||||
|
||||
0.54, 2019-11-20
|
||||
--------------
|
||||
## 0.54, 2019-11-20
|
||||
|
||||
**Features:**
|
||||
### Features:
|
||||
* EasyMotion plugin emulation ([VIM-820](https://youtrack.jetbrains.com/issue/VIM-820) | [Instructions](https://github.com/JetBrains/ideavim#emulated-vim-plugins))
|
||||
* Support surrounding with a function name ([link](https://github.com/tpope/vim-surround/blob/master/doc/surround.txt#L138))
|
||||
* Add `:delmarks` command ([VIM-1720](https://youtrack.jetbrains.com/issue/VIM-1720))
|
||||
* Add IdeaVim icon to the status bar ([VIM-943](https://youtrack.jetbrains.com/issue/VIM-943))
|
||||
|
||||
**Changes:**
|
||||
### Changes:
|
||||
* Remove the default IdeaVim toggle shortcut (<kbd>CTRL</kbd><kbd>ALT</kbd><kbd>V</kbd>)
|
||||
* Rename `refactoring` value of `selectmode` option to `ideaselection`
|
||||
* Remove `template` value of `selectmode` option and replace it with `idearefactormode` option.
|
||||
|
||||
**Fixes:**
|
||||
### Fixes:
|
||||
* [VIM-1766](https://youtrack.jetbrains.com/issue/VIM-1766) Fix disappearing caret in ex entry on Linux
|
||||
* [VIM-1032](https://youtrack.jetbrains.com/issue/VIM-1032) Annotations work well with relative line numbers enabled
|
||||
* [VIM-1762](https://youtrack.jetbrains.com/issue/VIM-1762) Relative line numbers respect line number theme
|
||||
@@ -114,8 +554,7 @@ _Available since 0.55.2 EAP:_
|
||||
* [VIM-1604](https://youtrack.jetbrains.com/issue/VIM-1604) Add IdeaVim logo
|
||||
|
||||
|
||||
0.53, 2019-08-07
|
||||
--------------
|
||||
## 0.53, 2019-08-07
|
||||
* [VIM-1711](https://youtrack.jetbrains.com/issue/VIM-1711) Search is not triggered during surround action
|
||||
* [VIM-1712](https://youtrack.jetbrains.com/issue/VIM-1712) Fix `Y` command for visual mode
|
||||
* [VIM-1713](https://youtrack.jetbrains.com/issue/VIM-1713) Surround in visual mode put caret in correct position
|
||||
@@ -126,8 +565,7 @@ _Available since 0.55.2 EAP:_
|
||||
* [VIM-1736](https://youtrack.jetbrains.com/issue/VIM-1736) Fix `` for ex panel
|
||||
* [VIM-1739](https://youtrack.jetbrains.com/issue/VIM-1739) Fix full-width characters for ex pane
|
||||
|
||||
0.52, 2019-07-23
|
||||
--------------
|
||||
## 0.52, 2019-07-23
|
||||
|
||||
* Introduce [Select Mode](https://github.com/JetBrains/ideavim/wiki/Select-mode).
|
||||
|
||||
@@ -220,8 +658,7 @@ _Available since 0.55.2 EAP:_
|
||||
* [VIM-1698](https://youtrack.jetbrains.com/issue/VIM-1698) Paste doesn't clear clipboard
|
||||
* [VIM-1359](https://youtrack.jetbrains.com/issue/VIM-1359) Fix behavior of i_CTRL-W action
|
||||
|
||||
0.51, 2019-02-12
|
||||
----------------
|
||||
## 0.51, 2019-02-12
|
||||
|
||||
* [VIM-1558](https://youtrack.jetbrains.com/issue/VIM-1558) Fixed scrolling for code with block inlays in Rider 2018.3
|
||||
* [VIM-1187](https://youtrack.jetbrains.com/issue/VIM-1187) Improved performance of `set relativelinenumber` on large files
|
||||
@@ -229,8 +666,7 @@ _Available since 0.55.2 EAP:_
|
||||
* [VIM-798](https://youtrack.jetbrains.com/issue/VIM-798) Allow arrow keys for window navigation commands
|
||||
|
||||
|
||||
0.50, 2018-10-18
|
||||
----------------
|
||||
## 0.50, 2018-10-18
|
||||
|
||||
Moved "Vim Emulation" settings into "File | Settings | Vim Emulation". Support
|
||||
for vim-multiple-cursors commands `<A-n>`, `<A-x>`, `<A-p>`, `g<A-n>` (put `set
|
||||
@@ -256,8 +692,7 @@ Vim commands for multiple cursors. Various bug fixes.
|
||||
* [VIM-1274](https://youtrack.jetbrains.com/issue/VIM-1274) Correctly process escaping when `smartcase` is on
|
||||
|
||||
|
||||
0.49, 2017-12-12
|
||||
----------------
|
||||
## 0.49, 2017-12-12
|
||||
|
||||
Enabled zero-latency typing for Vim emulation. Added support for `iskeyword` option. Various bug fixes.
|
||||
|
||||
@@ -265,8 +700,7 @@ Enabled zero-latency typing for Vim emulation. Added support for `iskeyword` opt
|
||||
* [VIM-1367](https://youtrack.jetbrains.com/issue/VIM-1367) Support `iskeyword` option
|
||||
* [VIM-523](https://youtrack.jetbrains.com/issue/VIM-523) Fixed global mark remembering only the line number
|
||||
|
||||
0.48, 2017-01-15
|
||||
----------------
|
||||
## 0.48, 2017-01-15
|
||||
|
||||
A bugfix release.
|
||||
|
||||
@@ -280,8 +714,7 @@ Features:
|
||||
* Support for zero-latency rendering
|
||||
|
||||
|
||||
0.47, 2016-10-19
|
||||
----------------
|
||||
## 0.47, 2016-10-19
|
||||
|
||||
A bugfix release.
|
||||
|
||||
@@ -291,8 +724,7 @@ Bug fixes:
|
||||
* VIM-1190 Fixed exception "Write access is allowed from write-safe contexts only"
|
||||
|
||||
|
||||
0.46, 2016-07-07
|
||||
----------------
|
||||
## 0.46, 2016-07-07
|
||||
|
||||
Added `incsearch` option for incremental search. Added support for `it` and
|
||||
`at` tag block selection. Added `vim-surround` commands `ys`, `cs`, `ds`,
|
||||
@@ -320,8 +752,7 @@ Bug fixes:
|
||||
* VIM-1126 Fixed warning about modifying shortcuts of global actions for 2016.2
|
||||
|
||||
|
||||
0.44, 2015-11-02
|
||||
----------------
|
||||
## 0.44, 2015-11-02
|
||||
|
||||
A bugfix release.
|
||||
|
||||
@@ -330,16 +761,14 @@ A bugfix release.
|
||||
plugin disabled
|
||||
|
||||
|
||||
0.43, 2015-11-02
|
||||
----------------
|
||||
## 0.43, 2015-11-02
|
||||
|
||||
A bugfix release.
|
||||
|
||||
* VIM-1039 Fixed running the plugin with Java 6
|
||||
|
||||
|
||||
0.42, 2015-11-01
|
||||
----------------
|
||||
## 0.42, 2015-11-01
|
||||
|
||||
This release is compatible with IntelliJ 15+ and other IDEs based on the
|
||||
IntelliJ platform branch 143+.
|
||||
@@ -347,8 +776,7 @@ IntelliJ platform branch 143+.
|
||||
* VIM-970 Fixed move commands in read-only files
|
||||
|
||||
|
||||
0.41, 2015-06-10
|
||||
----------------
|
||||
## 0.41, 2015-06-10
|
||||
|
||||
A bugfix release.
|
||||
|
||||
@@ -356,8 +784,7 @@ A bugfix release.
|
||||
IntelliJ
|
||||
|
||||
|
||||
0.40, 2015-06-09
|
||||
----------------
|
||||
## 0.40, 2015-06-09
|
||||
|
||||
Added support for `mapleader`. Support comments in `%` brace matching. Various
|
||||
bug fixes.
|
||||
@@ -384,8 +811,7 @@ Bug fixes:
|
||||
* VIM-930 Fixed editor focus issues after closing Ex entry box on Oracle Java 6
|
||||
|
||||
|
||||
0.39, 2014-12-03
|
||||
----------------
|
||||
## 0.39, 2014-12-03
|
||||
|
||||
A bugfix release.
|
||||
|
||||
@@ -397,8 +823,7 @@ Bug fixes:
|
||||
* EA-63022 Don't update line numbers in the caret movement event listener
|
||||
|
||||
|
||||
0.38, 2014-12-01
|
||||
----------------
|
||||
## 0.38, 2014-12-01
|
||||
|
||||
Added support for `number` and `relativenumber` options, `clipboard=unnamed`
|
||||
option. Added `:action` and `:actionlist` commands for executing arbitrary
|
||||
@@ -430,8 +855,7 @@ Bug fixes:
|
||||
* VIM-723 Fix pasting to an empty line
|
||||
|
||||
|
||||
0.37, 2014-10-15
|
||||
----------------
|
||||
## 0.37, 2014-10-15
|
||||
|
||||
A bugfix release.
|
||||
|
||||
@@ -442,8 +866,7 @@ Bug fixes:
|
||||
* VIM-407 Fixed `>>` to work if a line contains only one character
|
||||
|
||||
|
||||
0.36, 2014-10-14
|
||||
----------------
|
||||
## 0.36, 2014-10-14
|
||||
|
||||
Added support for common window splitting and navigation commands. Various bug
|
||||
fixes.
|
||||
@@ -462,8 +885,7 @@ Bug fixes:
|
||||
* VIM-569 Fixed `<C-W>` when the caret is at the end of a line
|
||||
|
||||
|
||||
0.35, 2014-05-15
|
||||
----------------
|
||||
## 0.35, 2014-05-15
|
||||
|
||||
The `~/.vimrc` initialization file is no longer read by default, use
|
||||
`~/.ideavimrc` instead.
|
||||
@@ -484,8 +906,7 @@ Bug fixes:
|
||||
selection
|
||||
|
||||
|
||||
0.34, 2014-04-29
|
||||
----------------
|
||||
## 0.34, 2014-04-29
|
||||
|
||||
A bugfix release.
|
||||
|
||||
@@ -499,8 +920,7 @@ Bug fixes:
|
||||
* VIM-667 Ignore potentially nested lines of .vimrc based on leading whitespace
|
||||
|
||||
|
||||
0.33, 2014-04-28
|
||||
----------------
|
||||
## 0.33, 2014-04-28
|
||||
|
||||
Added support for `:map` key mapping commands. New keyboard shortcuts handler
|
||||
that doesn't require a separate keymap for Vim emulation. Added support for
|
||||
@@ -519,14 +939,12 @@ Bug fixes:
|
||||
* VIM-281 Don't disable global reformat code action for Vim emulation
|
||||
|
||||
|
||||
0.32, 2013-11-15
|
||||
----------------
|
||||
## 0.32, 2013-11-15
|
||||
|
||||
Fixed API compatibility with IntelliJ platform builds 132.1052+.
|
||||
|
||||
|
||||
0.31, 2013-11-12
|
||||
----------------
|
||||
## 0.31, 2013-11-12
|
||||
|
||||
A bugfix release.
|
||||
|
||||
@@ -535,8 +953,7 @@ Bug fixes:
|
||||
* VIM-582 Fixed line comment and reformat commands with no visual selection
|
||||
|
||||
|
||||
0.30, 2013-11-11
|
||||
----------------
|
||||
## 0.30, 2013-11-11
|
||||
|
||||
Added support for a separate `.ideavimrc` config file. Fixed long-standing
|
||||
issues with merged undo/redo commands and `<Esc>` during code completion.
|
||||
@@ -556,8 +973,7 @@ Bug fixes:
|
||||
* Fixed several reported exceptions
|
||||
|
||||
|
||||
0.29, 2013-05-15
|
||||
----------------
|
||||
## 0.29, 2013-05-15
|
||||
|
||||
A bugfix release.
|
||||
|
||||
@@ -568,8 +984,7 @@ Bug fixes:
|
||||
* VIM-121 Don't move cursor while scrolling
|
||||
|
||||
|
||||
0.28, 2013-04-06
|
||||
----------------
|
||||
## 0.28, 2013-04-06
|
||||
|
||||
A bugfix release.
|
||||
|
||||
@@ -579,8 +994,7 @@ Bug fixes:
|
||||
* VIM-479 Don't try to activate insert mode for diff view
|
||||
|
||||
|
||||
0.27, 2013-04-03
|
||||
----------------
|
||||
## 0.27, 2013-04-03
|
||||
|
||||
New Vim keymap generator creates better keymaps, especially for Mac OS X.
|
||||
Restart after reconfiguring the keymap is no longer required.
|
||||
@@ -601,8 +1015,7 @@ Bug fixes:
|
||||
* Fixed command window font size to match editor font size
|
||||
|
||||
|
||||
0.26, 2012-12-26
|
||||
----------------
|
||||
## 0.26, 2012-12-26
|
||||
|
||||
Added support for paste in the command mode: from a register using `<C-R>`,
|
||||
from the clipboard using `<S-Insert>` or `<M-V>`. Added support for the last
|
||||
@@ -621,8 +1034,7 @@ Bug fixes:
|
||||
* VIM-302 Fixed tab switching order for `gt` and `gT`
|
||||
|
||||
|
||||
0.25, 2012-12-19
|
||||
----------------
|
||||
## 0.25, 2012-12-19
|
||||
|
||||
A bugfix release.
|
||||
|
||||
@@ -631,8 +1043,7 @@ A bugfix release.
|
||||
character
|
||||
|
||||
|
||||
0.24, 2012-12-03
|
||||
----------------
|
||||
## 0.24, 2012-12-03
|
||||
|
||||
Added Vim string object selection motions (see help topics `v_i"`, `v_a"`).
|
||||
Various bug fixes.
|
||||
@@ -671,8 +1082,7 @@ Bug fixes:
|
||||
* VIM-157 Fixed regression in moving the cursor after `~`
|
||||
|
||||
|
||||
0.23.115, 2012-11-14
|
||||
--------------------
|
||||
## 0.23.115, 2012-11-14
|
||||
|
||||
A bugfix release.
|
||||
|
||||
@@ -681,8 +1091,7 @@ A bugfix release.
|
||||
* VIM-112 Delete a single previous word with <C-W> in insert mode, not all inserted words
|
||||
|
||||
|
||||
0.23.111, 2012-11-12
|
||||
--------------------
|
||||
## 0.23.111, 2012-11-12
|
||||
|
||||
A bugfix release.
|
||||
|
||||
@@ -701,8 +1110,7 @@ A bugfix release.
|
||||
found
|
||||
|
||||
|
||||
0.23.93, 2012-03-21
|
||||
-------------------
|
||||
## 0.23.93, 2012-03-21
|
||||
|
||||
A bugfix release. Vim.xml was fixed to use Command+C, Command+V on Mac OS.
|
||||
Unfortunately you need to update Vim.xml manually this time.
|
||||
|
220
CONTRIBUTING.md
@@ -1,124 +1,150 @@
|
||||
<div>
|
||||
<a href="https://teamcity.jetbrains.com/viewType.html?buildTypeId=IdeaVim_TestsForIntelliJ20183&guest=1">
|
||||
<img src="https://teamcity.jetbrains.com/app/rest/builds/buildType:(id:IdeaVim_TestsForIntelliJ20183)/statusIcon.svg?guest=1"/>
|
||||
</a>
|
||||
<span>2018.3 Tests</span>
|
||||
</div>
|
||||
<div>
|
||||
<a href="https://teamcity.jetbrains.com/viewType.html?buildTypeId=IdeaVim_TestsForIntelliJ20191&guest=1">
|
||||
<img src="https://teamcity.jetbrains.com/app/rest/builds/buildType:(id:IdeaVim_TestsForIntelliJ20191)/statusIcon.svg?guest=1"/>
|
||||
</a>
|
||||
<span>2019.1 Tests</span>
|
||||
</div>
|
||||
<div>
|
||||
<a href="https://teamcity.jetbrains.com/viewType.html?buildTypeId=IdeaVim_TestsForIntelliJ20192&guest=1">
|
||||
<img src="https://teamcity.jetbrains.com/app/rest/builds/buildType:(id:IdeaVim_TestsForIntelliJ20192)/statusIcon.svg?guest=1"/>
|
||||
</a>
|
||||
<span>2019.2 Tests</span>
|
||||
</div>
|
||||
<div>
|
||||
<a href="https://teamcity.jetbrains.com/viewType.html?buildTypeId=IdeaVim_TestsForIntelliJ20193&guest=1">
|
||||
<img src="https://teamcity.jetbrains.com/app/rest/builds/buildType:(id:IdeaVim_TestsForIntelliJ20193)/statusIcon.svg?guest=1"/>
|
||||
</a>
|
||||
<span>2019.3 Tests</span>
|
||||
</div>
|
||||
<div>
|
||||
<a href="https://teamcity.jetbrains.com/viewType.html?buildTypeId=IdeaVim_TestsForIntelliJ20201&guest=1">
|
||||
<img src="https://teamcity.jetbrains.com/app/rest/builds/buildType:(id:IdeaVim_TestsForIntelliJ20201)/statusIcon.svg?guest=1"/>
|
||||
</a>
|
||||
<span>2020.1 Tests</span>
|
||||
</div>
|
||||
[![TeamCity Build][teamcity-build-status-svg]][teamcity-build-status]
|
||||
|
||||
IdeaVim is an open source project created by 80+ contributors. Would you like to make it even better? That’s wonderful!
|
||||
|
||||
### Where to Start
|
||||
This page is created to help you start contributing. And who knows, maybe in a few days this project will be brighter than ever!
|
||||
|
||||
In order to contribute to IdeaVim, you should have some understanding of [Kotlin](https://kotlinlang.org/) or Java.
|
||||
:warning: The plugin is currently under a huge refactoring aiming to split into vim-engine and IdeaVim in order to
|
||||
support the new [Fleet IDE](https://www.jetbrains.com/fleet/).
|
||||
|
||||
See also these docs on the IntelliJ API:
|
||||
## Before you begin
|
||||
|
||||
* [IntelliJ architectural overview](https://www.jetbrains.org/intellij/sdk/docs/platform/fundamentals.html)
|
||||
* [IntelliJ plugin development resources](https://www.jetbrains.org/intellij/sdk/docs/welcome.html)
|
||||
- The project is written in Kotlin and Java. Choose whichever language you feel more comfortable with,
|
||||
or maybe one that you’d like to get to know better (why not start [learning Kotlin](https://kotlinlang.org/docs/tutorials/) right now?).
|
||||
|
||||
You can start by:
|
||||
- If you come across some IntelliJ Platform code, these links may prove helpful:
|
||||
|
||||
- Picking relatively simple tasks that are tagged with
|
||||
* [IntelliJ architectural overview](https://www.jetbrains.org/intellij/sdk/docs/platform/fundamentals.html)
|
||||
* [IntelliJ plugin development resources](https://www.jetbrains.org/intellij/sdk/docs/welcome.html)
|
||||
|
||||
- Having any difficulties?
|
||||
Join the brand new
|
||||
[](https://gitter.im/JetBrains/ideavim?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
||||
for IdeaVim developers and contributors!
|
||||
|
||||
OK, ready to do some coding?
|
||||
|
||||
## Yes, I'm ready for some coding
|
||||
|
||||
* Fork the repository and clone it to the local machine.
|
||||
* Open the project with IntelliJ IDEA.
|
||||
|
||||
Yoo hoo! You’re all set to begin contributing.
|
||||
We've prepared some useful configurations for you:
|
||||
|
||||

|
||||
|
||||
And here are useful gradle commands:
|
||||
|
||||
* `./gradlew runIde` — start the dev version of IntelliJ IDEA with IdeaVim installed.
|
||||
* `./gradlew test` — run tests.
|
||||
* `./gradlew buildPlugin` — build the plugin. The result will be located in `build/distributions`. This file can be
|
||||
installed by using `Settings | Plugin | >Gear Icon< | Install Plugin from Disk...`. You can stay with your personal build
|
||||
for a few days or send it to a friend for testing.
|
||||
|
||||
## Warmup
|
||||
|
||||
- Pick a few relatively simple tasks that are tagged with
|
||||
[#patch_welcome](https://youtrack.jetbrains.com/issues/VIM?q=%23patch_welcome%20%23Unresolved%20sort%20by:%20votes%20)
|
||||
in the issue tracker.
|
||||
- Read about the `@VimBehaviorDiffers` annotation and fix the corresponding functionality.
|
||||
in the issue tracker.
|
||||
- Read the javadoc for the `@VimBehaviorDiffers` annotation in the source code and fix the corresponding functionality.
|
||||
- Implement one of the requested [#vim plugin](https://youtrack.jetbrains.com/issues/VIM?q=%23Unresolved%20tag:%20%7Bvim%20plugin%7D%20sort%20by:%20votes%20)s.
|
||||
|
||||
> :small_orange_diamond: Selected an issue to work on? Leave a comment in a YouTrack ticket or create a draft PR
|
||||
> to indicate that you've started working on it so that you might get additional guidance and feedback from the maintainers.
|
||||
|
||||
## Where to start in the codebase
|
||||
|
||||
If you are looking for:
|
||||
|
||||
- Vim commands (`w`, `<C-O>`, `p`, etc.):
|
||||
- Any particular command: `package-info.java`.
|
||||
- How commands are executed in common: `EditorActionHandlerBase`.
|
||||
- Key mapping: `KeyHandler.handleKey()`.
|
||||
|
||||
- Ex commands (`:set`, `:s`, `:nohlsearch`):
|
||||
- Any particular ex command: package `com.maddyhome.idea.vim.ex.handler`.
|
||||
- Vim script grammar: `Vimscript.g4`.
|
||||
- Vim script parsing: package `com.maddyhome.idea.vim.vimscript.parser`.
|
||||
- Vim script executor: `Executor`.
|
||||
|
||||
- Extensions:
|
||||
- Extensions handler: `VimExtensionHandler`.
|
||||
- Available extensions: package `com/maddyhome/idea/vim/extension`.
|
||||
|
||||
- Common features:
|
||||
- State machine. How every particular keystroke is parsed in IdeaVim: `KeyHandler.handleKey()`.
|
||||
- Options (`incsearch`, `iskeyword`, `relativenumber`): `OptionServiceImpl`.
|
||||
- Plugin startup: `PluginStartup`.
|
||||
- Notifications: `NotificationService`.
|
||||
- Status bar icon: `StatusBar.kt`.
|
||||
- On/off switch: `VimPlugin.setEnabled()`.
|
||||
|
||||
|
||||
### Development Environment
|
||||
## Testing
|
||||
|
||||
1. Fork IdeaVim on GitHub and clone the repository on your local machine.
|
||||
Here are some guides for testing:
|
||||
|
||||
2. Import the project from the existing sources in IntelliJ IDEA 2018.1 or newer (Community or
|
||||
Ultimate), by selecting "File | New | Project from Existing Sources..." or selecting "Import
|
||||
Project" from the Welcome screen.
|
||||
1. Read the javadoc for the `@VimBehaviorDiffers` annotation in the source code.
|
||||
|
||||
* In the project wizard, select "Import project from external model | Gradle".
|
||||
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.
|
||||
|
||||
* Select your Java 8+ JDK as the Gradle JVM; leave other parameters unchanged.
|
||||
3. Don't forget to test your functionality with line start, line end, file start, file end, empty line, multiple
|
||||
carets, dollar motion, etc.
|
||||
|
||||
##### Neovim
|
||||
IdeaVim has an experimental integration with neovim in tests. Tests that are performed with `doTest` also executed in
|
||||
neovim instance, and the state of IdeaVim is asserted to be the same as the state of neovim.
|
||||
- Only tests that use `doTest` are checked with neovim.
|
||||
- Tests with `@VimBehaviorDiffers` or `@TestWithoutNeovim` annotations don't use neovim.
|
||||
|
||||
3. Run your IdeaVim plugin within IntelliJ via a Gradle task:
|
||||
#### Property-based tests
|
||||
Property-based tests are located under `propertybased` package. These tests a flaky by nature
|
||||
although in most cases they are stable. If the test fails on your TeamCity run, try to check the test output and understand
|
||||
if the fail is caused by your changes. If it's not, just ignore the test.
|
||||
|
||||
* Select the "View | Tool Windows | Gradle" tool window.
|
||||
|
||||
* Launch "ideavim | intellij | runIde" from the tool window.
|
||||
|
||||
4. Run IdeaVim tests via a Gradle task:
|
||||
## A common direction
|
||||
|
||||
* Select the "View | Tool Windows | Gradle" tool window.
|
||||
|
||||
* Launch "ideavim | verification | test" from the tool window.
|
||||
We’re trying to make IdeaVim close to the original Vim both in terms of functionality and architecture.
|
||||
|
||||
5. Build the plugin distribution by running `./gradlew clean buildPlugin` in the
|
||||
terminal in your project root.
|
||||
- Vim motions can be [either inclusive, exclusive, or linewise](http://vimdoc.sourceforge.net/htmldoc/motion.html#inclusive).
|
||||
In IdeaVim, you can use `MotionType` for that.
|
||||
- Have you read the [interesting things](https://github.com/JetBrains/ideavim#some-facts-about-vim) about IdeaVim?
|
||||
Do you remember how `dd`, `yy`, and other similar commands work? `DuplicableOperatorAction` will help you with that.
|
||||
And we also translate it to `d_` and `y_`: `KeyHandler.mapOpCommand()`.
|
||||
- All IdeaVim extensions use the same command names as the originals (e.g. `<Plug>(CommentMotion)`, `<Plug>ReplaceWithRegisterLine`),
|
||||
so you can reuse your `.vimrc` settings.
|
||||
We also support proper command mappings (functions are mapped to `<Plug>...`), the operator function (`OperatorFunction`), and so on.
|
||||
- Magic is supported as well. See `Magic`.
|
||||
|
||||
* The resulting distribution file will be located at build/distributions/IdeaVim-VERSION.zip
|
||||
-----
|
||||
|
||||
* You can install this file by selecting "Settings | Plugins | Install plugin
|
||||
from disk...".
|
||||
### I read the whole page but something is still unclear.
|
||||
|
||||
### Copyright
|
||||
Oh no! No cookies for the maintainers today! Please [tell us](https://github.com/JetBrains/ideavim#contact-maintainers) about it so we can help.
|
||||
|
||||
1. Go to `Preferences | Appearance & Behavior | Scopes`, press "+" button, `Shared`.
|
||||
Name: Copyright scope
|
||||
Pattern: `file[IdeaVIM.main]:com//*||file[IdeaVIM.test]:*/`
|
||||
|
||||
2. Go to `Preferences | Editor | Copyright | Copyright Profiles` and click the "+" button.
|
||||
Name: IdeaVim
|
||||
Text:
|
||||
|
||||
IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||
Copyright (C) 2003-$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/>.
|
||||
|
||||
3. Go to `Preferences | Editor | Copyright`, click the "+" button.
|
||||
Scope: Copyright scope
|
||||
Copyright: IdeaVim
|
||||
|
||||
### Testing
|
||||
### I’ve found a bug in this documentation.
|
||||
|
||||
1. Read about the `@VimBehaviorDiffers` annotation.
|
||||
No beer in the bar for us unless it's fixed. [Let us know](https://github.com/JetBrains/ideavim#contact-maintainers) situation so we might be able to fix it.
|
||||
|
||||
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 – A Discovery" if you don't have one.
|
||||
|
||||
3. Test your functionality properly.
|
||||
Especially check whether your command works with:
|
||||
line start, line end, file start, file end, empty line, multiple carets, dollar motion, etc.
|
||||
### The lack of documentation or a javadoc/ktdoc makes it difficult to start contributing.
|
||||
|
||||
This is just terrible. [You know what to do](https://github.com/JetBrains/ideavim#contact-maintainers).
|
||||
|
||||
### Resources:
|
||||
|
||||
* [Continuous integration builds](https://teamcity.jetbrains.com/project.html?projectId=IdeaVim&guest=1)
|
||||
* [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)
|
||||
* [Plugin homepage](https://plugins.jetbrains.com/plugin/164-ideavim)
|
||||
* [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
|
||||
|
421
README.md
@@ -1,47 +1,49 @@
|
||||
<img src="resources/META-INF/pluginIcon.svg" width="80" height="80" alt="icon" align="left"/>
|
||||
<img src="src/main/resources/META-INF/pluginIcon.svg" width="80" height="80" alt="icon" align="left"/>
|
||||
|
||||
IdeaVim
|
||||
===
|
||||
|
||||
<div>
|
||||
<a href="https://confluence.jetbrains.com/display/ALL/JetBrains+on+GitHub">
|
||||
<img src="https://jb.gg/badges/official.svg" alt="official JetBrains project"/>
|
||||
</a>
|
||||
<a href="https://teamcity.jetbrains.com/viewType.html?buildTypeId=IdeaVim_TestsForIntelliJ20201&guest=1">
|
||||
<img src="https://teamcity.jetbrains.com/app/rest/builds/buildType:(id:IdeaVim_TestsForIntelliJ20201)/statusIcon.svg?guest=1" alt="TeamCity Build"/>
|
||||
</a>
|
||||
</div>
|
||||
[![Official JetBrains Project][jb-official-svg]][jb-official]
|
||||
[![Contributions welcome][contributions-welcome-svg]][contributions-welcome]
|
||||
[![Downloads][plugin-downloads-svg]][plugin-repo]
|
||||
[![Rating][plugin-rating-svg]][plugin-repo]
|
||||
[![Version][plugin-version-svg]][plugin-repo]
|
||||
[![Gitter][gitter-svg]][gitter]
|
||||
[![Twitter][twitter-svg]][twitter]
|
||||
|
||||
IdeaVim is a Vim emulation plugin for IDEs based on the IntelliJ Platform.
|
||||
IdeaVim can be used with IntelliJ IDEA, PyCharm, CLion, PhpStorm, WebStorm,
|
||||
RubyMine, AppCode, DataGrip, GoLand, Rider, Cursive, and Android Studio.
|
||||
IdeaVim is a Vim emulation plugin for IntelliJ Platform-based IDEs.
|
||||
|
||||
Resources:
|
||||
##### Contact maintainers:
|
||||
* [Bug tracker](https://youtrack.jetbrains.com/issues/VIM)
|
||||
* [@IdeaVim](https://twitter.com/ideavim) on Twitter
|
||||
* [Chat on gitter](https://gitter.im/JetBrains/ideavim)
|
||||
* [IdeaVim Channel](https://jb.gg/bi6zp7) on [JetBrains Server](https://discord.gg/jetbrains)
|
||||
|
||||
##### Resources:
|
||||
|
||||
* [Plugin homepage](https://plugins.jetbrains.com/plugin/164-ideavim)
|
||||
* [Changelog](CHANGES.md)
|
||||
* [Bug tracker](https://youtrack.jetbrains.com/issues/VIM)
|
||||
* [Continuous integration builds](https://teamcity.jetbrains.com/project.html?projectId=IdeaVim&guest=1)
|
||||
* [@IdeaVim](https://twitter.com/ideavim) in Twitter
|
||||
|
||||
#### Compatibility
|
||||
|
||||
Installation
|
||||
IntelliJ IDEA, PyCharm, CLion, PhpStorm, WebStorm, RubyMine, AppCode, DataGrip, GoLand, Rider, Cursive,
|
||||
Android Studio and other IntelliJ platform based IDEs.
|
||||
|
||||
Setup
|
||||
------------
|
||||
|
||||
Use the IDE's plugin manager to install the latest version of the plugin.
|
||||
Start the IDE normally and enable the Vim emulation using "Tools | Vim
|
||||
Emulator" menu item. At this point you must use Vim keystrokes in all editors.
|
||||
- IdeaVim can be installed via `Settings | Plugins`.
|
||||
See the [detailed instructions](https://www.jetbrains.com/help/idea/managing-plugins.html#).
|
||||
|
||||
If you wish to disable the plugin, select the "Tools | Vim Emulator" menu so
|
||||
it is unchecked. At this point your IDE will work with its regular keyboard
|
||||
shortcuts.
|
||||
- Use `Tools | Vim Emulator` in the menu to enable or disable emulation.
|
||||
|
||||
Keyboard shortcut conflicts between the Vim emulation and the IDE can be
|
||||
resolved via "File | Settings | Editor | Vim Emulation", "File | Settings |
|
||||
Keymap" on Linux & Windows, and via "Preferences | Editor | Vim Emulation",
|
||||
"Preferences | Keymap" on macOS. They can also be resolved by key-mapping
|
||||
commands in your ~/.ideavimrc file.
|
||||
- Use the `~/.ideavimrc` file as an analog of `~/.vimrc` ([learn more](#Files)). The XDG standard is supported, as well.
|
||||
|
||||
- Shortcut conflicts can be resolved by using:
|
||||
- On Linux & Windows: `File | Settings | Editor | Vim` & `File | Settings | Keymap`,
|
||||
- On macOS: `Preferences | Editor | Vim` & `Preferences | Keymap`,
|
||||
- Regular Vim mappings in the `~/.ideavimrc` file.
|
||||
|
||||
Get Early Access
|
||||
-------------------
|
||||
@@ -49,15 +51,19 @@ Get Early Access
|
||||
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 in the status bar | `EAP` | `Get Early Access...`
|
||||
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`
|
||||
|
||||
|
||||
Or subscribe to EAP updates manually:
|
||||
|
||||
1. Open `Settings | Plugins`
|
||||
2. Click the gear icon :gear:, select `Manage Plugin Repositories`, and add the following url:
|
||||
`https://plugins.jetbrains.com/plugins/eap/ideavim`
|
||||
```
|
||||
https://plugins.jetbrains.com/plugins/eap/ideavim
|
||||
```
|
||||
|
||||
See [the changelog](CHANGES.md) for the list of hot unreleased features.
|
||||
See [the changelog](CHANGES.md) for the list of unreleased features.
|
||||
|
||||
It is important to distinguish EAP builds from traditional pre-release software.
|
||||
Please note that the quality of EAP versions may at times be way below even
|
||||
@@ -71,153 +77,235 @@ You can always leave your feedback with:
|
||||
Summary of Supported Vim Features
|
||||
---------------------------------
|
||||
|
||||
Supported:
|
||||
Here are some examples of supported vim features and commands:
|
||||
|
||||
* Motion keys
|
||||
* Deletion/changing
|
||||
* Insert mode commands
|
||||
* Marks
|
||||
* Registers
|
||||
* Undo/redo
|
||||
* Visual mode commands
|
||||
* Some Ex commands
|
||||
* Some [:set options](doc/set-commands.md)
|
||||
* Full Vim regexps for search and search/replace
|
||||
* Normal / insert / visual / select / etc. modes
|
||||
* Motion / deletion / change / window / etc. commands
|
||||
* Key mappings
|
||||
* Macros
|
||||
* Digraphs
|
||||
* Command line and search history
|
||||
* Window commands
|
||||
* Marks / Macros / Digraphs / Registers
|
||||
* Some [set commands](https://github.com/JetBrains/ideavim/wiki/%22set%22-commands)
|
||||
* Full Vim regexps for search and search/replace
|
||||
* Vim web help
|
||||
* Select mode
|
||||
* `~/.ideavimrc` configuration file
|
||||
|
||||
Emulated Vim plugins:
|
||||
[Emulated Vim plugins](https://github.com/JetBrains/ideavim/wiki/Emulated-plugins):
|
||||
|
||||
* vim-easymotion
|
||||
* NERDTree
|
||||
* vim-surround
|
||||
* vim-multiple-cursors
|
||||
* vim-commentary
|
||||
* argtextobj.vim [To Be Released]
|
||||
* vim-textobj-entire [To Be Released]
|
||||
|
||||
Not supported (yet):
|
||||
|
||||
* Jump lists
|
||||
* Various less-used commands
|
||||
* argtextobj.vim
|
||||
* vim-textobj-entire
|
||||
* ReplaceWithRegister
|
||||
* vim-exchange
|
||||
* vim-highlightedyank
|
||||
* vim-paragraph-motion
|
||||
* vim-indent-object
|
||||
* match.it
|
||||
|
||||
See also:
|
||||
|
||||
* [The list of all supported commands](src/com/maddyhome/idea/vim/package-info.java)
|
||||
* [Top features and bugs](https://youtrack.jetbrains.com/issues/VIM?q=%23Unresolved+sort+by%3A+votes)
|
||||
|
||||
* [The list of all supported commands](src/main/java/com/maddyhome/idea/vim/package-info.java)
|
||||
* [Top feature requests and bugs](https://youtrack.jetbrains.com/issues/VIM?q=%23Unresolved+sort+by%3A+votes)
|
||||
* [Vimscript support roadmap](vimscript-info/VIMSCRIPT_ROADMAP.md)
|
||||
* [List of supported in-build functions](vimscript-info/FUNCTIONS_INFO.MD)
|
||||
|
||||
Files
|
||||
-----
|
||||
|
||||
* ~/.ideavimrc
|
||||
* `~/.ideavimrc`
|
||||
* Your IdeaVim-specific Vim initialization commands
|
||||
|
||||
<details>
|
||||
<summary><strong>Example</strong> (click to see)</summary>
|
||||
|
||||
You can read your ~/.vimrc file from ~/.ideavimrc with this command:
|
||||
```vim
|
||||
""" Map leader to space ---------------------
|
||||
let mapleader=" "
|
||||
|
||||
""" Plugins --------------------------------
|
||||
set surround
|
||||
set multiple-cursors
|
||||
set commentary
|
||||
set argtextobj
|
||||
set easymotion
|
||||
set textobj-entire
|
||||
set ReplaceWithRegister
|
||||
|
||||
""" Plugin settings -------------------------
|
||||
let g:argtextobj_pairs="[:],(:),<:>"
|
||||
|
||||
""" Common settings -------------------------
|
||||
set showmode
|
||||
set so=5
|
||||
set incsearch
|
||||
set nu
|
||||
|
||||
""" Idea specific settings ------------------
|
||||
set ideajoin
|
||||
set ideastatusicon=gray
|
||||
set idearefactormode=keep
|
||||
|
||||
""" Mappings --------------------------------
|
||||
map <leader>f <Plug>(easymotion-s)
|
||||
map <leader>e <Plug>(easymotion-f)
|
||||
|
||||
map <leader>d <Action>(Debug)
|
||||
map <leader>r <Action>(RenameElement)
|
||||
map <leader>c <Action>(Stop)
|
||||
map <leader>z <Action>(ToggleDistractionFreeMode)
|
||||
|
||||
map <leader>s <Action>(SelectInProjectView)
|
||||
map <leader>a <Action>(Annotate)
|
||||
map <leader>h <Action>(Vcs.ShowTabbedFileHistory)
|
||||
map <S-Space> <Action>(GotoNextError)
|
||||
|
||||
map <leader>b <Action>(ToggleLineBreakpoint)
|
||||
map <leader>o <Action>(FileStructurePopup)
|
||||
```
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><strong>Suggested options</strong> (click to see)</summary>
|
||||
|
||||
Here is also a list of the suggested options from [defaults.vim](https://github.com/vim/vim/blob/master/runtime/defaults.vim)
|
||||
|
||||
```vim
|
||||
" Show a few lines of context around the cursor. Note that this makes the
|
||||
" text scroll if you mouse-click near the start or end of the window.
|
||||
set scrolloff=5
|
||||
|
||||
" Do incremental searching.
|
||||
set incsearch
|
||||
|
||||
" Don't use Ex mode, use Q for formatting.
|
||||
map Q gq
|
||||
```
|
||||
</details>
|
||||
|
||||
|
||||
You can read your `~/.vimrc` file from `~/.ideavimrc` with this command:
|
||||
|
||||
source ~/.vimrc
|
||||
|
||||
Note, that IdeaVim currently parses ~/.ideavimrc file via simple pattern matching.
|
||||
See [VIM-669](https://youtrack.jetbrains.com/issue/VIM-669) for proper parsing
|
||||
of VimL files.
|
||||
|
||||
Also note that if you have overridden the `user.home` JVM option, this
|
||||
will affect where IdeaVim looks for your .ideavimrc file. For example, if you
|
||||
will affect where IdeaVim looks for your `.ideavimrc` file. For example, if you
|
||||
have `-Duser.home=/my/alternate/home` then IdeaVim will source
|
||||
`/my/alternate/home/.ideavimrc` instead of `~/.ideavimrc`.
|
||||
|
||||
Alternatively, you can set up initialization commands using [XDG](https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html) standard.
|
||||
Put your settings to `$XDG_CONFIG_HOME$/ideavim/ideavimrc` file.
|
||||
Put your settings to `$XDG_CONFIG_HOME/ideavim/ideavimrc` file.
|
||||
|
||||
|
||||
Emulated Vim Plugins
|
||||
--------------------
|
||||
|
||||
IdeaVim extensions emulate some plugins of the original Vim. In order to use
|
||||
IdeaVim extensions, you have to enable them via this command in your `~/.ideavimrc`:
|
||||
See [doc/emulated-plugins.md](https://github.com/JetBrains/ideavim/wiki/Emulated-plugins)
|
||||
|
||||
set <extension-name>
|
||||
Executing IDE Actions
|
||||
---------------------
|
||||
|
||||
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.
|
||||
* `set easymotion`
|
||||
* 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).
|
||||
|
||||
* surround
|
||||
* Setup: `set surround`
|
||||
* Emulates [vim-surround](https://github.com/tpope/vim-surround)
|
||||
* Commands: `ys`, `cs`, `ds`, `S`
|
||||
|
||||
* multiple-cursors
|
||||
* Setup: `set multiple-cursors`
|
||||
* Emulates [vim-multiple-cursors](https://github.com/terryma/vim-multiple-cursors)
|
||||
* Commands: `<A-n>`, `<A-x>`, `<A-p>`, `g<A-n>`
|
||||
|
||||
* commentary
|
||||
* Setup: `set commentary`
|
||||
* Emulates [commentary.vim](https://github.com/tpope/vim-commentary)
|
||||
* Commands: `gcc`, `gc + motion`, `v_gc`
|
||||
|
||||
* argtextobj [To Be Released]
|
||||
* Setup: `set argtextobj`
|
||||
* Emulates [argtextobj.vim](https://www.vim.org/scripts/script.php?script_id=2699)
|
||||
* Additional text objects: `aa`, `ia`
|
||||
|
||||
* textobj-entire [To Be Released]
|
||||
* Setup: `set textobj-entire`
|
||||
* Emulates [vim-textobj-entire](https://github.com/kana/vim-textobj-entire)
|
||||
* Additional text objects: `ae`, `ie`
|
||||
|
||||
|
||||
Changes to the IDE
|
||||
------------------
|
||||
|
||||
### Undo/Redo
|
||||
|
||||
The IdeaVim plugin uses the undo/redo functionality of the IntelliJ Platform,
|
||||
so the behavior of the `u` and `<C-R>` commands may differ from the original
|
||||
Vim. Vim compatibility of undo/redo may be improved in future releases.
|
||||
|
||||
See also [unresolved undo issues](https://youtrack.jetbrains.com/issues/VIM?q=%23Unresolved+Help+topic%3A+u).
|
||||
|
||||
### Escape
|
||||
|
||||
Using `<Esc>` in dialog windows remains problematic. For most dialog windows,
|
||||
the Vim emulator is put into insert mode with `<Esc>` not working. You
|
||||
should use `<C-c>` or `<C-[>` instead. In some dialog windows, the normal mode is
|
||||
switched by default. The usage of the Vim emulator in dialog windows is an area for
|
||||
improvement.
|
||||
|
||||
See also [unresolved escape issues](https://youtrack.jetbrains.com/issues/VIM?q=%23Unresolved+Help+topic%3A+i_Esc).
|
||||
|
||||
### Executing IDE Actions
|
||||
|
||||
IdeaVim adds two commands for listing and executing arbitrary IDE actions as
|
||||
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).
|
||||
|
||||
### Finding action ids:
|
||||
|
||||
* IJ provides `IdeaVim: track action Ids` command to show the id of the executed actions.
|
||||
This command can be found in "Search everywhere" (double `shift`).
|
||||
|
||||
<details>
|
||||
<summary><strong>"Track action Ids" Details</strong> (click to see)</summary>
|
||||
<img src="assets/readme/track_action_id.gif" alt="track action ids"/>
|
||||
</details>
|
||||
|
||||
|
||||
* `:actionlist [pattern]`
|
||||
* Find IDE actions by name or keymap pattern (E.g. `:actionlist extract`, `:actionlist <C-D`)
|
||||
* `:action {name}`
|
||||
* Execute an action named `NAME`
|
||||
* Find IDE actions by id or keymap pattern (E.g. `:actionlist extract`, `:actionlist <C-D`)
|
||||
|
||||
For example, here `\r` is mapped to the Reformat Code action:
|
||||
##### Examples:
|
||||
|
||||
:map \r :action ReformatCode<CR>
|
||||
```vim
|
||||
" Map \r to the Reformat Code action
|
||||
:map \r <Action>(ReformatCode)
|
||||
|
||||
" Map <leader>d to start debug
|
||||
:map <leader>d <Action>(Debug)
|
||||
|
||||
Contributing
|
||||
" Map \b to toggle the breakpoint on the current line
|
||||
:map \b <Action>(ToggleLineBreakpoint)
|
||||
```
|
||||
|
||||
##### Some popular actions:
|
||||
|
||||
```
|
||||
QuickJavaDoc - Quick Documentation (not only for java, all languages)
|
||||
ShowErrorDescription - Show description of the error under the caret (cursor hovering)
|
||||
QuickImplementations - Quick Definition
|
||||
```
|
||||
|
||||
Vim Script
|
||||
------------
|
||||
|
||||
See [CONTRIBUTING.md](CONTRIBUTING.md)
|
||||
IdeaVim can execute custom scripts that are written with Vim Script.
|
||||
At the moment we support all language features, but not all of the built-in functions and options are supported.
|
||||
|
||||
Additionally, you may be interested in the
|
||||
[Vim Script Discussion](https://github.com/JetBrains/ideavim/discussions/357) or
|
||||
[Vim Script Roadmap](https://github.com/JetBrains/ideavim/blob/master/vimscript-info/VIMSCRIPT_ROADMAP.md).
|
||||
|
||||
|
||||
### IDE specific options
|
||||
|
||||
You can evaluate the `has('ide')` function call and get `1` if it was called with IdeaVim or `0` if the function was called from Vim/NeoVim.
|
||||
The option `&ide` contains the name and edition of your IDE, for example, "IntelliJ IDEA Ultimate Edition".
|
||||
To see its value for the current IDE you are using, execute the `:echo &ide` command.
|
||||
To write an IDE-specific configuration, use Vim's regexp match operators `=~?` (case-insensitive) / `=~#` (case-sensitive)
|
||||
|
||||
**Example config:**
|
||||
|
||||
```vim
|
||||
" options and mappings that are supported by both Vim and IdeaVim
|
||||
set nu
|
||||
set relativenumber
|
||||
|
||||
if has('ide')
|
||||
" mappings and options that exist only in IdeaVim
|
||||
map <leader>f <Action>(GotoFile)
|
||||
map <leader>g <Action>(FindInPath)
|
||||
map <leader>b <Action>(Switcher)
|
||||
|
||||
if &ide =~? 'intellij idea'
|
||||
if &ide =~? 'community'
|
||||
" some mappings and options for IntelliJ IDEA Community Edition
|
||||
elseif &ide =~? 'ultimate'
|
||||
" some mappings and options for IntelliJ IDEA Ultimate Edition
|
||||
endif
|
||||
elseif &ide =~? 'pycharm'
|
||||
" PyCharm specific mappings and options
|
||||
endif
|
||||
else
|
||||
" some mappings for Vim/Neovim
|
||||
nnoremap <leader>f <cmd>Telescope find_files<cr>
|
||||
endif
|
||||
```
|
||||
|
||||
:gem: Contributing
|
||||
------------
|
||||
|
||||
The power of contributing drives IdeaVim :muscle:. Even small contributions matter!
|
||||
|
||||
See [CONTRIBUTING.md](CONTRIBUTING.md) to start bringing your value to the project.
|
||||
|
||||
Authors
|
||||
-------
|
||||
@@ -225,9 +313,72 @@ Authors
|
||||
See [AUTHORS.md](AUTHORS.md)
|
||||
for a list of authors and contributors.
|
||||
|
||||
IdeaVim tips and tricks
|
||||
-------
|
||||
|
||||
- Use the power of IJ and Vim:
|
||||
- `set ideajoin` to enable join via the IDE. See the [examples](https://jb.gg/f9zji9).
|
||||
- Make sure `ideaput` is enabled for `clipboard` to enable native IJ insertion in Vim.
|
||||
- Sync IJ bookmarks and Vim marks: `set ideamarks`
|
||||
- Check out more [ex commands](https://github.com/JetBrains/ideavim/wiki/%22set%22-commands).
|
||||
|
||||
- Use your vim settings with IdeaVim. Put `source ~/.vimrc` in `~/.ideavimrc`.
|
||||
- Control the status bar icon via the [`ideastatusicon` option](https://github.com/JetBrains/ideavim/wiki/%22set%22-commands).
|
||||
- Not familiar with the default behaviour during a refactoring? See the [`idearefactormode` option](https://github.com/JetBrains/ideavim/wiki/%22set%22-commands).
|
||||
|
||||
Some facts about Vim
|
||||
-------
|
||||
|
||||
Let’s relax and have some fun now! Here are a few things we've found interesting during development
|
||||
and would like to share with you.
|
||||
|
||||
- There are no such commands as `dd`, `yy`, or `cc`. For example, `dd` is not a separate command for deleting the line,
|
||||
but a `d` command with a `d` motion.
|
||||
Wait, but there isn't a `d` motion in Vim! That’s right, and that’s why Vim has a dedicated set of commands
|
||||
for which it checks whether the
|
||||
[command equals to motion](https://github.com/vim/vim/blob/759d81549c1340185f0d92524c563bb37697ea88/src/normal.c#L6468)
|
||||
and if so, it executes `_` motion instead.
|
||||
`_` is an interesting motion that isn't even documented in vi, and it refers to the current line.
|
||||
So, commands like `dd`, `yy`, and similar ones are simply translated to `d_`, `y_`, etc.
|
||||
[Here](https://github.com/vim/vim/blob/759d81549c1340185f0d92524c563bb37697ea88/src/normal.c#L6502)
|
||||
is the source of this knowledge.
|
||||
|
||||
- `x`, `D`, and `&` are not separate commands either. They are synonyms of `dl`, `d$`, and `:s\r`, respectively.
|
||||
[Here](https://github.com/vim/vim/blob/759d81549c1340185f0d92524c563bb37697ea88/src/normal.c#L5365)
|
||||
is the full list of synonyms.
|
||||
|
||||
- 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).
|
||||
|
||||
- Other [strange things](https://github.com/vim/vim/blob/759d81549c1340185f0d92524c563bb37697ea88/src/ex_docmd.c#L1845) from vi:
|
||||
* ":3" jumps to line 3
|
||||
* ":3|..." prints line 3
|
||||
* ":|" prints current line
|
||||
|
||||
- Vim script doesn't skip white space before comma. `F(a ,b)` => E475.
|
||||
|
||||
License
|
||||
-------
|
||||
|
||||
IdeaVim is licensed under the terms of the GNU Public License version 2
|
||||
or any later version.
|
||||
|
||||
|
||||
<!-- Badges -->
|
||||
[jb-official]: https://confluence.jetbrains.com/display/ALL/JetBrains+on+GitHub
|
||||
[jb-official-svg]: https://jb.gg/badges/official.svg
|
||||
|
||||
[plugin-repo]: https://plugins.jetbrains.com/plugin/164-ideavim
|
||||
[plugin-downloads-svg]: http://img.shields.io/jetbrains/plugin/d/IdeaVIM
|
||||
[plugin-rating-svg]: http://img.shields.io/jetbrains/plugin/r/rating/IdeaVIM
|
||||
[plugin-version-svg]: https://img.shields.io/jetbrains/plugin/v/ideavim?label=version
|
||||
|
||||
[gitter-svg]: https://badges.gitter.im/JetBrains/ideavim.svg
|
||||
[gitter]: https://gitter.im/JetBrains/ideavim?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge
|
||||
|
||||
[twitter]: https://twitter.com/ideavim
|
||||
[twitter-svg]: https://img.shields.io/twitter/follow/ideavim?label=twitter%20%40ideavim
|
||||
|
||||
[contributions-welcome-svg]: http://img.shields.io/badge/contributions-welcome-brightgreen
|
||||
[contributions-welcome]: https://github.com/JetBrains/ideavim/blob/master/CONTRIBUTING.md
|
||||
|
BIN
assets/changes/0.58/reload_ideavimrc.png
Normal file
After Width: | Height: | Size: 194 KiB |
BIN
assets/changes/0.59/highlight_yank.gif
Normal file
After Width: | Height: | Size: 128 KiB |
BIN
assets/changes/0.65/nerdtree.gif
Normal file
After Width: | Height: | Size: 32 MiB |
BIN
assets/contributing/configurations.png
Normal file
After Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 638 B After Width: | Height: | Size: 638 B |
Before Width: | Height: | Size: 364 B After Width: | Height: | Size: 364 B |
Before Width: | Height: | Size: 282 B After Width: | Height: | Size: 282 B |
BIN
assets/readme/track_action_id.gif
Normal file
After Width: | Height: | Size: 2.1 MiB |
88
build.gradle
@@ -1,88 +0,0 @@
|
||||
buildscript {
|
||||
repositories {
|
||||
mavenCentral()
|
||||
}
|
||||
|
||||
dependencies {
|
||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion"
|
||||
}
|
||||
}
|
||||
|
||||
plugins {
|
||||
id 'org.jetbrains.intellij' version '0.4.16'
|
||||
}
|
||||
|
||||
apply plugin: 'java'
|
||||
apply plugin: 'kotlin'
|
||||
|
||||
sourceCompatibility = javaVersion
|
||||
targetCompatibility = javaVersion
|
||||
|
||||
tasks.withType(JavaCompile) { options.encoding = 'UTF-8' }
|
||||
|
||||
sourceSets {
|
||||
main {
|
||||
java.srcDir 'src'
|
||||
resources.srcDir 'resources'
|
||||
}
|
||||
test {
|
||||
java.srcDir 'test'
|
||||
}
|
||||
}
|
||||
|
||||
intellij {
|
||||
version ideaVersion
|
||||
pluginName 'IdeaVim'
|
||||
updateSinceUntilBuild false
|
||||
downloadSources Boolean.valueOf(downloadIdeaSources)
|
||||
instrumentCode Boolean.valueOf(instrumentPluginCode)
|
||||
intellijRepo = "https://www.jetbrains.com/intellij-repository"
|
||||
if (!Boolean.valueOf(legacyNoJavaPlugin)) {
|
||||
// Since 192 version of IJ java plugin should be defined separately
|
||||
// Set `legacyNoJavaPlugin` to true if you are going to run tests under idea version < 192
|
||||
plugins = ['java']
|
||||
}
|
||||
|
||||
publishPlugin {
|
||||
channels publishChannels.split(',')
|
||||
username publishUsername
|
||||
token publishToken
|
||||
}
|
||||
}
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
}
|
||||
|
||||
dependencies {
|
||||
compileOnly "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlinVersion"
|
||||
compileOnly "org.jetbrains:annotations:19.0.0"
|
||||
}
|
||||
|
||||
compileKotlin {
|
||||
kotlinOptions {
|
||||
jvmTarget = javaVersion
|
||||
}
|
||||
}
|
||||
compileTestKotlin {
|
||||
kotlinOptions {
|
||||
jvmTarget = javaVersion
|
||||
}
|
||||
}
|
||||
|
||||
tasks.register("slackEapNotification") {
|
||||
doLast {
|
||||
if (!slackUrl) return
|
||||
def post = new URL(slackUrl).openConnection()
|
||||
def message = "{\"text\":\"New EAP released: $version\"}"
|
||||
post.setRequestMethod("POST")
|
||||
post.setDoOutput(true)
|
||||
post.setRequestProperty("Content-Type", "application/json")
|
||||
post.getOutputStream().write(message.getBytes("UTF-8"))
|
||||
def postRC = post.getResponseCode()
|
||||
println(postRC)
|
||||
if(postRC.equals(200)) {
|
||||
println(post.getInputStream().getText())
|
||||
}
|
||||
}
|
||||
}
|
575
build.gradle.kts
Normal file
@@ -0,0 +1,575 @@
|
||||
|
||||
import dev.feedforward.markdownto.DownParser
|
||||
import org.intellij.markdown.ast.getTextInNode
|
||||
import java.net.HttpURLConnection
|
||||
import java.net.URL
|
||||
|
||||
buildscript {
|
||||
repositories {
|
||||
mavenCentral()
|
||||
maven { url = uri("https://jitpack.io") }
|
||||
}
|
||||
|
||||
dependencies {
|
||||
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.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.kohsuke:github-api:1.305")
|
||||
classpath("org.jetbrains:markdown:0.3.1")
|
||||
}
|
||||
}
|
||||
|
||||
plugins {
|
||||
antlr
|
||||
java
|
||||
kotlin("jvm") version "1.6.21"
|
||||
|
||||
id("org.jetbrains.intellij") version "1.6.0"
|
||||
id("org.jetbrains.changelog") version "1.3.1"
|
||||
|
||||
// ktlint linter - read more: https://github.com/JLLeitschuh/ktlint-gradle
|
||||
id("org.jlleitschuh.gradle.ktlint") version "10.2.1"
|
||||
}
|
||||
|
||||
// Import variables from gradle.properties file
|
||||
val javaVersion: String by project
|
||||
val kotlinVersion: String by project
|
||||
val ideaVersion: String by project
|
||||
val downloadIdeaSources: String by project
|
||||
val instrumentPluginCode: String by project
|
||||
val remoteRobotVersion: String by project
|
||||
val antlrVersion: String by project
|
||||
|
||||
val publishChannels: String by project
|
||||
val publishToken: String by project
|
||||
|
||||
val slackUrl: String by project
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
maven { url = uri("https://cache-redirector.jetbrains.com/intellij-dependencies") }
|
||||
}
|
||||
|
||||
dependencies {
|
||||
compileOnly("org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlinVersion")
|
||||
compileOnly("org.jetbrains:annotations:23.0.0")
|
||||
|
||||
// https://mvnrepository.com/artifact/com.ensarsarajcic.neovim.java/neovim-api
|
||||
testImplementation("com.ensarsarajcic.neovim.java:neovim-api:0.2.3")
|
||||
testImplementation("com.ensarsarajcic.neovim.java:core-rpc:0.2.3")
|
||||
|
||||
// https://mvnrepository.com/artifact/org.jetbrains.kotlin/kotlin-test
|
||||
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("com.intellij.remoterobot:remote-robot:$remoteRobotVersion")
|
||||
testImplementation("com.intellij.remoterobot:remote-fixtures:$remoteRobotVersion")
|
||||
testImplementation("com.automation-remarks:video-recorder-junit:2.0")
|
||||
runtimeOnly("org.antlr:antlr4-runtime:$antlrVersion")
|
||||
antlr("org.antlr:antlr4:$antlrVersion")
|
||||
|
||||
implementation(project(":vim-engine"))
|
||||
}
|
||||
|
||||
configurations {
|
||||
runtimeClasspath {
|
||||
exclude(group = "org.antlr", module = "antlr4")
|
||||
}
|
||||
}
|
||||
|
||||
// --- Compilation
|
||||
// This can be moved to other test registration when issue with tests in gradle will be fixed
|
||||
tasks.register<Test>("testWithNeovim") {
|
||||
group = "verification"
|
||||
systemProperty("ideavim.nvim.test", "true")
|
||||
exclude("/ui/**")
|
||||
}
|
||||
|
||||
tasks.register<Test>("testPropertyBased") {
|
||||
group = "verification"
|
||||
// include("**/propertybased/**")
|
||||
}
|
||||
|
||||
tasks.register<Test>("testLongRunning") {
|
||||
group = "verification"
|
||||
// include("**/longrunning/**")
|
||||
}
|
||||
|
||||
tasks {
|
||||
// Issue in gradle 7.3
|
||||
val test by getting(Test::class) {
|
||||
isScanForTestClasses = false
|
||||
// Only run tests from classes that end with "Test"
|
||||
include("**/*Test.class")
|
||||
include("**/*test.class")
|
||||
include("**/*Tests.class")
|
||||
exclude("**/ParserTest.class")
|
||||
}
|
||||
|
||||
val testWithNeovim by getting(Test::class) {
|
||||
isScanForTestClasses = false
|
||||
// Only run tests from classes that end with "Test"
|
||||
include("**/*Test.class")
|
||||
include("**/*test.class")
|
||||
include("**/*Tests.class")
|
||||
exclude("**/ParserTest.class")
|
||||
}
|
||||
|
||||
val testPropertyBased by getting(Test::class) {
|
||||
isScanForTestClasses = false
|
||||
// Only run tests from classes that end with "Test"
|
||||
include("**/propertybased/*Test.class")
|
||||
include("**/propertybased/*test.class")
|
||||
include("**/propertybased/*Tests.class")
|
||||
}
|
||||
|
||||
val testLongRunning by getting(Test::class) {
|
||||
isScanForTestClasses = false
|
||||
// Only run tests from classes that end with "Test"
|
||||
include("**/longrunning/**/*Test.class")
|
||||
include("**/longrunning/**/*test.class")
|
||||
include("**/longrunning/**/*Tests.class")
|
||||
exclude("**/longrunning/**/ParserTest.class")
|
||||
}
|
||||
|
||||
compileJava {
|
||||
sourceCompatibility = javaVersion
|
||||
targetCompatibility = javaVersion
|
||||
|
||||
options.encoding = "UTF-8"
|
||||
}
|
||||
|
||||
compileKotlin {
|
||||
kotlinOptions {
|
||||
jvmTarget = javaVersion
|
||||
apiVersion = "1.5"
|
||||
// allWarningsAsErrors = true
|
||||
}
|
||||
}
|
||||
compileTestKotlin {
|
||||
kotlinOptions {
|
||||
jvmTarget = javaVersion
|
||||
apiVersion = "1.5"
|
||||
// allWarningsAsErrors = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
gradle.projectsEvaluated {
|
||||
tasks.compileJava {
|
||||
// options.compilerArgs.add("-Werror")
|
||||
options.compilerArgs.add("-Xlint:deprecation")
|
||||
}
|
||||
}
|
||||
|
||||
// --- Intellij plugin
|
||||
|
||||
intellij {
|
||||
version.set(ideaVersion)
|
||||
pluginName.set("IdeaVim")
|
||||
|
||||
updateSinceUntilBuild.set(false)
|
||||
|
||||
downloadSources.set(downloadIdeaSources.toBoolean())
|
||||
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"))
|
||||
}
|
||||
|
||||
tasks {
|
||||
downloadRobotServerPlugin {
|
||||
version.set(remoteRobotVersion)
|
||||
}
|
||||
|
||||
publishPlugin {
|
||||
channels.set(publishChannels.split(","))
|
||||
token.set(publishToken)
|
||||
}
|
||||
|
||||
runIdeForUiTests {
|
||||
systemProperty("robot-server.port", "8082")
|
||||
systemProperty("ide.mac.message.dialogs.as.sheets", "false")
|
||||
systemProperty("jb.privacy.policy.text", "<!--999.999-->")
|
||||
systemProperty("jb.consents.confirmation.enabled", "false")
|
||||
}
|
||||
|
||||
runPluginVerifier {
|
||||
downloadDir.set("${project.buildDir}/pluginVerifier/ides")
|
||||
teamCityOutputFormat.set(true)
|
||||
ideVersions.set(listOf("IC-2021.3.4"))
|
||||
}
|
||||
|
||||
generateGrammarSource {
|
||||
maxHeapSize = "128m"
|
||||
arguments.addAll(listOf("-package", "com.maddyhome.idea.vim.vimscript.parser.generated", "-visitor"))
|
||||
outputDirectory = file("src/main/java/com/maddyhome/idea/vim/vimscript/parser/generated")
|
||||
}
|
||||
|
||||
named("compileKotlin") {
|
||||
dependsOn("generateGrammarSource")
|
||||
}
|
||||
}
|
||||
|
||||
// --- Linting
|
||||
|
||||
ktlint {
|
||||
disabledRules.add("no-wildcard-imports")
|
||||
}
|
||||
|
||||
// --- Tests
|
||||
|
||||
tasks {
|
||||
test {
|
||||
exclude("**/propertybased/**")
|
||||
exclude("**/longrunning/**")
|
||||
exclude("/ui/**")
|
||||
}
|
||||
}
|
||||
|
||||
tasks.register<Test>("testUi") {
|
||||
group = "verification"
|
||||
include("/ui/**")
|
||||
}
|
||||
|
||||
// --- Changelog
|
||||
|
||||
changelog {
|
||||
groups.set(listOf("Features:", "Changes:", "Deprecations:", "Fixes:", "Merged PRs:"))
|
||||
itemPrefix.set("*")
|
||||
path.set("${project.projectDir}/CHANGES.md")
|
||||
unreleasedTerm.set("To Be Released")
|
||||
headerParserRegex.set("\\d\\.\\d+(.\\d+)?".toRegex())
|
||||
// header = { "${project.version}" }
|
||||
// version = "0.60"
|
||||
}
|
||||
|
||||
tasks.register("getUnreleasedChangelog") {
|
||||
group = "changelog"
|
||||
doLast {
|
||||
val log = changelog.getUnreleased().toHTML()
|
||||
println(log)
|
||||
}
|
||||
}
|
||||
|
||||
// --- Slack notification
|
||||
|
||||
tasks.register("slackNotification") {
|
||||
doLast {
|
||||
if (slackUrl.isBlank()) {
|
||||
println("Slack Url is not defined")
|
||||
return@doLast
|
||||
}
|
||||
val changeLog = changelog.getLatest().toText()
|
||||
val slackDown = DownParser(changeLog, true).toSlack().toString()
|
||||
|
||||
//language=JSON
|
||||
val message = """
|
||||
{
|
||||
"text": "New version of IdeaVim",
|
||||
"blocks": [
|
||||
{
|
||||
"type": "section",
|
||||
"text": {
|
||||
"type": "mrkdwn",
|
||||
"text": "IdeaVim $version has been released\n$slackDown"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
""".trimIndent()
|
||||
|
||||
println("Parsed data: $slackDown")
|
||||
val post = URL(slackUrl)
|
||||
with(post.openConnection() as HttpURLConnection) {
|
||||
requestMethod = "POST"
|
||||
doOutput = true
|
||||
setRequestProperty("Content-Type", "application/json")
|
||||
|
||||
outputStream.write(message.toByteArray())
|
||||
|
||||
val postRc = responseCode
|
||||
println("Response code: $postRc")
|
||||
if (postRc == 200) {
|
||||
println(inputStream.bufferedReader().use { it.readText() })
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// --- Update authors
|
||||
|
||||
tasks.register("updateAuthors") {
|
||||
doLast {
|
||||
val uncheckedEmails = setOf(
|
||||
"aleksei.plate@jetbrains.com",
|
||||
"aleksei.plate@teamcity",
|
||||
"aleksei.plate@TeamCity",
|
||||
"alex.plate@192.168.0.109"
|
||||
)
|
||||
updateAuthors(uncheckedEmails)
|
||||
}
|
||||
}
|
||||
|
||||
val prId: String by project
|
||||
|
||||
tasks.register("updateMergedPr") {
|
||||
doLast {
|
||||
if (project.hasProperty("prId")) {
|
||||
updateMergedPr(prId.toInt())
|
||||
} else {
|
||||
error("Cannot get prId")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
tasks.register("updateChangelog") {
|
||||
doLast {
|
||||
updateChangelog()
|
||||
}
|
||||
}
|
||||
|
||||
tasks.register("testUpdateChangelog") {
|
||||
group = "verification"
|
||||
description = "This is a task to manually assert the correctness of the update tasks"
|
||||
doLast {
|
||||
val changesFile = File("$projectDir/CHANGES.md")
|
||||
val changes = changesFile.readText()
|
||||
|
||||
val changesBuilder = StringBuilder(changes)
|
||||
val insertOffset = setupSection(changes, changesBuilder, "### Changes:")
|
||||
|
||||
changesBuilder.insert(insertOffset, "--Hello--\n")
|
||||
|
||||
changesFile.writeText(changesBuilder.toString())
|
||||
}
|
||||
}
|
||||
|
||||
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")
|
||||
}
|
||||
}
|
||||
|
||||
// Update changes file
|
||||
val changesFile = File("$projectDir/CHANGES.md")
|
||||
val changes = changesFile.readText()
|
||||
|
||||
val changesBuilder = StringBuilder(changes)
|
||||
val insertOffset = setupSection(changes, changesBuilder, "### Fixes:")
|
||||
|
||||
if (insertOffset < 50) error("Incorrect offset: $insertOffset")
|
||||
|
||||
val firstPartOfChanges = changes.take(insertOffset)
|
||||
val actualFixes = newFixes
|
||||
.filterNot { it.id in firstPartOfChanges }
|
||||
val newUpdates = actualFixes
|
||||
.joinToString("") { "* [${it.id}](https://youtrack.jetbrains.com/issue/${it.id}) ${it.text}\n" }
|
||||
|
||||
changesBuilder.insert(insertOffset, newUpdates)
|
||||
if (actualFixes.isNotEmpty()) {
|
||||
changesFile.writeText(changesBuilder.toString())
|
||||
}
|
||||
}
|
||||
|
||||
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 lastSuccessfulCommit = System.getenv("SUCCESS_COMMIT")!!
|
||||
val hashesAndEmailes = git.log().call()
|
||||
.takeWhile {
|
||||
!it.id.name.equals(lastSuccessfulCommit, ignoreCase = true)
|
||||
}
|
||||
.associate { it.authorIdent.emailAddress to it.name }
|
||||
|
||||
println("Last successful commit: $lastSuccessfulCommit")
|
||||
println("Amount of commits: ${hashesAndEmailes.size}")
|
||||
println("Emails: ${hashesAndEmailes.keys}")
|
||||
val gitHub = org.kohsuke.github.GitHub.connect()
|
||||
val ghRepository = gitHub.getRepository("JetBrains/ideavim")
|
||||
val users = mutableSetOf<Author>()
|
||||
println("Start emails processing")
|
||||
for ((email, hash) in hashesAndEmailes) {
|
||||
println("Processing '$email'...")
|
||||
if (email in uncheckedEmails) {
|
||||
println("Email '$email' is in unchecked emails. Skip it")
|
||||
continue
|
||||
}
|
||||
if ("dependabot[bot]@users.noreply.github.com" in email) {
|
||||
println("Email '$email' is from dependabot. Skip it")
|
||||
continue
|
||||
}
|
||||
val user = ghRepository.getCommit(hash).author
|
||||
val htmlUrl = user.htmlUrl.toString()
|
||||
val name = user.name ?: user.login
|
||||
users.add(Author(name, htmlUrl, email))
|
||||
}
|
||||
|
||||
println("Emails processed")
|
||||
val authorsFile = File("$projectDir/AUTHORS.md")
|
||||
val authors = authorsFile.readText()
|
||||
val parser =
|
||||
org.intellij.markdown.parser.MarkdownParser(org.intellij.markdown.flavours.gfm.GFMFlavourDescriptor())
|
||||
val tree = parser.buildMarkdownTreeFromString(authors)
|
||||
|
||||
val contributorsSection = tree.children[24]
|
||||
val existingEmails = mutableSetOf<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()
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
val newAuthors = users.filterNot { it.mail in existingEmails }
|
||||
if (newAuthors.isEmpty()) return
|
||||
|
||||
val authorNames = newAuthors.joinToString(", ") { it.name }
|
||||
println("::set-output name=authors::$authorNames")
|
||||
|
||||
val insertionString = newAuthors.toMdString()
|
||||
val resultingString = StringBuffer(authors).insert(contributorsSection.endOffset, insertionString).toString()
|
||||
|
||||
authorsFile.writeText(resultingString)
|
||||
}
|
||||
|
||||
fun List<Author>.toMdString(): String {
|
||||
return this.joinToString {
|
||||
"""
|
||||
|
|
||||
|* [![icon][mail]](mailto:${it.mail})
|
||||
| [![icon][github]](${it.url})
|
||||
|
|
||||
| ${it.name}
|
||||
""".trimMargin()
|
||||
}
|
||||
}
|
||||
|
||||
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 repository = gitHub.getRepository("JetBrains/ideavim")
|
||||
val pullRequest = repository.getPullRequest(number)
|
||||
if (pullRequest.user.login == "dependabot[bot]") return
|
||||
|
||||
val changesFile = File("$projectDir/CHANGES.md")
|
||||
val changes = changesFile.readText()
|
||||
|
||||
val changesBuilder = StringBuilder(changes)
|
||||
val insertOffset = setupSection(changes, changesBuilder, "### Merged PRs:")
|
||||
|
||||
if (insertOffset < 50) error("Incorrect offset: $insertOffset")
|
||||
if (pullRequest.user.login == "dependabot[bot]") return
|
||||
|
||||
val prNumber = pullRequest.number
|
||||
val userName = pullRequest.user.name
|
||||
val login = pullRequest.user.login
|
||||
val title = pullRequest.title
|
||||
val section =
|
||||
"* [$prNumber](https://github.com/JetBrains/ideavim/pull/$prNumber) by [$userName](https://github.com/$login): $title\n"
|
||||
changesBuilder.insert(insertOffset, section)
|
||||
|
||||
changesFile.writeText(changesBuilder.toString())
|
||||
}
|
||||
|
||||
fun setupSection(
|
||||
changes: String,
|
||||
authorsBuilder: StringBuilder,
|
||||
sectionName: String,
|
||||
): Int {
|
||||
val parser =
|
||||
org.intellij.markdown.parser.MarkdownParser(org.intellij.markdown.flavours.gfm.GFMFlavourDescriptor())
|
||||
val tree = parser.buildMarkdownTreeFromString(changes)
|
||||
|
||||
var idx = -1
|
||||
for (index in tree.children.indices) {
|
||||
if (tree.children[index].getTextInNode(changes).startsWith("## ")) {
|
||||
idx = index
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
val hasToBeReleased = tree.children[idx].getTextInNode(changes).contains("To Be Released")
|
||||
return if (hasToBeReleased) {
|
||||
var mrgIdx = -1
|
||||
for (index in (idx + 1) until tree.children.lastIndex) {
|
||||
val textInNode = tree.children[index].getTextInNode(changes)
|
||||
val foundIndex = textInNode.startsWith(sectionName)
|
||||
if (foundIndex) {
|
||||
var filledPr = index + 2
|
||||
while (tree.children[filledPr].getTextInNode(changes).startsWith("*")) {
|
||||
filledPr++
|
||||
}
|
||||
mrgIdx = tree.children[filledPr].startOffset + 1
|
||||
break
|
||||
} else {
|
||||
val currentSectionIndex = sections.indexOf(sectionName)
|
||||
val insertHere = textInNode.startsWith("## ") ||
|
||||
textInNode.startsWith("### ") &&
|
||||
sections.indexOfFirst { textInNode.startsWith(it) }
|
||||
.let { if (it < 0) false else it > currentSectionIndex }
|
||||
if (insertHere) {
|
||||
val section = """
|
||||
$sectionName
|
||||
|
||||
|
||||
""".trimIndent()
|
||||
authorsBuilder.insert(tree.children[index].startOffset, section)
|
||||
mrgIdx = tree.children[index].startOffset + (section.length - 1)
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
mrgIdx
|
||||
} else {
|
||||
val section = """
|
||||
## To Be Released
|
||||
|
||||
$sectionName
|
||||
|
||||
|
||||
""".trimIndent()
|
||||
authorsBuilder.insert(tree.children[idx].startOffset, section)
|
||||
tree.children[idx].startOffset + (section.length - 1)
|
||||
}
|
||||
}
|
||||
|
||||
val sections = listOf(
|
||||
"### Features:",
|
||||
"### Changes:",
|
||||
"### Fixes:",
|
||||
"### Merged PRs:",
|
||||
)
|
6
config/ktlint/baseline.xml
Normal file
@@ -0,0 +1,6 @@
|
||||
<?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>
|
248
doc/Emulated-plugins.md
Normal file
@@ -0,0 +1,248 @@
|
||||
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)
|
6
doc/Home.md
Normal file
@@ -0,0 +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]]
|
||||
- Docs about "select" mode in vim: [[select mode|Select-mode]]
|
73
doc/NERDTree-support.md
Normal file
@@ -0,0 +1,73 @@
|
||||
# NERDTree
|
||||
|
||||
IdeaVim supports emulation of the NERDTree plugin. Update your `~/.ideavimrc` to turn it on:
|
||||
```vim
|
||||
Plug 'preservim/nerdtree`
|
||||
```
|
||||
or
|
||||
```vim
|
||||
set NERDTree
|
||||
```
|
||||
Use `set noNERDTree` to disable this extension.
|
||||
|
||||
<details>
|
||||
<summary>Full list of aliases</summary>
|
||||
|
||||
```vim
|
||||
set NERDTree
|
||||
Plug 'preservim/nerdtree`
|
||||
Plug 'https://github.com/preservim/nerdtree'
|
||||
Plug 'https://github.com/scrooloose/nerdtree'
|
||||
Plug 'scrooloose/nerdtree'
|
||||
Plug 'nerdtree'
|
||||
```
|
||||
</details>
|
||||
|
||||
|
||||
### Preview
|
||||
|
||||
<details>
|
||||
<summary>Click to the the preview</summary>
|
||||
<img src="images/nerdtree.gif" alt="NERDTree example"/>
|
||||
</details>
|
||||
|
||||
### Supported commands
|
||||
|
||||
- `:NERDTree`
|
||||
- `:NERDTreeFocus`
|
||||
- `:NERDTreeToggle`
|
||||
- `:NERDTreeClose`
|
||||
- `:NERDTreeFind`
|
||||
- `:NERDTreeRefreshRoot`
|
||||
|
||||
| Key | Description | Map Setting |
|
||||
|---------|---------------------------------------------------------|--------------------------------|
|
||||
| `o` | Open files, directories and bookmarks | `g:NERDTreeMapActivateNode` |
|
||||
| `go` | Open selected file, but leave cursor in the NERDTree | `g:NERDTreeMapPreview` |
|
||||
| `t` | Open selected node/bookmark in a new tab | `g:NERDTreeMapOpenInTab` |
|
||||
| `T` | Same as 't' but keep the focus on the current tab | `g:NERDTreeMapOpenInTabSilent` |
|
||||
| `i` | Open selected file in a split window | `g:NERDTreeMapOpenSplit` |
|
||||
| `gi` | Same as i, but leave the cursor on the NERDTree | `g:NERDTreeMapPreviewSplit` |
|
||||
| `s` | Open selected file in a new vsplit | `g:NERDTreeMapOpenVSplit` |
|
||||
| `gs` | Same as s, but leave the cursor on the NERDTree | `g:NERDTreeMapPreviewVSplit` |
|
||||
| `O` | Recursively open the selected directory | `g:NERDTreeMapOpenRecursively` |
|
||||
| `x` | Close the current nodes parent | `g:NERDTreeMapCloseDir` |
|
||||
| `X` | Recursively close all children of the current node | `g:NERDTreeMapCloseChildren` |
|
||||
| `P` | Jump to the root node | `g:NERDTreeMapJumpRoot` |
|
||||
| `p` | Jump to current nodes parent | `g:NERDTreeMapJumpParent` |
|
||||
| `K` | Jump up inside directories at the current tree depth | `g:NERDTreeMapJumpFirstChild` |
|
||||
| `J` | Jump down inside directories at the current tree depth | `g:NERDTreeMapJumpLastChild` |
|
||||
| `<C-J>` | Jump down to next sibling of the current directory | `g:NERDTreeMapJumpNextSibling` |
|
||||
| `<C-K>` | Jump up to previous sibling of the current directory | `g:NERDTreeMapJumpPrevSibling` |
|
||||
| `r` | Recursively refresh the current directory | `g:NERDTreeMapRefresh` |
|
||||
| `R` | Recursively refresh the current root | `g:NERDTreeMapRefreshRoot` |
|
||||
| `m` | Display the NERDTree menu | `g:NERDTreeMapMenu` |
|
||||
| `q` | Close the NERDTree window | `g:NERDTreeMapQuit` |
|
||||
| `A` | Zoom (maximize/minimize) the NERDTree window | `g:NERDTreeMapToggleZoom` |
|
||||
|
||||
### Troubleshooting
|
||||
|
||||
If you see the the file is opened automatically on every movement in the Project View (`j`, `k`, etc.)
|
||||
please make sure that you have "Open Files with Single click" disabled.
|
||||
|
||||
<img src="images/disable-one-click.png" alt="Disable one click"/>
|
24
doc/Select-mode.md
Normal file
@@ -0,0 +1,24 @@
|
||||
# FAQ
|
||||
|
||||
## What is select mode?
|
||||
|
||||
This mode is where the selection works the same as system selection. When you start typing, the text in the selected area is removed and replaced by the new characters that are being typed in.
|
||||
|
||||
## Why is select mode enabled during refactoring?
|
||||
|
||||
With the help of the select mode, you can immediately enter the variable name during refactoring. You can go to the beginning or the end of a variable using the arrow keys. If you need to make more complex changes, you can always go back to normal mode with `<ESC>`.
|
||||
|
||||
## What if I want to use visual mode during refactoring?
|
||||
|
||||
Select mode is controlled by the `keymodel`, `selectmode` and `idearefactormode` options. Set `idearefactormode` to `visual` to adjust this behavior.
|
||||
`set idearefactormode=visual`
|
||||
|
||||
## What if I don't want to change the mode during refactoring?
|
||||
|
||||
`set idearefactormode=keep`
|
||||
|
||||
# See Also
|
||||
|
||||
* IdeaVim options: https://github.com/JetBrains/ideavim/blob/master/doc/set-commands.md
|
||||
* Vim documentation about select mode: https://vimhelp.org/visual.txt.html#Select-mode
|
||||
* Stackoverflow explanation: https://vi.stackexchange.com/questions/4891/what-is-the-select-mode-and-when-is-it-relevant-to-use-it
|
@@ -1,14 +1,16 @@
|
||||
Some examples of join command with `ideajoin` option enabled.
|
||||
Put `set ideajoin` to your `~/.ideavimrc` to enable this functionality.
|
||||
|
||||
1) Automatic join concatenated lines:
|
||||
Now, you can press `J` (`shift+j`) on a line or a selected block of text to join the lines together.
|
||||
|
||||
* Automatic join concatenated lines:
|
||||
|
||||
```
|
||||
"Hello" + -> "Hello world"
|
||||
" world!"
|
||||
```
|
||||
|
||||
2) Nested if's:
|
||||
* Nested if's:
|
||||
|
||||
```
|
||||
if (a) { -> if (a && b) {
|
||||
@@ -18,7 +20,14 @@ if (a) { -> if (a && b) {
|
||||
}
|
||||
```
|
||||
|
||||
3) Remove braces from one line for / if / while:
|
||||
* Comments:
|
||||
|
||||
```
|
||||
// Hello -> // Hello world
|
||||
// world
|
||||
```
|
||||
|
||||
* Remove braces from one line for / if / while:
|
||||
|
||||
```
|
||||
if (fail) { -> if (fail) return;
|
||||
@@ -26,7 +35,7 @@ if (fail) { -> if (fail) return;
|
||||
}
|
||||
```
|
||||
|
||||
4) Kotlin one line method:
|
||||
* Kotlin one line method:
|
||||
|
||||
```
|
||||
fun myNumber(): Int { -> fun myNumber(): Int = 42
|
||||
@@ -34,18 +43,18 @@ fun myNumber(): Int { -> fun myNumber(): Int = 42
|
||||
}
|
||||
```
|
||||
|
||||
5) Join declaration and initialization:
|
||||
* Join declaration and initialization:
|
||||
|
||||
```
|
||||
int a; -> int a = 5;
|
||||
a = 5;
|
||||
```
|
||||
|
||||
6) Chain call:
|
||||
* Chain call:
|
||||
|
||||
```
|
||||
sb.append("a"); -> sb.append("a").append("b");
|
||||
sb.append("b");
|
||||
```
|
||||
|
||||
And other functions provided by the plugins.
|
||||
And other features provided by the plugins.
|
||||
|
BIN
doc/images/disable-one-click.png
Normal file
After Width: | Height: | Size: 223 KiB |
BIN
doc/images/nerdtree.gif
Normal file
After Width: | Height: | Size: 32 MiB |
@@ -38,6 +38,8 @@ The following `:set` commands can appear in `~/.ideavimrc` or be set manually in
|
||||
acts like startsel is enabled
|
||||
|
||||
'matchpairs' 'mps' pairs of characters that "%" can match
|
||||
'maxmapdepth' 'mmd' Maximum depth of mappings
|
||||
'more' 'more' When on, listings pause when the whole screen is filled.
|
||||
'nrformats' 'nf' number formats recognized for CTRL-A command
|
||||
'number' 'nu' print the line number in front of each line
|
||||
'relativenumber' 'rnu' show the line number relative to the line with
|
||||
@@ -58,13 +60,11 @@ The following `:set` commands can appear in `~/.ideavimrc` or be set manually in
|
||||
ideaselection when IDE sets a selection - IdeaVim ONLY
|
||||
(examples: extend selection, wrap with while, etc.)
|
||||
|
||||
Deprecated values:
|
||||
template ~~please use `idearefactormode` option~~
|
||||
when starting a template - IdeaVim ONLY
|
||||
refactoring ~~please use ideaselection~~
|
||||
same as ideaselection - IdeaVim ONLY
|
||||
`startofline` `sol` When "on" some commands move the cursor to the first non-blank of the line.
|
||||
When off the cursor is kept in the same column (if possible).
|
||||
|
||||
'showmode' 'smd' message on the status line to show current mode
|
||||
'showcmd' 'sc' show (partial) command in the status bar
|
||||
'sidescroll' 'ss' minimum number of columns to scroll horizontally
|
||||
'sidescrolloff' 'siso' min. number of columns to left and right of cursor
|
||||
'smartcase' 'scs' no ignore case when pattern is uppercase
|
||||
@@ -102,14 +102,8 @@ The following `:set` commands can appear in `~/.ideavimrc` or be set manually in
|
||||
|
||||
If true, join command will be performed via IDE
|
||||
See wiki/`ideajoin` examples
|
||||
|
||||
`ideastatusbar` `ideastatusbar` Boolean (default true)
|
||||
DEPRECATED. Please use `ideastatusicon`
|
||||
|
||||
If false, IdeaVim icon won't be shown in the status bar.
|
||||
Works only from `~/.ideavimrc` after the IDE restart.
|
||||
|
||||
`ideastatusicon` `ideastatusicon` String(default "enabled") [To Be Released]
|
||||
`ideastatusicon` `ideastatusicon` String(default "enabled")
|
||||
|
||||
Define the behavior of IdeaVim icon in the status bar.
|
||||
|
||||
@@ -117,8 +111,13 @@ The following `:set` commands can appear in `~/.ideavimrc` or be set manually in
|
||||
- enabled - icon is shown in the status bar
|
||||
- gray - use the gray version of the icon
|
||||
- disabled - hide the icon
|
||||
|
||||
Works only from `~/.ideavimrc` after the IDE restart.
|
||||
|
||||
`ideawrite` `ideawrite` String (default "all")
|
||||
"file" or "all". Defines the behaviour of ":w" command.
|
||||
Value "all" enables execution of ":wa" (save all) command on ":w" (save).
|
||||
This feature exists because some IJ options like "Prettier on save" or "ESlint on save"
|
||||
work only with "save all" action. If this option is set to "all", these actions work
|
||||
also with ":w" command.
|
||||
|
||||
`lookupkeys` `lookupkeys` List of strings
|
||||
|
||||
@@ -129,6 +128,13 @@ The following `:set` commands can appear in `~/.ideavimrc` or be set manually in
|
||||
"<Tab>", "<Down>", "<Up>", "<Enter>", "<Left>", "<Right>",
|
||||
"<C-Down>", "<C-Up>", "<PageUp>", "<PageDown>",
|
||||
"<C-J>", "<C-Q>"
|
||||
|
||||
`ideavimsupport` `ideavimsupport` List of strings (default "dialog")
|
||||
|
||||
Define the list of additional buffers where IdeaVim is enabled.
|
||||
|
||||
- dialog - enable IdeaVim in dialogs
|
||||
- singleline - enable IdeaVim in single line editors (not suggested)
|
||||
|
||||
----------
|
||||
[1] - cursor keys, <End>, <Home>, <PageUp> and <PageDown>
|
||||
|
34
doc/sethandler.md
Normal file
@@ -0,0 +1,34 @@
|
||||
# Configuring conflicting keys via .ideavimrc
|
||||
|
||||
IdeaVim allows defining handlers for the shortcuts that exist for both IDE and Vim (e.g. `<C-C>`).
|
||||
|
||||
```vim
|
||||
" Use ctrl-c as an ide shortcut in normal and visual modes
|
||||
sethandler <C-C> n-v:ide i:vim
|
||||
```
|
||||
|
||||
This option consist of an optional shortcut and a list of space separated list of handlers:
|
||||
`mode-list:handler mode-list:handler ...`
|
||||
The `mode-list` is a dash separated list of modes that is similar to `guicursor` notation
|
||||
and defines the following modes:
|
||||
- n - normal mode
|
||||
- i - insert mode
|
||||
- x - visual mode
|
||||
- v - visual and select modes
|
||||
- a - all modes
|
||||
|
||||
The `handler` is an argument that may accept the following values:
|
||||
- ide - use IDE handler
|
||||
- vim - use Vim handler
|
||||
|
||||
Examples:
|
||||
- `n:ide` - use IDE handler in normal mode
|
||||
- `i-v:vim` - use Vim handler in normal, visual, and select modes
|
||||
- `a:ide` - use IDE handler in all modes
|
||||
|
||||
By using `sethandler` you can define handlers:
|
||||
- For a single shortcut: `sethandler <C-A> n:vim i-x:ide` - use Vim handler in normal mode and IDE handler in insert and visual modes,
|
||||
- For all shortcuts: `sethandler n:vim i:ide` - use Vim handlers in normal mode and IDE handlers in insert mode.
|
||||
|
||||
If the definition of the handler is missing for some mode, it defaults to `vim`:
|
||||
`sethandler <C-X> i:ide` - use IDE handler in insert mode and Vim handler in all other modes.
|
@@ -1,16 +1,19 @@
|
||||
# suppress inspection "UnusedProperty" for whole file
|
||||
|
||||
ideaVersion=201-EAP-SNAPSHOT
|
||||
ideaVersion=LATEST-EAP-SNAPSHOT
|
||||
downloadIdeaSources=true
|
||||
instrumentPluginCode=true
|
||||
version=SNAPSHOT
|
||||
javaVersion=1.8
|
||||
kotlinVersion=1.3.61
|
||||
publishUsername=username
|
||||
javaVersion=11
|
||||
remoteRobotVersion=0.11.10
|
||||
antlrVersion=4.10.1
|
||||
|
||||
# Please don't forget to update kotlin version in buildscript section
|
||||
kotlinVersion=1.6.21
|
||||
publishToken=token
|
||||
publishChannels=eap
|
||||
# Since 192 version of IJ java plugin should be defined separately
|
||||
# Set this value to true if you are going to run tests under idea version < 192
|
||||
legacyNoJavaPlugin=false
|
||||
|
||||
slackUrl=
|
||||
|
||||
# Gradle settings
|
||||
org.gradle.jvmargs='-Dfile.encoding=UTF-8'
|
||||
|
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
2
gradle/wrapper/gradle-wrapper.properties
vendored
@@ -1,5 +1,5 @@
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-6.2.1-bin.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
|
270
gradlew
vendored
@@ -1,7 +1,7 @@
|
||||
#!/usr/bin/env sh
|
||||
#!/bin/sh
|
||||
|
||||
#
|
||||
# Copyright 2015 the original author or authors.
|
||||
# Copyright © 2015-2021 the original authors.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
@@ -17,78 +17,113 @@
|
||||
#
|
||||
|
||||
##############################################################################
|
||||
##
|
||||
## Gradle start up script for UN*X
|
||||
##
|
||||
#
|
||||
# Gradle start up script for POSIX generated by Gradle.
|
||||
#
|
||||
# Important for running:
|
||||
#
|
||||
# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
|
||||
# noncompliant, but you have some other compliant shell such as ksh or
|
||||
# bash, then to run this script, type that shell name before the whole
|
||||
# command line, like:
|
||||
#
|
||||
# ksh Gradle
|
||||
#
|
||||
# Busybox and similar reduced shells will NOT work, because this script
|
||||
# requires all of these POSIX shell features:
|
||||
# * functions;
|
||||
# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
|
||||
# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
|
||||
# * compound commands having a testable exit status, especially «case»;
|
||||
# * various built-in commands including «command», «set», and «ulimit».
|
||||
#
|
||||
# Important for patching:
|
||||
#
|
||||
# (2) This script targets any POSIX shell, so it avoids extensions provided
|
||||
# by Bash, Ksh, etc; in particular arrays are avoided.
|
||||
#
|
||||
# The "traditional" practice of packing multiple parameters into a
|
||||
# space-separated string is a well documented source of bugs and security
|
||||
# problems, so this is (mostly) avoided, by progressively accumulating
|
||||
# options in "$@", and eventually passing that to Java.
|
||||
#
|
||||
# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
|
||||
# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
|
||||
# see the in-line comments for details.
|
||||
#
|
||||
# There are tweaks for specific operating systems such as AIX, CygWin,
|
||||
# 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
|
||||
# within the Gradle project.
|
||||
#
|
||||
# You can find Gradle at https://github.com/gradle/gradle/.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
# Attempt to set APP_HOME
|
||||
|
||||
# Resolve links: $0 may be a link
|
||||
PRG="$0"
|
||||
# Need this for relative symlinks.
|
||||
while [ -h "$PRG" ] ; do
|
||||
ls=`ls -ld "$PRG"`
|
||||
link=`expr "$ls" : '.*-> \(.*\)$'`
|
||||
if expr "$link" : '/.*' > /dev/null; then
|
||||
PRG="$link"
|
||||
else
|
||||
PRG=`dirname "$PRG"`"/$link"
|
||||
fi
|
||||
app_path=$0
|
||||
|
||||
# Need this for daisy-chained symlinks.
|
||||
while
|
||||
APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
|
||||
[ -h "$app_path" ]
|
||||
do
|
||||
ls=$( ls -ld "$app_path" )
|
||||
link=${ls#*' -> '}
|
||||
case $link in #(
|
||||
/*) app_path=$link ;; #(
|
||||
*) app_path=$APP_HOME$link ;;
|
||||
esac
|
||||
done
|
||||
SAVED="`pwd`"
|
||||
cd "`dirname \"$PRG\"`/" >/dev/null
|
||||
APP_HOME="`pwd -P`"
|
||||
cd "$SAVED" >/dev/null
|
||||
|
||||
APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
|
||||
|
||||
APP_NAME="Gradle"
|
||||
APP_BASE_NAME=`basename "$0"`
|
||||
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"'
|
||||
|
||||
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
||||
MAX_FD="maximum"
|
||||
MAX_FD=maximum
|
||||
|
||||
warn () {
|
||||
echo "$*"
|
||||
}
|
||||
} >&2
|
||||
|
||||
die () {
|
||||
echo
|
||||
echo "$*"
|
||||
echo
|
||||
exit 1
|
||||
}
|
||||
} >&2
|
||||
|
||||
# OS specific support (must be 'true' or 'false').
|
||||
cygwin=false
|
||||
msys=false
|
||||
darwin=false
|
||||
nonstop=false
|
||||
case "`uname`" in
|
||||
CYGWIN* )
|
||||
cygwin=true
|
||||
;;
|
||||
Darwin* )
|
||||
darwin=true
|
||||
;;
|
||||
MINGW* )
|
||||
msys=true
|
||||
;;
|
||||
NONSTOP* )
|
||||
nonstop=true
|
||||
;;
|
||||
case "$( uname )" in #(
|
||||
CYGWIN* ) cygwin=true ;; #(
|
||||
Darwin* ) darwin=true ;; #(
|
||||
MSYS* | MINGW* ) msys=true ;; #(
|
||||
NONSTOP* ) nonstop=true ;;
|
||||
esac
|
||||
|
||||
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
|
||||
|
||||
|
||||
# Determine the Java command to use to start the JVM.
|
||||
if [ -n "$JAVA_HOME" ] ; then
|
||||
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
|
||||
# IBM's JDK on AIX uses strange locations for the executables
|
||||
JAVACMD="$JAVA_HOME/jre/sh/java"
|
||||
JAVACMD=$JAVA_HOME/jre/sh/java
|
||||
else
|
||||
JAVACMD="$JAVA_HOME/bin/java"
|
||||
JAVACMD=$JAVA_HOME/bin/java
|
||||
fi
|
||||
if [ ! -x "$JAVACMD" ] ; then
|
||||
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
|
||||
@@ -97,7 +132,7 @@ Please set the JAVA_HOME variable in your environment to match the
|
||||
location of your Java installation."
|
||||
fi
|
||||
else
|
||||
JAVACMD="java"
|
||||
JAVACMD=java
|
||||
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||
|
||||
Please set the JAVA_HOME variable in your environment to match the
|
||||
@@ -105,84 +140,95 @@ location of your Java installation."
|
||||
fi
|
||||
|
||||
# Increase the maximum file descriptors if we can.
|
||||
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
|
||||
MAX_FD_LIMIT=`ulimit -H -n`
|
||||
if [ $? -eq 0 ] ; then
|
||||
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
|
||||
MAX_FD="$MAX_FD_LIMIT"
|
||||
fi
|
||||
ulimit -n $MAX_FD
|
||||
if [ $? -ne 0 ] ; then
|
||||
warn "Could not set maximum file descriptor limit: $MAX_FD"
|
||||
fi
|
||||
else
|
||||
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
|
||||
fi
|
||||
fi
|
||||
|
||||
# For Darwin, add options to specify how the application appears in the dock
|
||||
if $darwin; then
|
||||
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
|
||||
fi
|
||||
|
||||
# For Cygwin or MSYS, switch paths to Windows format before running java
|
||||
if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
|
||||
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
|
||||
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
|
||||
JAVACMD=`cygpath --unix "$JAVACMD"`
|
||||
|
||||
# We build the pattern for arguments to be converted via cygpath
|
||||
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
|
||||
SEP=""
|
||||
for dir in $ROOTDIRSRAW ; do
|
||||
ROOTDIRS="$ROOTDIRS$SEP$dir"
|
||||
SEP="|"
|
||||
done
|
||||
OURCYGPATTERN="(^($ROOTDIRS))"
|
||||
# Add a user-defined pattern to the cygpath arguments
|
||||
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
|
||||
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
|
||||
fi
|
||||
# Now convert the arguments - kludge to limit ourselves to /bin/sh
|
||||
i=0
|
||||
for arg in "$@" ; do
|
||||
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
|
||||
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
|
||||
|
||||
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
|
||||
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
|
||||
else
|
||||
eval `echo args$i`="\"$arg\""
|
||||
fi
|
||||
i=$((i+1))
|
||||
done
|
||||
case $i in
|
||||
(0) set -- ;;
|
||||
(1) set -- "$args0" ;;
|
||||
(2) set -- "$args0" "$args1" ;;
|
||||
(3) set -- "$args0" "$args1" "$args2" ;;
|
||||
(4) set -- "$args0" "$args1" "$args2" "$args3" ;;
|
||||
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
|
||||
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
|
||||
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
|
||||
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
|
||||
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
|
||||
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
|
||||
case $MAX_FD in #(
|
||||
max*)
|
||||
MAX_FD=$( ulimit -H -n ) ||
|
||||
warn "Could not query maximum file descriptor limit"
|
||||
esac
|
||||
case $MAX_FD in #(
|
||||
'' | soft) :;; #(
|
||||
*)
|
||||
ulimit -n "$MAX_FD" ||
|
||||
warn "Could not set maximum file descriptor limit to $MAX_FD"
|
||||
esac
|
||||
fi
|
||||
|
||||
# Escape application args
|
||||
save () {
|
||||
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
|
||||
echo " "
|
||||
}
|
||||
APP_ARGS=$(save "$@")
|
||||
# Collect all arguments for the java command, stacking in reverse order:
|
||||
# * args from the command line
|
||||
# * the main class name
|
||||
# * -classpath
|
||||
# * -D...appname settings
|
||||
# * --module-path (only if needed)
|
||||
# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
|
||||
|
||||
# Collect all arguments for the java command, following the shell quoting and substitution rules
|
||||
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
|
||||
# For Cygwin or MSYS, switch paths to Windows format before running java
|
||||
if "$cygwin" || "$msys" ; then
|
||||
APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
|
||||
CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
|
||||
|
||||
# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
|
||||
if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
|
||||
cd "$(dirname "$0")"
|
||||
JAVACMD=$( cygpath --unix "$JAVACMD" )
|
||||
|
||||
# Now convert the arguments - kludge to limit ourselves to /bin/sh
|
||||
for arg do
|
||||
if
|
||||
case $arg in #(
|
||||
-*) false ;; # don't mess with options #(
|
||||
/?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
|
||||
[ -e "$t" ] ;; #(
|
||||
*) false ;;
|
||||
esac
|
||||
then
|
||||
arg=$( cygpath --path --ignore --mixed "$arg" )
|
||||
fi
|
||||
# Roll the args list around exactly as many times as the number of
|
||||
# args, so each arg winds up back in the position where it started, but
|
||||
# possibly modified.
|
||||
#
|
||||
# NB: a `for` loop captures its iteration list before it begins, so
|
||||
# changing the positional parameters here affects neither the number of
|
||||
# iterations, nor the values presented in `arg`.
|
||||
shift # remove old arg
|
||||
set -- "$@" "$arg" # push replacement arg
|
||||
done
|
||||
fi
|
||||
|
||||
# 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
|
||||
# double quotes to make sure that they get re-expanded; and
|
||||
# * put everything else in single quotes, so that it's not re-expanded.
|
||||
|
||||
set -- \
|
||||
"-Dorg.gradle.appname=$APP_BASE_NAME" \
|
||||
-classpath "$CLASSPATH" \
|
||||
org.gradle.wrapper.GradleWrapperMain \
|
||||
"$@"
|
||||
|
||||
# Use "xargs" to parse quoted args.
|
||||
#
|
||||
# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
|
||||
#
|
||||
# In Bash we could simply go:
|
||||
#
|
||||
# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
|
||||
# set -- "${ARGS[@]}" "$@"
|
||||
#
|
||||
# but POSIX shell has neither arrays nor command substitution, so instead we
|
||||
# post-process each arg (as a line of input to sed) to backslash-escape any
|
||||
# character that might be a shell metacharacter, then use eval to reverse
|
||||
# that process (while maintaining the separation between arguments), and wrap
|
||||
# the whole thing up as a single "set" statement.
|
||||
#
|
||||
# This will of course break if any of these variables contains a newline or
|
||||
# an unmatched quote.
|
||||
#
|
||||
|
||||
eval "set -- $(
|
||||
printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
|
||||
xargs -n1 |
|
||||
sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
|
||||
tr '\n' ' '
|
||||
)" '"$@"'
|
||||
|
||||
exec "$JAVACMD" "$@"
|
||||
|
25
gradlew.bat
vendored
@@ -29,6 +29,9 @@ if "%DIRNAME%" == "" set DIRNAME=.
|
||||
set APP_BASE_NAME=%~n0
|
||||
set APP_HOME=%DIRNAME%
|
||||
|
||||
@rem Resolve any "." and ".." in APP_HOME to make it shorter.
|
||||
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
|
||||
|
||||
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
|
||||
|
||||
@@ -37,7 +40,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome
|
||||
|
||||
set JAVA_EXE=java.exe
|
||||
%JAVA_EXE% -version >NUL 2>&1
|
||||
if "%ERRORLEVEL%" == "0" goto init
|
||||
if "%ERRORLEVEL%" == "0" goto execute
|
||||
|
||||
echo.
|
||||
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||
@@ -51,7 +54,7 @@ goto fail
|
||||
set JAVA_HOME=%JAVA_HOME:"=%
|
||||
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
|
||||
|
||||
if exist "%JAVA_EXE%" goto init
|
||||
if exist "%JAVA_EXE%" goto execute
|
||||
|
||||
echo.
|
||||
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
|
||||
@@ -61,28 +64,14 @@ echo location of your Java installation.
|
||||
|
||||
goto fail
|
||||
|
||||
:init
|
||||
@rem Get command-line arguments, handling Windows variants
|
||||
|
||||
if not "%OS%" == "Windows_NT" goto win9xME_args
|
||||
|
||||
:win9xME_args
|
||||
@rem Slurp the command line arguments.
|
||||
set CMD_LINE_ARGS=
|
||||
set _SKIP=2
|
||||
|
||||
:win9xME_args_slurp
|
||||
if "x%~1" == "x" goto execute
|
||||
|
||||
set CMD_LINE_ARGS=%*
|
||||
|
||||
:execute
|
||||
@rem Setup the command line
|
||||
|
||||
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
|
||||
|
||||
|
||||
@rem Execute Gradle
|
||||
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
|
||||
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
|
||||
|
||||
:end
|
||||
@rem End local scope for the variables with windows NT shell
|
||||
|
20
qodana.yaml
Normal file
@@ -0,0 +1,20 @@
|
||||
version: 1.0
|
||||
profile:
|
||||
name: Qodana
|
||||
exclude:
|
||||
- name: MoveVariableDeclarationIntoWhen
|
||||
- name: PluginXmlValidity
|
||||
- name: RedundantThrows
|
||||
- name: SuperTearDownInFinally
|
||||
- name: UnusedReturnValue
|
||||
- name: All
|
||||
paths:
|
||||
- build.gradle
|
||||
- gradle/wrapper/gradle-wrapper.properties
|
||||
- resources/icons/youtrack.svg
|
||||
- src/com/maddyhome/idea/vim/ex/vimscript/VimScriptCommandHandler.java
|
||||
- src/com/maddyhome/idea/vim/helper/SearchHelper.java
|
||||
- src/com/maddyhome/idea/vim/regexp/RegExp.java
|
||||
- test/org/jetbrains/plugins/ideavim/propertybased/samples/JavaText.kt
|
||||
- test/org/jetbrains/plugins/ideavim/propertybased/samples/LoremText.kt
|
||||
- test/org/jetbrains/plugins/ideavim/propertybased/samples/SimpleText.kt
|
@@ -1,23 +0,0 @@
|
||||
<idea-plugin>
|
||||
<extensions defaultExtensionNs="com.intellij">
|
||||
<applicationService serviceImplementation="com.maddyhome.idea.vim.group.MotionGroup"/>
|
||||
<applicationService serviceImplementation="com.maddyhome.idea.vim.group.ChangeGroup"/>
|
||||
<applicationService serviceImplementation="com.maddyhome.idea.vim.group.CommandGroup"/>
|
||||
<applicationService serviceImplementation="com.maddyhome.idea.vim.group.MarkGroup"/>
|
||||
<applicationService serviceImplementation="com.maddyhome.idea.vim.group.RegisterGroup"/>
|
||||
<applicationService serviceImplementation="com.maddyhome.idea.vim.group.FileGroup"/>
|
||||
<applicationService serviceImplementation="com.maddyhome.idea.vim.group.SearchGroup"/>
|
||||
<applicationService serviceImplementation="com.maddyhome.idea.vim.group.ProcessGroup"/>
|
||||
<applicationService serviceImplementation="com.maddyhome.idea.vim.group.MacroGroup"/>
|
||||
<applicationService serviceImplementation="com.maddyhome.idea.vim.group.DigraphGroup"/>
|
||||
<applicationService serviceImplementation="com.maddyhome.idea.vim.group.HistoryGroup"/>
|
||||
<applicationService serviceImplementation="com.maddyhome.idea.vim.group.KeyGroup"/>
|
||||
<applicationService serviceImplementation="com.maddyhome.idea.vim.group.WindowGroup"/>
|
||||
<applicationService serviceImplementation="com.maddyhome.idea.vim.group.EditorGroup"/>
|
||||
<applicationService serviceImplementation="com.maddyhome.idea.vim.group.visual.VisualMotionGroup"/>
|
||||
<applicationService serviceImplementation="com.maddyhome.idea.vim.group.copy.YankGroup"/>
|
||||
<applicationService serviceImplementation="com.maddyhome.idea.vim.group.copy.PutGroup"/>
|
||||
|
||||
<applicationService serviceImplementation="com.maddyhome.idea.vim.group.NotificationService"/>
|
||||
</extensions>
|
||||
</idea-plugin>
|
@@ -1,65 +0,0 @@
|
||||
<idea-plugin>
|
||||
<extensions defaultExtensionNs="IdeaVIM">
|
||||
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.ActionListHandler" names="actionlist"/>
|
||||
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.AsciiHandler" names="as[cii]"/>
|
||||
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.CmdFilterHandler" names="!"/>
|
||||
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.CmdHandler" names="com[mand]"/>
|
||||
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.CmdClearHandler" names="comc[lear]"/>
|
||||
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.CopyTextHandler" names="co[py],t"/>
|
||||
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.DelCmdHandler" names="delc[ommand]"/>
|
||||
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.DeleteLinesHandler" names="d[elete]"/>
|
||||
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.DeleteMarksHandler" names="delm[arks]"/>
|
||||
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.DigraphHandler" names="dig[raphs]"/>
|
||||
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.DumpLineHandler" names="dump[line]"/>
|
||||
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.EditFileHandler" names="bro[wse],e[dit]"/>
|
||||
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.ActionHandler" names="action"/>
|
||||
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.EchoHandler" names="ec[ho]"/>
|
||||
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.ExitHandler" names="qa[ll],quita[ll],wqa[ll],xa[ll]"/>
|
||||
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.FindClassHandler" names="cla[ss]"/>
|
||||
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.FindFileHandler" names="fin[d]"/>
|
||||
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.FindSymbolHandler" names="sym[bol]"/>
|
||||
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.GotoCharacterHandler" names="go[to]"/>
|
||||
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.HelpHandler" names="h[elp]"/>
|
||||
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.HistoryHandler" names="his[tory]"/>
|
||||
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.JoinLinesHandler" names="j[oin]"/>
|
||||
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.JumpsHandler" names="ju[mps]"/>
|
||||
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.LetHandler" names="let"/>
|
||||
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.MapHandler"/>
|
||||
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.MarkHandler" names="ma[rk],k"/>
|
||||
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.MarksHandler" names="marks"/>
|
||||
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.MoveTextHandler" names="m[ove]"/>
|
||||
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.NextFileHandler" names="n[ext]"/>
|
||||
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.NoHLSearchHandler" names="noh[lsearch]"/>
|
||||
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.OnlyHandler" names="on[ly]"/>
|
||||
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.PreviousFileHandler" names="N[ext],prev[ious]"/>
|
||||
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.PromptFindHandler" names="pro[mptfind]"/>
|
||||
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.PromptReplaceHandler" names="promptr[epl]"/>
|
||||
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.PutLinesHandler" names="pu[t]"/>
|
||||
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.QuitHandler" names="q[uit],clo[se],hid[e]"/>
|
||||
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.RedoHandler" names="red[o]"/>
|
||||
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.RegistersHandler" names="di[splay],reg[isters]"/>
|
||||
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.RepeatHandler" names="@"/>
|
||||
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.SelectFileHandler" names="argu[ment]"/>
|
||||
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.SelectFirstFileHandler" names="fir[st],rew[ind]"/>
|
||||
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.SelectLastFileHandler" names="la[st]"/>
|
||||
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.SetHandler" names="se[t]"/>
|
||||
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.ShiftLeftHandler"/>
|
||||
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.ShiftRightHandler"/>
|
||||
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.SourceHandler" names="so[urce]"/>
|
||||
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.SortHandler" names="sor[t]"/>
|
||||
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.SplitHandler" names="vs[plit],sp[lit]"/>
|
||||
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.SubstituteHandler" names="s[ubstitute],&,~"/>
|
||||
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.UndoHandler" names="u[ndo]"/>
|
||||
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.WriteAllHandler" names="wa[ll]"/>
|
||||
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.WriteHandler" names="w[rite]"/>
|
||||
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.WriteNextFileHandler" names="wn[ext]"/>
|
||||
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.WritePreviousFileHandler" names="wN[ext],wp[revious]"/>
|
||||
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.WriteQuitHandler" names="wq,exi[t],x[it]"/>
|
||||
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.YankLinesHandler" names="y[ank]"/>
|
||||
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.ShellHandler" names="sh[ell]"/>
|
||||
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.NextTabHandler" names="tabn[ext]"/>
|
||||
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.PreviousTabHandler" names="tabp[revious],tabN[ext]"/>
|
||||
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.TabOnlyHandler" names="tabo[nly]"/>
|
||||
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.BufferListHandler" names="buffers,ls,files"/>
|
||||
</extensions>
|
||||
</idea-plugin>
|
@@ -1,9 +0,0 @@
|
||||
<idea-plugin>
|
||||
<extensions defaultExtensionNs="IdeaVIM">
|
||||
<vimExtension implementation="com.maddyhome.idea.vim.extension.surround.VimSurroundExtension"/>
|
||||
<vimExtension implementation="com.maddyhome.idea.vim.extension.multiplecursors.VimMultipleCursorsExtension"/>
|
||||
<vimExtension implementation="com.maddyhome.idea.vim.extension.commentary.CommentaryExtension"/>
|
||||
<vimExtension implementation="com.maddyhome.idea.vim.extension.textobjentire.VimTextObjEntireExtension"/>
|
||||
<vimExtension implementation="com.maddyhome.idea.vim.extension.argtextobj.VimArgTextObjExtension"/>
|
||||
</extensions>
|
||||
</idea-plugin>
|
@@ -1,80 +0,0 @@
|
||||
<idea-plugin url="https://plugins.jetbrains.com/plugin/164" xmlns:xi="http://www.w3.org/2001/XInclude">
|
||||
<name>IdeaVim</name>
|
||||
<id>IdeaVIM</id>
|
||||
<change-notes><![CDATA[
|
||||
<ul>
|
||||
<li>Support argtextobj.vim plugin emulation</li>
|
||||
<li>Support vim-textobj-entire plugin emulation</li>
|
||||
<li>Support ls/buffers/files command</li>
|
||||
<li>Various bug fixes</li>
|
||||
</ul>
|
||||
<p>See also the complete <a href="https://github.com/JetBrains/ideavim/blob/master/CHANGES.md">changelog</a>.</p>
|
||||
]]></change-notes>
|
||||
<description><![CDATA[
|
||||
<p>Vim emulation plug-in for IDEs based on the IntelliJ platform.</p>
|
||||
<p>IdeaVim supports many Vim features including normal/insert/visual modes, motion keys, deletion/changing, marks, registers, some Ex commands, Vim regexps, configuration via ~/.ideavimrc, macros, window commands, etc.</p>
|
||||
<p>See also:</p>
|
||||
<ul>
|
||||
<li><a href="https://github.com/JetBrains/ideavim">GitHub repository</a>: documentation and contributing</li>
|
||||
<li><a href="https://youtrack.jetbrains.com/issues/VIM">Issue tracker</a>: feature requests and bug reports</li>
|
||||
</ul>
|
||||
]]></description>
|
||||
<version>SNAPSHOT</version>
|
||||
<vendor>JetBrains</vendor>
|
||||
|
||||
<!-- Please search for "[VERSION UPDATE]" in project in case you update the since-build version -->
|
||||
<!-- Check for [Version Update] tag in YouTrack as well -->
|
||||
<idea-version since-build="183.4284.148"/>
|
||||
|
||||
<!-- Mark the plugin as compatible with RubyMine and other products based on the IntelliJ platform -->
|
||||
<depends>com.intellij.modules.lang</depends>
|
||||
<resource-bundle xmlns="">messages</resource-bundle>
|
||||
|
||||
<application-components>
|
||||
<component>
|
||||
<implementation-class>com.maddyhome.idea.vim.DynamicLoaderStopper</implementation-class>
|
||||
</component>
|
||||
</application-components>
|
||||
|
||||
<extensionPoints>
|
||||
<extensionPoint name="vimExtension" interface="com.maddyhome.idea.vim.extension.VimExtension" dynamic="true"/>
|
||||
|
||||
<!-- For internal use only -->
|
||||
<extensionPoint name="vimExCommand" beanClass="com.maddyhome.idea.vim.ex.ExBeanClass" dynamic="true">
|
||||
<with attribute="implementation" implements="com.maddyhome.idea.vim.ex.CommandHandler"/>
|
||||
</extensionPoint>
|
||||
<!-- For internal use only -->
|
||||
<extensionPoint name="vimAction" beanClass="com.maddyhome.idea.vim.handler.ActionBeanClass" dynamic="true">
|
||||
<with attribute="implementation" implements="com.maddyhome.idea.vim.handler.EditorActionHandlerBase"/>
|
||||
</extensionPoint>
|
||||
</extensionPoints>
|
||||
|
||||
<extensions defaultExtensionNs="com.intellij">
|
||||
<applicationConfigurable groupId="editor" instance="com.maddyhome.idea.vim.ui.VimEmulationConfigurable"/>
|
||||
<projectService serviceImplementation="com.maddyhome.idea.vim.group.NotificationService"/>
|
||||
<statusBarWidgetProvider implementation="com.maddyhome.idea.vim.StatusBarIconProvider"/>
|
||||
|
||||
<applicationService serviceImplementation="com.maddyhome.idea.vim.VimLocalConfig"/>
|
||||
<applicationService serviceImplementation="com.maddyhome.idea.vim.VimPlugin"/>
|
||||
|
||||
<postStartupActivity implementation="com.maddyhome.idea.vim.PluginStartup"/>
|
||||
</extensions>
|
||||
|
||||
<xi:include href="/META-INF/includes/ApplicationServices.xml" xpointer="xpointer(/idea-plugin/*)"/>
|
||||
|
||||
<xi:include href="/META-INF/includes/VimActions.xml" xpointer="xpointer(/idea-plugin/*)"/>
|
||||
<xi:include href="/META-INF/includes/VimExCommands.xml" xpointer="xpointer(/idea-plugin/*)"/>
|
||||
<xi:include href="/META-INF/includes/VimExtensions.xml" xpointer="xpointer(/idea-plugin/*)"/>
|
||||
|
||||
<actions>
|
||||
<action id="VimPluginToggle" class="com.maddyhome.idea.vim.action.VimPluginToggleAction" text="Vim Emulator" description="Toggle the vim plugin On/off">
|
||||
<add-to-group group-id="ToolsMenu" anchor="last"/>
|
||||
</action>
|
||||
|
||||
<!-- Internal -->
|
||||
<action id="VimInternalAddInlays" class="com.maddyhome.idea.vim.action.internal.AddInlaysAction" text="Add Test Inlays | IdeaVim Internal" internal="true"/>
|
||||
|
||||
<action id="VimShortcutKeyAction" class="com.maddyhome.idea.vim.action.VimShortcutKeyAction" text="Shortcuts"/>
|
||||
<action id="VimActions" class="com.maddyhome.idea.vim.VimActions" text="Vim Actions"/>
|
||||
</actions>
|
||||
</idea-plugin>
|
@@ -1,4 +0,0 @@
|
||||
<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" width="16" height="16">
|
||||
<path
|
||||
d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 824 B |
@@ -1,72 +0,0 @@
|
||||
#
|
||||
# IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||
# Copyright (C) 2003-2020 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/>.
|
||||
#
|
||||
|
||||
notexcmd=Not an editor command: {0}
|
||||
intbadcmd=Internal error - invalid command: {0}
|
||||
e_backslash=E10: \\ should be followed by /, ? or &
|
||||
e_badrange=Unexpected character ''{0}'' in range
|
||||
e_norange=No range allowed
|
||||
e_rangereq=Range required
|
||||
e_argreq=Argument required
|
||||
e_argforb=Argument forbidden
|
||||
e_noprev=E34: No previous command
|
||||
e_nopresub=E33: No previous substitute regular expression
|
||||
E191=E191: Argument must be a letter or forward/backward quote
|
||||
e_backrange=Backwards range given
|
||||
E146=E146: Regular expressions can''t be delimited by letters
|
||||
e_zerocount=Zero count
|
||||
e_trailing=Trailing characters
|
||||
e_invcmd=Invalid command
|
||||
e_null=Null argument
|
||||
E50=E50: Too many \\z(
|
||||
E51=E51: Too many {0}(
|
||||
E52=E52: Unmatched \\z(
|
||||
E53=E53: Unmatched {0}%(
|
||||
E54=E54: Unmatched {0}(
|
||||
E55=E55: Unmatched {0})
|
||||
E56=E56: {0}* operand could be empty
|
||||
E57=E57: {0}+ operand could be empty
|
||||
E58=E58: {0}{ operand could be empty
|
||||
E59=E59: invalid character after {0}@
|
||||
E60=E60: Too many complex {0}{...}s
|
||||
E61=E61: Nested {0}*
|
||||
E62=E62: Nested {0}{1}
|
||||
E63=E63: invalid use of \\_
|
||||
E64=E64: {0}{1} follows nothing
|
||||
E65=E65: Illegal back reference
|
||||
E66=E66: \\z( not allowed here
|
||||
E67=E67: \\z1 et al. not allowed here
|
||||
E68=E68: Invalid character after \\z
|
||||
E69=E69: Missing ] after {0}%[
|
||||
E70=E70: Empty {0}%[]
|
||||
E71=E71: Invalid character after {0}%
|
||||
e_invrange=E16: Invalid range
|
||||
e_toomsbra=E76: Too many [
|
||||
e_internal=Internal error
|
||||
synerror=Syntax error in {0}{...}
|
||||
E363=E363: pattern caused out-of-stack error
|
||||
e_re_corr=E44: Currupted regexp program
|
||||
e_re_damg=E43: Damaged match string
|
||||
E369=E369: invalid item in {0}%[]
|
||||
E384=E384: search hit TOP without match for: {0}
|
||||
E385=E385: search hit BOTTOM without match for: {0}
|
||||
e_patnotf2=Pattern not found: {0}
|
||||
unkopt=Unknown option: {0}
|
||||
e_invarg=Invalid argument: {0}
|
||||
E475=E475: Invalid argument: {0}
|
||||
E774=E774: 'operatorfunc' is empty
|
@@ -1,19 +1,3 @@
|
||||
/*
|
||||
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||
* Copyright (C) 2003-2020 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/>.
|
||||
*/
|
||||
|
||||
rootProject.name = 'IdeaVIM'
|
||||
include 'vim-engine'
|
||||
|
||||
|
@@ -1,286 +0,0 @@
|
||||
/*
|
||||
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||
* Copyright (C) 2003-2020 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/>.
|
||||
*/
|
||||
|
||||
package com.maddyhome.idea.vim
|
||||
|
||||
import com.intellij.ide.BrowserUtil
|
||||
import com.intellij.ide.DataManager
|
||||
import com.intellij.ide.plugins.InstalledPluginsState
|
||||
import com.intellij.ide.plugins.PluginManager
|
||||
import com.intellij.ide.plugins.PluginManagerMain
|
||||
import com.intellij.ide.plugins.RepositoryHelper
|
||||
import com.intellij.openapi.actionSystem.ActionManager
|
||||
import com.intellij.openapi.actionSystem.AnActionEvent
|
||||
import com.intellij.openapi.actionSystem.DataContext
|
||||
import com.intellij.openapi.actionSystem.DefaultActionGroup
|
||||
import com.intellij.openapi.application.ApplicationInfo
|
||||
import com.intellij.openapi.options.ShowSettingsUtil
|
||||
import com.intellij.openapi.progress.PerformInBackgroundOption
|
||||
import com.intellij.openapi.progress.ProgressIndicator
|
||||
import com.intellij.openapi.progress.Task
|
||||
import com.intellij.openapi.project.DumbAwareAction
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.ui.Messages
|
||||
import com.intellij.openapi.ui.popup.JBPopupFactory
|
||||
import com.intellij.openapi.ui.popup.ListPopup
|
||||
import com.intellij.openapi.updateSettings.impl.PluginDownloader
|
||||
import com.intellij.openapi.updateSettings.impl.UpdateChecker
|
||||
import com.intellij.openapi.updateSettings.impl.UpdateInstaller
|
||||
import com.intellij.openapi.updateSettings.impl.UpdateSettings
|
||||
import com.intellij.openapi.util.Ref
|
||||
import com.intellij.openapi.wm.StatusBar
|
||||
import com.intellij.openapi.wm.StatusBarWidget
|
||||
import com.intellij.openapi.wm.StatusBarWidgetProvider
|
||||
import com.intellij.ui.awt.RelativePoint
|
||||
import com.intellij.util.Consumer
|
||||
import com.intellij.util.text.VersionComparatorUtil
|
||||
import com.maddyhome.idea.vim.group.NotificationService
|
||||
import com.maddyhome.idea.vim.option.IdeaStatusIcon
|
||||
import com.maddyhome.idea.vim.option.OptionsManager
|
||||
import com.maddyhome.idea.vim.ui.VimEmulationConfigurable
|
||||
import icons.VimIcons
|
||||
import java.awt.Point
|
||||
import java.awt.event.MouseEvent
|
||||
import javax.swing.Icon
|
||||
import javax.swing.SwingConstants
|
||||
|
||||
private class StatusBarIconProvider : StatusBarWidgetProvider {
|
||||
override fun getWidget(project: Project): VimStatusBar? {
|
||||
if (!OptionsManager.ideastatusbar.isSet) return null
|
||||
if (OptionsManager.ideastatusicon.value == IdeaStatusIcon.disabled) return null
|
||||
return VimStatusBar
|
||||
}
|
||||
}
|
||||
|
||||
object VimStatusBar : StatusBarWidget, StatusBarWidget.IconPresentation {
|
||||
|
||||
private var statusBar: StatusBar? = null
|
||||
|
||||
override fun ID(): String = "IdeaVim-Icon"
|
||||
|
||||
override fun install(statusBar: StatusBar) {
|
||||
this.statusBar = statusBar
|
||||
}
|
||||
|
||||
override fun dispose() {}
|
||||
|
||||
override fun getTooltipText() = "IdeaVim"
|
||||
|
||||
override fun getIcon(): Icon {
|
||||
if (OptionsManager.ideastatusicon.value == IdeaStatusIcon.gray) return VimIcons.IDEAVIM_DISABLED
|
||||
return if (VimPlugin.isEnabled()) VimIcons.IDEAVIM else VimIcons.IDEAVIM_DISABLED
|
||||
}
|
||||
|
||||
override fun getClickConsumer() = Consumer<MouseEvent> { event ->
|
||||
val component = event.component
|
||||
val popup = VimActionsPopup.getPopup(DataManager.getInstance().getDataContext(component))
|
||||
val dimension = popup.content.preferredSize
|
||||
|
||||
val at = Point(0, -dimension.height)
|
||||
popup.show(RelativePoint(component, at))
|
||||
}
|
||||
|
||||
// TODO [VERSION UPDATE] After 193 use `getPresentation()`
|
||||
@Suppress("DEPRECATION", "UnstableApiUsage")
|
||||
override fun getPresentation(type: StatusBarWidget.PlatformType): StatusBarWidget.WidgetPresentation? = this
|
||||
|
||||
fun update() {
|
||||
statusBar?.updateWidget(this.ID())
|
||||
}
|
||||
}
|
||||
|
||||
class VimActions : DumbAwareAction() {
|
||||
|
||||
companion object {
|
||||
const val actionPlace = "VimActionsPopup"
|
||||
}
|
||||
|
||||
override fun actionPerformed(e: AnActionEvent) {
|
||||
val project = e.project ?: return
|
||||
VimActionsPopup.getPopup(e.dataContext).showCenteredInCurrentWindow(project)
|
||||
}
|
||||
|
||||
override fun update(e: AnActionEvent) {
|
||||
val project = e.project
|
||||
e.presentation.isEnabledAndVisible = project != null && !project.isDisposed
|
||||
}
|
||||
}
|
||||
|
||||
private object VimActionsPopup {
|
||||
fun getPopup(dataContext: DataContext): ListPopup {
|
||||
val actions = getActions()
|
||||
val popup = JBPopupFactory.getInstance()
|
||||
.createActionGroupPopup("IdeaVim", actions,
|
||||
dataContext, JBPopupFactory.ActionSelectionAid.SPEEDSEARCH, false,
|
||||
VimActions.actionPlace)
|
||||
popup.setAdText("Version ${VimPlugin.getVersion()}", SwingConstants.CENTER)
|
||||
|
||||
return popup
|
||||
}
|
||||
|
||||
private fun getActions(): DefaultActionGroup {
|
||||
val actionGroup = DefaultActionGroup()
|
||||
actionGroup.isPopup = true
|
||||
|
||||
actionGroup.add(ActionManager.getInstance().getAction("VimPluginToggle"))
|
||||
actionGroup.addSeparator()
|
||||
actionGroup.add(NotificationService.OpenIdeaVimRcAction(null))
|
||||
actionGroup.add(ShortcutConflictsSettings)
|
||||
actionGroup.addSeparator()
|
||||
|
||||
val eapGroup = DefaultActionGroup("EAP" + if (JoinEap.eapActive()) " (Active)" else "", true)
|
||||
eapGroup.add(JoinEap)
|
||||
eapGroup.add(HelpLink("About EAP...", "https://github.com/JetBrains/ideavim#get-early-access", null))
|
||||
actionGroup.add(eapGroup)
|
||||
|
||||
val helpGroup = DefaultActionGroup("Contacts && Help", true)
|
||||
helpGroup.add(HelpLink("Contact on Twitter", "https://twitter.com/ideavim", VimIcons.TWITTER))
|
||||
helpGroup.add(HelpLink("Create an Issue", "https://youtrack.jetbrains.com/issues/VIM", VimIcons.YOUTRACK))
|
||||
helpGroup.add(HelpLink("Contribute on GitHub", "https://github.com/JetBrains/ideavim", VimIcons.GITHUB))
|
||||
actionGroup.add(helpGroup)
|
||||
|
||||
return actionGroup
|
||||
}
|
||||
}
|
||||
|
||||
private class HelpLink(
|
||||
name: String,
|
||||
val link: String,
|
||||
icon: Icon?
|
||||
) : DumbAwareAction(name, null, icon) {
|
||||
override fun actionPerformed(e: AnActionEvent) {
|
||||
BrowserUtil.browse(link)
|
||||
}
|
||||
}
|
||||
|
||||
private object ShortcutConflictsSettings : DumbAwareAction("Settings...") {
|
||||
override fun actionPerformed(e: AnActionEvent) {
|
||||
ShowSettingsUtil.getInstance().editConfigurable(e.project, VimEmulationConfigurable())
|
||||
}
|
||||
}
|
||||
|
||||
private object JoinEap : DumbAwareAction() {
|
||||
private const val EAP_LINK = "https://plugins.jetbrains.com/plugins/eap/ideavim"
|
||||
|
||||
fun eapActive() = EAP_LINK in UpdateSettings.getInstance().storedPluginHosts
|
||||
|
||||
override fun actionPerformed(e: AnActionEvent) {
|
||||
if (eapActive()) {
|
||||
UpdateSettings.getInstance().storedPluginHosts -= EAP_LINK
|
||||
VimPlugin.getNotifications(e.project).notifyEapFinished()
|
||||
} else {
|
||||
UpdateSettings.getInstance().storedPluginHosts += EAP_LINK
|
||||
checkForUpdates(e.project)
|
||||
}
|
||||
}
|
||||
|
||||
override fun update(e: AnActionEvent) {
|
||||
if (eapActive()) {
|
||||
e.presentation.text = "Finish EAP"
|
||||
} else {
|
||||
e.presentation.text = "Get Early Access..."
|
||||
}
|
||||
}
|
||||
|
||||
private fun checkForUpdates(project: Project?) {
|
||||
val notificator = VimPlugin.getNotifications(project)
|
||||
|
||||
val pluginRef = Ref.create<PluginDownloader>()
|
||||
|
||||
// [VERSION UPDATE] 193+ remove suppressing
|
||||
@Suppress("UnstableApiUsage")
|
||||
object : Task.Backgroundable(null, "Checking for IdeaVim EAP version", true) {
|
||||
override fun run(indicator: ProgressIndicator) {
|
||||
val downloaders = mutableListOf<PluginDownloader>()
|
||||
val build = ApplicationInfo.getInstance().build
|
||||
for (host in RepositoryHelper.getPluginHosts()) {
|
||||
val newPluginDescriptor = RepositoryHelper
|
||||
.loadPlugins(host, null, indicator)
|
||||
.filter { it.pluginId == VimPlugin.getPluginId() }
|
||||
.maxWith(java.util.Comparator { o1, o2 -> VersionComparatorUtil.compare(o1.version, o2.version) })
|
||||
?: continue
|
||||
|
||||
downloaders += PluginDownloader.createDownloader(newPluginDescriptor, host, build)
|
||||
}
|
||||
val plugin = downloaders.maxWith(java.util.Comparator { o1, o2 -> VersionComparatorUtil.compare(o1.pluginVersion, o2.pluginVersion) })
|
||||
pluginRef.set(plugin)
|
||||
}
|
||||
|
||||
// [VERSION UPDATE] 193+ remove suppressing
|
||||
@Suppress("MissingRecentApi", "UnstableApiUsage")
|
||||
override fun onSuccess() {
|
||||
val downloader: PluginDownloader = pluginRef.get() ?: run {
|
||||
notificator.notifySubscribedToEap()
|
||||
return
|
||||
}
|
||||
val currentVersion = PluginManager.getPlugin(VimPlugin.getPluginId())?.version ?: ""
|
||||
if (VersionComparatorUtil.compare(downloader.pluginVersion, currentVersion) <= 0) {
|
||||
notificator.notifySubscribedToEap()
|
||||
return
|
||||
}
|
||||
|
||||
val version = downloader.pluginVersion
|
||||
val message = "Do you want to install the EAP version of IdeaVim?"
|
||||
@Suppress("MoveVariableDeclarationIntoWhen")
|
||||
val res = Messages.showYesNoCancelDialog(project, message, "IdeaVim $version", null)
|
||||
when (res) {
|
||||
Messages.YES -> updatePlugin(project, downloader)
|
||||
Messages.NO -> notificator.notifySubscribedToEap()
|
||||
Messages.CANCEL -> if (eapActive()) UpdateSettings.getInstance().storedPluginHosts -= EAP_LINK
|
||||
}
|
||||
}
|
||||
|
||||
override fun onCancel() {
|
||||
notificator.notifySubscribedToEap()
|
||||
}
|
||||
|
||||
override fun onThrowable(error: Throwable) {
|
||||
notificator.notifySubscribedToEap()
|
||||
}
|
||||
}.queue()
|
||||
}
|
||||
|
||||
private fun updatePlugin(project: Project?, downloader: PluginDownloader) {
|
||||
val notificator = VimPlugin.getNotifications(project)
|
||||
return object : Task.Backgroundable(null, "Plugin Updates", true, PerformInBackgroundOption.DEAF) {
|
||||
private var updated = false
|
||||
override fun run(indicator: ProgressIndicator) {
|
||||
val state = InstalledPluginsState.getInstance()
|
||||
state.onDescriptorDownload(downloader.descriptor)
|
||||
UpdateChecker.checkAndPrepareToInstall(downloader, state, mutableMapOf(VimPlugin.getPluginId() to downloader), mutableListOf(), indicator)
|
||||
updated = UpdateInstaller.installPluginUpdates(listOf(downloader), indicator)
|
||||
}
|
||||
|
||||
override fun onSuccess() {
|
||||
if (updated) {
|
||||
PluginManagerMain.notifyPluginsUpdated(null)
|
||||
} else {
|
||||
notificator.notifyFailedToDownloadEap()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onCancel() {
|
||||
notificator.notifyFailedToDownloadEap()
|
||||
}
|
||||
|
||||
override fun onThrowable(error: Throwable) {
|
||||
notificator.notifyFailedToDownloadEap()
|
||||
}
|
||||
}.queue()
|
||||
}
|
||||
}
|
@@ -1,56 +0,0 @@
|
||||
/*
|
||||
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||
* Copyright (C) 2003-2020 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/>.
|
||||
*/
|
||||
|
||||
package com.maddyhome.idea.vim
|
||||
|
||||
import com.intellij.openapi.components.PersistentStateComponent
|
||||
import com.intellij.openapi.components.RoamingType
|
||||
import com.intellij.openapi.components.ServiceManager
|
||||
import com.intellij.openapi.components.State
|
||||
import com.intellij.openapi.components.Storage
|
||||
import org.jdom.Element
|
||||
|
||||
/**
|
||||
* @author Alex Plate
|
||||
*/
|
||||
|
||||
@State(name = "VimLocalSettings", storages = [
|
||||
Storage("\$APP_CONFIG$$/vim_local_settings.xml", roamingType = RoamingType.DISABLED, deprecated = true),
|
||||
Storage("\$APP_CONFIG$/vim_local_settings.xml", roamingType = RoamingType.DISABLED, deprecated = true)
|
||||
])
|
||||
// TODO: 27.01.2020 [VERSION UPDATE] 2019.3 https://www.jetbrains.org/intellij/sdk/docs/basics/plugin_structure/plugin_services.html#light-services
|
||||
@Deprecated("The data from this class will be stored in vim_settings")
|
||||
class VimLocalConfig : PersistentStateComponent<Element> {
|
||||
override fun getState(): Element? = null
|
||||
|
||||
override fun loadState(state: Element) {
|
||||
// This is initialization of state from the legacy configuration structure.
|
||||
// This code should be performed only once on settings migration.
|
||||
// After the migration is done, the file with settings gets removed and this method won't be called again.
|
||||
VimPlugin.getMark().readData(state)
|
||||
VimPlugin.getRegister().readData(state)
|
||||
VimPlugin.getSearch().readData(state)
|
||||
VimPlugin.getHistory().readData(state)
|
||||
}
|
||||
|
||||
companion object {
|
||||
fun initialize() {
|
||||
ServiceManager.getService(VimLocalConfig::class.java)
|
||||
}
|
||||
}
|
||||
}
|
@@ -1,61 +0,0 @@
|
||||
/*
|
||||
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||
* Copyright (C) 2003-2020 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/>.
|
||||
*/
|
||||
|
||||
package com.maddyhome.idea.vim;
|
||||
|
||||
import com.intellij.openapi.actionSystem.DataContext;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.editor.actionSystem.ActionPlan;
|
||||
import com.intellij.openapi.editor.actionSystem.TypedActionHandler;
|
||||
import com.intellij.openapi.editor.actionSystem.TypedActionHandlerEx;
|
||||
import com.maddyhome.idea.vim.helper.EditorDataContext;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import javax.swing.*;
|
||||
|
||||
/**
|
||||
* Accepts all regular keystrokes and passes them on to the Vim key handler.
|
||||
*
|
||||
* IDE shortcut keys used by Vim commands are handled by {@link com.maddyhome.idea.vim.action.VimShortcutKeyAction}.
|
||||
*/
|
||||
public class VimTypedActionHandler implements TypedActionHandlerEx {
|
||||
private static final Logger logger = Logger.getInstance(VimTypedActionHandler.class.getName());
|
||||
|
||||
private final @NotNull KeyHandler handler;
|
||||
|
||||
public VimTypedActionHandler(TypedActionHandler origHandler) {
|
||||
handler = KeyHandler.getInstance();
|
||||
handler.setOriginalHandler(origHandler);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void beforeExecute(@NotNull Editor editor, char charTyped, @NotNull DataContext context, @NotNull ActionPlan plan) {
|
||||
handler.beforeHandleKey(editor, KeyStroke.getKeyStroke(charTyped), context, plan);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(final @NotNull Editor editor, final char charTyped, final @NotNull DataContext context) {
|
||||
try {
|
||||
handler.handleKey(editor, KeyStroke.getKeyStroke(charTyped), new EditorDataContext(editor));
|
||||
}
|
||||
catch (Throwable e) {
|
||||
logger.error(e);
|
||||
}
|
||||
}
|
||||
}
|
@@ -1,223 +0,0 @@
|
||||
/*
|
||||
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||
* Copyright (C) 2003-2020 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/>.
|
||||
*/
|
||||
package com.maddyhome.idea.vim.action
|
||||
|
||||
import com.google.common.collect.ImmutableSet
|
||||
import com.intellij.codeInsight.lookup.LookupManager
|
||||
import com.intellij.openapi.actionSystem.ActionManager
|
||||
import com.intellij.openapi.actionSystem.AnAction
|
||||
import com.intellij.openapi.actionSystem.AnActionEvent
|
||||
import com.intellij.openapi.actionSystem.EmptyAction
|
||||
import com.intellij.openapi.actionSystem.PlatformDataKeys
|
||||
import com.intellij.openapi.diagnostic.Logger
|
||||
import com.intellij.openapi.editor.Editor
|
||||
import com.intellij.openapi.editor.ex.util.EditorUtil
|
||||
import com.intellij.openapi.fileEditor.ex.FileEditorManagerEx
|
||||
import com.intellij.openapi.progress.ProcessCanceledException
|
||||
import com.intellij.openapi.project.DumbAware
|
||||
import com.intellij.openapi.util.Key
|
||||
import com.intellij.ui.KeyStrokeAdapter
|
||||
import com.maddyhome.idea.vim.KeyHandler
|
||||
import com.maddyhome.idea.vim.VimPlugin
|
||||
import com.maddyhome.idea.vim.helper.EditorDataContext
|
||||
import com.maddyhome.idea.vim.helper.EditorHelper
|
||||
import com.maddyhome.idea.vim.helper.StringHelper
|
||||
import com.maddyhome.idea.vim.helper.inInsertMode
|
||||
import com.maddyhome.idea.vim.helper.inNormalMode
|
||||
import com.maddyhome.idea.vim.key.ShortcutOwner
|
||||
import com.maddyhome.idea.vim.listener.IdeaSpecifics.aceJumpActive
|
||||
import com.maddyhome.idea.vim.option.OptionsManager
|
||||
import java.awt.event.InputEvent
|
||||
import java.awt.event.KeyEvent
|
||||
import javax.swing.KeyStroke
|
||||
|
||||
/**
|
||||
* Handles Vim keys that are treated as action shortcuts by the IDE.
|
||||
*
|
||||
*
|
||||
* These keys are not passed to [com.maddyhome.idea.vim.VimTypedActionHandler] and should be handled by actions.
|
||||
*/
|
||||
class VimShortcutKeyAction : AnAction(), DumbAware {
|
||||
override fun actionPerformed(e: AnActionEvent) {
|
||||
val editor = getEditor(e)
|
||||
val keyStroke = getKeyStroke(e)
|
||||
if (editor != null && keyStroke != null) {
|
||||
val owner = VimPlugin.getKey().savedShortcutConflicts[keyStroke]
|
||||
if (owner == ShortcutOwner.UNDEFINED) {
|
||||
VimPlugin.getNotifications(editor.project).notifyAboutShortcutConflict(keyStroke)
|
||||
}
|
||||
// Should we use HelperKt.getTopLevelEditor(editor) here, as we did in former EditorKeyHandler?
|
||||
try {
|
||||
KeyHandler.getInstance().handleKey(editor, keyStroke, EditorDataContext(editor))
|
||||
} catch (ignored: ProcessCanceledException) {
|
||||
// Control-flow exceptions (like ProcessCanceledException) should never be logged
|
||||
// See {@link com.intellij.openapi.diagnostic.Logger.checkException}
|
||||
} catch (throwable: Throwable) {
|
||||
ourLogger.error(throwable)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun update(e: AnActionEvent) {
|
||||
e.presentation.isEnabled = isEnabled(e)
|
||||
}
|
||||
|
||||
private fun isEnabled(e: AnActionEvent): Boolean {
|
||||
if (!VimPlugin.isEnabled()) return false
|
||||
val editor = getEditor(e)
|
||||
val keyStroke = getKeyStroke(e)
|
||||
if (editor != null && keyStroke != null) {
|
||||
// Workaround for smart step into
|
||||
@Suppress("DEPRECATION")
|
||||
val SMART_STEP_INPLACE_DATA = Key.findKeyByName("SMART_STEP_INPLACE_DATA")
|
||||
if (SMART_STEP_INPLACE_DATA != null && editor.getUserData(SMART_STEP_INPLACE_DATA) != null) return false
|
||||
if (aceJumpActive()) return false
|
||||
val keyCode = keyStroke.keyCode
|
||||
if (LookupManager.getActiveLookup(editor) != null) {
|
||||
return LookupKeys.isEnabledForLookup(keyStroke)
|
||||
}
|
||||
if (keyCode == KeyEvent.VK_ESCAPE) {
|
||||
return isEnabledForEscape(editor)
|
||||
}
|
||||
if (editor.inInsertMode) { // XXX: <Tab> won't be recorded in macros
|
||||
if (keyCode == KeyEvent.VK_TAB) {
|
||||
VimPlugin.getChange().tabAction = true
|
||||
return false
|
||||
}
|
||||
// Debug watch, Python console, etc.
|
||||
if (NON_FILE_EDITOR_KEYS.contains(keyStroke) && !EditorHelper.isFileEditor(editor)) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
if (VIM_ONLY_EDITOR_KEYS.contains(keyStroke)) {
|
||||
return true
|
||||
}
|
||||
val savedShortcutConflicts = VimPlugin.getKey().savedShortcutConflicts
|
||||
return when (savedShortcutConflicts[keyStroke]) {
|
||||
ShortcutOwner.VIM -> true
|
||||
ShortcutOwner.IDE -> !isShortcutConflict(keyStroke)
|
||||
else -> {
|
||||
if (isShortcutConflict(keyStroke)) {
|
||||
savedShortcutConflicts[keyStroke] = ShortcutOwner.UNDEFINED
|
||||
}
|
||||
true
|
||||
}
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
private fun isEnabledForEscape(editor: Editor): Boolean {
|
||||
return isPrimaryEditor(editor) || EditorHelper.isFileEditor(editor) && !editor.inNormalMode
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the editor is a primary editor in the main editing area.
|
||||
*/
|
||||
private fun isPrimaryEditor(editor: Editor): Boolean {
|
||||
val project = editor.project ?: return false
|
||||
val fileEditorManager = FileEditorManagerEx.getInstanceEx(project) ?: return false
|
||||
return fileEditorManager.allEditors.any { fileEditor -> editor == EditorUtil.getEditorEx(fileEditor) }
|
||||
}
|
||||
|
||||
private fun isShortcutConflict(keyStroke: KeyStroke): Boolean {
|
||||
return VimPlugin.getKey().getKeymapConflicts(keyStroke).isNotEmpty()
|
||||
}
|
||||
|
||||
/**
|
||||
* getDefaultKeyStroke is needed for NEO layout keyboard VIM-987
|
||||
* but we should cache the value because on the second call (isEnabled -> actionPerformed)
|
||||
* the event is already consumed
|
||||
*/
|
||||
private var keyStrokeCache: Pair<KeyEvent?, KeyStroke?> = null to null
|
||||
|
||||
private fun getKeyStroke(e: AnActionEvent): KeyStroke? {
|
||||
val inputEvent = e.inputEvent
|
||||
if (inputEvent is KeyEvent) {
|
||||
val defaultKeyStroke = KeyStrokeAdapter.getDefaultKeyStroke(inputEvent)
|
||||
val strokeCache = keyStrokeCache
|
||||
if (defaultKeyStroke != null) {
|
||||
keyStrokeCache = inputEvent to defaultKeyStroke
|
||||
return defaultKeyStroke
|
||||
} else if (strokeCache.first === inputEvent) {
|
||||
keyStrokeCache = null to null
|
||||
return strokeCache.second
|
||||
}
|
||||
return KeyStroke.getKeyStrokeForEvent(inputEvent)
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
private fun getEditor(e: AnActionEvent): Editor? = e.getData(PlatformDataKeys.EDITOR)
|
||||
|
||||
/**
|
||||
* Every time the key pressed with an active lookup, there is a decision:
|
||||
* should this key be processed by IdeaVim, or by IDE. For example, dot and enter should be processed by IDE, but
|
||||
* <C-W> by IdeaVim.
|
||||
*
|
||||
* The list of keys that should be processed by IDE is stored in [OptionsManager.lookupKeys]. So, we should search
|
||||
* if the pressed key is presented in this list. The caches are used to speedup the process.
|
||||
*/
|
||||
private object LookupKeys {
|
||||
private var parsedLookupKeys: Set<KeyStroke> = parseLookupKeys()
|
||||
|
||||
init {
|
||||
OptionsManager.lookupKeys.addOptionChangeListener { _, _ ->
|
||||
parsedLookupKeys = parseLookupKeys()
|
||||
}
|
||||
}
|
||||
|
||||
fun isEnabledForLookup(keyStroke: KeyStroke): Boolean = keyStroke !in parsedLookupKeys
|
||||
|
||||
private fun parseLookupKeys() = OptionsManager.lookupKeys.values()
|
||||
.map { StringHelper.parseKeys(it) }.filter { it.isNotEmpty() }.map { it.first() }.toSet()
|
||||
}
|
||||
|
||||
companion object {
|
||||
@JvmField
|
||||
val VIM_ONLY_EDITOR_KEYS: Set<KeyStroke> = ImmutableSet.builder<KeyStroke>().addAll(getKeyStrokes(KeyEvent.VK_ENTER, 0)).addAll(getKeyStrokes(KeyEvent.VK_ESCAPE, 0))
|
||||
.addAll(getKeyStrokes(KeyEvent.VK_TAB, 0)).addAll(getKeyStrokes(KeyEvent.VK_BACK_SPACE, 0, InputEvent.CTRL_MASK))
|
||||
.addAll(getKeyStrokes(KeyEvent.VK_INSERT, 0)).addAll(getKeyStrokes(KeyEvent.VK_DELETE, 0, InputEvent.CTRL_MASK))
|
||||
.addAll(getKeyStrokes(KeyEvent.VK_UP, 0, InputEvent.CTRL_MASK, InputEvent.SHIFT_MASK)).addAll(getKeyStrokes(KeyEvent.VK_DOWN, 0, InputEvent.CTRL_MASK, InputEvent.SHIFT_MASK))
|
||||
.addAll(getKeyStrokes(KeyEvent.VK_LEFT, 0, InputEvent.CTRL_MASK, InputEvent.SHIFT_MASK, InputEvent.CTRL_MASK or InputEvent.SHIFT_MASK))
|
||||
.addAll(getKeyStrokes(KeyEvent.VK_RIGHT, 0, InputEvent.CTRL_MASK, InputEvent.SHIFT_MASK, InputEvent.CTRL_MASK or InputEvent.SHIFT_MASK))
|
||||
.addAll(getKeyStrokes(KeyEvent.VK_HOME, 0, InputEvent.CTRL_MASK, InputEvent.SHIFT_MASK, InputEvent.CTRL_MASK or InputEvent.SHIFT_MASK))
|
||||
.addAll(getKeyStrokes(KeyEvent.VK_END, 0, InputEvent.CTRL_MASK, InputEvent.SHIFT_MASK, InputEvent.CTRL_MASK or InputEvent.SHIFT_MASK))
|
||||
.addAll(getKeyStrokes(KeyEvent.VK_PAGE_UP, 0, InputEvent.SHIFT_MASK, InputEvent.CTRL_MASK or InputEvent.SHIFT_MASK))
|
||||
.addAll(getKeyStrokes(KeyEvent.VK_PAGE_DOWN, 0, InputEvent.SHIFT_MASK, InputEvent.CTRL_MASK or InputEvent.SHIFT_MASK)).build()
|
||||
|
||||
private const val ACTION_ID = "VimShortcutKeyAction"
|
||||
|
||||
private val NON_FILE_EDITOR_KEYS: Set<KeyStroke> = ImmutableSet.builder<KeyStroke>()
|
||||
.addAll(getKeyStrokes(KeyEvent.VK_ENTER, 0))
|
||||
.addAll(getKeyStrokes(KeyEvent.VK_ESCAPE, 0))
|
||||
.addAll(getKeyStrokes(KeyEvent.VK_TAB, 0))
|
||||
.addAll(getKeyStrokes(KeyEvent.VK_UP, 0))
|
||||
.addAll(getKeyStrokes(KeyEvent.VK_DOWN, 0))
|
||||
.build()
|
||||
|
||||
private val ourLogger = Logger.getInstance(VimShortcutKeyAction::class.java.name)
|
||||
|
||||
@JvmStatic
|
||||
val instance: AnAction by lazy {
|
||||
EmptyAction.wrap(ActionManager.getInstance().getAction(ACTION_ID))
|
||||
}
|
||||
|
||||
private fun getKeyStrokes(keyCode: Int, vararg modifiers: Int) = modifiers.map { KeyStroke.getKeyStroke(keyCode, it) }
|
||||
}
|
||||
}
|
@@ -1,63 +0,0 @@
|
||||
/*
|
||||
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||
* Copyright (C) 2003-2020 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/>.
|
||||
*/
|
||||
package com.maddyhome.idea.vim.action.change
|
||||
|
||||
import com.intellij.openapi.actionSystem.DataContext
|
||||
import com.intellij.openapi.editor.Editor
|
||||
import com.maddyhome.idea.vim.KeyHandler
|
||||
import com.maddyhome.idea.vim.VimPlugin
|
||||
import com.maddyhome.idea.vim.command.Argument
|
||||
import com.maddyhome.idea.vim.command.Command
|
||||
import com.maddyhome.idea.vim.command.SelectionType
|
||||
import com.maddyhome.idea.vim.group.MotionGroup
|
||||
import com.maddyhome.idea.vim.handler.VimActionHandler
|
||||
import com.maddyhome.idea.vim.helper.MessageHelper
|
||||
import com.maddyhome.idea.vim.helper.commandState
|
||||
|
||||
/**
|
||||
* @author vlan
|
||||
*/
|
||||
class OperatorAction : VimActionHandler.SingleExecution() {
|
||||
override val type: Command.Type = Command.Type.OTHER_SELF_SYNCHRONIZED
|
||||
|
||||
override val argumentType: Argument.Type = Argument.Type.MOTION
|
||||
|
||||
override fun execute(editor: Editor, context: DataContext, cmd: Command): Boolean {
|
||||
val operatorFunction = VimPlugin.getKey().operatorFunction
|
||||
if (operatorFunction != null) {
|
||||
val argument = cmd.argument
|
||||
if (argument != null) {
|
||||
if (!editor.commandState.isDotRepeatInProgress) {
|
||||
VimRepeater.Extension.argumentCaptured = argument
|
||||
}
|
||||
val motion = argument.motion
|
||||
val range = MotionGroup
|
||||
.getMotionRange(editor, editor.caretModel.primaryCaret, context, cmd.count, cmd.rawCount, argument)
|
||||
if (range != null) {
|
||||
VimPlugin.getMark().setChangeMarks(editor, range)
|
||||
val selectionType = SelectionType.fromCommandFlags(motion.flags)
|
||||
KeyHandler.getInstance().reset(editor)
|
||||
return operatorFunction.apply(editor, context, selectionType)
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
VimPlugin.showMessage(MessageHelper.message("E774"))
|
||||
return false
|
||||
}
|
||||
}
|
@@ -1,141 +0,0 @@
|
||||
/*
|
||||
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||
* Copyright (C) 2003-2020 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/>.
|
||||
*/
|
||||
package com.maddyhome.idea.vim.action.change
|
||||
|
||||
import com.intellij.openapi.actionSystem.DataContext
|
||||
import com.intellij.openapi.command.CommandProcessor
|
||||
import com.intellij.openapi.editor.Editor
|
||||
import com.maddyhome.idea.vim.KeyHandler
|
||||
import com.maddyhome.idea.vim.VimPlugin
|
||||
import com.maddyhome.idea.vim.command.Argument
|
||||
import com.maddyhome.idea.vim.command.Command
|
||||
import com.maddyhome.idea.vim.extension.VimExtensionHandler
|
||||
import com.maddyhome.idea.vim.handler.VimActionHandler
|
||||
import com.maddyhome.idea.vim.helper.commandState
|
||||
import javax.swing.KeyStroke
|
||||
|
||||
class RepeatChangeAction : VimActionHandler.SingleExecution() {
|
||||
override val type: Command.Type = Command.Type.OTHER_WRITABLE
|
||||
|
||||
override fun execute(editor: Editor, context: DataContext, cmd: Command): Boolean {
|
||||
val state = editor.commandState
|
||||
val lastCommand = VimRepeater.lastChangeCommand
|
||||
|
||||
if (lastCommand == null && VimRepeater.Extension.lastExtensionHandler == null) return false
|
||||
|
||||
// Save state
|
||||
val save = state.executingCommand
|
||||
val lastFTCmd = VimPlugin.getMotion().lastFTCmd
|
||||
val lastFTChar = VimPlugin.getMotion().lastFTChar
|
||||
val reg = VimPlugin.getRegister().currentRegister
|
||||
val lastHandler = VimRepeater.Extension.lastExtensionHandler
|
||||
val repeatHandler = VimRepeater.repeatHandler
|
||||
|
||||
state.isDotRepeatInProgress = true
|
||||
VimPlugin.getRegister().selectRegister(VimRepeater.lastChangeRegister)
|
||||
|
||||
try {
|
||||
if (repeatHandler && lastHandler != null) {
|
||||
val processor = CommandProcessor.getInstance()
|
||||
processor.executeCommand(editor.project, { lastHandler.execute(editor, context) }, "Vim " + lastHandler.javaClass.simpleName, null)
|
||||
} else if (!repeatHandler && lastCommand != null) {
|
||||
if (cmd.rawCount > 0) {
|
||||
lastCommand.count = cmd.count
|
||||
val arg = lastCommand.argument
|
||||
if (arg != null) {
|
||||
val mot = arg.motion
|
||||
mot.count = 0
|
||||
}
|
||||
}
|
||||
state.setExecutingCommand(lastCommand)
|
||||
|
||||
KeyHandler.executeVimAction(editor, lastCommand.action, context)
|
||||
|
||||
VimRepeater.saveLastChange(lastCommand)
|
||||
}
|
||||
} catch (ignored: Exception) {
|
||||
}
|
||||
|
||||
state.isDotRepeatInProgress = false
|
||||
|
||||
// Restore state
|
||||
if (save != null) state.setExecutingCommand(save)
|
||||
VimPlugin.getMotion().setLastFTCmd(lastFTCmd, lastFTChar)
|
||||
if (lastHandler != null) VimRepeater.Extension.lastExtensionHandler = lastHandler
|
||||
VimRepeater.repeatHandler = repeatHandler
|
||||
VimRepeater.Extension.reset()
|
||||
VimPlugin.getRegister().selectRegister(reg)
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
object VimRepeater {
|
||||
var repeatHandler = false
|
||||
|
||||
var lastChangeCommand: Command? = null
|
||||
private set
|
||||
var lastChangeRegister = VimPlugin.getRegister().defaultRegister
|
||||
private set
|
||||
|
||||
fun saveLastChange(command: Command) {
|
||||
lastChangeCommand = command
|
||||
lastChangeRegister = VimPlugin.getRegister().currentRegister
|
||||
}
|
||||
|
||||
object Extension {
|
||||
var lastExtensionHandler: VimExtensionHandler? = null
|
||||
var argumentCaptured: Argument? = null
|
||||
|
||||
private val keyStrokes = mutableListOf<KeyStroke>()
|
||||
private val strings = mutableListOf<String>()
|
||||
|
||||
private var keystrokePointer = 0
|
||||
private var stringPointer = 0
|
||||
|
||||
fun addKeystroke(key: KeyStroke) = keyStrokes.add(key)
|
||||
fun addString(key: String) = strings.add(key)
|
||||
|
||||
fun consumeKeystroke(): KeyStroke? {
|
||||
if (keystrokePointer in keyStrokes.indices) {
|
||||
keystrokePointer += 1
|
||||
return keyStrokes[keystrokePointer - 1]
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
fun consumeString(): String? {
|
||||
if (stringPointer in strings.indices) {
|
||||
stringPointer += 1
|
||||
return strings[stringPointer - 1]
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
fun reset() {
|
||||
keystrokePointer = 0
|
||||
stringPointer = 0
|
||||
}
|
||||
|
||||
fun clean() {
|
||||
keyStrokes.clear()
|
||||
strings.clear()
|
||||
keystrokePointer = 0
|
||||
stringPointer = 0
|
||||
}
|
||||
}
|
||||
}
|
@@ -1,46 +0,0 @@
|
||||
/*
|
||||
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||
* Copyright (C) 2003-2020 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/>.
|
||||
*/
|
||||
package com.maddyhome.idea.vim.action.change.change
|
||||
|
||||
import com.intellij.openapi.actionSystem.DataContext
|
||||
import com.intellij.openapi.editor.Caret
|
||||
import com.intellij.openapi.editor.Editor
|
||||
import com.maddyhome.idea.vim.VimPlugin
|
||||
import com.maddyhome.idea.vim.command.Argument
|
||||
import com.maddyhome.idea.vim.command.Command
|
||||
import com.maddyhome.idea.vim.command.CommandFlags
|
||||
import com.maddyhome.idea.vim.handler.ChangeEditorActionHandler
|
||||
import com.maddyhome.idea.vim.helper.enumSetOf
|
||||
import java.util.*
|
||||
|
||||
class ChangeCharacterAction : ChangeEditorActionHandler.ForEachCaret() {
|
||||
override val type: Command.Type = Command.Type.CHANGE
|
||||
|
||||
override val argumentType: Argument.Type = Argument.Type.DIGRAPH
|
||||
|
||||
override val flags: EnumSet<CommandFlags> = enumSetOf(CommandFlags.FLAG_ALLOW_DIGRAPH)
|
||||
|
||||
override fun execute(editor: Editor,
|
||||
caret: Caret,
|
||||
context: DataContext,
|
||||
count: Int,
|
||||
rawCount: Int,
|
||||
argument: Argument?): Boolean {
|
||||
return argument != null && VimPlugin.getChange().changeCharacter(editor, caret, count, argument.character)
|
||||
}
|
||||
}
|
@@ -1,39 +0,0 @@
|
||||
/*
|
||||
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
|
||||
* Copyright (C) 2003-2020 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/>.
|
||||
*/
|
||||
package com.maddyhome.idea.vim.action.change.change.number
|
||||
|
||||
import com.intellij.openapi.actionSystem.DataContext
|
||||
import com.intellij.openapi.editor.Caret
|
||||
import com.intellij.openapi.editor.Editor
|
||||
import com.maddyhome.idea.vim.VimPlugin
|
||||
import com.maddyhome.idea.vim.command.Argument
|
||||
import com.maddyhome.idea.vim.command.Command
|
||||
import com.maddyhome.idea.vim.handler.ChangeEditorActionHandler
|
||||
|
||||
class ChangeNumberDecAction : ChangeEditorActionHandler.ForEachCaret() {
|
||||
override val type: Command.Type = Command.Type.CHANGE
|
||||
|
||||
override fun execute(editor: Editor,
|
||||
caret: Caret,
|
||||
context: DataContext,
|
||||
count: Int,
|
||||
rawCount: Int,
|
||||
argument: Argument?): Boolean {
|
||||
return VimPlugin.getChange().changeNumber(editor, caret, -count)
|
||||
}
|
||||
}
|