Compare commits
	
		
			1514 Commits
		
	
	
		
			edb9b194bb
			...
			customized
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| c9eb104a45 | |||
| ade53624cc | |||
| b488295b59 | |||
| 990ce13d3e | |||
| b8cf11257c | |||
| 755f05791a | |||
| 2d170dd15b | |||
| 943dffd43a | |||
| f17e99dd46 | |||
| aa4caaa722 | |||
| 4380b88cbd | |||
| 55ce038d51 | |||
| deec7eef2e | |||
| 2feffa9ff4 | |||
| f7f663f29a | |||
| badbcd83d6 | |||
| d978901edf | |||
| 08940fdaba | |||
| 3a11fb9bd3 | |||
| fa9bb6adf4 | |||
|   | fb75508258 | ||
|   | 0e69168382 | ||
|   | 9970ab8643 | ||
|   | 7ff82010c3 | ||
|   | 1da8cd53d2 | ||
|   | 9337a89eac | ||
|   | 510564dd91 | ||
|   | a9ededc997 | ||
|   | 722cffbd48 | ||
|   | a787befd72 | ||
|   | 8ddd71a65a | ||
|   | 280e1ec16d | ||
|   | 52cf10cb2e | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | c12082affc | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | c0d7d74dac | ||
|   | df72b24ad2 | ||
|   | 26bdd15400 | ||
|   | e13310b4e0 | ||
|   | e9d4218705 | ||
|   | 56b80e4e60 | ||
|   | 679f6471e6 | ||
|   | 984179695c | ||
|   | 5cca484a82 | ||
|   | d91e2296b0 | ||
|   | 59768c16e2 | ||
|   | 580efeae1a | ||
|   | 0a3b508c8a | ||
|   | 5e2f590b76 | ||
|   | ee94396afa | ||
|   | 98764b6356 | ||
|   | f01cc4d0d0 | ||
|   | 4c0f17429b | ||
|   | 6a2ae1c572 | ||
|   | a2681ce6cc | ||
|   | 4e43606932 | ||
|   | 28c0c3207a | ||
|   | ecfa0e2b49 | ||
|   | ec3122f320 | ||
|   | 7e4b4c973c | ||
|   | 64753df2dd | ||
|   | 75b36ab886 | ||
|   | 208a78c748 | ||
|   | 027249c575 | ||
|   | 5ceb960205 | ||
|   | 1cea156c5a | ||
|   | e1efa1ecbc | ||
|   | 517de5e179 | ||
|   | 825b62a2a9 | ||
|   | 5ec817776c | ||
|   | 3ad0519add | ||
|   | 9868522341 | ||
|   | 5b8d8c617f | ||
|   | a1f66061e3 | ||
|   | d8811933c9 | ||
|   | c9864dde8d | ||
|   | ca849d6649 | ||
|   | 95a2354a86 | ||
|   | 538e0ac48c | ||
|   | 1c17411f04 | ||
|   | cbe0f89548 | ||
|   | 615b071dcb | ||
|   | 2d74f121aa | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | f65c180b8f | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | eb389c472d | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | befdf08035 | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | 7a43ac865e | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | c43fcf9fbf | ||
|   | 472a633010 | ||
|   | fc46acb2e4 | ||
|   | 7fde66eb40 | ||
|   | b3cea3997d | ||
|   | 2f20193086 | ||
|   | 601e207f04 | ||
|   | f0d3d8b276 | ||
|   | e02d34f023 | ||
|   | 0504be84b6 | ||
|   | 216f020b70 | ||
|   | 66505eedfa | ||
|   | b307c7d88b | ||
|   | 47d4445fa8 | ||
|   | 7098d2633a | ||
|   | 61b5393b54 | ||
|   | 6fe2cf13b6 | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | cc971eb2df | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | a260987f5c | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | 5eb8f44dfc | ||
|   | e36131b38b | ||
|   | b67868afde | ||
|   | 328fdee281 | ||
|   | 8ab43e98fe | ||
|   | 4f407ccc03 | ||
|   | 5f3fddd3e4 | ||
|   | 392f3b536d | ||
|   | 155de2b396 | ||
|   | 6c9930ac2a | ||
|   | 9dddf4f4bc | ||
|   | 314506c15c | ||
| 673222da6c | |||
|   | 58b97e6361 | ||
|   | 8bc2032b07 | ||
|   | 40d4354dfc | ||
|   | 27f2f5bb2b | ||
|   | 490b934269 | ||
|   | e2e2b4d176 | ||
|   | 7a1763bbee | ||
|   | ca8904b6bb | ||
|   | 6384b28689 | ||
|   | e661466558 | ||
|   | 8faf2beba4 | ||
|   | fb29319ec6 | ||
|   | 7779d7d193 | ||
|   | 2c5246b62f | ||
|   | e43a3f4518 | ||
|   | b5716f7a6d | ||
|   | fac5a3cc6f | ||
|   | 671793078a | ||
|   | 4f5ea1696f | ||
|   | b3e47e3bac | ||
|   | d67e990065 | ||
|   | 7fb6f4b47f | ||
|   | df3b435a1f | ||
|   | 5b65f1b544 | ||
|   | e159866d3b | ||
|   | aa0ce71612 | ||
|   | 522e547f99 | ||
|   | 9430341d4e | ||
|   | 95838d045d | ||
|   | 20832f11b6 | ||
|   | 258203f400 | ||
|   | 3b1768fa4e | ||
|   | 23a3085bad | ||
|   | 78c12e0ea6 | ||
|   | 997cb85663 | ||
|   | 968d5eabfa | ||
|   | 590ce1f7ed | ||
|   | 416a8838e4 | ||
|   | f6c349ac31 | ||
|   | 517c6b40b5 | ||
|   | 1fa78935a6 | ||
|   | 4ddcd56740 | ||
|   | e5a2f33584 | ||
|   | c17cf3256a | ||
|   | 5415bda02d | ||
|   | 07cbaeb7aa | ||
|   | 9d5aa83786 | ||
|   | 463164cb88 | ||
|   | 4809742088 | ||
|   | 9cf0e285b4 | ||
|   | a6ca6f1cf9 | ||
|   | bd7479e1c0 | ||
|   | b35b51c203 | ||
|   | 5652774888 | ||
|   | 836e9a2fbc | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | 64538c255d | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | 62a9293dcf | ||
|   | 1faae92f33 | ||
|   | dee808752f | ||
|   | 5590af6995 | ||
|   | 5afd161fba | ||
|   | 336efa1e8b | ||
|   | 568d5ca4ff | ||
|   | a9991f2a50 | ||
|   | 1c8096444a | ||
|   | f424de46e6 | ||
|   | 8fcca05565 | ||
|   | ed1f3cec59 | ||
|   | c29a409f28 | ||
|   | 1a46936ad6 | ||
|   | e82abfb948 | ||
|   | c3409be780 | ||
|   | 1557ab3474 | ||
|   | 75fdda4fbf | ||
|   | 4d75ef2849 | ||
|   | a1da23d1ba | ||
|   | c4bc751df7 | ||
|   | 972d89ec6e | ||
|   | 70f040e104 | ||
|   | d4de0b49c8 | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | 2a42d58361 | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | 14308956d7 | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | 71339a66d7 | ||
|   | 85f0664b56 | ||
|   | 2f86ac0dfa | ||
|   | 79d7b7a08d | ||
|   | b550d1990e | ||
|   | 22062f0c77 | ||
|   | 515f613a53 | ||
|   | 615ed6b713 | ||
|   | f6eab62c3c | ||
|   | 7d1e00ff0d | ||
|   | 692439953c | ||
|   | 6960a34d02 | ||
|   | b3662d4e6e | ||
|   | 50c9b7c352 | ||
|   | f395d3b2bf | ||
|   | 4fbf6cbc50 | ||
|   | 9916958d6c | ||
|   | 184a069c7f | ||
|   | 0b65346633 | ||
|   | 11f23dcc9e | ||
|   | f80d1defcb | ||
|   | e95d6343cb | ||
|   | a9052a068f | ||
|   | b1323c0d67 | ||
|   | 87ceb8fb58 | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | c3134b9426 | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | 06c036d373 | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | 2f8bd29725 | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | 1eae211b41 | ||
|   | b02eb7a422 | ||
|   | 3db31e9347 | ||
|   | 1dc6045ae1 | ||
|   | 2436164b1e | ||
|   | c13fc8a805 | ||
|   | 41025d78de | ||
|   | b3ad222cdc | ||
|   | efd9ed0a5f | ||
|   | 9d20061924 | ||
|   | ddfe8cf361 | ||
|   | 93c83f773a | ||
|   | 876e16fa9e | ||
|   | 37067d5c72 | ||
|   | 083ac8cfa3 | ||
|   | fe6c1ae452 | ||
|   | 30165f5047 | ||
|   | 3046c61447 | ||
|   | ced50bb2e8 | ||
|   | dee84bcc63 | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | 0f0bafb66a | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | 7cdc3611a5 | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | 6eda6aebba | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | 2d23c81ebb | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | 5602058849 | ||
|   | b1ec021c1e | ||
|   | 7073b2410b | ||
|   | ab9068bc0a | ||
|   | 0c66fb474e | ||
|   | fef6c651ea | ||
|   | 620f54344f | ||
|   | ef1259a87a | ||
|   | 5ef4af6b55 | ||
|   | 6d17304e4e | ||
|   | 2e4062b5db | ||
|   | b294bdd013 | ||
|   | dc95c7fc2c | ||
|   | dfe8c43c33 | ||
|   | 3e54ad5a68 | ||
|   | 288c66d8a2 | ||
|   | 44c8a97f44 | ||
|   | 60c27b1dea | ||
|   | ce8b77b240 | ||
|   | 718c5fb30e | ||
| 419160724c | |||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | c905dfe6d8 | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | 70eb008412 | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | 93feaadacf | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | 0b7610607d | ||
|   | 922fea5395 | ||
|   | 1841b7c4e6 | ||
|   | ed966faaf4 | ||
|   | 03efeed6ae | ||
|   | 675c5ae480 | ||
|   | d575b22e2e | ||
|   | 5e4ee1b60f | ||
|   | d8ce20c2f9 | ||
|   | b164dc1b55 | ||
|   | 530eba3d00 | ||
|   | 808066f2e2 | ||
|   | cb3e683c8e | ||
|   | 6ff57775ed | ||
|   | 6c07687a86 | ||
|   | 497a8c19c5 | ||
|   | c13f7468ef | ||
|   | 847872cdb6 | ||
|   | f0abe5d80d | ||
|   | 465c5b9e77 | ||
| fb78cdd304 | |||
|   | 5b17fe2410 | ||
|   | 5fd54dccd3 | ||
|   | 1695afd915 | ||
|   | 5ab549ae96 | ||
|   | 35123e7c1e | ||
|   | 1badade841 | ||
|   | b357625529 | ||
|   | 9ccd39d724 | ||
|   | c876079e04 | ||
|   | 162c1c59fe | ||
|   | 06ef1c1182 | ||
|   | a9ba9789fd | ||
|   | fdd32cb954 | ||
|   | 9fd7d86998 | ||
|   | 5973903313 | ||
|   | 75e4b19b88 | ||
|   | af7bdb55a1 | ||
|   | 69af9aeff0 | ||
|   | 88f4192d61 | ||
|   | 96db8a326e | ||
|   | 8c06767fdc | ||
|   | 25877e369b | ||
|   | 0271a475a2 | ||
|   | eef3ab5a15 | ||
|   | 26f48c5820 | ||
|   | 236ca36c79 | ||
|   | 405b9ba7ea | ||
|   | ab9bd76d34 | ||
|   | 677da7d80a | ||
|   | b3ad2fd715 | ||
|   | 97ca6ce5b8 | ||
|   | e1abc4374e | ||
|   | 9eeeb15c6c | ||
|   | 7d4981639a | ||
|   | 967538767a | ||
|   | 4731eb9db8 | ||
|   | 337f5ade59 | ||
|   | fe8bbcb11a | ||
|   | b1b6b0bf80 | ||
|   | 1c28c138e0 | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | cb73111779 | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | 6250678f61 | ||
|   | 1821f01ef1 | ||
|   | 350f084156 | ||
|   | a6c2babafb | ||
|   | f566aed1fe | ||
|   | 10fb54224c | ||
|   | 585b815472 | ||
|   | c37e2f4176 | ||
|   | 626d59d3fc | ||
|   | ddd058a26f | ||
|   | 32b8d03c5e | ||
|   | 71f3e1b4f1 | ||
|   | aa6f53fa68 | ||
|   | 1335e9f7f2 | ||
|   | c75599b6a0 | ||
|   | 2efdfbd988 | ||
|   | 700198d8bc | ||
|   | 3efab5928e | ||
|   | 93037b6866 | ||
|   | 0f19e50c69 | ||
|   | 66ea6ad3d4 | ||
|   | b6dc1f0e61 | ||
|   | 0c1dc51db4 | ||
|   | 74a710c5e8 | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | c4a773e72d | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | ad43fc37ab | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | 8011c048a2 | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | c4ee9987bf | ||
|   | f70decddd1 | ||
|   | 79a0aea065 | ||
|   | fe87e86721 | ||
|   | 456055bcf0 | ||
|   | 5ebe290424 | ||
|   | 4532d68743 | ||
|   | 1903e18397 | ||
|   | a705bf7053 | ||
|   | 26e9bf5197 | ||
|   | 64007b3634 | ||
|   | 80f099220c | ||
|   | 08615f2295 | ||
|   | 5c02bb4f91 | ||
|   | ad6aee55f9 | ||
|   | aac4fd8e5e | ||
|   | c013ae7dab | ||
|   | 57ab4b0849 | ||
|   | 24a762504f | ||
|   | 838bcc07a4 | ||
|   | 0f0c996b54 | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | b1ad67a354 | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | c7a64c0c7c | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | 5da87dbe0a | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | 38e1a62f19 | ||
|   | 5174a26719 | ||
|   | 98886cb269 | ||
|   | e7a8b45c10 | ||
|   | 2e0ec73d77 | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | b8b324cdf3 | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | 12600d8404 | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | d9dfdb7e68 | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | 07f8b2c47b | ||
|   | b9c4ae2fbb | ||
|   | 2b2d78edc0 | ||
|   | 2ad78c722a | ||
|   | 99771babba | ||
|   | 1b0ba48b9d | ||
|   | 95cf32c70a | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | 14469d1a2e | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | 336f1c3b80 | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | 055fd4379a | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | f6b5cfe1d4 | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | df744fe48b | ||
|   | 9f10a4a0b7 | ||
|   | 22ca74a1a3 | ||
|   | 3093c9212c | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | 6b8a4e6e63 | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | d256870953 | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | 8fd8cceadb | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | 402b532311 | ||
|   | 8e85d35d8f | ||
|   | 6b6794a367 | ||
|   | 14a726b5af | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | 3e937d234b | ||
|   | bf6a8a713b | ||
|   | b8c5e7aaba | ||
|   | 068d610e3a | ||
|   | 41177b91be | ||
|   | c2ebacdfb3 | ||
|   | 5d4996c085 | ||
|   | dbafbbf66d | ||
|   | a46200ca17 | ||
|   | 1fe64e69ca | ||
|   | a017ec9bfd | ||
|   | cb8385a092 | ||
|   | d4aa1f87e0 | ||
|   | 41df06a48b | ||
|   | 4188e636f3 | ||
|   | e2c0d59e3a | ||
|   | 6a8c210a23 | ||
|   | a62cc3618c | ||
|   | a703afbef9 | ||
|   | 5ce8445d5c | ||
|   | d112030a8e | ||
|   | 98ca4080dd | ||
|   | 3b9c63e781 | ||
|   | dd24ebf184 | ||
|   | 7ef2be625f | ||
|   | e3957d2207 | ||
|   | 8ce1307d51 | ||
|   | e1141dcd1c | ||
|   | 4e33b5f351 | ||
|   | 54dc184dd0 | ||
|   | 1977ce3ea5 | ||
|   | c8c9d1729e | ||
|   | e6e4b81f3b | ||
|   | 1c465f028e | ||
|   | 12824c22c4 | ||
|   | 64c5ad72a3 | ||
|   | 080c2059ee | ||
|   | a288850010 | ||
|   | 16811602d2 | ||
|   | 6d94d719e3 | ||
|   | 749d111e89 | ||
|   | 365d8d34ce | ||
|   | ced25bbf28 | ||
|   | 7e1ce5a203 | ||
|   | aeec754f7e | ||
|   | 9a3fcb56a1 | ||
|   | aff956f4c8 | ||
|   | 0f49fd6406 | ||
|   | 1111770033 | ||
|   | 6d313fc456 | ||
|   | 0201acb5f7 | ||
|   | dfbefe96da | ||
|   | a71b35097f | ||
|   | acd0cf5245 | ||
|   | 393b9b2f3d | ||
|   | f66bad1810 | ||
|   | 386a81454b | ||
|   | deb2b7a36f | ||
|   | a3901c7b1c | ||
|   | 631ee109f5 | ||
|   | 25570e2135 | ||
|   | 6d70044b15 | ||
|   | b064f94172 | ||
|   | 721124e8c5 | ||
|   | 85333e03a4 | ||
|   | bef928a20c | ||
|   | 6967416207 | ||
|   | e968b3f26b | ||
|   | be6d8e23c8 | ||
|   | 397effacd4 | ||
|   | a35738d99b | ||
|   | 03aafdeae2 | ||
|   | f5529b6cce | ||
|   | 0bd39c2826 | ||
|   | d335745010 | ||
|   | 0d59843f40 | ||
|   | 011d0a15a9 | ||
|   | c72b968f9b | ||
|   | 4e7cef9402 | ||
|   | 1868d5a202 | ||
|   | 423fcfbda3 | ||
|   | be5d17457f | ||
|   | 5033b0332e | ||
|   | a1cf4cc46d | ||
|   | 838f494a85 | ||
|   | d55f5b1e39 | ||
|   | c98768dd52 | ||
|   | 0058f81e76 | ||
|   | b79c384c3f | ||
|   | a11dae821e | ||
|   | b08deb518c | ||
|   | 7ad0a8c400 | ||
|   | 4bb33ec101 | ||
|   | 856baec94d | ||
|   | 09600db5f2 | ||
|   | 810a1e252d | ||
|   | 10b3fcdfcc | ||
|   | 652e6eb9e8 | ||
|   | eea2b5f6fb | ||
|   | b4eb0df689 | ||
|   | 2b26c6a5b6 | ||
|   | 79e2134ca8 | ||
|   | 6efa30152f | ||
|   | 781fb476e7 | ||
|   | f2ed4eba3b | ||
|   | d2b1cd511d | ||
|   | 1c9df39afe | ||
|   | f124f45604 | ||
|   | d3660892ae | ||
|   | 78ea4e4e30 | ||
|   | 5ab985a7cc | ||
|   | 6bd1782c4b | ||
|   | 2f5d402c61 | ||
|   | 8fb2ea5845 | ||
|   | a78e21a167 | ||
|   | 2e9b626523 | ||
|   | 4487b8904c | ||
|   | 1f01f915dc | ||
|   | 4222c71a69 | ||
|   | 1d463cde90 | ||
|   | 834d1476ce | ||
|   | a769a8d1a4 | ||
|   | ece8c3821d | ||
|   | 2bc0c4c41b | ||
|   | 9e203898b6 | ||
|   | 58ad8417e5 | ||
|   | 9c00927089 | ||
|   | 7c6964c6ef | ||
|   | 31a5104205 | ||
|   | 7bcf3858e8 | ||
|   | fb3eb0da8a | ||
|   | 0e6d92dea7 | ||
|   | c00ffe7fc3 | ||
|   | 02b3f8bf02 | ||
|   | fe7afb0141 | ||
|   | 1ec810b981 | ||
|   | 3a2187ebad | ||
|   | fef6a1b090 | ||
|   | 2f5b39af54 | ||
|   | d3f942aebc | ||
|   | 5df0db8845 | ||
|   | 28887c1da2 | ||
|   | 7053a225b8 | ||
|   | 54422801c3 | ||
|   | 56c464ba79 | ||
|   | 2582f1e907 | ||
|   | 13139966ea | ||
|   | 011bb78f69 | ||
|   | 2446ed20a6 | ||
|   | c376feb4d8 | ||
|   | fa0bcfa37a | ||
|   | 6b70b11ffc | ||
|   | e474075778 | ||
|   | 1205bb67f2 | ||
|   | 10bcd20cd8 | ||
|   | 3a2e6e018d | ||
|   | 1b1680f7b0 | ||
|   | 6cc52570ac | ||
|   | 6425791ed9 | ||
|   | 4c7a720447 | ||
|   | 23ac9f3faf | ||
|   | 0192009482 | ||
|   | 2468c359a4 | ||
|   | ae1ad9fd2e | ||
|   | 3596748059 | ||
|   | 407806e84c | ||
|   | b83909da9c | ||
|   | dd490967d3 | ||
|   | 391202877a | ||
|   | c48acd8fb7 | ||
|   | c8428258fe | ||
|   | fc4feaa78c | ||
|   | 1855f3b43f | ||
|   | 50b848027c | ||
|   | 7b71af9e1d | ||
|   | 4814f0c895 | ||
|   | 192307ad52 | ||
|   | e28c57432d | ||
|   | 911915266a | ||
|   | 51c464f8d2 | ||
|   | 30069564a7 | ||
|   | 460553d8ae | ||
|   | cc2de42415 | ||
|   | b31aa57d81 | ||
|   | c9b9bb6cf8 | ||
|   | 89e74b2011 | ||
|   | 434d882314 | ||
|   | 617d9d90ed | ||
|   | f456e0a8dd | ||
|   | 2716255e22 | ||
|   | 4d907213c3 | ||
|   | ee704f53c7 | ||
|   | 74237365f1 | ||
|   | 8aeab29303 | ||
|   | ff945e7b8a | ||
|   | 9707704f57 | ||
|   | 7491d19309 | ||
|   | fb74e5e731 | ||
|   | 627c8a6eca | ||
|   | 8094758a82 | ||
|   | f143b6ee9f | ||
|   | 77cef909fb | ||
|   | 063d3949cf | ||
|   | c1b87eba03 | ||
|   | bae52964cd | ||
|   | 06021c1b79 | ||
|   | 437932cd57 | ||
|   | 6cc16aa72b | ||
|   | b48950ff3a | ||
|   | c397c77809 | ||
|   | e8f31bc2bd | ||
|   | 4e7149c945 | ||
|   | 064379b9e0 | ||
|   | 48b18da953 | ||
|   | 904ca5d529 | ||
|   | 05986d017d | ||
|   | aabe56e8b3 | ||
|   | fc07ec3db3 | ||
|   | 2e8454907d | ||
|   | 72ed659833 | ||
|   | 94ef9692f2 | ||
|   | 798750bf95 | ||
|   | e8d9bd551f | ||
|   | d08ea2ee9b | ||
|   | 52dcb2d290 | ||
|   | 4cc883f174 | ||
|   | 5a3c5bd761 | ||
|   | 66830b7cb3 | ||
|   | b742865e8a | ||
|   | fd314a3288 | ||
|   | 87a52d9592 | ||
|   | 527b321ee0 | ||
|   | 5122a33f30 | ||
|   | d89fbeea62 | ||
|   | e4f7700044 | ||
|   | a1d0c3ebf4 | ||
|   | 2088c1ce00 | ||
|   | ec164daf0e | ||
|   | 94c38cefac | ||
|   | 2a5d218a94 | ||
|   | bcf10a0b8e | ||
|   | 546137c0f5 | ||
|   | 92bc691e1f | ||
|   | d834d0fdd9 | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | 74b88d07a0 | ||
|   | 57f5d3310a | ||
|   | a5495b1d92 | ||
|   | fb623be741 | ||
|   | 30e69e13fd | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | 17346c255e | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | 6fc83b8245 | ||
|   | b9fb6cacbe | ||
|   | 29bd7cbe6e | ||
|   | a51fc9c612 | ||
|   | 77ad9deeba | ||
|   | ffa6c45b62 | ||
|   | 957874ce2b | ||
|   | 330d92116c | ||
|   | 899adfc1b0 | ||
|   | 23535a6ad5 | ||
|   | e8b7f00370 | ||
|   | 3f2c5070ee | ||
|   | a2352525c5 | ||
|   | 50384a526b | ||
|   | 9ade3365ff | ||
|   | a6932cd5be | ||
|   | 81d5c06ca3 | ||
|   | 95d2adb8b8 | ||
|   | c91355a1e4 | ||
|   | a9b16ca2c0 | ||
|   | 0fc04c3ff6 | ||
|   | 6473ad02a0 | ||
|   | 8107f669cd | ||
|   | 2f55d92d83 | ||
|   | 722ec7f8fb | ||
|   | 63442a93e7 | ||
|   | 1ce594fa64 | ||
|   | 197b8d7850 | ||
|   | d51aec080b | ||
|   | 0239f78889 | ||
|   | 651cefca30 | ||
|   | f4be162aea | ||
|   | 85636d91dc | ||
|   | 7b643430d1 | ||
|   | 499033947c | ||
|   | 7489abc56d | ||
|   | c64810509f | ||
|   | 32ccaabaa7 | ||
|   | a8f0145333 | ||
|   | 6e6fc8d998 | ||
|   | 646e34a5c7 | ||
|   | 8d43329b6e | ||
|   | 38aca96472 | ||
|   | 4cd06076c7 | ||
|   | b485a1406e | ||
|   | cc0aa08d91 | ||
|   | 4dd958a538 | ||
|   | 83d2d1da4f | ||
|   | 24e69bec2b | ||
|   | ca337dcca2 | ||
|   | 2944c48744 | ||
|   | 278e7d1a4d | ||
|   | 22e090a0f4 | ||
|   | ac918eff16 | ||
|   | e8aaeac7dc | ||
|   | 1769c1006c | ||
|   | 920a6fe74c | ||
|   | bc41ce46a7 | ||
|   | 8c2b5671f1 | ||
|   | d0d53d7d20 | ||
|   | 902272f08c | ||
|   | a8b8b56a7e | ||
|   | d628db1dcc | ||
|   | 26ed6670d5 | ||
|   | 0aa4ea7bc8 | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | 34fdd71f37 | ||
|   | 4a134783b4 | ||
|   | bf5ce1f6a5 | ||
|   | 00193891fa | ||
|   | 4640c347c7 | ||
|   | 260bb47434 | ||
|   | 9d7872e64e | ||
|   | 31bdc23b3c | ||
|   | f803c0aa72 | ||
|   | 531b0e3537 | ||
|   | cbf6c30be6 | ||
|   | a6f62dd837 | ||
|   | 18d52c2459 | ||
|   | ee55cfd2dd | ||
|   | 3ab5fc1120 | ||
|   | f7f60f5079 | ||
|   | b7dcff79ae | ||
|   | c857b9d6dd | ||
|   | 8f8c05e451 | ||
|   | af3ebe60f4 | ||
|   | be64d24c00 | ||
|   | 8f04575efd | ||
|   | 4e1b8f3ec4 | ||
|   | c8ca6671ab | ||
|   | 88f0d2e532 | ||
|   | 76a4499c9f | ||
|   | e1bd790294 | ||
|   | 6d193ca1f8 | ||
|   | d932172e70 | ||
|   | 9bbf5824fe | ||
|   | d042ee3058 | ||
|   | fe598b14a1 | ||
|   | 24df3be8f1 | ||
|   | 2cce67bc27 | ||
|   | ae6003d000 | ||
|   | fe8b03dc1c | ||
|   | 977b27de90 | ||
|   | 570cf14fe8 | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | 7c369900ce | ||
|   | 8464711b89 | ||
|   | 0f07e4bdc3 | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | de7736ec76 | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | 4568db387a | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | 3661cfd4c9 | ||
|   | f9ac515d3d | ||
|   | b7f1394357 | ||
|   | 25872ccf84 | ||
|   | 0efd81142d | ||
|   | 1699e8521d | ||
|   | f4068301ff | ||
|   | 2a6b6f89f4 | ||
|   | ca459bef0d | ||
|   | 9980ef7db9 | ||
|   | d6b2cdb66a | ||
|   | 832c1c0be3 | ||
|   | bf0fba9c58 | ||
|   | ae5678128b | ||
|   | 6395a4cefc | ||
|   | 1a3491a50f | ||
|   | 0f8b67e6ce | ||
|   | 1e17db6d21 | ||
|   | 03bd4bbeed | ||
|   | ff907893d0 | ||
|   | d104eef064 | ||
|   | f0505b8919 | ||
|   | db12fbe725 | ||
|   | f88580eb88 | ||
|   | dbfce696b9 | ||
|   | bca5af9c23 | ||
|   | 381abf7c40 | ||
|   | 1a2112daf9 | ||
|   | e30e194b91 | ||
|   | edf9962abf | ||
|   | fd896c4af6 | ||
|   | 0ae57af270 | ||
|   | 123c8ded11 | ||
|   | 0510fe8530 | ||
|   | 3ebaf38486 | ||
|   | 84fc962bb0 | ||
|   | 814bc20cf7 | ||
|   | 6b76270d51 | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | 35142e5204 | ||
|   | d313845c84 | ||
|   | 21162ba34e | ||
|   | e162dc44d1 | ||
|   | 153a36d4e9 | ||
|   | 9271ca082c | ||
|   | 0389ea803d | ||
|   | 0fea44f735 | ||
|   | c01cad1c9d | ||
|   | b383706bfb | ||
|   | a78f66fd36 | ||
|   | bef57f75c0 | ||
|   | 48ec19d9bf | ||
|   | f4198a0409 | ||
|   | 9454ebcb35 | ||
|   | 441721b63f | ||
|   | 0eda85c95e | ||
|   | 01e4c80adb | ||
|   | 0e8ec4d445 | ||
|   | ae18ccb8cd | ||
|   | ad63afc242 | ||
|   | f48f8a9643 | ||
|   | eae65b6512 | ||
|   | 02ff5cb24b | ||
|   | 8210b122bc | ||
|   | a0d3cf561b | ||
|   | d7c1c77861 | ||
|   | f385c3fa21 | ||
|   | e07a077da9 | ||
|   | 7768c9147d | ||
|   | c5c9877b40 | ||
|   | 3ddd4a1a58 | ||
|   | 3c85215011 | ||
|   | 2369814092 | ||
|   | 6970a764c4 | ||
|   | 4c7c3dba00 | ||
|   | aebad12bbe | ||
|   | 8593e7a6ac | ||
|   | 119975c313 | ||
|   | 27c3a95ec6 | ||
|   | d5eaf85473 | ||
|   | 7f4c967a20 | ||
|   | 8066ac2819 | ||
|   | 66172c843d | ||
|   | 88b3373e5c | ||
|   | 320d91d639 | ||
|   | 24d118e225 | ||
|   | c192f319d1 | ||
|   | 097dfa06a6 | ||
|   | 90ca544d0a | ||
|   | 2bc9640b88 | ||
|   | 40ffddf5ef | ||
|   | bd28c9da23 | ||
|   | 11ef024779 | ||
|   | 40d9a201ea | ||
|   | 6e2ac21fab | ||
|   | 7858cf57c6 | ||
|   | 91c8e7ebda | ||
|   | 6332ee6955 | ||
|   | 3c3014fdc6 | ||
|   | d97e4c44ee | ||
|   | 1b88c514da | ||
|   | 96c1094a61 | ||
|   | b3551b4ee5 | ||
|   | 4232d3d8a2 | ||
|   | 73b64c19ff | ||
|   | 15ccdb2055 | ||
|   | 418067b077 | ||
|   | 88b29d1a14 | ||
|   | b831aa8eca | ||
|   | 4540d216cb | ||
|   | b345ebb366 | ||
|   | 7a8ed2db32 | ||
|   | 9f5ed99b79 | ||
|   | 1bd6defc84 | ||
|   | 181d76ae7b | ||
|   | 31d37c218a | ||
|   | 72be9845fa | ||
|   | a6a4e50479 | ||
|   | 1f88ead837 | ||
|   | 8303cafbc9 | ||
|   | 00901f60dc | ||
|   | 21aaf06a63 | ||
|   | d81774c9a7 | ||
|   | 2cb6fb041e | ||
|   | b7d5ee9a75 | ||
|   | 24dd84b31c | ||
|   | 0e96819e86 | ||
|   | 897d393342 | ||
|   | fc7efd5484 | ||
|   | 834695420d | ||
|   | c4025c0cc1 | ||
|   | c80ef82f2a | ||
|   | b94b4eea04 | ||
|   | 116c813988 | ||
|   | 2c9aa8e30e | ||
|   | 376c84c46e | ||
|   | a3039e05d4 | ||
|   | bed078213b | ||
|   | b413c8e715 | ||
|   | 299890c737 | ||
|   | e977bee8cc | ||
|   | 5b636b2b5e | ||
|   | 6db4874acd | ||
|   | e788ea6d7f | ||
|   | c5f8eaf1cf | ||
|   | c9568b4301 | ||
|   | e1c712abb7 | ||
|   | 81e8a28cc3 | ||
|   | e45a2b4517 | ||
|   | dd69d0fad2 | ||
|   | 4f680c881c | ||
|   | 1932d7102b | ||
|   | 58ba9ed4be | ||
|   | 8fe6c8bde7 | ||
|   | ec4684c336 | ||
|   | ec05ca11ba | ||
|   | 164e3cedd6 | ||
|   | 0d4d610b3a | ||
|   | 7ebd604390 | ||
|   | 7bc50df300 | ||
|   | 3f3eb0f878 | ||
|   | 6e854eb889 | ||
|   | d009ece391 | ||
|   | ffa7909f9f | ||
|   | 266d164a34 | ||
|   | aaf957a3c2 | ||
|   | dd35c4907e | ||
|   | 993986c1cf | ||
|   | 8d47d9c015 | ||
|   | b4764a230a | ||
|   | 2c703a7468 | ||
|   | 87083e03a8 | ||
|   | 1d22fbfae0 | ||
|   | cfee63d716 | ||
|   | d49052660f | ||
|   | f5299d4b75 | ||
|   | 35b366640f | ||
|   | 1dc3809a34 | ||
|   | 82c883acdb | ||
|   | 8333751482 | ||
|   | 933070fc32 | ||
|   | ec80a20146 | ||
|   | cd46497829 | ||
|   | cb51a78509 | ||
|   | 6a52d0c83a | ||
|   | 138dc7082e | ||
|   | 944c66c366 | ||
|   | 0accfbd65f | ||
|   | 86498ba317 | ||
|   | 6016aac675 | ||
|   | 80f8c88532 | ||
|   | e112d87e28 | ||
|   | 718d73f7cc | ||
|   | d01e804b24 | ||
|   | 72ca9a2297 | ||
|   | 007a1694d7 | ||
|   | 74dd307318 | ||
|   | 4bf5f6dcc1 | ||
|   | cbf450425e | ||
|   | 9b56fbc3ed | ||
|   | bdcdfda8c4 | ||
|   | 53b2108252 | ||
|   | ab87a86e9d | ||
|   | 17c248eda0 | ||
|   | bee82a1941 | ||
|   | 772c574149 | ||
|   | d577411e72 | ||
|   | f901d9d3b0 | ||
|   | da75da6791 | ||
|   | 052fe75183 | ||
|   | d50daad918 | ||
|   | 2834e25945 | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | 5c7190710b | ||
|   | dd76de2066 | ||
|   | 1a7e3ed658 | ||
|   | 956339115c | ||
|   | 484a1f264b | ||
|   | 0f739ffb50 | ||
|   | e79821385d | ||
|   | e742d089d6 | ||
|   | 44336460c5 | ||
|   | 46f0309171 | ||
|   | 1ed38ec92b | ||
|   | 04dca831e3 | ||
|   | 308e8bfbc3 | ||
|   | 62ecddb719 | ||
|   | a852b0efbc | ||
|   | 3dd6a55727 | ||
|   | 3993e3b9c0 | ||
|   | 42b8b5814f | ||
|   | 60de6f57fd | ||
|   | 11fcb17c29 | ||
|   | 98246e23dd | ||
|   | 61e2e81719 | ||
|   | 62e600443e | ||
|   | 5bde4d75ce | ||
|   | 9c54fbe733 | ||
|   | 9cc206d548 | ||
|   | a97cf8a3ec | ||
|   | f0ea5f3968 | ||
|   | 8d44afc8e6 | ||
|   | 62ed3bd7f2 | ||
|   | 89889924fc | ||
|   | dda592cb39 | ||
|   | bb44044956 | ||
|   | d95810f6e5 | ||
|   | 26c275b0f5 | ||
|   | 341dc6c58b | ||
|   | a2364b7512 | ||
|   | 350e1c08d0 | ||
|   | 724dc42a59 | ||
|   | 79a62e9d37 | ||
|   | f73ba63133 | ||
|   | d2c849fceb | ||
|   | c4e9d5d14f | ||
|   | 76a7d1ee69 | ||
|   | a8d225f812 | ||
|   | bdfb8c7ee4 | ||
|   | 9ab9d88eb5 | ||
|   | 75ff5feccd | ||
|   | a4c7b38b7a | ||
|   | ec86608aff | ||
|   | 4010854075 | ||
|   | fe1ae29fa3 | ||
|   | 8c7d0b06d1 | ||
|   | af497e6906 | ||
|   | badb61aaea | ||
|   | 5884919350 | ||
|   | ce77148a38 | ||
|   | 0ee6ce0a55 | ||
|   | 39f0e14fee | ||
|   | dc09907f93 | ||
|   | dcec97b9b4 | ||
|   | 0eb8615db4 | ||
|   | e674d8ac3a | ||
|   | 141af4f097 | ||
|   | 35ef9c7e68 | ||
|   | 67e8b3e988 | ||
|   | 896508d1fd | ||
|   | 908c978242 | ||
|   | 6419279514 | ||
|   | 0ecfdc5cf3 | ||
|   | a357f989ad | ||
|   | 831e335b5d | ||
|   | 5e4afd4a7b | ||
|   | 337c526e23 | ||
|   | 5f25db231f | ||
|   | fb46993a05 | ||
|   | ef2738838f | ||
|   | b9669e452c | ||
|   | 6196417436 | ||
|   | 5d797f397d | ||
|   | 3be6acf5b5 | ||
|   | b5619adf45 | ||
|   | 62540fe1b2 | ||
|   | fd85fdf0ac | ||
|   | e09208c757 | ||
|   | 753f2110c6 | ||
|   | 7917e8417b | ||
|   | a0447b4840 | ||
|   | 2e561a2af4 | ||
|   | a330a3e472 | ||
|   | 229d64fcf8 | ||
|   | 6df695f650 | ||
|   | d77edaa056 | ||
|   | 4f78246c7f | ||
|   | 8d3ccdaf9c | ||
|   | 17e1061866 | ||
|   | 30d4b06393 | ||
|   | 893bf452fb | ||
|   | bb67584cba | ||
|   | e28ec93c80 | ||
|   | ca37019427 | ||
|   | 3d452015ee | ||
|   | 57a3d82649 | ||
|   | 2845beaf8a | ||
|   | 1e58ead126 | ||
|   | fafa7572d0 | ||
|   | 4ddeb72bfe | ||
|   | 28ba36dddb | ||
|   | b6c501311c | ||
|   | 01d4ebe254 | ||
|   | 34dd332f0b | ||
|   | 596d0c7115 | ||
|   | 672601b028 | ||
|   | e5045f28ab | ||
|   | 12ba067db3 | ||
|   | 5413606425 | ||
|   | 72ae18557b | ||
|   | 99bd119ed6 | ||
|   | faebf66065 | ||
|   | dc030d6895 | ||
|   | 7f626005a5 | ||
|   | 28d0741e14 | ||
|   | c0e17a6c61 | ||
|   | b5046b089e | ||
|   | 1075112bfa | ||
|   | 37fddacf8e | ||
|   | 2091a59897 | ||
|   | d2a427b38f | ||
|   | c069719c1c | ||
|   | 654a443d4b | ||
|   | a6ec2d5ed7 | ||
|   | 02ac083175 | ||
|   | 561fce5d40 | ||
|   | a88263874a | ||
|   | 943ddeb5ab | ||
|   | 216a3fedd0 | ||
|   | 7b8c335a5b | ||
|   | 8e8efe4862 | ||
|   | e64dc3cc1c | ||
|   | c833691cf6 | ||
|   | ba5e2e8613 | ||
|   | b154e31a28 | ||
|   | 322b888dc5 | ||
|   | 42eefb763b | ||
|   | 27be351636 | ||
|   | 8b20287f93 | ||
|   | 50a7bdb34d | ||
|   | dcac3be0da | ||
|   | ec121fb327 | ||
|   | ccb260b6a7 | ||
|   | c994511ea5 | ||
|   | fb5177633a | ||
|   | b15fde59d1 | ||
|   | 1958974c73 | ||
|   | 00b1b0fea4 | ||
|   | 743b978e6f | ||
|   | cbabd8b76e | ||
|   | 1fd877c597 | ||
|   | 4f64ed07b1 | ||
|   | 4e537b0466 | ||
|   | 2b1198dfd9 | ||
|   | 8db23fba43 | ||
|   | 0451487549 | ||
|   | a16faa97ec | ||
|   | dbf626a53e | ||
|   | 27cc767ec4 | ||
|   | 8d2d08a12b | ||
|   | 7c91d97440 | ||
|   | 0eb7b53801 | ||
|   | 510e31584e | ||
|   | 0efedd7fa5 | ||
|   | 01a32705e4 | ||
|   | 05c1b82bcf | ||
|   | cf04796010 | ||
|   | fd7e66e144 | ||
|   | ceaf290f5e | ||
|   | 5df9ae57ce | ||
|   | 04ed7d413f | ||
|   | f543835921 | ||
|   | 8ae35160e7 | ||
|   | 75516a7217 | ||
|   | 8783fc89e6 | ||
|   | fd0819ca30 | ||
|   | 650b925251 | ||
|   | fd3e32eaa8 | ||
|   | a8bebb88b1 | ||
|   | 3294a74979 | ||
|   | db95804eeb | ||
|   | 15bfc00ddb | ||
|   | 18580e431f | ||
|   | 98624d8701 | ||
|   | 3c03a15831 | ||
|   | 9710a7bfc1 | ||
|   | 34426ae32d | ||
|   | c2f98ee317 | ||
|   | 4df2abba82 | ||
|   | c3cd207b2b | ||
|   | 4f6053f767 | ||
|   | 5578fbdd4f | ||
|   | 84a6c40e13 | ||
|   | 3e91004660 | ||
|   | ac1d334bf1 | ||
|   | 368c840177 | ||
|   | c3a2fd736c | ||
|   | 741987f40b | ||
|   | 375b025e22 | ||
|   | 7324ee5e8d | ||
|   | 54c2299654 | ||
|   | b2cfb6d6ed | ||
|   | e8a11b8f79 | ||
|   | f16890f9a7 | ||
|   | e881bec45d | ||
|   | 18eea7ca2d | ||
|   | 316410a561 | ||
|   | 76a1a190f6 | ||
|   | c243ae9cef | ||
|   | 2722ee63cc | ||
|   | 22e7fa1cf3 | ||
|   | 101dc355ba | ||
|   | f5f3d0b827 | ||
|   | 53cb5d1fe9 | ||
|   | 0978ca616f | ||
|   | bbf42c0a28 | ||
|   | 7df04c6e2e | ||
|   | d3386c8097 | ||
|   | 309197781e | ||
|   | 5a3ee970a0 | ||
|   | 7cbe63e484 | ||
|   | 5342b02091 | ||
|   | 7eeca57135 | ||
|   | 2162985e4a | ||
|   | 5d53f4c13a | ||
|   | 7de2c2692d | ||
|   | 1b9df35a1d | ||
|   | d5d39797bb | ||
|   | 829a228d79 | ||
|   | 4c589c9610 | ||
|   | b9fc58ec45 | ||
|   | 193a84dafd | ||
|   | 3880a33208 | ||
|   | 2edf897e39 | ||
|   | 27d1170c75 | ||
|   | 11c850a41e | ||
|   | ff4ee06a1f | ||
|   | 0549f32d6e | ||
|   | c5ab3490b3 | ||
|   | 50ba1a1c4e | ||
|   | ee45d2fb38 | ||
|   | a94822b79a | ||
|   | b5aba454ae | ||
|   | a49631e986 | ||
|   | bb31b5f2d3 | ||
|   | 8ad08d466e | ||
|   | ab31183a93 | ||
|   | 3257cc82dc | ||
|   | ef73733596 | ||
|   | 4b45d4cf09 | ||
|   | e0b3e1db24 | ||
|   | e0b51d653a | ||
|   | c17ebbf4d7 | ||
|   | 44a26d59a4 | ||
|   | 6b8f81f7eb | ||
|   | 9a4b9419eb | ||
|   | 89548d132a | ||
|   | 45dbb2cd3b | ||
|   | a95203e2c9 | ||
|   | a79fc4980e | ||
|   | 1240781503 | ||
|   | 0875c61bc9 | ||
|   | da60a1c393 | ||
|   | 785f29abf8 | ||
|   | 2a3e96b891 | ||
|   | f1f6dd4c60 | ||
|   | b8a8403dc3 | ||
|   | ab5eb9c401 | ||
|   | 74b7fc9f77 | ||
|   | ca87316691 | ||
|   | cae61587da | ||
|   | 0238d0bf2e | ||
|   | 5be575a078 | ||
|   | 36fbbbf4ae | ||
|   | a87ab3c558 | ||
|   | 75e22a2080 | ||
|   | 6c89799bfb | ||
|   | e0d9a8d0db | ||
|   | 3208f6a1bd | ||
|   | d525be33cf | ||
|   | 64136f0b93 | ||
|   | 238203cf35 | ||
|   | 6b354467ab | ||
|   | 10444e5995 | ||
|   | 42f6ca11db | ||
|   | eed094103d | ||
|   | 5051bcd607 | ||
|   | 74e2bb2d87 | ||
|   | a4a6331935 | ||
|   | 3939144128 | ||
|   | 7791c0b7be | ||
|   | 2cfbff5cf6 | ||
|   | b734153253 | ||
|   | 3df637b265 | ||
|   | ea220d2514 | ||
|   | 8bb75fc376 | ||
|   | d461fe555d | ||
|   | 0bd25f2506 | ||
|   | 2355435275 | ||
|   | cc04ef5869 | ||
|   | 521d8a605d | ||
|   | 3bff1b1ba5 | ||
|   | 15192652f0 | ||
|   | 85873202ca | ||
|   | 706bde03f9 | ||
|   | f855f5f429 | ||
|   | cce557e82a | ||
|   | 7f7d8bd771 | ||
|   | 9a95093b44 | ||
|   | ddf7bbdd31 | ||
|   | 994a811efa | ||
|   | 06efa46f32 | ||
|   | 66778a060c | ||
|   | c9697d6cc8 | ||
|   | b801daa240 | ||
|   | d2f42d67c7 | ||
|   | cb9d750db9 | ||
|   | 0b966c4497 | ||
|   | 0774a822aa | ||
|   | 7e0cdce7ea | ||
|   | e2ed963af5 | ||
|   | 4781d29d67 | ||
|   | f5b6ca50f4 | ||
|   | 05852b07c6 | ||
|   | 689aa4cf95 | ||
|   | 56aad9200a | ||
|   | ac69c0d9c6 | ||
|   | 860592291f | ||
|   | 113597333c | ||
|   | a83d71aa39 | ||
|   | 93299ae843 | ||
|   | 4300cf5330 | ||
|   | 92d08377ce | ||
|   | 19a6284023 | ||
|   | 45908f2a84 | ||
|   | 8648220e21 | ||
|   | 68e285b514 | ||
|   | 5153a42b69 | ||
|   | 42feed710c | ||
|   | 9d049b06c3 | ||
|   | 1105529e91 | ||
|   | 49c1f11503 | ||
|   | f54fd84de3 | ||
|   | da3d83ecc6 | ||
|   | 4af8e574c4 | ||
|   | bdcb5c4f33 | ||
|   | 013f7a42c2 | ||
|   | d03398f3e8 | ||
|   | 7a26307a2b | ||
|   | fa6a0369b8 | ||
|   | ad8cb0ba09 | ||
|   | 8125ce5072 | ||
|   | 6c0cc7285f | ||
|   | d3424021c8 | ||
|   | 623aa40acd | ||
|   | c131cb338e | ||
|   | 14d242a233 | ||
|   | a131b7d29a | ||
|   | 85a1fbe89e | ||
|   | 142550a1f8 | ||
|   | e3d3b73903 | ||
|   | 45f18ff91c | ||
|   | 2103163207 | ||
|   | 19dd49670c | ||
|   | e738a1a821 | ||
|   | 6e0f301fb8 | ||
|   | c76b8db293 | ||
|   | 9fa4ca8fb3 | ||
|   | 871b60fe8d | ||
|   | 6715a5b61f | ||
|   | d7d91f1cc5 | ||
|   | 9f00dbd6f4 | ||
|   | f95cf3d671 | ||
|   | 7fbc17624f | ||
|   | b9c2ea37cb | ||
|   | ca0db15e01 | ||
|   | c32c62eacc | ||
|   | 43a79dbad4 | ||
|   | 2829a13187 | ||
|   | efc8c9207d | ||
|   | 183ed10592 | ||
|   | 926b47a31e | ||
|   | d272c919ea | ||
|   | f6e7d04fd5 | ||
|   | ccdff4f087 | ||
|   | ff14303e88 | ||
|   | 48a592340b | ||
|   | da8f5f3231 | ||
|   | f8fa8b73fa | ||
|   | aee126b625 | ||
|   | 396ac86939 | ||
|   | 81816f903f | ||
|   | 06a85b784b | ||
|   | 7f1e3bb155 | ||
|   | 241f554133 | ||
|   | 9498d0779c | ||
|   | b12fd5100f | ||
|   | 92f622430d | ||
|   | ef518f5b23 | ||
|   | 7acb17ebdb | ||
|   | 479a7dbbaf | ||
|   | 4fd1a25557 | ||
|   | f32d42e625 | ||
|   | 362b9a5c3a | ||
|   | e42b4d0ea3 | ||
|   | 43767b8500 | ||
|   | d05098c870 | ||
|   | 505f485568 | ||
|   | 86f512fb91 | ||
|   | 12903066b9 | ||
|   | 118d0433cb | ||
|   | eb781c3679 | ||
|   | 3c6bffba03 | ||
|   | 89623b04d6 | ||
|   | 444a96132c | ||
|   | c008553127 | ||
|   | 162d7b021f | ||
|   | c82364c1dd | ||
|   | 977402c6b0 | ||
|   | b14e59ab5b | ||
|   | 47dcefcfbf | ||
|   | 2b299cb422 | ||
|   | d0ccbb4620 | ||
|   | 187b207271 | ||
|   | a3e22c844c | ||
|   | f8384b2732 | ||
|   | 2dae43258c | ||
|   | 48033ecb85 | ||
|   | ad8df027ac | ||
|   | 91f580771d | ||
|   | 9c6f0981f5 | ||
|   | 2212569688 | ||
|   | 6711f1dbab | ||
|   | 0b7a883efb | ||
|   | 8ae84c62c0 | ||
|   | 0d168c8115 | ||
| c7b51b7fa5 | |||
|   | 86bf723791 | ||
|   | 71f2e9de4a | ||
|   | 33d3f270a3 | ||
|   | da94edd386 | ||
|   | 90dfaefd11 | ||
|   | 8bc616cc55 | ||
|   | a9e79d62c5 | ||
|   | 1998221a0b | ||
|   | a9b1625749 | ||
|   | b411836570 | ||
|   | df7e0221a8 | ||
|   | 8ff8f2b685 | ||
|   | 65dea7e3f7 | ||
|   | 1942f86633 | ||
|   | ee4ce5033a | ||
|   | 040fe806c8 | ||
|   | 97f5c9225e | ||
|   | 09b86c15f9 | ||
|   | 8f34285d8c | ||
|   | d3c3b71e3e | ||
|   | aa6f49c9b1 | ||
|   | c011628420 | ||
|   | 1c9fa9d662 | ||
|   | 7b9bc64364 | ||
|   | 729062bfdd | ||
|   | bc6c726a45 | ||
|   | dfc3df713e | ||
|   | 42eca1d5f2 | ||
|   | 66245e2730 | ||
|   | d44b82c1d1 | ||
|   | 5440e48fa3 | ||
|   | 1c513cf8aa | ||
|   | a17c4b8d43 | ||
|   | 15eb4ac278 | ||
|   | 0d9b81eab3 | ||
|   | f02e1a20c7 | ||
|   | a11991dad7 | ||
|   | 1238828bfd | ||
|   | ba409cb24c | ||
|   | d597670275 | ||
|   | d8540e95f8 | ||
|   | d35ebf00dd | ||
|   | 2b32cb26b1 | ||
|   | ca95fcb658 | ||
|   | cc18bbd168 | ||
|   | 8c8ea800cb | ||
|   | 0746dcc686 | ||
|   | 930650be9d | ||
|   | 4e3a9ffa40 | ||
|   | 3bf68a2bb8 | ||
|   | a80f6feab0 | ||
|   | 3cf8ae52ed | ||
|   | 62632a4514 | ||
|   | 249bd3778a | ||
|   | ab9e5d7a4a | ||
|   | 083b7dc952 | ||
|   | 1791692d92 | ||
|   | ba23c9ab5e | ||
|   | f96ab37bcb | ||
|   | 0da34bbb34 | ||
|   | 51e7c745ea | ||
|   | 8347251572 | ||
|   | ce8512f4e0 | ||
|   | a724a19d00 | ||
|   | 7eae7a98e8 | ||
|   | fe9566eebd | ||
|   | b69756730f | ||
|   | 6cd1a60b53 | ||
|   | 9d935e47b5 | ||
|   | a7d5372d06 | ||
|   | a575942c81 | ||
|   | 3cf6c53a8e | ||
|   | 91d86680de | ||
|   | d1d082fb99 | ||
|   | 2c634d1bf0 | ||
|   | 02a6fe4dc9 | ||
|   | 223d681526 | ||
|   | f42ef1c2fc | ||
|   | f4817b2111 | ||
|   | 6f5def0abf | ||
|   | f0fcd7f133 | ||
|   | 6115adb72e | 
| @@ -7,3 +7,4 @@ indent_style = space | ||||
| [*.kt] | ||||
| indent_size = 2 | ||||
| indent_style = space | ||||
| ktlint_standard_no-wildcard-imports = disabled | ||||
							
								
								
									
										1
									
								
								.gitattributes
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1 @@ | ||||
| * text=auto eol=lf | ||||
							
								
								
									
										32
									
								
								.github/workflows/checkNewPlugins.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,32 @@ | ||||
| # This workflow will build a package using Gradle and then publish it to GitHub packages when a release is created | ||||
| # For more information see: https://github.com/actions/setup-java/blob/main/docs/advanced-usage.md#Publishing-using-gradle | ||||
|  | ||||
| # This workflow syncs changes from the docs folder of IdeaVim to the IdeaVim.wiki repository | ||||
|  | ||||
| name: Check new plugin dependencies | ||||
|  | ||||
| on: | ||||
|   workflow_dispatch: | ||||
|   schedule: | ||||
|     - cron: '0 5 * * *' | ||||
|  | ||||
| jobs: | ||||
|   build: | ||||
|  | ||||
|     runs-on: ubuntu-latest | ||||
|     if: github.repository == 'JetBrains/ideavim' | ||||
|  | ||||
|     steps: | ||||
|       - name: Fetch origin repo | ||||
|         uses: actions/checkout@v3 | ||||
|  | ||||
|       - name: Set up JDK 17 | ||||
|         uses: actions/setup-java@v2 | ||||
|         with: | ||||
|           java-version: '17' | ||||
|           distribution: 'adopt' | ||||
|           server-id: github # Value of the distributionManagement/repository/id field of the pom.xml | ||||
|           settings-path: ${{ github.workspace }} # location for the settings.xml file | ||||
|  | ||||
|       - name: Check new plugins | ||||
|         run: ./gradlew scripts:checkNewPluginDependencies | ||||
							
								
								
									
										47
									
								
								.github/workflows/closeYoutrackOnCommit.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: Close YouTrack on commit | ||||
|  | ||||
| on: | ||||
|   workflow_dispatch: | ||||
|   push: | ||||
|     branches: [ master ] | ||||
|  | ||||
| jobs: | ||||
|   build: | ||||
|  | ||||
|     runs-on: ubuntu-latest | ||||
|     if: github.repository == 'JetBrains/ideavim' | ||||
|  | ||||
|     steps: | ||||
|       - uses: actions/checkout@v3 | ||||
|         with: | ||||
|           fetch-depth: 300 | ||||
|       - name: Get tags | ||||
|         run: git fetch --tags origin | ||||
|       - name: Set up JDK 11 | ||||
|         uses: actions/setup-java@v2 | ||||
|         with: | ||||
|           java-version: '11' | ||||
|           distribution: 'adopt' | ||||
|           server-id: github # Value of the distributionManagement/repository/id field of the pom.xml | ||||
|           settings-path: ${{ github.workspace }} # location for the settings.xml file | ||||
|  | ||||
|         # The last successful job was marked with a tag | ||||
|       - name: Get commit with last workflow | ||||
|         run: | | ||||
|           echo "LAST_COMMIT=$(git rev-list -n 1 tags/workflow-close-youtrack)" >> $GITHUB_ENV | ||||
|  | ||||
|       - name: Update YouTrack | ||||
|         run: ./gradlew updateYoutrackOnCommit | ||||
|         env: | ||||
|           SUCCESS_COMMIT: ${{ env.LAST_COMMIT }} | ||||
|           YOUTRACK_TOKEN: ${{ secrets.YOUTRACK_TOKEN }} | ||||
|  | ||||
|       - name: Update tags | ||||
|         run: | | ||||
|           git tag --delete workflow-close-youtrack || true | ||||
|           git push origin :refs/tags/workflow-close-youtrack || true | ||||
|           git tag workflow-close-youtrack | ||||
|           git push origin workflow-close-youtrack | ||||
							
								
								
									
										6
									
								
								.github/workflows/codeql-analysis.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						| @@ -39,7 +39,7 @@ jobs: | ||||
|  | ||||
|     # Initializes the CodeQL tools for scanning. | ||||
|     - name: Initialize CodeQL | ||||
|       uses: github/codeql-action/init@v1 | ||||
|       uses: github/codeql-action/init@v2 | ||||
|       with: | ||||
|         languages: ${{ matrix.language }} | ||||
|         # If you wish to specify custom queries, you can do so here or in a config file. | ||||
| @@ -50,7 +50,7 @@ jobs: | ||||
|     # Autobuild attempts to build any compiled languages  (C/C++, C#, or Java). | ||||
|     # If this step fails, then you should remove it and run the build manually (see below) | ||||
|     - name: Autobuild | ||||
|       uses: github/codeql-action/autobuild@v1 | ||||
|       uses: github/codeql-action/autobuild@v2 | ||||
|  | ||||
|     # ℹ️ Command-line programs to run using the OS shell. | ||||
|     # 📚 https://git.io/JvXDl | ||||
| @@ -64,4 +64,4 @@ jobs: | ||||
|     #   make release | ||||
|  | ||||
|     - name: Perform CodeQL Analysis | ||||
|       uses: github/codeql-action/analyze@v1 | ||||
|       uses: github/codeql-action/analyze@v2 | ||||
|   | ||||
							
								
								
									
										33
									
								
								.github/workflows/integrationsTest.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,33 @@ | ||||
| # This workflow will build a package using Gradle and then publish it to GitHub packages when a release is created | ||||
| # For more information see: https://github.com/actions/setup-java/blob/main/docs/advanced-usage.md#Publishing-using-gradle | ||||
|  | ||||
| name: Testing CI integrations | ||||
|  | ||||
| on: | ||||
|   workflow_dispatch: | ||||
|   schedule: | ||||
|     - cron: '0 5 * * *' | ||||
|  | ||||
| jobs: | ||||
|   build: | ||||
|  | ||||
|     runs-on: ubuntu-latest | ||||
|     if: github.repository == 'JetBrains/ideavim' | ||||
|  | ||||
|     steps: | ||||
|       - uses: actions/checkout@v2 | ||||
|         with: | ||||
|           fetch-depth: 300 | ||||
|       - name: Set up JDK 11 | ||||
|         uses: actions/setup-java@v2 | ||||
|         with: | ||||
|           java-version: '11' | ||||
|           distribution: 'adopt' | ||||
|           server-id: github # Value of the distributionManagement/repository/id field of the pom.xml | ||||
|           settings-path: ${{ github.workspace }} # location for the settings.xml file | ||||
|  | ||||
|       - name: Run tests | ||||
|         run: ./gradlew integrationsTest | ||||
|         env: | ||||
|           YOUTRACK_TOKEN: ${{ secrets.YOUTRACK_TOKEN }} | ||||
|           GITHUB_OAUTH: ${{ secrets.GITHUB_TOKEN }} | ||||
							
								
								
									
										36
									
								
								.github/workflows/kover.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,36 @@ | ||||
| # This workflow will build a package using Gradle and then publish it to GitHub packages when a release is created | ||||
| # For more information see: https://github.com/actions/setup-java/blob/main/docs/advanced-usage.md#Publishing-using-gradle | ||||
|  | ||||
| name: Kover | ||||
|  | ||||
| on: | ||||
|   workflow_dispatch: | ||||
|   push: | ||||
|     branches: [ master ] | ||||
|  | ||||
| jobs: | ||||
|   build: | ||||
|  | ||||
|     runs-on: ubuntu-latest | ||||
|     if: github.repository == 'JetBrains/ideavim' | ||||
|  | ||||
|     steps: | ||||
|       - uses: actions/checkout@v2 | ||||
|         with: | ||||
|           fetch-depth: 300 | ||||
|       - name: Set up JDK 11 | ||||
|         uses: actions/setup-java@v2 | ||||
|         with: | ||||
|           java-version: '11' | ||||
|           distribution: 'adopt' | ||||
|           server-id: github # Value of the distributionManagement/repository/id field of the pom.xml | ||||
|           settings-path: ${{ github.workspace }} # location for the settings.xml file | ||||
|  | ||||
|       - name: Run tests | ||||
|         run: ./gradlew koverXmlReport | ||||
|  | ||||
|  | ||||
|       # Upload Kover report to CodeCov | ||||
|       - uses: codecov/codecov-action@v3 | ||||
|         with: | ||||
|           files: ${{ github.workspace }}/build/reports/kover/xml/report.xml | ||||
							
								
								
									
										17
									
								
								.github/workflows/mergeDependabotPR.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,17 @@ | ||||
| name: Dependabot auto-merge | ||||
| on: pull_request | ||||
|  | ||||
| permissions: | ||||
|   contents: write | ||||
|   pull-requests: write | ||||
|  | ||||
| jobs: | ||||
|   dependabot: | ||||
|     runs-on: ubuntu-latest | ||||
|     if: ${{ github.actor == 'dependabot[bot]' && github.repository == 'JetBrains/ideavim' }} | ||||
|     steps: | ||||
|       - name: Auto-merge Dependabot PR | ||||
|         run: gh pr merge --auto --rebase "$PR_URL" | ||||
|         env: | ||||
|           PR_URL: ${{github.event.pull_request.html_url}} | ||||
|           GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} | ||||
							
								
								
									
										17
									
								
								.github/workflows/mergePr.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						| @@ -4,19 +4,22 @@ | ||||
| name: Update Changelog On PR | ||||
|  | ||||
| on: | ||||
|   pull_request: | ||||
|   workflow_dispatch: | ||||
|   pull_request_target: | ||||
|     types: [ closed ] | ||||
|  | ||||
| jobs: | ||||
|   build: | ||||
|  | ||||
|     if: github.event.pull_request.merged == true | ||||
|     if: github.event.pull_request.merged == true && github.repository == 'JetBrains/ideavim' | ||||
|     runs-on: ubuntu-latest | ||||
|  | ||||
|     steps: | ||||
|       - uses: actions/checkout@v2 | ||||
|         with: | ||||
|           fetch-depth: 50 | ||||
|           # See end of file updateChangeslog.yml for explanation of this secret | ||||
|           ssh-key: ${{ secrets.PUSH_TO_PROTECTED_BRANCH_SECRET }} | ||||
|       - name: Set up JDK 11 | ||||
|         uses: actions/setup-java@v2 | ||||
|         with: | ||||
| @@ -29,14 +32,14 @@ jobs: | ||||
|         id: update_authors | ||||
|         run: ./gradlew updateMergedPr -PprId=${{ github.event.number }} | ||||
|         env: | ||||
|           GITHUB_OAUTH: ${{ secrets.AUTOMATION_TOKEN }} | ||||
|           GITHUB_OAUTH: ${{ secrets.GITHUB_TOKEN }} | ||||
|  | ||||
|       - name: Commit changes | ||||
|         uses: stefanzweifel/git-auto-commit-action@v4 | ||||
|         with: | ||||
|           branch: master | ||||
|           commit_message: Update changelog  after merging PR | ||||
|           commit_user_name: Alex Plate | ||||
|           commit_user_email: aleksei.plate@jetbrains.com | ||||
|           commit_author: Alex Plate <aleksei.plate@jetbrains.com> | ||||
|           commit_message: Update changelog after merging PR | ||||
|           commit_user_name: IdeaVim Bot | ||||
|           commit_user_email: maintainers@ideavim.dev | ||||
|           commit_author: IdeaVim Bot <maintainers@ideavim.dev> | ||||
|           file_pattern: CHANGES.md | ||||
|   | ||||
							
								
								
									
										25
									
								
								.github/workflows/runUiTests.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						| @@ -5,20 +5,23 @@ on: | ||||
|       - cron: '0 12 * * *' | ||||
| jobs: | ||||
|   build-for-ui-test-mac-os: | ||||
|     if: github.repository == 'JetBrains/ideavim' | ||||
|     runs-on: macos-latest | ||||
|     steps: | ||||
|       - uses: actions/checkout@v2 | ||||
|       - uses: actions/checkout@v4 | ||||
|       - name: Setup Java | ||||
|         uses: actions/setup-java@v2.1.0 | ||||
|         uses: actions/setup-java@v4 | ||||
|         with: | ||||
|           distribution: zulu | ||||
|           java-version: 11 | ||||
|       - name: Setup FFmpeg | ||||
|         uses: FedericoCarboni/setup-ffmpeg@v1 | ||||
|         uses: FedericoCarboni/setup-ffmpeg@v3 | ||||
|         with: | ||||
|           # Not strictly necessary, but it may prevent rate limit | ||||
|           # errors especially on GitHub-hosted macos machines. | ||||
|           token: ${{ secrets.GITHUB_TOKEN }} | ||||
|           github-token: ${{ secrets.GITHUB_TOKEN }} | ||||
|       - name: Setup Gradle | ||||
|         uses: gradle/gradle-build-action@v2.4.2 | ||||
|       - name: Build Plugin | ||||
|         run: gradle :buildPlugin | ||||
|       - name: Run Idea | ||||
| @@ -26,7 +29,7 @@ jobs: | ||||
|           mkdir -p build/reports | ||||
|           gradle :runIdeForUiTests > build/reports/idea.log & | ||||
|       - name: Wait for Idea started | ||||
|         uses: jtalk/url-health-check-action@1.5 | ||||
|         uses: jtalk/url-health-check-action@v3 | ||||
|         with: | ||||
|           url: http://127.0.0.1:8082 | ||||
|           max-attempts: 20 | ||||
| @@ -34,15 +37,19 @@ jobs: | ||||
|       - name: Tests | ||||
|         run: gradle :testUi | ||||
|       - name: Move video | ||||
|         if: ${{ failure() }} | ||||
|         if: always() | ||||
|         run: mv video build/reports | ||||
|       - name: Save fails report | ||||
|         if: ${{ failure() }} | ||||
|         uses: actions/upload-artifact@v2 | ||||
|       - name: Move sandbox logs | ||||
|         if: always() | ||||
|         run: mv build/idea-sandbox/system/log sandbox-idea-log | ||||
|       - name: Save report | ||||
|         if: always() | ||||
|         uses: actions/upload-artifact@v4 | ||||
|         with: | ||||
|           name: ui-test-fails-report-mac | ||||
|           path: | | ||||
|             build/reports | ||||
|             sandbox-idea-log | ||||
| #  build-for-ui-test-linux: | ||||
| #    runs-on: ubuntu-latest | ||||
| #    steps: | ||||
|   | ||||
							
								
								
									
										45
									
								
								.github/workflows/syncDoc.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,45 @@ | ||||
| # This workflow will build a package using Gradle and then publish it to GitHub packages when a release is created | ||||
| # For more information see: https://github.com/actions/setup-java/blob/main/docs/advanced-usage.md#Publishing-using-gradle | ||||
|  | ||||
| # This workflow syncs changes from the docs folder of IdeaVim to the IdeaVim.wiki repository | ||||
|  | ||||
| name: Sync docs | ||||
|  | ||||
| on: | ||||
|   workflow_dispatch: | ||||
|   push: | ||||
|     branches: [ master ] | ||||
|  | ||||
| jobs: | ||||
|   build: | ||||
|  | ||||
|     runs-on: ubuntu-latest | ||||
|     if: github.repository == 'JetBrains/ideavim' | ||||
|  | ||||
|     steps: | ||||
|       - name: Fetch origin repo | ||||
|         uses: actions/checkout@v3 | ||||
|         with: | ||||
|           path: origin | ||||
|           # See end of file updateChangeslog.yml for explanation of this secret | ||||
|           ssh-key: ${{ secrets.PUSH_TO_PROTECTED_BRANCH_SECRET }} | ||||
|  | ||||
|       - name: Fetch docs repo | ||||
|         uses: actions/checkout@v3 | ||||
|         with: | ||||
|           repository: JetBrains/ideavim.wiki | ||||
|           path: docs | ||||
|  | ||||
|       - name: Sync docs | ||||
|         id: update_authors | ||||
|         run: cp -a origin/doc/. docs | ||||
|  | ||||
|       - name: Commit changes | ||||
|         uses: stefanzweifel/git-auto-commit-action@v4 | ||||
|         with: | ||||
|           branch: master | ||||
|           repository: docs | ||||
|           commit_message: Update docs | ||||
|           commit_user_name: IdeaVim Bot | ||||
|           commit_user_email: maintainers@ideavim.dev | ||||
|           commit_author: IdeaVim Bot <maintainers@ideavim.dev> | ||||
							
								
								
									
										34
									
								
								.github/workflows/updateAffectedRate.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,34 @@ | ||||
| # This workflow will build a package using Gradle and then publish it to GitHub packages when a release is created | ||||
| # For more information see: https://github.com/actions/setup-java/blob/main/docs/advanced-usage.md#Publishing-using-gradle | ||||
|  | ||||
| # This workflow syncs changes from the docs folder of IdeaVim to the IdeaVim.wiki repository | ||||
|  | ||||
| name: Update Affected Rate field on YouTrack | ||||
|  | ||||
| on: | ||||
|   workflow_dispatch: | ||||
|   schedule: | ||||
|     - cron: '0 8 * * *' | ||||
|  | ||||
| jobs: | ||||
|   build: | ||||
|  | ||||
|     runs-on: ubuntu-latest | ||||
|     if: github.repository == 'JetBrains/ideavim' | ||||
|  | ||||
|     steps: | ||||
|       - name: Fetch origin repo | ||||
|         uses: actions/checkout@v3 | ||||
|  | ||||
|       - name: Set up JDK 17 | ||||
|         uses: actions/setup-java@v2 | ||||
|         with: | ||||
|           java-version: '17' | ||||
|           distribution: 'adopt' | ||||
|           server-id: github # Value of the distributionManagement/repository/id field of the pom.xml | ||||
|           settings-path: ${{ github.workspace }} # location for the settings.xml file | ||||
|  | ||||
|       - name: Update YouTrack | ||||
|         run: ./gradlew scripts:updateAffectedRates | ||||
|         env: | ||||
|           YOUTRACK_TOKEN: ${{ secrets.YOUTRACK_TOKEN }} | ||||
							
								
								
									
										41
									
								
								.github/workflows/updateAuthors.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						| @@ -5,18 +5,26 @@ name: Update Authors | ||||
|  | ||||
| on: | ||||
|   workflow_dispatch: | ||||
|   push: | ||||
|     branches: [ master ] | ||||
|   schedule: | ||||
|     - cron: '0 9 * * *' | ||||
| # Workflow run on push is disabled to avoid conflicts when merging PR | ||||
| #  push: | ||||
| #    branches: [ master ] | ||||
|  | ||||
| jobs: | ||||
|   build: | ||||
|  | ||||
|     runs-on: ubuntu-latest | ||||
|     if: github.repository == 'JetBrains/ideavim' | ||||
|  | ||||
|     steps: | ||||
|       - uses: actions/checkout@v2 | ||||
|       - uses: actions/checkout@v3 | ||||
|         with: | ||||
|           fetch-depth: 300 | ||||
|           # See end of file updateChangeslog.yml for explanation of this secret | ||||
|           ssh-key: ${{ secrets.PUSH_TO_PROTECTED_BRANCH_SECRET }} | ||||
|       - name: Get tags | ||||
|         run: git fetch --tags origin | ||||
|       - name: Set up JDK 11 | ||||
|         uses: actions/setup-java@v2 | ||||
|         with: | ||||
| @@ -25,25 +33,30 @@ jobs: | ||||
|           server-id: github # Value of the distributionManagement/repository/id field of the pom.xml | ||||
|           settings-path: ${{ github.workspace }} # location for the settings.xml file | ||||
|  | ||||
|       - uses: nrwl/last-successful-commit-action@v1 | ||||
|         id: last_successful_commit | ||||
|         with: | ||||
|           branch: 'master' | ||||
|           workflow_id: 'updateAuthors.yml' | ||||
|           github_token: ${{ secrets.GITHUB_TOKEN }} | ||||
|         # The last successful job was marked with a tag | ||||
|       - name: Get commit with last workflow | ||||
|         run: | | ||||
|           echo "LAST_COMMIT=$(git rev-list -n 1 tags/workflow-authors)" >> $GITHUB_ENV | ||||
|  | ||||
|       - name: Update authors | ||||
|         id: update_authors | ||||
|         run: ./gradlew updateAuthors --stacktrace | ||||
|         env: | ||||
|           SUCCESS_COMMIT: ${{ steps.last_successful_commit.outputs.commit_hash }} | ||||
|           GITHUB_OAUTH: ${{ secrets.AUTOMATION_TOKEN }} | ||||
|           SUCCESS_COMMIT: ${{ env.LAST_COMMIT }} | ||||
|           GITHUB_OAUTH: ${{ secrets.GITHUB_TOKEN }} | ||||
|  | ||||
|       - name: Commit changes | ||||
|         uses: stefanzweifel/git-auto-commit-action@v4 | ||||
|         with: | ||||
|           commit_message: Add ${{ steps.update_authors.outputs.authors }} to contributors list | ||||
|           commit_user_name: Alex Plate | ||||
|           commit_user_email: aleksei.plate@jetbrains.com | ||||
|           commit_author: Alex Plate <aleksei.plate@jetbrains.com> | ||||
|           commit_user_name: IdeaVim Bot | ||||
|           commit_user_email: maintainers@ideavim.dev | ||||
|           commit_author: IdeaVim Bot <maintainers@ideavim.dev> | ||||
|           file_pattern: AUTHORS.md | ||||
|  | ||||
|       - name: Update tags | ||||
|         run: | | ||||
|           git tag --delete workflow-authors || true | ||||
|           git push origin :refs/tags/workflow-authors || true | ||||
|           git tag workflow-authors | ||||
|           git push origin workflow-authors | ||||
|   | ||||
							
								
								
									
										49
									
								
								.github/workflows/updateChangelog.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						| @@ -5,18 +5,26 @@ name: Update Changelog | ||||
|  | ||||
| on: | ||||
|   workflow_dispatch: | ||||
|   push: | ||||
|     branches: [ master ] | ||||
|   schedule: | ||||
|     - cron: '0 10 * * *' | ||||
| # Workflow run on push is disabled to avoid conflicts when merging PR | ||||
| #  push: | ||||
| #    branches: [ master ] | ||||
|  | ||||
| jobs: | ||||
|   build: | ||||
|  | ||||
|     runs-on: ubuntu-latest | ||||
|     if: github.repository == 'JetBrains/ideavim' | ||||
|  | ||||
|     steps: | ||||
|       - uses: actions/checkout@v2 | ||||
|       - uses: actions/checkout@v3 | ||||
|         with: | ||||
|           fetch-depth: 300 | ||||
|           # See end of file updateChangeslog.yml for explanation of this secret | ||||
|           ssh-key: ${{ secrets.PUSH_TO_PROTECTED_BRANCH_SECRET }} | ||||
|       - name: Get tags | ||||
|         run: git fetch --tags origin | ||||
|       - name: Set up JDK 11 | ||||
|         uses: actions/setup-java@v2 | ||||
|         with: | ||||
| @@ -25,23 +33,34 @@ jobs: | ||||
|           server-id: github # Value of the distributionManagement/repository/id field of the pom.xml | ||||
|           settings-path: ${{ github.workspace }} # location for the settings.xml file | ||||
|  | ||||
|       - uses: nrwl/last-successful-commit-action@v1 | ||||
|         id: last_successful_commit | ||||
|         with: | ||||
|           branch: 'master' | ||||
|           workflow_id: 'updateChangelog.yml' | ||||
|           github_token: ${{ secrets.GITHUB_TOKEN }} | ||||
|         # The last successful job was marked with a tag | ||||
|       - name: Get commit with last workflow | ||||
|         run: | | ||||
|           echo "LAST_COMMIT=$(git rev-list -n 1 tags/workflow-changelog)" >> $GITHUB_ENV | ||||
|  | ||||
|       - name: Update changelog | ||||
|         run: ./gradlew updateChangelog | ||||
|         env: | ||||
|           SUCCESS_COMMIT: ${{ steps.last_successful_commit.outputs.commit_hash }} | ||||
|           SUCCESS_COMMIT: ${{ env.LAST_COMMIT }} | ||||
|  | ||||
|       - name: Commit changes | ||||
|         uses: stefanzweifel/git-auto-commit-action@v4 | ||||
|         with: | ||||
|           commit_message: Update changelog | ||||
|           commit_user_name: Alex Plate | ||||
|           commit_user_email: aleksei.plate@jetbrains.com | ||||
|           commit_author: Alex Plate <aleksei.plate@jetbrains.com> | ||||
|           file_pattern: CHANGES.md | ||||
|           commit_message: Update changelog. Action id - ${{ github.run_id }} | ||||
|           commit_user_name: IdeaVim Bot | ||||
|           commit_user_email: maintainers@ideavim.dev | ||||
|           commit_author: IdeaVim Bot <maintainers@ideavim.dev> | ||||
|           file_pattern: CHANGES.md | ||||
|  | ||||
|       - name: Update tags | ||||
|         run: | | ||||
|           git tag --delete workflow-changelog || true | ||||
|           git push origin :refs/tags/workflow-changelog || true | ||||
|           git tag workflow-changelog | ||||
|           git push origin workflow-changelog | ||||
|  | ||||
| # Regarding secrets.PUSH_TO_PROTECTED_BRANCH_SECRET - we use branch protection rules to automate merges of the | ||||
| #   dependabot updates. See mergeDependatobPR.yml file. | ||||
| # However, it turned out that GitHub accepts pushes from the actions as a PR and requires checks, that are always | ||||
| #   false for pushing from actions. | ||||
| # This secret is created to implement the workaround described in https://stackoverflow.com/a/76135647/3124227 | ||||
							
								
								
									
										15
									
								
								.github/workflows/updateFormatting.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						| @@ -12,11 +12,14 @@ jobs: | ||||
|   build: | ||||
|  | ||||
|     runs-on: ubuntu-latest | ||||
|     if: github.repository == 'JetBrains/ideavim' | ||||
|  | ||||
|     steps: | ||||
|       - uses: actions/checkout@v2 | ||||
|         with: | ||||
|           fetch-depth: 50 | ||||
|           # See end of file updateChangeslog.yml for explanation of this secret | ||||
|           ssh-key: ${{ secrets.PUSH_TO_PROTECTED_BRANCH_SECRET }} | ||||
|       - name: Set up JDK 11 | ||||
|         uses: actions/setup-java@v2 | ||||
|         with: | ||||
| @@ -25,13 +28,15 @@ jobs: | ||||
|           server-id: github # Value of the distributionManagement/repository/id field of the pom.xml | ||||
|           settings-path: ${{ github.workspace }} # location for the settings.xml file | ||||
|  | ||||
|       - name: Format files | ||||
|         run: ./gradlew ktlintFormat | ||||
|       - uses: findologic/intellij-format-action@1.0.1 | ||||
|         with: | ||||
|           include-glob: '*.kt,*.java' | ||||
|           path: . | ||||
|  | ||||
|       - name: Commit changes | ||||
|         uses: stefanzweifel/git-auto-commit-action@v4 | ||||
|         with: | ||||
|           commit_message: Update formatting | ||||
|           commit_user_name: Alex Plate | ||||
|           commit_user_email: aleksei.plate@jetbrains.com | ||||
|           commit_author: Alex Plate <aleksei.plate@jetbrains.com> | ||||
|           commit_user_name: IdeaVim Bot | ||||
|           commit_user_email: maintainers@ideavim.dev | ||||
|           commit_author: IdeaVim Bot <maintainers@ideavim.dev> | ||||
|   | ||||
							
								
								
									
										4
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						| @@ -9,6 +9,7 @@ | ||||
| !/.idea/fileTemplates | ||||
| !/.idea/runConfigurations | ||||
| !/.idea/codeStyles | ||||
| !/.idea/vcs.xml | ||||
|  | ||||
| **/build/ | ||||
| **/out/ | ||||
| @@ -22,6 +23,9 @@ | ||||
|  | ||||
| # Generated by gradle task "generateGrammarSource" | ||||
| src/main/java/com/maddyhome/idea/vim/vimscript/parser/generated | ||||
| # Generated JSONs for lazy classloading | ||||
| /vim-engine/src/main/resources/ksp-generated | ||||
| /src/main/resources/ksp-generated | ||||
|  | ||||
| # Created by github automation | ||||
| settings.xml | ||||
|   | ||||
							
								
								
									
										5
									
								
								.idea/codeStyles/Project.xml
									
									
									
										generated
									
									
									
								
							
							
						
						| @@ -6,6 +6,7 @@ | ||||
|         <option name="CONTINUATION_INDENT_SIZE" value="4" /> | ||||
|       </value> | ||||
|     </option> | ||||
|     <option name="LINE_SEPARATOR" value="
" /> | ||||
|     <JavaCodeStyleSettings> | ||||
|       <option name="FIELD_NAME_PREFIX" value="my" /> | ||||
|       <option name="STATIC_FIELD_NAME_PREFIX" value="our" /> | ||||
| @@ -191,6 +192,10 @@ | ||||
|     </codeStyleSettings> | ||||
|     <codeStyleSettings language="kotlin"> | ||||
|       <option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" /> | ||||
|       <indentOptions> | ||||
|         <option name="INDENT_SIZE" value="2" /> | ||||
|         <option name="TAB_SIZE" value="2" /> | ||||
|       </indentOptions> | ||||
|     </codeStyleSettings> | ||||
|   </code_scheme> | ||||
| </component> | ||||
							
								
								
									
										2
									
								
								.idea/copyright/IdeaVim.xml
									
									
									
										generated
									
									
									
								
							
							
						
						| @@ -1,6 +1,6 @@ | ||||
| <component name="CopyrightManager"> | ||||
|   <copyright> | ||||
|     <option name="notice" value="IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
Copyright (C) 2003-&#36;today.year The IdeaVim authors

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>." /> | ||||
|     <option name="notice" value="Copyright 2003-&#36;today.year The IdeaVim authors

Use of this source code is governed by an MIT-style
license that can be found in the LICENSE.txt file or at
https://opensource.org/licenses/MIT." /> | ||||
|     <option name="myName" value="IdeaVim" /> | ||||
|   </copyright> | ||||
| </component> | ||||
							
								
								
									
										14
									
								
								.idea/inspectionProfiles/Qodana.xml
									
									
									
										generated
									
									
									
								
							
							
						
						| @@ -33,9 +33,11 @@ | ||||
|       <option name="ignoreToString" value="false" /> | ||||
|       <option name="nonNlsCommentPattern" value="NON-NLS" /> | ||||
|     </inspection_tool> | ||||
|     <inspection_tool class="MagicConstant" enabled="false" level="WARNING" enabled_by_default="false" /> | ||||
|     <inspection_tool class="MissortedModifiers" enabled="true" level="WARNING" enabled_by_default="true"> | ||||
|       <option name="m_requireAnnotationsFirst" value="true" /> | ||||
|     </inspection_tool> | ||||
|     <inspection_tool class="SameParameterValue" enabled="false" level="WARNING" enabled_by_default="false" /> | ||||
|     <inspection_tool class="SameReturnValue" enabled="false" level="WARNING" enabled_by_default="false" /> | ||||
|     <inspection_tool class="SpellCheckingInspection" enabled="false" level="TYPO" enabled_by_default="false"> | ||||
|       <option name="processCode" value="true" /> | ||||
| @@ -44,5 +46,17 @@ | ||||
|     </inspection_tool> | ||||
|     <inspection_tool class="SuperTearDownInFinally" enabled="true" level="WARNING" enabled_by_default="true" /> | ||||
|     <inspection_tool class="UnstableApiUsage" enabled="false" level="WARNING" enabled_by_default="false" /> | ||||
|     <inspection_tool class="unused" enabled="false" level="WARNING" enabled_by_default="false" checkParameterExcludingHierarchy="false"> | ||||
|       <option name="LOCAL_VARIABLE" value="true" /> | ||||
|       <option name="FIELD" value="true" /> | ||||
|       <option name="METHOD" value="true" /> | ||||
|       <option name="CLASS" value="true" /> | ||||
|       <option name="PARAMETER" value="true" /> | ||||
|       <option name="REPORT_PARAMETER_FOR_PUBLIC_METHODS" value="true" /> | ||||
|       <option name="ADD_MAINS_TO_ENTRIES" value="true" /> | ||||
|       <option name="ADD_APPLET_TO_ENTRIES" value="true" /> | ||||
|       <option name="ADD_SERVLET_TO_ENTRIES" value="true" /> | ||||
|       <option name="ADD_NONJAVA_TO_ENTRIES" value="true" /> | ||||
|     </inspection_tool> | ||||
|   </profile> | ||||
| </component> | ||||
							
								
								
									
										2
									
								
								.idea/scopes/Copyright.xml
									
									
									
										generated
									
									
									
								
							
							
						
						| @@ -1,3 +1,3 @@ | ||||
| <component name="DependencyValidationManager"> | ||||
|   <scope name="Copyright" pattern="(file[IdeaVIM.main]:*/||file[IdeaVIM.test]:*/)&&!file[IdeaVIM.main]:resources//*" /> | ||||
|   <scope name="Copyright" pattern="file:*/&&!file:.github//*&&!file:.idea//*&&!file:.teamcity//*&&!file:assets//*&&!file:config//*&&!file:doc//*&&!file:gradle//*&&!file:gradlew&&!file:gradlew.bat&&!file:src/main/resources//*&&!file:antlr//*&&!file:java/com/maddyhome/idea/vim/regexp/RegExp.kt&&!file:java/com/maddyhome/idea/vim/ui/Tutor.kt&&!file:java/com/maddyhome/idea/vim/helper/ScrollViewHelper.kt" /> | ||||
| </component> | ||||
							
								
								
									
										16
									
								
								.idea/vcs.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,16 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <project version="4"> | ||||
|   <component name="IssueNavigationConfiguration"> | ||||
|     <option name="links"> | ||||
|       <list> | ||||
|         <IssueNavigationLink> | ||||
|           <option name="issueRegexp" value="[A-Z]+\-\d+" /> | ||||
|           <option name="linkRegexp" value="https://youtrack.jetbrains.com/issue/$0" /> | ||||
|         </IssueNavigationLink> | ||||
|       </list> | ||||
|     </option> | ||||
|   </component> | ||||
|   <component name="VcsDirectoryMappings"> | ||||
|     <mapping directory="$PROJECT_DIR$" vcs="Git" /> | ||||
|   </component> | ||||
| </project> | ||||
							
								
								
									
										22
									
								
								.teamcity/_Self/Constants.kt
									
									
									
									
										vendored
									
									
								
							
							
						
						| @@ -5,19 +5,13 @@ object Constants { | ||||
|   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 = "2023.3.2" | ||||
|   const val NVIM_TESTS = "2023.3.2" | ||||
|   const val PROPERTY_TESTS = "2023.3.2" | ||||
|   const val LONG_RUNNING_TESTS = "2023.3.2" | ||||
|   const val QODANA_TESTS = "2023.3.2" | ||||
|   const val RELEASE = "2023.3.2" | ||||
|  | ||||
|   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 = "2022.1.3" | ||||
|  | ||||
|  | ||||
|   // Use LATEST-EAP-SNAPSHOT only when we'll update the minimum version of IJ to 222+ | ||||
|   // Because of some API inconcistincies, IdeaVim built on 2022+ won't run on older versions of IJ | ||||
|   const val RELEASE_DEV = "2022.1.3" | ||||
|   const val RELEASE_EAP = "2022.1.3" | ||||
|   const val RELEASE_DEV = "2023.3.2" | ||||
|   const val RELEASE_EAP = "2023.3.2" | ||||
| } | ||||
|   | ||||
							
								
								
									
										104
									
								
								.teamcity/_Self/Project.kt
									
									
									
									
										vendored
									
									
								
							
							
						
						| @@ -1,91 +1,61 @@ | ||||
| package _Self | ||||
|  | ||||
| import _Self.buildTypes.* | ||||
| import _Self.buildTypes.Compatibility | ||||
| import _Self.buildTypes.LongRunning | ||||
| import _Self.buildTypes.Nvim | ||||
| import _Self.buildTypes.PluginVerifier | ||||
| import _Self.buildTypes.PropertyBased | ||||
| import _Self.buildTypes.Qodana | ||||
| import _Self.buildTypes.TestingBuildType | ||||
| import _Self.subprojects.GitHub | ||||
| import _Self.subprojects.OldTests | ||||
| import _Self.subprojects.Releases | ||||
| import _Self.vcsRoots.Branch_181 | ||||
| import _Self.vcsRoots.Branch_183 | ||||
| import _Self.vcsRoots.Branch_191_193 | ||||
| import _Self.vcsRoots.Branch_201 | ||||
| import _Self.vcsRoots.Branch_202 | ||||
| import _Self.vcsRoots.Branch_203_212 | ||||
| import _Self.vcsRoots.Branch_Release | ||||
| import _Self.vcsRoots.GitHubPullRequest | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.Project | ||||
|  | ||||
| object Project : Project({ | ||||
|   description = "Vim emulation plugin for the IntelliJ platform products" | ||||
|   description = "Vim engine for IDEs based on the IntelliJ platform" | ||||
|  | ||||
|   subProjects(Releases, OldTests, GitHub) | ||||
|  | ||||
|   // VCS roots | ||||
|   vcsRoot(Branch_183) | ||||
|   vcsRoot(Branch_181) | ||||
|   vcsRoot(Branch_191_193) | ||||
|   vcsRoot(Branch_201) | ||||
|   vcsRoot(Branch_202) | ||||
|   vcsRoot(Branch_203_212) | ||||
|   vcsRoot(Branch_Release) | ||||
|   vcsRoot(GitHubPullRequest) | ||||
|  | ||||
|   // Builds | ||||
|   buildType(TestsForIntelliJ20213) | ||||
|   buildType(TestsForIntelliJEAP) | ||||
|   // Active tests | ||||
|   buildType(TestingBuildType("Latest EAP", "<default>", version = "LATEST-EAP-SNAPSHOT")) | ||||
|   buildType(TestingBuildType("2023.3", "<default>", version = "2023.3")) | ||||
|   buildType(TestingBuildType("Latest EAP With Xorg", "<default>", version = "LATEST-EAP-SNAPSHOT")) | ||||
|  | ||||
|   buildType(PropertyBased) | ||||
|   buildType(LongRunning) | ||||
|  | ||||
|   buildType(Nvim) | ||||
|   buildType(PluginVerifier) | ||||
|   buildType(Compatibility) | ||||
|  | ||||
|   buildType(Qodana) | ||||
|  | ||||
|   // Unknown staff generated by TeamCity | ||||
|   features { | ||||
|     feature { | ||||
|       type = "CloudImage" | ||||
|       id = "PROJECT_EXT_768" | ||||
|       param("agent_pool_id", "41") | ||||
|       param("amazon-id", "ami-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") | ||||
|     } | ||||
|   } | ||||
| }) | ||||
|  | ||||
| // Common build type for all configurations | ||||
| abstract class IdeaVimBuildType(init: BuildType.() -> Unit) : BuildType({ | ||||
|   artifactRules = """ | ||||
|         +:build/reports => build/reports | ||||
|         +:/mnt/agent/temp/buildTmp/ => /mnt/agent/temp/buildTmp/ | ||||
|     """.trimIndent() | ||||
|  | ||||
|   init() | ||||
|  | ||||
|   requirements { | ||||
|     // These requirements define Linux-Medium configuration. | ||||
|     // Unfortunately, requirement by name (teamcity.agent.name) doesn't work | ||||
|     //   IDK the reason for it, but on our agents this property is empty | ||||
|     equals("teamcity.agent.hardware.cpuCount", "4") | ||||
|     equals("teamcity.agent.os.family", "Linux") | ||||
|   } | ||||
|  | ||||
|   failureConditions { | ||||
|     // Disable detection of the java OOM | ||||
|     javaCrash = false | ||||
|   } | ||||
| }) | ||||
							
								
								
									
										64
									
								
								.teamcity/_Self/buildTypes/Compatibility.kt
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,64 @@ | ||||
| package _Self.buildTypes | ||||
|  | ||||
| import _Self.IdeaVimBuildType | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.buildFeatures.golang | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.script | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.schedule | ||||
|  | ||||
| object Compatibility : IdeaVimBuildType({ | ||||
|   id("IdeaVimCompatibility") | ||||
|   name = "IdeaVim compatibility with external plugins" | ||||
|  | ||||
|   vcs { | ||||
|     root(DslContext.settingsRoot) | ||||
|     branchFilter = "+:<default>" | ||||
|   } | ||||
|  | ||||
|   steps { | ||||
|     script { | ||||
|       name = "Load Verifier" | ||||
|       scriptContent = """ | ||||
|         mkdir verifier1 | ||||
|         curl -f -L -o verifier1/verifier-cli-dev-all-1.jar "https://packages.jetbrains.team/files/p/ideavim/plugin-verifier/verifier-cli-dev-all-1.jar" | ||||
|       """.trimIndent() | ||||
|     } | ||||
|     script { | ||||
|       name = "Check" | ||||
|       scriptContent = """ | ||||
|               # We use a custom build of verifier that downloads IdeaVim from dev channel | ||||
|               # To create a custom build: Download plugin verifier repo, add an if that switches to dev channel for IdeaVim repo | ||||
|               # At the moment it's com.jetbrains.pluginverifier.repository.repositories.marketplace.MarketplaceRepository#getLastCompatibleVersionOfPlugin | ||||
|               # Build using gradlew :intellij-plugin-verifier:verifier-cli:shadowJar | ||||
|               # Upload verifier-cli-dev-all.jar artifact to the repo in IdeaVim space repo | ||||
|                | ||||
|               java --version | ||||
|               java -jar verifier1/verifier-cli-dev-all-1.jar check-plugin '${'$'}org.jetbrains.IdeaVim-EasyMotion' [latest-IU] -team-city | ||||
|               java -jar verifier1/verifier-cli-dev-all-1.jar check-plugin '${'$'}io.github.mishkun.ideavimsneak' [latest-IU] -team-city | ||||
|               java -jar verifier1/verifier-cli-dev-all-1.jar check-plugin '${'$'}eu.theblob42.idea.whichkey' [latest-IU] -team-city | ||||
|               java -jar verifier1/verifier-cli-dev-all-1.jar check-plugin '${'$'}IdeaVimExtension' [latest-IU] -team-city | ||||
|               # Outdated java -jar verifier/verifier-cli-dev-all.jar check-plugin '${'$'}github.zgqq.intellij-enhance' [latest-IU] -team-city | ||||
|               java -jar verifier1/verifier-cli-dev-all-1.jar check-plugin '${'$'}com.github.copilot' [latest-IU] -team-city | ||||
|               java -jar verifier1/verifier-cli-dev-all-1.jar check-plugin '${'$'}com.github.dankinsoid.multicursor' [latest-IU] -team-city | ||||
|               java -jar verifier1/verifier-cli-dev-all-1.jar check-plugin '${'$'}com.joshestein.ideavim-quickscope' [latest-IU] -team-city | ||||
|             """.trimIndent() | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   triggers { | ||||
|     schedule { | ||||
|       schedulingPolicy = daily { | ||||
|         hour = 4 | ||||
|       } | ||||
|       branchFilter = "" | ||||
|       triggerBuild = always() | ||||
|       withPendingChangesOnly = false | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   features { | ||||
|     golang { | ||||
|       testFormat = "json" | ||||
|     } | ||||
|   } | ||||
| }) | ||||
							
								
								
									
										77
									
								
								.teamcity/_Self/buildTypes/GithubTests.kt
									
									
									
									
										vendored
									
									
								
							
							
						
						| @@ -1,77 +0,0 @@ | ||||
| package _Self.buildTypes | ||||
|  | ||||
| import _Self.Constants.GITHUB_TESTS | ||||
| import _Self.vcsRoots.GitHubPullRequest | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.buildFeatures.PullRequests | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.buildFeatures.commitStatusPublisher | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.buildFeatures.pullRequests | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.VcsTrigger | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs | ||||
|  | ||||
| object GithubTests : Github("clean test", "Tests") | ||||
|  | ||||
| sealed class Github(command: String, desc: String) : BuildType({ | ||||
|   name = "GitHub Pull Requests $desc" | ||||
|   description = "Test GitHub pull requests $desc" | ||||
|  | ||||
|   params { | ||||
|     param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false") | ||||
|     param("env.ORG_GRADLE_PROJECT_ideaVersion", GITHUB_TESTS) | ||||
|     param("env.ORG_GRADLE_PROJECT_instrumentPluginCode", "false") | ||||
|   } | ||||
|  | ||||
|   vcs { | ||||
|     root(GitHubPullRequest) | ||||
|  | ||||
|     checkoutMode = CheckoutMode.AUTO | ||||
|     branchFilter = """ | ||||
|             +:* | ||||
|             -:<default> | ||||
|         """.trimIndent() | ||||
|   } | ||||
|  | ||||
|   steps { | ||||
|     gradle { | ||||
|       tasks = command | ||||
|       buildFile = "" | ||||
|       enableStacktrace = true | ||||
|       param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL") | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   triggers { | ||||
|     vcs { | ||||
|       quietPeriodMode = VcsTrigger.QuietPeriodMode.USE_DEFAULT | ||||
|       branchFilter = "" | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   features { | ||||
|     pullRequests { | ||||
|       provider = github { | ||||
|         authType = token { | ||||
|           token = "credentialsJSON:43afd6e5-6ad5-4d12-a218-cf1547717a7f" | ||||
|         } | ||||
|         filterTargetBranch = "refs/heads/master" | ||||
|         filterAuthorRole = PullRequests.GitHubRoleFilter.EVERYBODY | ||||
|       } | ||||
|     } | ||||
|     commitStatusPublisher { | ||||
|       vcsRootExtId = "${GitHubPullRequest.id}" | ||||
|       publisher = github { | ||||
|         githubUrl = "https://api.github.com" | ||||
|         authType = personalToken { | ||||
|           token = "credentialsJSON:43afd6e5-6ad5-4d12-a218-cf1547717a7f" | ||||
|         } | ||||
|       } | ||||
|       param("github_oauth_user", "AlexPl292") | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   requirements { | ||||
|     noLessThanVer("teamcity.agent.jvm.version", "1.8") | ||||
|   } | ||||
| }) | ||||
							
								
								
									
										20
									
								
								.teamcity/_Self/buildTypes/LongRunning.kt
									
									
									
									
										vendored
									
									
								
							
							
						
						| @@ -1,13 +1,14 @@ | ||||
| package _Self.buildTypes | ||||
|  | ||||
| import _Self.Constants.LONG_RUNNING_TESTS | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType | ||||
| import _Self.IdeaVimBuildType | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.schedule | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs | ||||
|  | ||||
| object LongRunning : BuildType({ | ||||
| object LongRunning : IdeaVimBuildType({ | ||||
|   name = "Long running tests" | ||||
|   params { | ||||
|     param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false") | ||||
| @@ -17,6 +18,7 @@ object LongRunning : BuildType({ | ||||
|  | ||||
|   vcs { | ||||
|     root(DslContext.settingsRoot) | ||||
|     branchFilter = "+:<default>" | ||||
|  | ||||
|     checkoutMode = CheckoutMode.AUTO | ||||
|   } | ||||
| @@ -26,17 +28,19 @@ object LongRunning : BuildType({ | ||||
|       tasks = "clean testLongRunning" | ||||
|       buildFile = "" | ||||
|       enableStacktrace = true | ||||
|       param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL") | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   triggers { | ||||
|     vcs { | ||||
|       branchFilter = "" | ||||
|       enabled = false | ||||
|       branchFilter = "+:<default>" | ||||
|     } | ||||
|     schedule { | ||||
|       enabled = true | ||||
|       schedulingPolicy = daily { | ||||
|         hour = 5 | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   requirements { | ||||
|     noLessThanVer("teamcity.agent.jvm.version", "1.8") | ||||
|   } | ||||
| }) | ||||
							
								
								
									
										14
									
								
								.teamcity/_Self/buildTypes/Nvim.kt
									
									
									
									
										vendored
									
									
								
							
							
						
						| @@ -1,7 +1,7 @@ | ||||
| package _Self.buildTypes | ||||
|  | ||||
| import _Self.Constants.NVIM_TESTS | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType | ||||
| import _Self.IdeaVimBuildType | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle | ||||
| @@ -10,7 +10,7 @@ import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.BuildFailu | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.failOnMetricChange | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs | ||||
|  | ||||
| object Nvim : BuildType({ | ||||
| object Nvim : IdeaVimBuildType({ | ||||
|   name = "Tests with nvim" | ||||
|   description = "Running tests with nvim integration" | ||||
|  | ||||
| @@ -23,6 +23,7 @@ object Nvim : BuildType({ | ||||
|  | ||||
|   vcs { | ||||
|     root(DslContext.settingsRoot) | ||||
|     branchFilter = "+:<default>" | ||||
|  | ||||
|     checkoutMode = CheckoutMode.AUTO | ||||
|   } | ||||
| @@ -31,7 +32,7 @@ object Nvim : BuildType({ | ||||
|     script { | ||||
|       name = "Set up NeoVim" | ||||
|       scriptContent = """ | ||||
|               wget https://github.com/neovim/neovim/releases/download/v0.4.4/nvim-linux64.tar.gz | ||||
|               wget https://github.com/neovim/neovim/releases/download/v0.7.2/nvim-linux64.tar.gz | ||||
|               tar xzf nvim-linux64.tar.gz | ||||
|               cd nvim-linux64/bin | ||||
|               chmod +x nvim | ||||
| @@ -41,20 +42,15 @@ object Nvim : BuildType({ | ||||
|       tasks = "clean testWithNeovim" | ||||
|       buildFile = "" | ||||
|       enableStacktrace = true | ||||
|       param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL") | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   triggers { | ||||
|     vcs { | ||||
|       branchFilter = "" | ||||
|       branchFilter = "+:<default>" | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   requirements { | ||||
|     noLessThanVer("teamcity.agent.jvm.version", "1.8") | ||||
|   } | ||||
|  | ||||
|   failureConditions { | ||||
|     failOnMetricChange { | ||||
|       metric = BuildFailureOnMetric.MetricType.TEST_COUNT | ||||
|   | ||||
							
								
								
									
										12
									
								
								.teamcity/_Self/buildTypes/PluginVerifier.kt
									
									
									
									
										vendored
									
									
								
							
							
						
						| @@ -1,12 +1,12 @@ | ||||
| package _Self.buildTypes | ||||
|  | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType | ||||
| import _Self.IdeaVimBuildType | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs | ||||
|  | ||||
| object PluginVerifier : BuildType({ | ||||
| object PluginVerifier : IdeaVimBuildType({ | ||||
|   name = "Plugin verification" | ||||
|   params { | ||||
|     param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false") | ||||
| @@ -15,6 +15,7 @@ object PluginVerifier : BuildType({ | ||||
|  | ||||
|   vcs { | ||||
|     root(DslContext.settingsRoot) | ||||
|     branchFilter = "+:<default>" | ||||
|  | ||||
|     checkoutMode = CheckoutMode.AUTO | ||||
|   } | ||||
| @@ -24,17 +25,12 @@ object PluginVerifier : BuildType({ | ||||
|       tasks = "clean runPluginVerifier" | ||||
|       buildFile = "" | ||||
|       enableStacktrace = true | ||||
|       param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL") | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   triggers { | ||||
|     vcs { | ||||
|       branchFilter = "" | ||||
|       branchFilter = "+:<default>" | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   requirements { | ||||
|     noLessThanVer("teamcity.agent.jvm.version", "1.8") | ||||
|   } | ||||
| }) | ||||
|   | ||||
							
								
								
									
										12
									
								
								.teamcity/_Self/buildTypes/PropertyBased.kt
									
									
									
									
										vendored
									
									
								
							
							
						
						| @@ -1,13 +1,13 @@ | ||||
| package _Self.buildTypes | ||||
|  | ||||
| import _Self.Constants.PROPERTY_TESTS | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType | ||||
| import _Self.IdeaVimBuildType | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs | ||||
|  | ||||
| object PropertyBased : BuildType({ | ||||
| object PropertyBased : IdeaVimBuildType({ | ||||
|   name = "Property based tests" | ||||
|   params { | ||||
|     param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false") | ||||
| @@ -17,6 +17,7 @@ object PropertyBased : BuildType({ | ||||
|  | ||||
|   vcs { | ||||
|     root(DslContext.settingsRoot) | ||||
|     branchFilter = "+:<default>" | ||||
|  | ||||
|     checkoutMode = CheckoutMode.AUTO | ||||
|   } | ||||
| @@ -26,17 +27,12 @@ object PropertyBased : BuildType({ | ||||
|       tasks = "clean testPropertyBased" | ||||
|       buildFile = "" | ||||
|       enableStacktrace = true | ||||
|       param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL") | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   triggers { | ||||
|     vcs { | ||||
|       branchFilter = "" | ||||
|       branchFilter = "+:<default>" | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   requirements { | ||||
|     noLessThanVer("teamcity.agent.jvm.version", "1.8") | ||||
|   } | ||||
| }) | ||||
|   | ||||
							
								
								
									
										63
									
								
								.teamcity/_Self/buildTypes/PublishVimEngine.kt
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,63 @@ | ||||
| package _Self.buildTypes | ||||
|  | ||||
| import _Self.IdeaVimBuildType | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.ParameterDisplay | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.BuildFailureOnMetric | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.failOnMetricChange | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.ScheduleTrigger | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.schedule | ||||
|  | ||||
| object PublishVimEngine : IdeaVimBuildType({ | ||||
|   name = "Publish vim-engine" | ||||
|   description = "Build and publish vim-engine library" | ||||
|  | ||||
|   artifactRules = "build/distributions/*" | ||||
|   buildNumberPattern = "0.0.%build.counter%" | ||||
|  | ||||
|   params { | ||||
|     param("env.ORG_GRADLE_PROJECT_engineVersion", "%build.number%") | ||||
|     param("env.ORG_GRADLE_PROJECT_uploadUrl", "https://packages.jetbrains.team/maven/p/ij/intellij-dependencies") | ||||
|     password("env.ORG_GRADLE_PROJECT_spacePassword", "credentialsJSON:790b4e43-ee83-4184-b81b-678afab60409", display = ParameterDisplay.HIDDEN) | ||||
|     param("env.ORG_GRADLE_PROJECT_spaceUsername", "Aleksei.Plate") | ||||
|   } | ||||
|  | ||||
|   vcs { | ||||
|     root(DslContext.settingsRoot) | ||||
|     branchFilter = "+:<default>" | ||||
|  | ||||
|     checkoutMode = CheckoutMode.AUTO | ||||
|   } | ||||
|  | ||||
|   steps { | ||||
|     gradle { | ||||
|       tasks = ":vim-engine:publish" | ||||
|       buildFile = "" | ||||
|       enableStacktrace = true | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   triggers { | ||||
|     schedule { | ||||
|       enabled = true | ||||
|       schedulingPolicy = weekly { | ||||
|         dayOfWeek = ScheduleTrigger.DAY.Sunday | ||||
|       } | ||||
|       branchFilter = "" | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   failureConditions { | ||||
|     failOnMetricChange { | ||||
|       metric = BuildFailureOnMetric.MetricType.ARTIFACT_SIZE | ||||
|       threshold = 5 | ||||
|       units = BuildFailureOnMetric.MetricUnit.PERCENTS | ||||
|       comparison = BuildFailureOnMetric.MetricComparison.DIFF | ||||
|       compareTo = build { | ||||
|         buildRule = lastSuccessful() | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| }) | ||||
							
								
								
									
										63
									
								
								.teamcity/_Self/buildTypes/Qodana.kt
									
									
									
									
										vendored
									
									
								
							
							
						
						| @@ -1,17 +1,18 @@ | ||||
| package _Self.buildTypes | ||||
|  | ||||
| import _Self.Constants.QODANA_TESTS | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType | ||||
| import _Self.IdeaVimBuildType | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.Qodana | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.qodana | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.BuildFailureOnMetric | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.failOnMetricChange | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.ScheduleTrigger | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.schedule | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs | ||||
|  | ||||
| object Qodana : BuildType({ | ||||
| object Qodana : IdeaVimBuildType({ | ||||
|   name = "Qodana checks" | ||||
|   params { | ||||
|     param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false") | ||||
| @@ -21,45 +22,48 @@ object Qodana : BuildType({ | ||||
|  | ||||
|   vcs { | ||||
|     root(DslContext.settingsRoot) | ||||
|     branchFilter = "+:<default>" | ||||
|  | ||||
|     checkoutMode = CheckoutMode.AUTO | ||||
|   } | ||||
|  | ||||
|   steps { | ||||
|     gradle { | ||||
|       name = "Generate grammar" | ||||
|       tasks = "generateGrammarSource" | ||||
|     } | ||||
|     qodana { | ||||
|       name = "Qodana" | ||||
| /* | ||||
|       reportAsTestsEnable = "" | ||||
|       failBuildOnErrors = "" | ||||
|       codeInspectionXmlConfig = "Custom" | ||||
|       codeInspectionCustomXmlConfigPath = ".idea/inspectionProfiles/Qodana.xml" | ||||
|       reportAsTestsEnable = "true" | ||||
| */ | ||||
|       clearConditions() | ||||
|       param("licenseaudit-enable", "true") | ||||
|       param("clonefinder-languages", "Java") | ||||
|       param("clonefinder-mode", "") | ||||
|       param("report-version", "") | ||||
|       param("clonefinder-languages-container", "Java Kotlin") | ||||
|       param("namesAndTagsCustom", "repo.labs.intellij.net/static-analyser/qodana") | ||||
|       param("clonefinder-queried-project", "src") | ||||
|       param("clonefinder-enable", "true") | ||||
|       param("clonefinder-reference-projects", "src") | ||||
|       param("yaml-configuration", "") | ||||
|       param("clonefinder-languages", "") | ||||
|       param("collect-anonymous-statistics", "") | ||||
|       param("licenseaudit-enable", "") | ||||
|       param("clonefinder-languages-container", "") | ||||
|       param("linterVersion", "") | ||||
|       param("clonefinder-queried-project", "") | ||||
|       param("clonefinder-enable", "") | ||||
|       param("clonefinder-reference-projects", "") | ||||
|       linter = jvm { | ||||
|         version = Qodana.JVMVersion.LATEST | ||||
|       } | ||||
|       reportAsTests = true | ||||
|       additionalDockerArguments = "-e QODANA_TOKEN=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJvcmdhbml6YXRpb24iOiIzUFZrQSIsInByb2plY3QiOiIzN1FlQSIsInRva2VuIjoiM0t2bXoifQ.uohp81tM7iAfvvB6k8faarfpV-OjusAaEbWQ8iNrOgs" | ||||
|       additionalQodanaArguments = "--baseline qodana.sarif.json" | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   triggers { | ||||
|     vcs { | ||||
|       enabled = false | ||||
|       branchFilter = "" | ||||
|       branchFilter = "+:<default>" | ||||
|     } | ||||
|     schedule { | ||||
|       schedulingPolicy = weekly { | ||||
|         dayOfWeek = ScheduleTrigger.DAY.Tuesday | ||||
|       schedulingPolicy = daily { | ||||
|         hour = 12 | ||||
|         minute = 0 | ||||
|         timezone = "SERVER" | ||||
|       } | ||||
|       branchFilter = "" | ||||
|       triggerBuild = always() | ||||
|       param("dayOfWeek", "Sunday") | ||||
|       enabled = false | ||||
|     } | ||||
|   } | ||||
|  | ||||
| @@ -70,11 +74,8 @@ object Qodana : BuildType({ | ||||
|       comparison = BuildFailureOnMetric.MetricComparison.MORE | ||||
|       compareTo = value() | ||||
|       metric = BuildFailureOnMetric.MetricType.TEST_FAILED_COUNT | ||||
|       param("metricKey", "QodanaProblemsTotal") | ||||
|       param("metricKey", "QodanaProblemsNew") | ||||
|       enabled = false | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   requirements { | ||||
|     noLessThanVer("teamcity.agent.jvm.version", "1.8") | ||||
|   } | ||||
| }) | ||||
|   | ||||
							
								
								
									
										76
									
								
								.teamcity/_Self/buildTypes/Release.kt
									
									
									
									
										vendored
									
									
								
							
							
						
						| @@ -1,76 +0,0 @@ | ||||
| package _Self.buildTypes | ||||
|  | ||||
| import _Self.Constants.DEFAULT_CHANNEL | ||||
| import _Self.Constants.DEV_CHANNEL | ||||
| import _Self.Constants.EAP_CHANNEL | ||||
| import _Self.Constants.RELEASE | ||||
| import _Self.Constants.VERSION | ||||
| import _Self.vcsRoots.Branch_Release | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.buildFeatures.vcsLabeling | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.BuildFailureOnMetric | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.failOnMetricChange | ||||
|  | ||||
| object Release : BuildType({ | ||||
|   name = "Publish Release" | ||||
|   description = "Build and publish IdeaVim plugin" | ||||
|  | ||||
|   artifactRules = "build/distributions/*" | ||||
|   buildNumberPattern = VERSION | ||||
|  | ||||
|   params { | ||||
|     param("env.ORG_GRADLE_PROJECT_ideaVersion", RELEASE) | ||||
|     password( | ||||
|       "env.ORG_GRADLE_PROJECT_publishToken", | ||||
|       "credentialsJSON:61a36031-4da1-4226-a876-b8148bf32bde", | ||||
|       label = "Password" | ||||
|     ) | ||||
|     param("env.ORG_GRADLE_PROJECT_version", "%build.number%") | ||||
|     param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false") | ||||
|     param("env.ORG_GRADLE_PROJECT_publishChannels", "$DEFAULT_CHANNEL,$EAP_CHANNEL,$DEV_CHANNEL") | ||||
|     password( | ||||
|       "env.ORG_GRADLE_PROJECT_slackUrl", | ||||
|       "credentialsJSON:a8ab8150-e6f8-4eaf-987c-bcd65eac50b5", | ||||
|       label = "Slack Token" | ||||
|     ) | ||||
|   } | ||||
|  | ||||
|   vcs { | ||||
|     root(Branch_Release) | ||||
|  | ||||
|     checkoutMode = CheckoutMode.AUTO | ||||
|   } | ||||
|  | ||||
|   steps { | ||||
|     gradle { | ||||
|       tasks = "clean publishPlugin slackNotification" | ||||
|       buildFile = "" | ||||
|       enableStacktrace = true | ||||
|       param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL") | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   features { | ||||
|     vcsLabeling { | ||||
|       vcsRootId = "${DslContext.settingsRoot.id}" | ||||
|       labelingPattern = "%system.build.number%" | ||||
|       successfulOnly = true | ||||
|       branchFilter = "" | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   failureConditions { | ||||
|     failOnMetricChange { | ||||
|       metric = BuildFailureOnMetric.MetricType.ARTIFACT_SIZE | ||||
|       threshold = 5 | ||||
|       units = BuildFailureOnMetric.MetricUnit.PERCENTS | ||||
|       comparison = BuildFailureOnMetric.MetricComparison.DIFF | ||||
|       compareTo = build { | ||||
|         buildRule = lastSuccessful() | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| }) | ||||
							
								
								
									
										38
									
								
								.teamcity/_Self/buildTypes/ReleaseDev.kt
									
									
									
									
										vendored
									
									
								
							
							
						
						| @@ -1,22 +1,22 @@ | ||||
| package _Self.buildTypes | ||||
|  | ||||
| import _Self.Constants.DEV_CHANNEL | ||||
| import _Self.Constants.DEV_VERSION | ||||
| import _Self.Constants.RELEASE_DEV | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType | ||||
| import _Self.IdeaVimBuildType | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.buildFeatures.sshAgent | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.script | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.BuildFailureOnMetric | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.failOnMetricChange | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.schedule | ||||
|  | ||||
| object ReleaseDev : BuildType({ | ||||
| object ReleaseDev : IdeaVimBuildType({ | ||||
|   name = "Publish Dev Build" | ||||
|   description = "Build and publish Dev of IdeaVim plugin" | ||||
|  | ||||
|   artifactRules = "build/distributions/*" | ||||
|   buildNumberPattern = "$DEV_VERSION-dev.%build.counter%" | ||||
|  | ||||
|   params { | ||||
|     param("env.ORG_GRADLE_PROJECT_ideaVersion", RELEASE_DEV) | ||||
| @@ -25,23 +25,35 @@ object ReleaseDev : BuildType({ | ||||
|       "credentialsJSON:61a36031-4da1-4226-a876-b8148bf32bde", | ||||
|       label = "Password" | ||||
|     ) | ||||
|     param("env.ORG_GRADLE_PROJECT_version", "%build.number%") | ||||
|     param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false") | ||||
|     param("env.ORG_GRADLE_PROJECT_publishChannels", DEV_CHANNEL) | ||||
|   } | ||||
|  | ||||
|   vcs { | ||||
|     root(DslContext.settingsRoot) | ||||
|     branchFilter = "+:<default>" | ||||
|  | ||||
|     checkoutMode = CheckoutMode.AUTO | ||||
|   } | ||||
|  | ||||
|   steps { | ||||
|     script { | ||||
|       name = "Pull git tags" | ||||
|       scriptContent = "git fetch --tags origin" | ||||
|     } | ||||
|     script { | ||||
|       name = "Pull git history" | ||||
|       scriptContent = "git fetch --unshallow" | ||||
|     } | ||||
|     gradle { | ||||
|       tasks = "clean publishPlugin" | ||||
|       buildFile = "" | ||||
|       enableStacktrace = true | ||||
|       param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL") | ||||
|       name = "Calculate new dev version" | ||||
|       tasks = "scripts:calculateNewDevVersion" | ||||
|     } | ||||
|     gradle { | ||||
|       name = "Set TeamCity build number" | ||||
|       tasks = "scripts:setTeamCityBuildNumber" | ||||
|     } | ||||
|     gradle { | ||||
|       tasks = "publishPlugin" | ||||
|     } | ||||
|   } | ||||
|  | ||||
| @@ -55,6 +67,12 @@ object ReleaseDev : BuildType({ | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   features { | ||||
|     sshAgent { | ||||
|       teamcitySshKey = "IdeaVim ssh keys" | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   failureConditions { | ||||
|     failOnMetricChange { | ||||
|       metric = BuildFailureOnMetric.MetricType.ARTIFACT_SIZE | ||||
|   | ||||
							
								
								
									
										70
									
								
								.teamcity/_Self/buildTypes/ReleaseEap.kt
									
									
									
									
										vendored
									
									
								
							
							
						
						| @@ -1,22 +1,21 @@ | ||||
| package _Self.buildTypes | ||||
|  | ||||
| import _Self.Constants.DEV_VERSION | ||||
| import _Self.Constants.EAP_CHANNEL | ||||
| import _Self.Constants.RELEASE_EAP | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType | ||||
| import _Self.IdeaVimBuildType | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.buildFeatures.vcsLabeling | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.buildFeatures.sshAgent | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.script | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.BuildFailureOnMetric | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.failOnMetricChange | ||||
|  | ||||
| object ReleaseEap : BuildType({ | ||||
| object ReleaseEap : IdeaVimBuildType({ | ||||
|   name = "Publish EAP Build" | ||||
|   description = "Build and publish EAP of IdeaVim plugin" | ||||
|  | ||||
|   artifactRules = "build/distributions/*" | ||||
|   buildNumberPattern = "$DEV_VERSION-eap.%build.counter%" | ||||
|  | ||||
|   params { | ||||
|     param("env.ORG_GRADLE_PROJECT_ideaVersion", RELEASE_EAP) | ||||
| @@ -25,8 +24,6 @@ object ReleaseEap : BuildType({ | ||||
|       "credentialsJSON:61a36031-4da1-4226-a876-b8148bf32bde", | ||||
|       label = "Password" | ||||
|     ) | ||||
|     param("env.ORG_GRADLE_PROJECT_version", "%build.number%") | ||||
|     param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false") | ||||
|     param("env.ORG_GRADLE_PROJECT_publishChannels", EAP_CHANNEL) | ||||
|     password( | ||||
|       "env.ORG_GRADLE_PROJECT_slackUrl", | ||||
| @@ -37,25 +34,58 @@ object ReleaseEap : BuildType({ | ||||
|  | ||||
|   vcs { | ||||
|     root(DslContext.settingsRoot) | ||||
|     branchFilter = "+:<default>" | ||||
|  | ||||
|     checkoutMode = CheckoutMode.AUTO | ||||
|   } | ||||
|  | ||||
|   steps { | ||||
|     script { | ||||
|       name = "Pull git tags" | ||||
|       scriptContent = "git fetch --tags origin" | ||||
|     } | ||||
|     script { | ||||
|       name = "Pull git history" | ||||
|       scriptContent = "git fetch --unshallow" | ||||
|     } | ||||
|     gradle { | ||||
|       tasks = "clean publishPlugin" | ||||
|       buildFile = "" | ||||
|       enableStacktrace = true | ||||
|       param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL") | ||||
|       name = "Calculate new eap version" | ||||
|       tasks = "scripts:calculateNewEapVersion" | ||||
|     } | ||||
|     gradle { | ||||
|       name = "Set TeamCity build number" | ||||
|       tasks = "scripts:setTeamCityBuildNumber" | ||||
|     } | ||||
|     gradle { | ||||
|       name = "Add release tag" | ||||
|       tasks = "scripts:addReleaseTag" | ||||
|     } | ||||
|     gradle { | ||||
|       tasks = "publishPlugin" | ||||
|     } | ||||
|     // Same as the script below. However, jgit can't find ssh keys on TeamCity | ||||
| //    gradle { | ||||
| //      name = "Push changes to the repo" | ||||
| //      tasks = "scripts:pushChanges" | ||||
| //    } | ||||
|     script { | ||||
|       name = "Push changes to the repo" | ||||
|       scriptContent = """ | ||||
|       branch=$(git branch --show-current)   | ||||
|       echo current branch is ${'$'}branch | ||||
|       if [ "master" != "${'$'}branch" ]; | ||||
|       then | ||||
|         exit 1 | ||||
|       fi | ||||
|        | ||||
|       git push origin %build.number% | ||||
|       """.trimIndent() | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   features { | ||||
|     vcsLabeling { | ||||
|       vcsRootId = "${DslContext.settingsRoot.id}" | ||||
|       labelingPattern = "%system.build.number%" | ||||
|       successfulOnly = true | ||||
|       branchFilter = "" | ||||
|     sshAgent { | ||||
|       teamcitySshKey = "IdeaVim ssh keys" | ||||
|     } | ||||
|   } | ||||
|  | ||||
| @@ -70,4 +100,12 @@ object ReleaseEap : BuildType({ | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   requirements { | ||||
|     // These requirements define Linux-XLarge configuration. | ||||
|     // Unfortunately, requirement by name (teamcity.agent.name) doesn't work | ||||
|     //   IDK the reason for it, but on our agents this property is empty | ||||
| //    equals("teamcity.agent.hardware.cpuCount", "16") | ||||
| //    equals("teamcity.agent.os.family", "Linux") | ||||
|   } | ||||
| }) | ||||
|   | ||||
							
								
								
									
										156
									
								
								.teamcity/_Self/buildTypes/ReleasePlugin.kt
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,156 @@ | ||||
| /* | ||||
|  * Copyright 2003-2023 The IdeaVim authors | ||||
|  * | ||||
|  * Use of this source code is governed by an MIT-style | ||||
|  * license that can be found in the LICENSE.txt file or at | ||||
|  * https://opensource.org/licenses/MIT. | ||||
|  */ | ||||
|  | ||||
| package _Self.buildTypes | ||||
|  | ||||
| import _Self.Constants.DEFAULT_CHANNEL | ||||
| import _Self.Constants.DEV_CHANNEL | ||||
| import _Self.Constants.EAP_CHANNEL | ||||
| import _Self.Constants.RELEASE | ||||
| import _Self.IdeaVimBuildType | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.ParameterDisplay | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.buildFeatures.sshAgent | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.script | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.BuildFailureOnMetric | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.failOnMetricChange | ||||
|  | ||||
| object ReleaseMajor : ReleasePlugin("major") | ||||
| object ReleaseMinor : ReleasePlugin("minor") | ||||
| object ReleasePatch : ReleasePlugin("patch") | ||||
|  | ||||
| sealed class ReleasePlugin(private val releaseType: String) : IdeaVimBuildType({ | ||||
|   name = "Publish $releaseType release" | ||||
|   description = "Build and publish IdeaVim plugin" | ||||
|  | ||||
|   artifactRules = "build/distributions/*" | ||||
|  | ||||
|   params { | ||||
|     param("env.ORG_GRADLE_PROJECT_ideaVersion", RELEASE) | ||||
|     password( | ||||
|       "env.ORG_GRADLE_PROJECT_publishToken", | ||||
|       "credentialsJSON:61a36031-4da1-4226-a876-b8148bf32bde", | ||||
|       label = "Password" | ||||
|     ) | ||||
|     param("env.ORG_GRADLE_PROJECT_publishChannels", "$DEFAULT_CHANNEL,$EAP_CHANNEL,$DEV_CHANNEL") | ||||
|     password( | ||||
|       "env.ORG_GRADLE_PROJECT_slackUrl", | ||||
|       "credentialsJSON:a8ab8150-e6f8-4eaf-987c-bcd65eac50b5", | ||||
|       label = "Slack Token" | ||||
|     ) | ||||
|     password("env.ORG_GRADLE_PROJECT_youtrackToken", "credentialsJSON:3cd3e867-282c-451f-b958-bc95d56a8450", display = ParameterDisplay.HIDDEN) | ||||
|     param("env.ORG_GRADLE_PROJECT_releaseType", releaseType) | ||||
|   } | ||||
|  | ||||
|   vcs { | ||||
|     root(DslContext.settingsRoot) | ||||
|     branchFilter = "+:<default>" | ||||
|  | ||||
|     checkoutMode = CheckoutMode.AUTO | ||||
|   } | ||||
|  | ||||
|   steps { | ||||
|     script { | ||||
|       name = "Pull git tags" | ||||
|       scriptContent = "git fetch --tags origin" | ||||
|     } | ||||
|     script { | ||||
|       name = "Pull git history" | ||||
|       scriptContent = "git fetch --unshallow" | ||||
|     } | ||||
|     gradle { | ||||
|       name = "Select branch" | ||||
|       tasks = "scripts:selectBranch" | ||||
|     } | ||||
|     gradle { | ||||
|       name = "Calculate new version" | ||||
|       tasks = "scripts:calculateNewVersion" | ||||
|     } | ||||
|     gradle { | ||||
|       name = "Set TeamCity build number" | ||||
|       tasks = "scripts:setTeamCityBuildNumber" | ||||
|     } | ||||
|     gradle { | ||||
|       name = "Update change log" | ||||
|       tasks = "scripts:changelogUpdateUnreleased" | ||||
|     } | ||||
|     gradle { | ||||
|       name = "Commit preparation changes" | ||||
|       tasks = "scripts:commitChanges" | ||||
|     } | ||||
|     gradle { | ||||
|       name = "Add release tag" | ||||
|       tasks = "scripts:addReleaseTag" | ||||
|     } | ||||
|     gradle { | ||||
|       name = "Reset release branch" | ||||
|       tasks = "scripts:resetReleaseBranch" | ||||
|     } | ||||
|     gradle { | ||||
|       name = "Publish release" | ||||
|       tasks = "publishPlugin" | ||||
|     } | ||||
| //    gradle { | ||||
| //      name = "Push changes to the repo" | ||||
| //      tasks = "scripts:pushChangesWithReleaseBranch" | ||||
| //    } | ||||
|     script { | ||||
|       name = "Push changes to the repo" | ||||
|       scriptContent = """ | ||||
|       branch=$(git branch --show-current)   | ||||
|       echo current branch is ${'$'}branch | ||||
|       if [ "master" != "${'$'}branch" ]; | ||||
|       then | ||||
|         git checkout master | ||||
|       fi | ||||
|        | ||||
|       git push origin --tags | ||||
|       git push origin | ||||
|        | ||||
|       if [ "patch" != $releaseType  ]; | ||||
|       then | ||||
|         git checkout release | ||||
|         echo checkout release branch | ||||
|         git branch --set-upstream-to=origin/release release | ||||
|         git push --tags | ||||
|         git push origin --force | ||||
|       fi | ||||
|        | ||||
|       git checkout ${'$'}branch | ||||
|       """.trimIndent() | ||||
|     } | ||||
|     gradle { | ||||
|       name = "Run Integrations" | ||||
|       tasks = "releaseActions" | ||||
|     } | ||||
|     gradle { | ||||
|       name = "Slack Notification" | ||||
|       tasks = "slackNotification" | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   features { | ||||
|     sshAgent { | ||||
|       teamcitySshKey = "IdeaVim ssh keys" | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   failureConditions { | ||||
|     failOnMetricChange { | ||||
|       metric = BuildFailureOnMetric.MetricType.ARTIFACT_SIZE | ||||
|       threshold = 5 | ||||
|       units = BuildFailureOnMetric.MetricUnit.PERCENTS | ||||
|       comparison = BuildFailureOnMetric.MetricComparison.DIFF | ||||
|       compareTo = build { | ||||
|         buildRule = lastSuccessful() | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| }) | ||||
| @@ -1,6 +1,8 @@ | ||||
| @file:Suppress("ClassName") | ||||
| 
 | ||||
| package _Self.buildTypes | ||||
| 
 | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType | ||||
| import _Self.IdeaVimBuildType | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle | ||||
| @@ -8,39 +10,47 @@ import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.BuildFailu | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.failOnMetricChange | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs | ||||
| 
 | ||||
| sealed class ActiveTests(buildName: String, ijVersion: String) : BuildType({ | ||||
|   name = buildName | ||||
| open class TestingBuildType( | ||||
|   private val testName: String, | ||||
|   private val branch: String, | ||||
|   private val version: String = testName, | ||||
|   private val javaVersion: String? = null, | ||||
|   private val javaPlugin: Boolean = true, | ||||
| ) : IdeaVimBuildType({ | ||||
|   id("IdeaVimTests_${testName.vanish()}") | ||||
|   name = "Tests for IntelliJ $testName" | ||||
| 
 | ||||
|   params { | ||||
|     param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false") | ||||
|     param("env.ORG_GRADLE_PROJECT_ideaVersion", ijVersion) | ||||
|     param("env.ORG_GRADLE_PROJECT_legacyNoJavaPlugin", javaPlugin.not().toString()) | ||||
|     param("env.ORG_GRADLE_PROJECT_ideaVersion", version) | ||||
|     param("env.ORG_GRADLE_PROJECT_instrumentPluginCode", "false") | ||||
|     if (javaVersion != null) { | ||||
|       param("env.ORG_GRADLE_PROJECT_javaVersion", javaVersion) | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   vcs { | ||||
|     root(DslContext.settingsRoot) | ||||
|     branchFilter = "+:$branch" | ||||
| 
 | ||||
|     checkoutMode = CheckoutMode.AUTO | ||||
|   } | ||||
| 
 | ||||
|   steps { | ||||
|     gradle { | ||||
|       tasks = "clean check -x ktlintMainSourceSetCheck -x ktlintTestSourceSetCheck" | ||||
|       tasks = "clean test" | ||||
|       buildFile = "" | ||||
|       enableStacktrace = true | ||||
|       param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL") | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   triggers { | ||||
|     vcs { | ||||
|       branchFilter = "" | ||||
|       branchFilter = "+:$branch" | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   requirements { | ||||
|     noLessThanVer("teamcity.agent.jvm.version", "1.8") | ||||
|   } | ||||
| 
 | ||||
|   failureConditions { | ||||
|     failOnMetricChange { | ||||
|       metric = BuildFailureOnMetric.MetricType.TEST_COUNT | ||||
| @@ -54,5 +64,9 @@ sealed class ActiveTests(buildName: String, ijVersion: String) : BuildType({ | ||||
|   } | ||||
| }) | ||||
| 
 | ||||
| object TestsForIntelliJEAP : ActiveTests("Tests for IntelliJ Latest EAP", "LATEST-EAP-SNAPSHOT") | ||||
| object TestsForIntelliJ20213 : ActiveTests("Tests for IntelliJ 2021.3", "2021.3.2") | ||||
| private fun String.vanish(): String { | ||||
|   return this | ||||
|     .replace(' ', '_') | ||||
|     .replace('.', '_') | ||||
|     .replace('-', '_') | ||||
| } | ||||
| @@ -1,58 +0,0 @@ | ||||
| package _Self.buildTypes | ||||
|  | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.BuildFailureOnMetric | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.failOnMetricChange | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs | ||||
|  | ||||
| object TestsForIntelliJ20183 : BuildType({ | ||||
|   name = "Tests for IntelliJ 2018.3" | ||||
|   description = "branch 183" | ||||
|  | ||||
|   params { | ||||
|     param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false") | ||||
|     param("env.ORG_GRADLE_PROJECT_legacyNoJavaPlugin", "true") | ||||
|     param("env.ORG_GRADLE_PROJECT_ideaVersion", "IC-2018.3") | ||||
|     param("env.ORG_GRADLE_PROJECT_instrumentPluginCode", "false") | ||||
|     param("env.ORG_GRADLE_PROJECT_javaVersion", "1.8") | ||||
|   } | ||||
|  | ||||
|   vcs { | ||||
|     root(_Self.vcsRoots.Branch_183) | ||||
|  | ||||
|     checkoutMode = CheckoutMode.AUTO | ||||
|   } | ||||
|  | ||||
|   steps { | ||||
|     gradle { | ||||
|       tasks = "clean test" | ||||
|       buildFile = "" | ||||
|       enableStacktrace = true | ||||
|       param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL") | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   triggers { | ||||
|     vcs { | ||||
|       branchFilter = "" | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   requirements { | ||||
|     noLessThanVer("teamcity.agent.jvm.version", "1.8") | ||||
|   } | ||||
|  | ||||
|   failureConditions { | ||||
|     failOnMetricChange { | ||||
|       metric = BuildFailureOnMetric.MetricType.TEST_COUNT | ||||
|       threshold = 20 | ||||
|       units = BuildFailureOnMetric.MetricUnit.PERCENTS | ||||
|       comparison = BuildFailureOnMetric.MetricComparison.LESS | ||||
|       compareTo = build { | ||||
|         buildRule = lastSuccessful() | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| }) | ||||
| @@ -1,61 +0,0 @@ | ||||
| @file:Suppress("ClassName") | ||||
|  | ||||
| package _Self.buildTypes | ||||
|  | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.BuildFailureOnMetric | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.failOnMetricChange | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs | ||||
|  | ||||
| sealed class TestsForIntelliJ_181_branch(private val version: String) : BuildType({ | ||||
|   name = "Tests for IntelliJ $version" | ||||
|  | ||||
|   params { | ||||
|     param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false") | ||||
|     param("env.ORG_GRADLE_PROJECT_ideaVersion", "IC-$version") | ||||
|     param("env.ORG_GRADLE_PROJECT_instrumentPluginCode", "false") | ||||
|     param("env.ORG_GRADLE_PROJECT_javaVersion", "1.8") | ||||
|   } | ||||
|  | ||||
|   vcs { | ||||
|     root(_Self.vcsRoots.Branch_181) | ||||
|  | ||||
|     checkoutMode = CheckoutMode.AUTO | ||||
|   } | ||||
|  | ||||
|   steps { | ||||
|     gradle { | ||||
|       tasks = "clean test" | ||||
|       buildFile = "" | ||||
|       enableStacktrace = true | ||||
|       param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL") | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   triggers { | ||||
|     vcs { | ||||
|       branchFilter = "" | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   requirements { | ||||
|     noLessThanVer("teamcity.agent.jvm.version", "1.8") | ||||
|   } | ||||
|  | ||||
|   failureConditions { | ||||
|     failOnMetricChange { | ||||
|       metric = BuildFailureOnMetric.MetricType.TEST_COUNT | ||||
|       threshold = 20 | ||||
|       units = BuildFailureOnMetric.MetricUnit.PERCENTS | ||||
|       comparison = BuildFailureOnMetric.MetricComparison.LESS | ||||
|       compareTo = build { | ||||
|         buildRule = lastSuccessful() | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| }) | ||||
|  | ||||
| object TestsForIntelliJ20181 : TestsForIntelliJ_181_branch("2018.1") | ||||
| object TestsForIntelliJ20182 : TestsForIntelliJ_181_branch("2018.2") | ||||
| @@ -1,63 +0,0 @@ | ||||
| @file:Suppress("ClassName") | ||||
|  | ||||
| package _Self.buildTypes | ||||
|  | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.BuildFailureOnMetric | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.failOnMetricChange | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs | ||||
|  | ||||
| sealed class TestsForIntelliJ_191_193_branch(private val version: String) : BuildType({ | ||||
|   name = "Tests for IntelliJ $version" | ||||
|  | ||||
|   params { | ||||
|     param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false") | ||||
|     param("env.ORG_GRADLE_PROJECT_legacyNoJavaPlugin", "true") | ||||
|     param("env.ORG_GRADLE_PROJECT_ideaVersion", "IC-$version") | ||||
|     param("env.ORG_GRADLE_PROJECT_instrumentPluginCode", "false") | ||||
|     param("env.ORG_GRADLE_PROJECT_javaVersion", "1.8") | ||||
|   } | ||||
|  | ||||
|   vcs { | ||||
|     root(_Self.vcsRoots.Branch_191_193) | ||||
|  | ||||
|     checkoutMode = CheckoutMode.AUTO | ||||
|   } | ||||
|  | ||||
|   steps { | ||||
|     gradle { | ||||
|       tasks = "clean test" | ||||
|       buildFile = "" | ||||
|       enableStacktrace = true | ||||
|       param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL") | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   triggers { | ||||
|     vcs { | ||||
|       branchFilter = "" | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   requirements { | ||||
|     noLessThanVer("teamcity.agent.jvm.version", "1.8") | ||||
|   } | ||||
|  | ||||
|   failureConditions { | ||||
|     failOnMetricChange { | ||||
|       metric = BuildFailureOnMetric.MetricType.TEST_COUNT | ||||
|       threshold = 20 | ||||
|       units = BuildFailureOnMetric.MetricUnit.PERCENTS | ||||
|       comparison = BuildFailureOnMetric.MetricComparison.LESS | ||||
|       compareTo = build { | ||||
|         buildRule = lastSuccessful() | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| }) | ||||
|  | ||||
| object TestsForIntelliJ20191 : TestsForIntelliJ_191_193_branch("2019.1") | ||||
| object TestsForIntelliJ20192 : TestsForIntelliJ_191_193_branch("2019.2") | ||||
| object TestsForIntelliJ20193 : TestsForIntelliJ_191_193_branch("2019.3") | ||||
| @@ -1,60 +0,0 @@ | ||||
| @file:Suppress("ClassName") | ||||
|  | ||||
| package _Self.buildTypes | ||||
|  | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.BuildFailureOnMetric | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.failOnMetricChange | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs | ||||
|  | ||||
| sealed class TestsForIntelliJ_201_branch(private val version: String) : BuildType({ | ||||
|   name = "Tests for IntelliJ $version" | ||||
|  | ||||
|   params { | ||||
|     param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false") | ||||
|     param("env.ORG_GRADLE_PROJECT_ideaVersion", "IC-$version") | ||||
|     param("env.ORG_GRADLE_PROJECT_instrumentPluginCode", "false") | ||||
|     param("env.ORG_GRADLE_PROJECT_javaVersion", "1.8") | ||||
|   } | ||||
|  | ||||
|   vcs { | ||||
|     root(_Self.vcsRoots.Branch_201) | ||||
|  | ||||
|     checkoutMode = CheckoutMode.AUTO | ||||
|   } | ||||
|  | ||||
|   steps { | ||||
|     gradle { | ||||
|       tasks = "clean test" | ||||
|       buildFile = "" | ||||
|       enableStacktrace = true | ||||
|       param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL") | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   triggers { | ||||
|     vcs { | ||||
|       branchFilter = "" | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   requirements { | ||||
|     noLessThanVer("teamcity.agent.jvm.version", "1.8") | ||||
|   } | ||||
|  | ||||
|   failureConditions { | ||||
|     failOnMetricChange { | ||||
|       metric = BuildFailureOnMetric.MetricType.TEST_COUNT | ||||
|       threshold = 20 | ||||
|       units = BuildFailureOnMetric.MetricUnit.PERCENTS | ||||
|       comparison = BuildFailureOnMetric.MetricComparison.LESS | ||||
|       compareTo = build { | ||||
|         buildRule = lastSuccessful() | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| }) | ||||
|  | ||||
| object TestsForIntelliJ20201 : TestsForIntelliJ_201_branch("2020.1") | ||||
| @@ -1,60 +0,0 @@ | ||||
| @file:Suppress("ClassName") | ||||
|  | ||||
| package _Self.buildTypes | ||||
|  | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.BuildFailureOnMetric | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.failOnMetricChange | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs | ||||
|  | ||||
| sealed class TestsForIntelliJ_202_branch(private val version: String) : BuildType({ | ||||
|   name = "Tests for IntelliJ $version" | ||||
|  | ||||
|   params { | ||||
|     param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false") | ||||
|     param("env.ORG_GRADLE_PROJECT_ideaVersion", "IC-$version") | ||||
|     param("env.ORG_GRADLE_PROJECT_instrumentPluginCode", "false") | ||||
|     param("env.ORG_GRADLE_PROJECT_javaVersion", "1.8") | ||||
|   } | ||||
|  | ||||
|   vcs { | ||||
|     root(_Self.vcsRoots.Branch_202) | ||||
|  | ||||
|     checkoutMode = CheckoutMode.AUTO | ||||
|   } | ||||
|  | ||||
|   steps { | ||||
|     gradle { | ||||
|       tasks = "clean test" | ||||
|       buildFile = "" | ||||
|       enableStacktrace = true | ||||
|       param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL") | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   triggers { | ||||
|     vcs { | ||||
|       branchFilter = "" | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   requirements { | ||||
|     noLessThanVer("teamcity.agent.jvm.version", "1.8") | ||||
|   } | ||||
|  | ||||
|   failureConditions { | ||||
|     failOnMetricChange { | ||||
|       metric = BuildFailureOnMetric.MetricType.TEST_COUNT | ||||
|       threshold = 20 | ||||
|       units = BuildFailureOnMetric.MetricUnit.PERCENTS | ||||
|       comparison = BuildFailureOnMetric.MetricComparison.LESS | ||||
|       compareTo = build { | ||||
|         buildRule = lastSuccessful() | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| }) | ||||
|  | ||||
| object TestsForIntelliJ20202 : TestsForIntelliJ_202_branch("2020.2") | ||||
| @@ -1,64 +0,0 @@ | ||||
| @file:Suppress("ClassName") | ||||
|  | ||||
| package _Self.buildTypes | ||||
|  | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.BuildFailureOnMetric | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.failOnMetricChange | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs | ||||
|  | ||||
| sealed class TestsForIntelliJ_203_212_branch(private val version: String) : BuildType({ | ||||
|   name = "Tests for IntelliJ $version" | ||||
|  | ||||
|   params { | ||||
|     param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false") | ||||
|     param("env.ORG_GRADLE_PROJECT_legacyNoJavaPlugin", "true") | ||||
|     param("env.ORG_GRADLE_PROJECT_ideaVersion", "IC-$version") | ||||
|     param("env.ORG_GRADLE_PROJECT_instrumentPluginCode", "false") | ||||
|     param("env.ORG_GRADLE_PROJECT_javaVersion", "1.8") | ||||
|   } | ||||
|  | ||||
|   vcs { | ||||
|     root(_Self.vcsRoots.Branch_203_212) | ||||
|  | ||||
|     checkoutMode = CheckoutMode.AUTO | ||||
|   } | ||||
|  | ||||
|   steps { | ||||
|     gradle { | ||||
|       tasks = "clean test" | ||||
|       buildFile = "" | ||||
|       enableStacktrace = true | ||||
|       param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL") | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   triggers { | ||||
|     vcs { | ||||
|       branchFilter = "" | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   requirements { | ||||
|     noLessThanVer("teamcity.agent.jvm.version", "1.8") | ||||
|   } | ||||
|  | ||||
|   failureConditions { | ||||
|     failOnMetricChange { | ||||
|       metric = BuildFailureOnMetric.MetricType.TEST_COUNT | ||||
|       threshold = 20 | ||||
|       units = BuildFailureOnMetric.MetricUnit.PERCENTS | ||||
|       comparison = BuildFailureOnMetric.MetricComparison.LESS | ||||
|       compareTo = build { | ||||
|         buildRule = lastSuccessful() | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| }) | ||||
|  | ||||
|  | ||||
| object TestsForIntelliJ20212 : TestsForIntelliJ_203_212_branch("2021.2.2") | ||||
| object TestsForIntelliJ20211 : TestsForIntelliJ_203_212_branch("2021.1") | ||||
| object TestsForIntelliJ20203 : TestsForIntelliJ_203_212_branch("2020.3") | ||||
							
								
								
									
										71
									
								
								.teamcity/_Self/subprojects/GitHub.kt
									
									
									
									
										vendored
									
									
								
							
							
						
						| @@ -1,11 +1,78 @@ | ||||
| package _Self.subprojects | ||||
|  | ||||
| import _Self.buildTypes.GithubTests | ||||
| import _Self.Constants | ||||
| import _Self.IdeaVimBuildType | ||||
| import _Self.vcsRoots.GitHubPullRequest | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.Project | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.buildFeatures.PullRequests | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.buildFeatures.commitStatusPublisher | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.buildFeatures.pullRequests | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.VcsTrigger | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs | ||||
|  | ||||
| object GitHub : Project({ | ||||
|   name = "Pull Requests checks" | ||||
|   description = "Automatic checking of GitHub Pull Requests" | ||||
|  | ||||
|   buildType(GithubTests) | ||||
|   buildType(Github("clean test", "Tests")) | ||||
| }) | ||||
|  | ||||
| class Github(command: String, desc: String) : IdeaVimBuildType({ | ||||
|   name = "GitHub Pull Requests $desc" | ||||
|   description = "Test GitHub pull requests $desc" | ||||
|  | ||||
|   params { | ||||
|     param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false") | ||||
|     param("env.ORG_GRADLE_PROJECT_ideaVersion", Constants.GITHUB_TESTS) | ||||
|     param("env.ORG_GRADLE_PROJECT_instrumentPluginCode", "false") | ||||
|   } | ||||
|  | ||||
|   vcs { | ||||
|     root(GitHubPullRequest) | ||||
|  | ||||
|     checkoutMode = CheckoutMode.AUTO | ||||
|     branchFilter = """ | ||||
|             +:* | ||||
|             -:<default> | ||||
|         """.trimIndent() | ||||
|   } | ||||
|  | ||||
|   steps { | ||||
|     gradle { | ||||
|       tasks = command | ||||
|       buildFile = "" | ||||
|       enableStacktrace = true | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   triggers { | ||||
|     vcs { | ||||
|       quietPeriodMode = VcsTrigger.QuietPeriodMode.USE_DEFAULT | ||||
|       branchFilter = "" | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   features { | ||||
|     pullRequests { | ||||
|       provider = github { | ||||
|         authType = token { | ||||
|           token = "credentialsJSON:90f3b439-6e91-40f7-a086-d4dd8e0ea9b8" | ||||
|         } | ||||
|         filterTargetBranch = "refs/heads/master" | ||||
|         filterAuthorRole = PullRequests.GitHubRoleFilter.EVERYBODY | ||||
|       } | ||||
|     } | ||||
|     commitStatusPublisher { | ||||
|       vcsRootExtId = "${GitHubPullRequest.id}" | ||||
|       publisher = github { | ||||
|         githubUrl = "https://api.github.com" | ||||
|         authType = personalToken { | ||||
|           token = "credentialsJSON:90f3b439-6e91-40f7-a086-d4dd8e0ea9b8" | ||||
|         } | ||||
|       } | ||||
|       param("github_oauth_user", "AlexPl292") | ||||
|     } | ||||
|   } | ||||
| }) | ||||
|   | ||||
							
								
								
									
										38
									
								
								.teamcity/_Self/subprojects/OldTests.kt
									
									
									
									
										vendored
									
									
								
							
							
						
						| @@ -1,31 +1,25 @@ | ||||
| package _Self.subprojects | ||||
|  | ||||
| import _Self.buildTypes.TestsForIntelliJ20181 | ||||
| import _Self.buildTypes.TestsForIntelliJ20182 | ||||
| import _Self.buildTypes.TestsForIntelliJ20183 | ||||
| import _Self.buildTypes.TestsForIntelliJ20191 | ||||
| import _Self.buildTypes.TestsForIntelliJ20192 | ||||
| import _Self.buildTypes.TestsForIntelliJ20193 | ||||
| import _Self.buildTypes.TestsForIntelliJ20201 | ||||
| import _Self.buildTypes.TestsForIntelliJ20202 | ||||
| import _Self.buildTypes.TestsForIntelliJ20203 | ||||
| import _Self.buildTypes.TestsForIntelliJ20211 | ||||
| import _Self.buildTypes.TestsForIntelliJ20212 | ||||
| import _Self.buildTypes.TestingBuildType | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.Project | ||||
|  | ||||
| object OldTests : Project({ | ||||
|   name = "Old IdeaVim tests" | ||||
|   description = "Tests for older versions of IJ" | ||||
|  | ||||
|   buildType(TestsForIntelliJ20181) | ||||
|   buildType(TestsForIntelliJ20182) | ||||
|   buildType(TestsForIntelliJ20183) | ||||
|   buildType(TestsForIntelliJ20191) | ||||
|   buildType(TestsForIntelliJ20192) | ||||
|   buildType(TestsForIntelliJ20193) | ||||
|   buildType(TestsForIntelliJ20201) | ||||
|   buildType(TestsForIntelliJ20202) | ||||
|   buildType(TestsForIntelliJ20203) | ||||
|   buildType(TestsForIntelliJ20211) | ||||
|   buildType(TestsForIntelliJ20212) | ||||
|   buildType(TestingBuildType("IC-2018.1", "181-182", javaVersion = "1.8", javaPlugin = false)) | ||||
|   buildType(TestingBuildType("IC-2018.2", "181-182", javaVersion = "1.8", javaPlugin = false)) | ||||
|   buildType(TestingBuildType("IC-2018.3", "183", javaVersion = "1.8", javaPlugin = false)) | ||||
|   buildType(TestingBuildType("IC-2019.1", "191-193", javaVersion = "1.8", javaPlugin = false)) | ||||
|   buildType(TestingBuildType("IC-2019.2", "191-193", javaVersion = "1.8", javaPlugin = false)) | ||||
|   buildType(TestingBuildType("IC-2019.3", "191-193", javaVersion = "1.8", javaPlugin = false)) | ||||
|   buildType(TestingBuildType("IC-2020.1", "201", javaVersion = "1.8", javaPlugin = false)) | ||||
|   buildType(TestingBuildType("IC-2020.2", "202", javaVersion = "1.8", javaPlugin = false)) | ||||
|   buildType(TestingBuildType("IC-2020.3", "203-212", javaVersion = "1.8", javaPlugin = false)) | ||||
|   buildType(TestingBuildType("IC-2021.1", "203-212", javaVersion = "1.8", javaPlugin = false)) | ||||
|   buildType(TestingBuildType("IC-2021.2.2", "203-212", javaVersion = "1.8", javaPlugin = false)) | ||||
|   buildType(TestingBuildType("IC-2021.3.2", "213-221", javaVersion = "1.8", javaPlugin = false)) | ||||
|   buildType(TestingBuildType("IC-2022.2.3", branch = "222", javaPlugin = false)) | ||||
|   buildType(TestingBuildType("IC-2023.1", "231-232", javaPlugin = false)) | ||||
|   buildType(TestingBuildType("IC-2023.2", "231-232", javaPlugin = false)) | ||||
| }) | ||||
|   | ||||
							
								
								
									
										30
									
								
								.teamcity/_Self/subprojects/Releases.kt
									
									
									
									
										vendored
									
									
								
							
							
						
						| @@ -1,15 +1,41 @@ | ||||
| package _Self.subprojects | ||||
|  | ||||
| import _Self.buildTypes.Release | ||||
| import _Self.buildTypes.PublishVimEngine | ||||
| import _Self.buildTypes.ReleaseDev | ||||
| import _Self.buildTypes.ReleaseEap | ||||
| import _Self.buildTypes.ReleaseMajor | ||||
| import _Self.buildTypes.ReleaseMinor | ||||
| import _Self.buildTypes.ReleasePatch | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.ParameterDisplay | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.Project | ||||
|  | ||||
| object Releases : Project({ | ||||
|   name = "IdeaVim releases" | ||||
|   description = "Stable and EAP releases for IdeaVim" | ||||
|  | ||||
|   buildType(Release) | ||||
|   params { | ||||
|     password( | ||||
|       "env.CERTIFICATE_CHAIN", | ||||
|       "credentialsJSON:1bab4a88-10e7-4bf9-856c-e6253499dc95", | ||||
|       display = ParameterDisplay.HIDDEN | ||||
|     ) | ||||
|     password( | ||||
|       "env.PRIVATE_KEY_PASSWORD", | ||||
|       "credentialsJSON:7c12c867-fe09-4a2f-884d-6fd0ec0a1e79", | ||||
|       display = ParameterDisplay.HIDDEN | ||||
|     ) | ||||
|     password( | ||||
|       "env.PRIVATE_KEY", | ||||
|       "credentialsJSON:5d8b553d-fd7e-4347-abd2-51d8d0f2b3f7", | ||||
|       display = ParameterDisplay.HIDDEN | ||||
|     ) | ||||
|   } | ||||
|  | ||||
| //  buildType(Release) | ||||
|   buildType(ReleaseMajor) | ||||
|   buildType(ReleaseMinor) | ||||
|   buildType(ReleasePatch) | ||||
|   buildType(ReleaseEap) | ||||
|   buildType(ReleaseDev) | ||||
|   buildType(PublishVimEngine) | ||||
| }) | ||||
|   | ||||
							
								
								
									
										12
									
								
								.teamcity/_Self/vcsRoots/Branch_181.kt
									
									
									
									
										vendored
									
									
								
							
							
						
						| @@ -1,12 +0,0 @@ | ||||
| @file:Suppress("ClassName") | ||||
|  | ||||
| package _Self.vcsRoots | ||||
|  | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.vcs.GitVcsRoot | ||||
|  | ||||
| object Branch_181 : GitVcsRoot({ | ||||
|   name = "https://github.com/JetBrains/ideavim (branch 181)" | ||||
|   url = "https://github.com/JetBrains/ideavim.git" | ||||
|   branch = "181" | ||||
|   useMirrors = false | ||||
| }) | ||||
							
								
								
									
										12
									
								
								.teamcity/_Self/vcsRoots/Branch_183.kt
									
									
									
									
										vendored
									
									
								
							
							
						
						| @@ -1,12 +0,0 @@ | ||||
| @file:Suppress("ClassName") | ||||
|  | ||||
| package _Self.vcsRoots | ||||
|  | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.vcs.GitVcsRoot | ||||
|  | ||||
| object Branch_183 : GitVcsRoot({ | ||||
|   name = "https://github.com/JetBrains/ideavim (branch 183)" | ||||
|   url = "https://github.com/JetBrains/ideavim.git" | ||||
|   branch = "183" | ||||
|   useMirrors = false | ||||
| }) | ||||
							
								
								
									
										12
									
								
								.teamcity/_Self/vcsRoots/Branch_191_193.kt
									
									
									
									
										vendored
									
									
								
							
							
						
						| @@ -1,12 +0,0 @@ | ||||
| @file:Suppress("ClassName") | ||||
|  | ||||
| package _Self.vcsRoots | ||||
|  | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.vcs.GitVcsRoot | ||||
|  | ||||
| object Branch_191_193 : GitVcsRoot({ | ||||
|   name = "https://github.com/JetBrains/ideavim (branch 191-193)" | ||||
|   url = "https://github.com/JetBrains/ideavim.git" | ||||
|   branch = "191-193" | ||||
|   useMirrors = false | ||||
| }) | ||||
							
								
								
									
										12
									
								
								.teamcity/_Self/vcsRoots/Branch_201.kt
									
									
									
									
										vendored
									
									
								
							
							
						
						| @@ -1,12 +0,0 @@ | ||||
| @file:Suppress("ClassName") | ||||
|  | ||||
| package _Self.vcsRoots | ||||
|  | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.vcs.GitVcsRoot | ||||
|  | ||||
| object Branch_201 : GitVcsRoot({ | ||||
|   name = "https://github.com/JetBrains/ideavim (branch 201)" | ||||
|   url = "https://github.com/JetBrains/ideavim.git" | ||||
|   branch = "201" | ||||
|   useMirrors = false | ||||
| }) | ||||
							
								
								
									
										12
									
								
								.teamcity/_Self/vcsRoots/Branch_202.kt
									
									
									
									
										vendored
									
									
								
							
							
						
						| @@ -1,12 +0,0 @@ | ||||
| @file:Suppress("ClassName") | ||||
|  | ||||
| package _Self.vcsRoots | ||||
|  | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.vcs.GitVcsRoot | ||||
|  | ||||
| object Branch_202 : GitVcsRoot({ | ||||
|   name = "https://github.com/JetBrains/ideavim (branch 202)" | ||||
|   url = "https://github.com/JetBrains/ideavim.git" | ||||
|   branch = "202" | ||||
|   useMirrors = false | ||||
| }) | ||||
							
								
								
									
										12
									
								
								.teamcity/_Self/vcsRoots/Branch_203_212.kt
									
									
									
									
										vendored
									
									
								
							
							
						
						| @@ -1,12 +0,0 @@ | ||||
| @file:Suppress("ClassName") | ||||
|  | ||||
| package _Self.vcsRoots | ||||
|  | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.vcs.GitVcsRoot | ||||
|  | ||||
| object Branch_203_212 : GitVcsRoot({ | ||||
|   name = "https://github.com/JetBrains/ideavim (branch 203-212)" | ||||
|   url = "https://github.com/JetBrains/ideavim.git" | ||||
|   branch = "203-212" | ||||
|   useMirrors = false | ||||
| }) | ||||
							
								
								
									
										11
									
								
								.teamcity/_Self/vcsRoots/Branch_Release.kt
									
									
									
									
										vendored
									
									
								
							
							
						
						| @@ -1,11 +0,0 @@ | ||||
| @file:Suppress("ClassName") | ||||
|  | ||||
| package _Self.vcsRoots | ||||
|  | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.vcs.GitVcsRoot | ||||
|  | ||||
| object Branch_Release : GitVcsRoot({ | ||||
|   name = "https://github.com/JetBrains/ideavim (branch release)" | ||||
|   url = "https://github.com/JetBrains/ideavim.git" | ||||
|   branch = "release" | ||||
| }) | ||||
| @@ -7,6 +7,6 @@ object GitHubPullRequest : GitVcsRoot({ | ||||
|   url = "git@github.com:JetBrains/ideavim.git" | ||||
|   branchSpec = "+:refs/(pull/*)/head" | ||||
|   authMethod = uploadedKey { | ||||
|     uploadedKey = "Alex Plate TeamCity key" | ||||
|     uploadedKey = "IdeaVim ssh keys" | ||||
|   } | ||||
| }) | ||||
|   | ||||
							
								
								
									
										40
									
								
								.teamcity/patches/buildTypes/Build.kts
									
									
									
									
										vendored
									
									
								
							
							
						
						| @@ -1,40 +0,0 @@ | ||||
| package patches.buildTypes | ||||
|  | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.* | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.buildFeatures.golang | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.script | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.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, create a buildType with id = 'Build' | ||||
| in the root project, and delete the patch script. | ||||
| */ | ||||
| create(DslContext.projectId, BuildType({ | ||||
|     id("Build") | ||||
|     name = "IdeaVim compatibility with external plugins" | ||||
|  | ||||
|     vcs { | ||||
|         root(RelativeId("HttpsGithubComAlexPl292IdeaVimCompatibilityRefsHeadsMaster")) | ||||
|     } | ||||
|  | ||||
|     steps { | ||||
|         script { | ||||
|             scriptContent = "go run test.go" | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     triggers { | ||||
|         vcs { | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     features { | ||||
|         golang { | ||||
|             testFormat = "json" | ||||
|         } | ||||
|     } | ||||
| })) | ||||
|  | ||||
							
								
								
									
										29
									
								
								.teamcity/patches/buildTypes/IdeaVimTests_Latest_EAP.kts
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,29 @@ | ||||
| package patches.buildTypes | ||||
|  | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.RelativeId | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.GradleBuildStep | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.ui.changeBuildType | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.ui.expectSteps | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.ui.update | ||||
|  | ||||
| /* | ||||
| This patch script was generated by TeamCity on settings change in UI. | ||||
| To apply the patch, change the buildType with id = 'IdeaVimTests_Latest_EAP' | ||||
| accordingly, and delete the patch script. | ||||
| */ | ||||
| changeBuildType(RelativeId("IdeaVimTests_Latest_EAP")) { | ||||
|     expectSteps { | ||||
|         gradle { | ||||
|             tasks = "clean test" | ||||
|             buildFile = "" | ||||
|             enableStacktrace = true | ||||
|         } | ||||
|     } | ||||
|     steps { | ||||
|         update<GradleBuildStep>(0) { | ||||
|             clearConditions() | ||||
|             jdkHome = "/usr/lib/jvm/java-17-amazon-corretto" | ||||
|         } | ||||
|     } | ||||
| } | ||||
							
								
								
									
										20
									
								
								.teamcity/patches/buildTypes/IdeaVimTests_Latest_EAP_With_Xorg.kts
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,20 @@ | ||||
| package patches.buildTypes | ||||
|  | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.* | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.ui.* | ||||
|  | ||||
| /* | ||||
| This patch script was generated by TeamCity on settings change in UI. | ||||
| To apply the patch, change the buildType with id = 'IdeaVimTests_Latest_EAP_With_Xorg' | ||||
| accordingly, and delete the patch script. | ||||
| */ | ||||
| changeBuildType(RelativeId("IdeaVimTests_Latest_EAP_With_Xorg")) { | ||||
|     requirements { | ||||
|         add { | ||||
|             matches("teamcity.agent.jvm.os.family", "Linux") | ||||
|         } | ||||
|         add { | ||||
|             exists("env.DISPLAY") | ||||
|         } | ||||
|     } | ||||
| } | ||||
							
								
								
									
										25
									
								
								.teamcity/patches/buildTypes/Nvim.kts
									
									
									
									
										vendored
									
									
								
							
							
						
						| @@ -1,25 +0,0 @@ | ||||
| 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
									
									
								
							
							
						
						| @@ -1,25 +0,0 @@ | ||||
| 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 | ||||
|  | ||||
|         } | ||||
|     } | ||||
| } | ||||
							
								
								
									
										55
									
								
								.teamcity/patches/buildTypes/Qodana.kts
									
									
									
									
										vendored
									
									
								
							
							
						
						| @@ -1,55 +0,0 @@ | ||||
| package patches.buildTypes | ||||
|  | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.* | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.Qodana | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.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" | ||||
|             param("clonefinder-enable", "true") | ||||
|             param("clonefinder-languages", "Java") | ||||
|             param("clonefinder-languages-container", "Java Kotlin") | ||||
|             param("clonefinder-mode", "") | ||||
|             param("clonefinder-queried-project", "src") | ||||
|             param("clonefinder-reference-projects", "src") | ||||
|             param("licenseaudit-enable", "true") | ||||
|             param("namesAndTagsCustom", "repo.labs.intellij.net/static-analyser/qodana") | ||||
|             param("report-version", "") | ||||
|             param("yaml-configuration", "") | ||||
|         } | ||||
|     } | ||||
|     steps { | ||||
|         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 | ||||
|  | ||||
|         } | ||||
|     } | ||||
| } | ||||
							
								
								
									
										20
									
								
								.teamcity/patches/buildTypes/ReleaseMinor.kts
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,20 @@ | ||||
| package patches.buildTypes | ||||
|  | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.* | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.ui.* | ||||
|  | ||||
| /* | ||||
| This patch script was generated by TeamCity on settings change in UI. | ||||
| To apply the patch, change the buildType with id = 'ReleaseMinor' | ||||
| accordingly, and delete the patch script. | ||||
| */ | ||||
| changeBuildType(RelativeId("ReleaseMinor")) { | ||||
|     params { | ||||
|         expect { | ||||
|             password("env.ORG_GRADLE_PROJECT_youtrackToken", "credentialsJSON:3cd3e867-282c-451f-b958-bc95d56a8450", display = ParameterDisplay.HIDDEN) | ||||
|         } | ||||
|         update { | ||||
|             password("env.ORG_GRADLE_PROJECT_youtrackToken", "credentialsJSON:7bc0eb3a-b86a-4ebd-b622-d4ef12d7e1d3", display = ParameterDisplay.HIDDEN) | ||||
|         } | ||||
|     } | ||||
| } | ||||
							
								
								
									
										20
									
								
								.teamcity/patches/buildTypes/ReleasePatch.kts
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,20 @@ | ||||
| package patches.buildTypes | ||||
|  | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.* | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.ui.* | ||||
|  | ||||
| /* | ||||
| This patch script was generated by TeamCity on settings change in UI. | ||||
| To apply the patch, change the buildType with id = 'ReleasePatch' | ||||
| accordingly, and delete the patch script. | ||||
| */ | ||||
| changeBuildType(RelativeId("ReleasePatch")) { | ||||
|     params { | ||||
|         expect { | ||||
|             password("env.ORG_GRADLE_PROJECT_youtrackToken", "credentialsJSON:3cd3e867-282c-451f-b958-bc95d56a8450", display = ParameterDisplay.HIDDEN) | ||||
|         } | ||||
|         update { | ||||
|             password("env.ORG_GRADLE_PROJECT_youtrackToken", "credentialsJSON:7bc0eb3a-b86a-4ebd-b622-d4ef12d7e1d3", display = ParameterDisplay.HIDDEN) | ||||
|         } | ||||
|     } | ||||
| } | ||||
							
								
								
									
										63
									
								
								.teamcity/patches/projects/_Self.kts
									
									
									
									
										vendored
									
									
								
							
							
						
						| @@ -1,11 +1,7 @@ | ||||
| package patches.projects | ||||
|  | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.* | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.AmazonEC2CloudImage | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.AmazonEC2CloudProfile | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.Project | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.amazonEC2CloudImage | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.amazonEC2CloudProfile | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.ui.* | ||||
|  | ||||
| /* | ||||
| @@ -14,61 +10,8 @@ To apply the patch, change the root project | ||||
| accordingly, and delete the patch script. | ||||
| */ | ||||
| changeProject(DslContext.projectId) { | ||||
|     features { | ||||
|         val feature1 = find<AmazonEC2CloudImage> { | ||||
|             amazonEC2CloudImage { | ||||
|                 id = "PROJECT_EXT_768" | ||||
|                 profileId = "amazon-48" | ||||
|                 agentPoolId = "41" | ||||
|                 name = "BuildAgentsIdeaVim" | ||||
|                 vpcSubnetId = "subnet-58839511" | ||||
|                 keyPairName = "" | ||||
|                 instanceType = "c5d.xlarge" | ||||
|                 securityGroups = listOf("sg-eda08696", "sg-7332cf0f") | ||||
|                 useSpotInstances = true | ||||
|                 instanceTags = mapOf( | ||||
|                     "project" to "idea-vim" | ||||
|                 ) | ||||
|                 source = Source("ami-0d1a6a32faa92923e") | ||||
|                 param("image-instances-limit", "") | ||||
|                 param("spot-instance-price", "") | ||||
|             } | ||||
|         } | ||||
|         feature1.apply { | ||||
|             profileId = "amazon-48" | ||||
|             agentPoolId = "41" | ||||
|             name = "BuildAgentsIdeaVim" | ||||
|             vpcSubnetId = "subnet-58839511" | ||||
|             keyPairName = "" | ||||
|             instanceType = "c5d.xlarge" | ||||
|             securityGroups = listOf("sg-eda08696", "sg-7332cf0f") | ||||
|             useSpotInstances = true | ||||
|             instanceTags = mapOf( | ||||
|                 "project" to "idea-vim" | ||||
|             ) | ||||
|             source = Source("ami-0fa17ce8238eb8868") | ||||
|         } | ||||
|         val feature2 = find<AmazonEC2CloudProfile> { | ||||
|             amazonEC2CloudProfile { | ||||
|                 id = "amazon-48" | ||||
|                 name = "Cloud Agents - Single Build" | ||||
|                 terminateAfterBuild = true | ||||
|                 terminateIdleMinutes = 15 | ||||
|                 region = AmazonEC2CloudProfile.Regions.EU_WEST_DUBLIN | ||||
|                 maxInstancesCount = 10 | ||||
|                 authType = accessKey { | ||||
|                     keyId = "credentialsJSON:dbcdb2a2-de5f-4bc9-9421-292b19e83947" | ||||
|                     secretKey = "credentialsJSON:65a87fe7-0977-4af9-96f1-344f2b82d269" | ||||
|                 } | ||||
|                 param("agentPushPreset", "") | ||||
|             } | ||||
|         } | ||||
|         feature2.apply { | ||||
|             name = "Cloud Agents - Single Build" | ||||
|             terminateAfterBuild = true | ||||
|             terminateIdleMinutes = 15 | ||||
|             region = AmazonEC2CloudProfile.Regions.EU_WEST_DUBLIN | ||||
|             maxInstancesCount = 10 | ||||
|         } | ||||
|     check(description == "Vim engine for IDEs based on the IntelliJ platform") { | ||||
|         "Unexpected description: '$description'" | ||||
|     } | ||||
|     description = "Vim engine for JetBrains IDEs" | ||||
| } | ||||
|   | ||||
| @@ -1,25 +0,0 @@ | ||||
| package patches.vcsRoots | ||||
|  | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.* | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.ui.* | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.vcs.GitVcsRoot | ||||
|  | ||||
| /* | ||||
| This patch script was generated by TeamCity on settings change in UI. | ||||
| To apply the patch, create a vcsRoot with id = 'HttpsGithubComAlexPl292IdeaVimCompatibilityRefsHeadsMaster' | ||||
| in the root project, and delete the patch script. | ||||
| */ | ||||
| create(DslContext.projectId, GitVcsRoot({ | ||||
|     id("HttpsGithubComAlexPl292IdeaVimCompatibilityRefsHeadsMaster") | ||||
|     name = "https://github.com/AlexPl292/IdeaVimCompatibility#refs/heads/master" | ||||
|     url = "https://github.com/AlexPl292/IdeaVimCompatibility" | ||||
|     branch = "refs/heads/master" | ||||
|     branchSpec = "refs/heads/*" | ||||
|     authMethod = password { | ||||
|         userName = "AlexPl292" | ||||
|         password = "credentialsJSON:43afd6e5-6ad5-4d12-a218-cf1547717a7f" | ||||
|     } | ||||
|     param("oauthProviderId", "PROJECT_EXT_1") | ||||
|     param("useAlternates", "true") | ||||
| })) | ||||
|  | ||||
| @@ -1,23 +0,0 @@ | ||||
| package patches.vcsRoots | ||||
|  | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.* | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.ui.* | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.vcs.GitVcsRoot | ||||
|  | ||||
| /* | ||||
| This patch script was generated by TeamCity on settings change in UI. | ||||
| To apply the patch, create a vcsRoot with id = 'IdeaVimCompatibility' | ||||
| in the root project, and delete the patch script. | ||||
| */ | ||||
| create(DslContext.projectId, GitVcsRoot({ | ||||
|     id("IdeaVimCompatibility") | ||||
|     name = "IdeaVimCompatibility" | ||||
|     url = "git@github.com:AlexPl292/IdeaVimCompatibility.git" | ||||
|     branch = "refs/heads/master" | ||||
|     authMethod = uploadedKey { | ||||
|         userName = "git" | ||||
|         uploadedKey = "Alex Plate TeamCity key" | ||||
|     } | ||||
|     param("useAlternates", "true") | ||||
| })) | ||||
|  | ||||
							
								
								
									
										2
									
								
								.teamcity/pom.xml
									
									
									
									
										vendored
									
									
								
							
							
						
						| @@ -22,7 +22,7 @@ | ||||
|     </repository> | ||||
|     <repository> | ||||
|       <id>teamcity-server</id> | ||||
|       <url>https://teamcity.jetbrains.com/app/dsl-plugins-repository</url> | ||||
|       <url>https://ideavim.teamcity.com/app/dsl-plugins-repository</url> | ||||
|       <snapshots> | ||||
|         <enabled>true</enabled> | ||||
|       </snapshots> | ||||
|   | ||||
							
								
								
									
										7
									
								
								.teamcity/settings.kts
									
									
									
									
										vendored
									
									
								
							
							
						
						| @@ -1,4 +1,5 @@ | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.* | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.project | ||||
| import jetbrains.buildServer.configs.kotlin.v2019_2.version | ||||
|  | ||||
| /* | ||||
| The settings script is an entry point for defining a single | ||||
| @@ -29,5 +30,5 @@ node (Plugins -> teamcity-configs -> teamcity-configs:generate), | ||||
| the 'Debug' option is available in the context menu for the task. | ||||
| */ | ||||
|  | ||||
| version = "2020.2" | ||||
| project(_Self.Project) | ||||
| version = "2023.05" | ||||
| project(_Self.Project) | ||||
|   | ||||
							
								
								
									
										143
									
								
								AUTHORS.md
									
									
									
									
									
								
							
							
						
						| @@ -32,16 +32,48 @@ Contributors: | ||||
|   [![icon][github]](https://github.com/yole) | ||||
|     | ||||
|   Dmitry Jemerov | ||||
| * [![icon][mail]](mailto:tony.kay@gmail.com) | ||||
|   [![icon][github]](https://github.com/awkay) | ||||
|     | ||||
|   Tony Kay | ||||
| * [![icon][mail]](mailto:jamescmartinez@gmail.com) | ||||
|   [![icon][github]](https://github.com/jamescmartinez) | ||||
|     | ||||
|   James Martinez | ||||
| * [![icon][mail]](mailto:almas337519@gmail.com) | ||||
|   [![icon][github]](https://github.com/strogiyotec) | ||||
|     | ||||
|   strogiyotec | ||||
| * [![icon][mail]](mailto:raimon49@hotmail.com) | ||||
|   [![icon][github]](https://github.com/raimon49) | ||||
|     | ||||
|   raimon | ||||
| * [![icon][mail]](mailto:agrsbm@gmail.com) | ||||
|   [![icon][github-off]](#) | ||||
|     | ||||
|   Alexander Griesbaum | ||||
| * [![icon][mail]](mailto:manwe64@gmail.com) | ||||
|   [![icon][github]](https://github.com/baldrs) | ||||
|     | ||||
|   Baldrs | ||||
| * [![icon][mail]](mailto:yury@shurup.com) | ||||
|   [![icon][github]](https://github.com/zyv) | ||||
|     | ||||
|   Yury V. Zaytsev | ||||
| * [![icon][mail]](mailto:jflorian@doubledog.org) | ||||
|   [![icon][github]](https://github.com/jflorian) | ||||
|     | ||||
|   John Florian | ||||
| * [![icon][mail]](mailto:marquis@marquiswang.com) | ||||
|   [![icon][github]](https://github.com/marquiswang) | ||||
|     | ||||
|   Marquis Wang | ||||
| * [![icon][mail]](mailto:madgnome@gmail.com) | ||||
|   [![icon][github-off]](#) | ||||
|   [![icon][github]](https://github.com/madgnome) | ||||
|     | ||||
|   Julien Hoarau   | ||||
| * [![icon][mail]](mailto:masanobu.imai@gmail.com) | ||||
|   [![icon][github-off]](#) | ||||
|   [![icon][github]](https://github.com/masanobuimai) | ||||
|     | ||||
|   Masanobu Imai | ||||
| * [![icon][mail]](mailto:poxvuibr@gmail.com) | ||||
| @@ -57,7 +89,7 @@ Contributors: | ||||
|     | ||||
|   John Lindquist | ||||
| * [![icon][mail]](mailto:iklotzko@ltech.com) | ||||
|   [![icon][github-off]](#) | ||||
|   [![icon][github]](https://github.com/iklotzko) | ||||
|     | ||||
|   Ira Klotzko | ||||
| * [![icon][mail]](mailto:alex@selesse.com) | ||||
| @@ -65,7 +97,7 @@ Contributors: | ||||
|     | ||||
|   Alex Selesse | ||||
| * [![icon][mail]](mailto:dbennett@palantir.com) | ||||
|   [![icon][github-off]](#) | ||||
|   [![icon][github]](https://github.com/dathanb) | ||||
|     | ||||
|   Dathan Bennett | ||||
| * [![icon][mail]](mailto:kphayen@gmail.com) | ||||
| @@ -77,11 +109,11 @@ Contributors: | ||||
|     | ||||
|   Alexey Shmalko | ||||
| * [![icon][mail]](mailto:a.m.brookins@gmail.com) | ||||
|   [![icon][github-off]](#) | ||||
|   [![icon][github]](https://github.com/abrookins) | ||||
|     | ||||
|   Andrew Brookins | ||||
| * [![icon][mail]](mailto:changwang83@gmail.com) | ||||
|   [![icon][github-off]](#) | ||||
|   [![icon][github]](https://github.com/changwang) | ||||
|     | ||||
|   Chang Wang | ||||
| * [![icon][mail]](mailto:josejaime.sanchez@gmail.com) | ||||
| @@ -89,19 +121,19 @@ Contributors: | ||||
|     | ||||
|   Jaime Sanchez | ||||
| * [![icon][mail]](mailto:thomas@homburg.dk) | ||||
|   [![icon][github-off]](#) | ||||
|   [![icon][github]](https://github.com/homburg) | ||||
|     | ||||
|   Thomas B Homburg | ||||
| * [![icon][mail]](mailto:smartbomb@server.fake) | ||||
|   [![icon][github-off]](#) | ||||
|   [![icon][github]](https://github.com/smartbomb) | ||||
|     | ||||
|   smartbomb | ||||
| * [![icon][mail]](mailto:tuomas.tynkkynen@iki.fi) | ||||
|   [![icon][github-off]](#) | ||||
|   [![icon][github]](https://github.com/dezgeg) | ||||
|     | ||||
|   Tuomas Tynkkynen | ||||
| * [![icon][mail]](mailto:jackson@donorschoose.org) | ||||
|   [![icon][github-off]](#) | ||||
|   [![icon][github]](https://github.com/jdpopkin) | ||||
|     | ||||
|   Jackson Popkin | ||||
| * [![icon][mail]](mailto:yuyuyu1999@gmail.com) | ||||
| @@ -109,7 +141,7 @@ Contributors: | ||||
|     | ||||
|   Teruo Kunihiro | ||||
| * [![icon][mail]](mailto:lubashka.994@mail.ru) | ||||
|   [![icon][github-off]](#) | ||||
|   [![icon][github]](https://github.com/lubba) | ||||
|     | ||||
|   Liubov Paina | ||||
| * [![icon][mail]](mailto:me@dhleong.net) | ||||
| @@ -133,11 +165,11 @@ Contributors: | ||||
|     | ||||
|   Pavel Fatin | ||||
| * [![icon][mail]](mailto:tietyt@gmail.com) | ||||
|   [![icon][github-off]](#) | ||||
|   [![icon][github-off]](https://github.com/DanKaplanSES) | ||||
|     | ||||
|   tieTYT | ||||
| * [![icon][mail]](mailto:nickgieschen@gmail.com) | ||||
|   [![icon][github-off]](#) | ||||
|   [![icon][github]](https://github.com/nickgieschen) | ||||
|     | ||||
|   Nick Gieschen | ||||
| * [![icon][mail]](mailto:ikenox@gmail.com) | ||||
| @@ -149,11 +181,11 @@ Contributors: | ||||
|     | ||||
|   Maximilian Luz | ||||
| * [![icon][mail]](mailto:vparfinenko@excelsior-usa.com) | ||||
|   [![icon][github-off]](#) | ||||
|   [![icon][github]](https://github.com/cypok) | ||||
|     | ||||
|   Vladimir Parfinenko | ||||
| * [![icon][mail]](mailto:hassmann@hwdev.de) | ||||
|   [![icon][github-off]](#) | ||||
|   [![icon][github-off]](https://github.com/lumie1337) | ||||
|     | ||||
|   Florian Hassmann | ||||
| * [![icon][mail]](mailto:jpalus@fastmail.com) | ||||
| @@ -161,7 +193,7 @@ Contributors: | ||||
|     | ||||
|   Jan Palus | ||||
| * [![icon][mail]](mailto:kpetrov@ripe.net) | ||||
|   [![icon][github-off]](#) | ||||
|   [![icon][github-off]](https://github.com/constpetrov) | ||||
|     | ||||
|   Konstantin Petrov | ||||
| * [![icon][mail]](mailto:ya-ikmik2012@yandex.ru) | ||||
| @@ -188,12 +220,8 @@ Contributors: | ||||
|   [![icon][github]](https://github.com/johngrib) | ||||
|     | ||||
|   John Grib | ||||
| * [![icon][mail]](mailto:hild@b4mad.net) | ||||
|   [![icon][github-off]](#) | ||||
|     | ||||
|   Marcel Hild | ||||
| * [![icon][mail]](mailto:vedranb@gmail.com) | ||||
|   [![icon][github-off]](#) | ||||
|   [![icon][github]](https://github.com/vedran) | ||||
|     | ||||
|   Vedran Budimcic | ||||
| * [![icon][mail]](mailto:andreigasparovici1@gmail.com) | ||||
| @@ -208,10 +236,13 @@ Contributors: | ||||
|   [![icon][github]](https://github.com/TonyArra) | ||||
|     | ||||
|   Tony Arra | ||||
| * [![icon][mail]](mailto:bradziolko@gmail.com) | ||||
|   [![icon][github]](https://github.com/bradziolko) | ||||
| * [![icon][mail]](mailto:mj@ziolko.dev) | ||||
|   [![icon][github]](https://github.com/mjziolko) | ||||
|     | ||||
|   Brad Ziolko | ||||
|   Madeline Ziolko | ||||
|   [Original contribution from: | ||||
|   [![icon][mail]](mailto:bradziolko@gmail.com) | ||||
|   [![icon][github]](https://github.com/bradziolko)] | ||||
| * [![icon][mail]](mailto:sumoooru2@gmail.com) | ||||
|   [![icon][github]](https://github.com/sumoooru2) | ||||
|     | ||||
| @@ -284,10 +315,6 @@ Contributors: | ||||
|   [![icon][github]](https://github.com/angelbot) | ||||
|     | ||||
|   John Weigel | ||||
| * [![icon][mail]](mailto:kevinz@weghst.com) | ||||
|   [![icon][github]](https://github.com/kevin70) | ||||
|     | ||||
|   kk | ||||
| * [![icon][mail]](mailto:runforprogram@163.com) | ||||
|   [![icon][github]](https://github.com/runforprogram) | ||||
|     | ||||
| @@ -416,6 +443,66 @@ Contributors: | ||||
|   [![icon][github]](https://github.com/Vvalter) | ||||
|     | ||||
|   Simon Rainer | ||||
| * [![icon][mail]](mailto:filipp.vakhitov@jetbrains.com) | ||||
|   [![icon][github]](https://github.com/lippfi) | ||||
|     | ||||
|   lippfi | ||||
| * [![icon][mail]](mailto:3237686+Runinho@users.noreply.github.com) | ||||
|   [![icon][github]](https://github.com/Runinho) | ||||
|     | ||||
|   Runinho | ||||
| * [![icon][mail]](mailto:me@yuhaowen.com) | ||||
|   [![icon][github]](https://github.com/adaext) | ||||
|     | ||||
|   Ada | ||||
| * [![icon][mail]](mailto:dominic.palmer@outlook.com) | ||||
|   [![icon][github]](https://github.com/dominicpalmer) | ||||
|     | ||||
|   Dominic Palmer | ||||
| * [![icon][mail]](mailto:kawagh.dev@gmail.com) | ||||
|   [![icon][github]](https://github.com/kawagh) | ||||
|     | ||||
|   kawagh | ||||
| * [![icon][mail]](mailto:78074243+danisevas@users.noreply.github.com) | ||||
|   [![icon][github]](https://github.com/danisevas) | ||||
|     | ||||
|   Dani Sevastianov | ||||
| * [![icon][mail]](mailto:oskar.persson@polken.se) | ||||
|   [![icon][github]](https://github.com/oskarpersson/) | ||||
|     | ||||
|   Oskar Persson  | ||||
| * [![icon][mail]](mailto:silence.m@hotmail.com) | ||||
|   [![icon][github]](https://github.com/Stzx) | ||||
|     | ||||
|   Silence Tai | ||||
| * [![icon][mail]](mailto:tszsumng90@gmail.com) | ||||
|   [![icon][github]](https://github.com/samabcde) | ||||
|     | ||||
|   Sam Ng | ||||
| * [![icon][mail]](mailto:ludwig.valda.vasquez@jetbrains.com) | ||||
|   [![icon][github]](https://github.com/ludwig-jb) | ||||
|     | ||||
|   ludwig-jb | ||||
| * [![icon][mail]](mailto:pvydmuch@gmail.com) | ||||
|   [![icon][github]](https://github.com/pWydmuch) | ||||
|     | ||||
|   pWydmuch | ||||
| * [![icon][mail]](mailto:leonid989@gmail.com) | ||||
|   [![icon][github]](https://github.com/Infonautica) | ||||
|     | ||||
|   Leonid Danilov | ||||
|  | ||||
| Previous contributors: | ||||
|  | ||||
| * [![icon][mail]](mailto:hild@b4mad.net) | ||||
|   [![icon][github-off]](#) | ||||
|     | ||||
|   Marcel Hild | ||||
| * [![icon][mail]](mailto:kevinz@weghst.com) | ||||
|   [![icon][github]](https://github.com/kevin70) | ||||
|     | ||||
|   kk | ||||
|  | ||||
|                          | ||||
| If you are a contributor and your name is not listed here, feel free to | ||||
| contact the maintainers. | ||||
|   | ||||
							
								
								
									
										220
									
								
								CHANGES.md
									
									
									
									
									
								
							
							
						
						| @@ -25,6 +25,216 @@ usual beta standards. | ||||
|  | ||||
| ## To Be Released | ||||
|  | ||||
| ### Fixes: | ||||
| * [VIM-3130](https://youtrack.jetbrains.com/issue/VIM-3130) Change the build version to 2023.1.2 | ||||
| * [VIM-3168](https://youtrack.jetbrains.com/issue/VIM-3168) Do not switch to block caret after enter if the IdeaVim is disabled | ||||
| * [VIM-3165](https://youtrack.jetbrains.com/issue/VIM-3165) Do not process enter key as IdeaVim shortcut if it's not an actual keypress | ||||
| * [VIM-3159](https://youtrack.jetbrains.com/issue/VIM-3159) Shift-enter now works in normal mode again | ||||
| * [VIM-3157](https://youtrack.jetbrains.com/issue/VIM-3157) Do not invoke enter in invokeLater for python console | ||||
| * [VIM-3195](https://youtrack.jetbrains.com/issue/VIM-3195) Fix escape in injected editor | ||||
| * [VIM-3190](https://youtrack.jetbrains.com/issue/VIM-3190) Do not use octopus handler if the enter key is used with modifiers like shift or control | ||||
| * [VIM-3203](https://youtrack.jetbrains.com/issue/VIM-3203) Split action not works in normal mode | ||||
| * [VIM-3184](https://youtrack.jetbrains.com/issue/VIM-3184) Revert "VIM-3184: Temporally disable new handlers for the thin client" | ||||
| * [VIM-3186](https://youtrack.jetbrains.com/issue/VIM-3186) Do not multiply the enter action by the amount of carets | ||||
| * [VIM-3177](https://youtrack.jetbrains.com/issue/VIM-3177) Formatting of commit message works again | ||||
| * [VIM-1611](https://youtrack.jetbrains.com/issue/VIM-1611) actions related to resolving conflicts doesn't seem to work | ||||
| * [VIM-3204](https://youtrack.jetbrains.com/issue/VIM-3204) Add checker that verifies the configuratin of the keymap | ||||
| * [VIM-3084](https://youtrack.jetbrains.com/issue/VIM-3084) Double update for the status bar icon | ||||
| * [VIM-3176](https://youtrack.jetbrains.com/issue/VIM-3176) Reselecting visual selection after pasting above it select wrong lines | ||||
| * [VIM-3206](https://youtrack.jetbrains.com/issue/VIM-3206) Disable both copilot suggestion and insert mode on a single escape | ||||
| * [VIM-3090](https://youtrack.jetbrains.com/issue/VIM-3090) Cmd line mode saves the visual mode | ||||
| * [VIM-3085](https://youtrack.jetbrains.com/issue/VIM-3085) Open access to VimTypedActionHandler and VimShortcutKeyAction | ||||
|  | ||||
| ### Merged PRs: | ||||
| * [763](https://github.com/JetBrains/ideavim/pull/763) by [Sam Ng](https://github.com/samabcde): Fix(VIM-3176) add test for restore selection after pasting in/below s… | ||||
| * [772](https://github.com/JetBrains/ideavim/pull/772) by [chylex](https://github.com/chylex): Prevent code completion popup from appearing after running a macro | ||||
| * [787](https://github.com/JetBrains/ideavim/pull/787) by [Leonid Danilov](https://github.com/Infonautica): Added "Which-Key" to Plugins | ||||
| * [778](https://github.com/JetBrains/ideavim/pull/778) by [lippfi](https://github.com/lippfi): Showmode | ||||
| * [788](https://github.com/JetBrains/ideavim/pull/788) by [Matt Ellis](https://github.com/citizenmatt): Refactor VimOptionGroupBase | ||||
|  | ||||
| ## 2.7.0, 2023-11-07 | ||||
|  | ||||
| ### Fixes: | ||||
| * [VIM-2933](https://youtrack.jetbrains.com/issue/VIM-2933) Reloading/sourcing .ideavimrc does not initialize new plugins | ||||
| * [VIM-3138](https://youtrack.jetbrains.com/issue/VIM-3138) Do not try to register disposer if the caret is already disposed | ||||
|  | ||||
| ### Merged PRs: | ||||
| * [734](https://github.com/JetBrains/ideavim/pull/734) by [Matt Ellis](https://github.com/citizenmatt): Support `~/` on Windows | ||||
| * [736](https://github.com/JetBrains/ideavim/pull/736) by [chylex](https://github.com/chylex): Fix(VIM-2933): Reloading/sourcing .ideavimrc does not initialize new plugins | ||||
|  | ||||
| ## 2.6.3, 2023-10-30 | ||||
|  | ||||
| ### Changes: | ||||
| - 2.6.0 and 2.6.1 releases are broken. Version 2.6.3 reverts IdeaVim plugin to the working state as for 2.5.1. | ||||
|  | ||||
| ## 2.6.0, 2023-10-27 | ||||
|  | ||||
| This version of IdeaVim contains a lot of issues. Version 2.6.3 reverts these changes. | ||||
|  | ||||
| ### Features: | ||||
|  | ||||
| * `ShowHoverInfo` action can be used in mappings to open a tooltip that is shown by | ||||
|   mouse hovering | [VIM-2106](https://youtrack.jetbrains.com/issue/VIM-2106) | ||||
| * `has` Vim Script function supports the most common OS checks: win32, win64, linux, mac, macunix, osx, osxdarwin, bsd, sun, unix | ||||
|   * See https://github.com/JetBrains/ideavim#vim-script for details about Vim Script | ||||
|  | ||||
| ### Fixes: | ||||
| * [VIM-3060](https://youtrack.jetbrains.com/issue/VIM-3060) Clipboard interaction stopped working | ||||
| * [VIM-3095](https://youtrack.jetbrains.com/issue/VIM-3095) Fix missing ellipsis digraph | ||||
| * [VIM-2562](https://youtrack.jetbrains.com/issue/VIM-2562) Fix hang with multi-width chars in command line | ||||
| * [VIM-696](https://youtrack.jetbrains.com/issue/VIM-696) Vim selection issue after undo | ||||
| * [VIM-1639](https://youtrack.jetbrains.com/issue/VIM-1639) Ctrl-o and Ctrl-i jumping in files of different projects | ||||
|  | ||||
| ### Merged PRs: | ||||
| * [697](https://github.com/JetBrains/ideavim/pull/697) by [Matt Ellis](https://github.com/citizenmatt): Support per-window "global" values for local-to-window options | ||||
| * [717](https://github.com/JetBrains/ideavim/pull/717) by [Matt Ellis](https://github.com/citizenmatt): Fix(VIM-2562): Fix hang with multi-width chars in command line | ||||
| * [732](https://github.com/JetBrains/ideavim/pull/732) by [pWydmuch](https://github.com/pWydmuch): Fix md links in doc | ||||
| * [733](https://github.com/JetBrains/ideavim/pull/733) by [Matt Ellis](https://github.com/citizenmatt): Add support for ShowHoverInfo action to 2023.1 and 2023.2 | ||||
| * [729](https://github.com/JetBrains/ideavim/pull/729) by [chylex](https://github.com/chylex): Add operating system type to `has()` function | ||||
| * [726](https://github.com/JetBrains/ideavim/pull/726) by [Matt Ellis](https://github.com/citizenmatt): Fix range for fall back comment mode | ||||
|  | ||||
| ## 2.5.0, 2023-09-01 | ||||
|  | ||||
| ### Fixes: | ||||
| * [VIM-802](https://youtrack.jetbrains.com/issue/VIM-802) IdeaVim vs. Vim: discrepancies in using registers | ||||
| * [VIM-2246](https://youtrack.jetbrains.com/issue/VIM-2246) X11/Xorg Primary selection register "* not supported | ||||
| * [VIM-2313](https://youtrack.jetbrains.com/issue/VIM-2313) | ||||
|   [VIM-2318](https://youtrack.jetbrains.com/issue/VIM-2318) | ||||
|   [VIM-2666](https://youtrack.jetbrains.com/issue/VIM-2666) | ||||
|   [VIM-2951](https://youtrack.jetbrains.com/issue/VIM-2951) | ||||
|   IdeaVim works correctly in read-only editors like log or tests output. | ||||
|  | ||||
| ### Merged PRs: | ||||
| * [666](https://github.com/JetBrains/ideavim/pull/666) by [Matt Ellis](https://github.com/citizenmatt): Improve formatting of `:set` command output | ||||
| * [667](https://github.com/JetBrains/ideavim/pull/667) by [Matt Ellis](https://github.com/citizenmatt): Eagerly initialise local options and introduce option scope | ||||
| * [672](https://github.com/JetBrains/ideavim/pull/672) by [Matt Ellis](https://github.com/citizenmatt): Fix issue adding back hidden status bar widget | ||||
| * [668](https://github.com/JetBrains/ideavim/pull/668) by [ludwig-jb](https://github.com/ludwig-jb): Handle unicode grapheme clusters | ||||
|  | ||||
| ## 2.4.0, 2023-07-18 | ||||
|  | ||||
| ### Fixes: | ||||
| * [VIM-2975](https://youtrack.jetbrains.com/issue/VIM-2975) Fix the offset after the rendered docs | ||||
| * [VIM-2685](https://youtrack.jetbrains.com/issue/VIM-2685) Register command outputs different values for same registers | ||||
| * [VIM-1294](https://youtrack.jetbrains.com/issue/VIM-1294) unvoluntary unfolding when using ideavim | ||||
| * [VIM-2818](https://youtrack.jetbrains.com/issue/VIM-2818) Wrong caret position after multicaret paste | ||||
|  | ||||
| ### Merged PRs: | ||||
| * [662](https://github.com/JetBrains/ideavim/pull/662) by [ludwig-jb](https://github.com/ludwig-jb): Update VimMessages#updateStatusBar to accept VimEditor | ||||
| * [659](https://github.com/JetBrains/ideavim/pull/659) by [Sam Ng](https://github.com/samabcde): VIM-2920 fix select block expansion when enclose boundary is line break | ||||
|  | ||||
| ## 2.3.0, 2023-06-14 | ||||
|  | ||||
| ### Features: | ||||
| * Matchit now supports PHP files | [VIM-2678](https://youtrack.jetbrains.com/issue/VIM-2678) | ||||
|  | ||||
| ### Fixes: | ||||
| * [VIM-2909](https://youtrack.jetbrains.com/issue/VIM-2909) Fix incorrect file detection while closing diff window | ||||
| * [VIM-2912](https://youtrack.jetbrains.com/issue/VIM-2912) Fix focus after :q | ||||
| * [VIM-2930](https://youtrack.jetbrains.com/issue/VIM-2930) vim-multiple-cursors + ReplaceWithRegister issue | ||||
| * [VIM-2945](https://youtrack.jetbrains.com/issue/VIM-2945) %-movement mismatches braces | ||||
| * [VIM-2953](https://youtrack.jetbrains.com/issue/VIM-2953) The previous fix for :q command caused weird behavior of tab closing | ||||
| * [VIM-2964](https://youtrack.jetbrains.com/issue/VIM-2964) Fix an issue with leaking caret instance | ||||
|  | ||||
| ### Merged PRs: | ||||
| * [616](https://github.com/JetBrains/ideavim/pull/616) by [Matt Ellis](https://github.com/citizenmatt): Refactor/option delegated properties | ||||
| * [626](https://github.com/JetBrains/ideavim/pull/626) by [Martin Yzeiri](https://github.com/myzeiri): Matchit bug fixes | ||||
| * [619](https://github.com/JetBrains/ideavim/pull/619) by [Matt Ellis](https://github.com/citizenmatt): Fix some local options being used as global options | ||||
| * [638](https://github.com/JetBrains/ideavim/pull/638) by [Sam Ng](https://github.com/samabcde): VIM-2615 add support to sort u command | ||||
| * [646](https://github.com/JetBrains/ideavim/pull/646) by [Sam Ng](https://github.com/samabcde): VIM-1990 fix repeat delete find or till wrong MotionType | ||||
| * [649](https://github.com/JetBrains/ideavim/pull/649) by [Martin Yzeiri](https://github.com/myzeiri): Add Matchit support for PHP  | ||||
|  | ||||
| ## 2.2.0, 2023-04-20 | ||||
|  | ||||
| ### Features: | ||||
| * Now every secondary caret has its own marks. You can use marks and `gv` in multiple-caret mode now. | ||||
|  | ||||
| ### Fixes: | ||||
| * [VIM-1829](https://youtrack.jetbrains.com/issue/VIM-1829/key-combinations-are-not-working-in-visual-mode-IdeaVim) Fix marks when moving lines up/down | ||||
| * [VIM-2130](https://youtrack.jetbrains.com/issue/VIM-2130/Vim-visual-mode-mapping-isnt-behaving-correctly-in-ideavim-it-leaves-visual-mode-after-its-executed) Fix marks when moving lines up/down | ||||
| * [VIM-2428](https://youtrack.jetbrains.com/issue/VIM-2428/The-gv-command-doesnt-work) Fix marks when moving lines up/down | ||||
| * [VIM-2686](https://youtrack.jetbrains.com/issue/VIM-2686/Multiple-caret-marks) Add individual mark storage for each secondary caret | ||||
| * [VIM-2840](https://youtrack.jetbrains.com/issue/VIM-2840) Replace with register does not work with count | ||||
| * [VIM-658](https://youtrack.jetbrains.com/issue/VIM-658) Stop macro on error | ||||
| * [VIM-2787](https://youtrack.jetbrains.com/issue/VIM-2787) Save ideavimrc loading | ||||
| * [VIM-2850](https://youtrack.jetbrains.com/issue/VIM-2850) Marks exception during IDE startup  | ||||
| * [VIM-2804](https://youtrack.jetbrains.com/issue/VIM-2804) IdeaVim multiple-cursors copy and paste issue when "set clipboard+=unnamed" | ||||
| * [VIM-1768](https://youtrack.jetbrains.com/issue/VIM-1768) Delete surrounding character while in multiple cursors mode | ||||
| * [VIM-282](https://youtrack.jetbrains.com/issue/VIM-282) Cursor line wrapping support (whichwrap) | ||||
| * [VIM-2315](https://youtrack.jetbrains.com/issue/VIM-2315) Fix overlapping mappings execution | ||||
| * [VIM-44](https://youtrack.jetbrains.com/issue/VIM-44) Unify navigation history between ideavim and idea | ||||
| * [VIM-1735](https://youtrack.jetbrains.com/issue/VIM-1735) Fix enabling mulple carets after line selection | ||||
| * [VIM-2881](https://youtrack.jetbrains.com/issue/VIM-2881) ReplaceRegister does no longer worker with MultiCursor | ||||
| * [VIM-2244](https://youtrack.jetbrains.com/issue/VIM-2244) nnoremap mapping doesn't work correctly | ||||
| * [VIM-2885](https://youtrack.jetbrains.com/issue/VIM-2885) "v:searchforward" does't work for IdeaVim | ||||
| * [VIM-2733](https://youtrack.jetbrains.com/issue/VIM-2733) vim-surround emulation interacts incorrectly with unmatched quotes on previous lines | ||||
| * [VIM-2884](https://youtrack.jetbrains.com/issue/VIM-2884) Moving multiple lines in visual mode is not working | ||||
| * [VIM-2868](https://youtrack.jetbrains.com/issue/VIM-2868) Pasting in visual mode with P should not replace yank register like when pasting with p | ||||
| * [VIM-2819](https://youtrack.jetbrains.com/issue/VIM-2819) Move command works incorrectly | ||||
| * [VIM-795](https://youtrack.jetbrains.com/issue/VIM-795) Ctrl-w + h doesn't alway work (window navigation to the left window) | ||||
| * [VIM-1551](https://youtrack.jetbrains.com/issue/VIM-1551) Surround: line surround not working | ||||
| * [VIM-1746](https://youtrack.jetbrains.com/issue/VIM-1746) IdeaVim Surround removes unwanted characters | ||||
| * [VIM-1750](https://youtrack.jetbrains.com/issue/VIM-1750) Surround with tag wrong position | ||||
| * [VIM-2286](https://youtrack.jetbrains.com/issue/VIM-2286) Set surround not working for me as expected | ||||
| * [VIM-2433](https://youtrack.jetbrains.com/issue/VIM-2433) Do not clear clipboard after inserting with ideaput | ||||
| * [VIM-2896](https://youtrack.jetbrains.com/issue/VIM-2896) Correct ordering of handlers | ||||
| * [VIM-2912](https://youtrack.jetbrains.com/issue/VIM-2912) Fix focus after :q | ||||
| * [VIM-2909](https://youtrack.jetbrains.com/issue/VIM-2909) Fix incorrect file detection while closing diff window | ||||
|  | ||||
| ### Merged PRs: | ||||
| * [589](https://github.com/JetBrains/ideavim/pull/589) by [Matt Ellis](https://github.com/citizenmatt): Refactor option usage and introduce accessor API | ||||
| * [604](https://github.com/JetBrains/ideavim/pull/604) by [Dominic Palmer](https://github.com/dominicpalmer): VIM-2773: Include empty lines in the selection when dragging backwards from EOL | ||||
| * [603](https://github.com/JetBrains/ideavim/pull/603) by [Dominic Palmer](https://github.com/dominicpalmer): VIM-2773: Prevent viewport displacement on undo | ||||
| * [602](https://github.com/JetBrains/ideavim/pull/602) by [Matt Ellis](https://github.com/citizenmatt): Refactor options service | ||||
| * [612](https://github.com/JetBrains/ideavim/pull/612) by [Dani Sevastianov](https://github.com/danisevas): Fix quick-scope setup documentation | ||||
| * [617](https://github.com/JetBrains/ideavim/pull/617) by [Silence Tai](https://github.com/Stzx): Fix dispose operation | ||||
|  | ||||
| ## 2.1.0, 2023-01-10 | ||||
|  | ||||
| ### Features: | ||||
| * Add IdeaVim tutor. You can access it via the status bar icon. | ||||
|  | ||||
| ### Fixes: | ||||
| * [VIM-2797](https://youtrack.jetbrains.com/issue/VIM-2797) Introduce variable to mute default argtextobj mappings | ||||
| * [VIM-758](https://youtrack.jetbrains.com/issue/VIM-758) Support d mappings | ||||
| * [VIM-2577](https://youtrack.jetbrains.com/issue/VIM-2577) Fix paste at the end of notebook cell | ||||
| * [VIM-2813](https://youtrack.jetbrains.com/issue/VIM-2813) Migrate update checker to VimStandalonePluginUpdateChecker | ||||
| * [VIM-2833](https://youtrack.jetbrains.com/issue/VIM-2833) Fix rare deadlock during put in insert mode from clipboard | ||||
|  | ||||
| ### Merged PRs: | ||||
| * [558](https://github.com/JetBrains/ideavim/pull/558) by [Matt Ellis](https://github.com/citizenmatt): Fix incorrect normalising for trailing inlay | ||||
| * [554](https://github.com/JetBrains/ideavim/pull/554) by [Matt Ellis](https://github.com/citizenmatt): Refactor "last column" calculations | ||||
| * [553](https://github.com/JetBrains/ideavim/pull/553) by [Matt Ellis](https://github.com/citizenmatt): Rearrange and rename some code in engine | ||||
| * [560](https://github.com/JetBrains/ideavim/pull/560) by [Runinho](https://github.com/Runinho): Fix(VIM-2577) paste not working at end of notebook cell | ||||
| * [571](https://github.com/JetBrains/ideavim/pull/571) by [Ada](https://github.com/adaext): Remove the redundant quotation mark at the end of "packadd matchit" command | ||||
| * [561](https://github.com/JetBrains/ideavim/pull/561) by [Matt Ellis](https://github.com/citizenmatt): Fix incremental search not scrolling to current match | ||||
| * [559](https://github.com/JetBrains/ideavim/pull/559) by [Runinho](https://github.com/Runinho): Fix(VIM-2760) notebookCommandMode detection | ||||
| * [579](https://github.com/JetBrains/ideavim/pull/579) by [Martin Yzeiri](https://github.com/myzeiri): VIM-2799: Add Matchit support for cshtml files | ||||
| * [580](https://github.com/JetBrains/ideavim/pull/580) by [Martin Yzeiri](https://github.com/myzeiri): Matchit: Add more Rider file types | ||||
| * [583](https://github.com/JetBrains/ideavim/pull/583) by [Matt Ellis](https://github.com/citizenmatt): Introduce ScrollGroup | ||||
| * [586](https://github.com/JetBrains/ideavim/pull/586) by [Patrick Elmquist](https://github.com/patrick-elmquist): Fixed number references in Tutor | ||||
|  | ||||
| ## 2.0.0, 2022-11-01 | ||||
|  | ||||
| ### Changes: | ||||
| * IdeaVim changes license from GPL-2.0 or later to MIT. [VIM-2782](https://youtrack.jetbrains.com/issue/VIM-2782) | ||||
|  | ||||
| ## 1.12.0, 2022-11-01 | ||||
|  | ||||
| ### Fixes: | ||||
| * [VIM-1758](https://youtrack.jetbrains.com/issue/VIM-1758) Commentary plugin in rider | ||||
| * [VIM-1903](https://youtrack.jetbrains.com/issue/VIM-1903) Autoindent now works in rider | ||||
| * [VIM-2744](https://youtrack.jetbrains.com/issue/VIM-2744) Fix undo from ex line | ||||
| * [VIM-2749](https://youtrack.jetbrains.com/issue/VIM-2749) Fix :tabn and :tabN commands | ||||
| * [VIM-2718](https://youtrack.jetbrains.com/issue/VIM-2718) Fixed case where the primary caret was changed | ||||
| * [VIM-2766](https://youtrack.jetbrains.com/issue/VIM-2766) Move NERDTree update to background thread | ||||
| * [VIM-2768](https://youtrack.jetbrains.com/issue/VIM-2768) Refactor listeners | ||||
| * [VIM-2776](https://youtrack.jetbrains.com/issue/VIM-2776) Use filename index for file search | ||||
|  | ||||
| ### Merged PRs: | ||||
| * [550](https://github.com/JetBrains/ideavim/pull/550) by [Matt Ellis](https://github.com/citizenmatt): Fix(VIM-2778) Remove override of editor scroll setting | ||||
|  | ||||
| ## 1.11.0, 2022-08-09 | ||||
|  | ||||
| ### Features: | ||||
| * Add `gcu` command for Commentary plugin | ||||
| * Add `:Commentary` command, which works great for commands such as `:%g/fun/Commentary` | ||||
| @@ -36,6 +246,7 @@ usual beta standards. | ||||
|   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. | ||||
| * New vim (and IdeaVim) behaviour: `ci(`& friends searches for the brackets in the line. | ||||
|  | ||||
| ### Fixes: | ||||
| * [VIM-2587](https://youtrack.jetbrains.com/issue/VIM-2587) Use ctrl-6 as ctrl-^ | ||||
| @@ -52,11 +263,14 @@ usual beta standards. | ||||
| * [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 | ||||
| * [VIM-2227](https://youtrack.jetbrains.com/issue/VIM-2227) Wrong behavior when deleting / changing surround with invalid character | ||||
| * [VIM-2691](https://youtrack.jetbrains.com/issue/VIM-2691) Save file on :w | ||||
| * [VIM-2710](https://youtrack.jetbrains.com/issue/VIM-2710) Show options value on `set opt` | ||||
| * [VIM-913](https://youtrack.jetbrains.com/issue/VIM-913) Partially fix the issue with macros and autocompletion | ||||
| * [VIM-2723](https://youtrack.jetbrains.com/issue/VIM-2723) Move focus to editor after :q | ||||
| * [VIM-2728](https://youtrack.jetbrains.com/issue/VIM-2728) Give access to global variables | ||||
|  | ||||
| ### Merged PRs: | ||||
| * [468](https://github.com/JetBrains/ideavim/pull/468) by [Thomas Schouten](https://github.com/PHPirates): Implement UserDataHolder for EditorDataContext | ||||
| @@ -66,6 +280,10 @@ usual beta standards. | ||||
| * [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 | ||||
| * [519](https://github.com/JetBrains/ideavim/pull/519) by [chylex](https://github.com/chylex): Fix(VIM-2227): Wrong behavior when deleting / changing surround with invalid character | ||||
| * [525](https://github.com/JetBrains/ideavim/pull/525) by [Matt Ellis](https://github.com/citizenmatt): Improve handling of fractional width fonts | ||||
| * [526](https://github.com/JetBrains/ideavim/pull/526) by [Alex Pláte](https://github.com/AlexPl292): Create gradle.properties | ||||
| * [528](https://github.com/JetBrains/ideavim/pull/528) by [chylex](https://github.com/chylex): Implement partial code completion support in macros | ||||
| * [531](https://github.com/JetBrains/ideavim/pull/531) by [Matt Ellis](https://github.com/citizenmatt): Consolidate doTest methods | ||||
|  | ||||
| ## 1.10.0, 2022-02-17 | ||||
|  | ||||
|   | ||||
| @@ -5,7 +5,7 @@ IdeaVim is an open source project created by 80+ contributors. Would you like to | ||||
| This page is created to help you start contributing. And who knows, maybe in a few days this project will be brighter than ever! | ||||
|  | ||||
| :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/). | ||||
| support the new [Fleet IDE](https://www.jetbrains.com/fleet/). Please see [Fleet refactoring](#Fleet-refactoring). | ||||
|  | ||||
| ## Before you begin | ||||
|  | ||||
| @@ -32,7 +32,11 @@ OK, ready to do some coding? | ||||
| Yoo hoo! You’re all set to begin contributing. | ||||
| We've prepared some useful configurations for you: | ||||
|  | ||||
|  | ||||
| - `Start IJ with IdeaVim` | ||||
| - `IdeaVim tests` | ||||
| - `IdeaVim full verification` | ||||
|  | ||||
|  | ||||
|  | ||||
| And here are useful gradle commands: | ||||
|  | ||||
| @@ -87,9 +91,16 @@ Here are some guides for testing: | ||||
|  | ||||
| 1. Read the javadoc for the `@VimBehaviorDiffers` annotation in the source code. | ||||
|  | ||||
| 2. Please avoid senseless text like "dhjkwaldjwa", "asdasdasd", "123 123 123 123", etc. Try to choose an example | ||||
| text that is easy to read and understand what is wrong if the test fails. For example, take a few lines from your | ||||
| favorite poem, or use Vladimir Nabokov’s “A Discovery" if you don't have one. | ||||
| 2. Please avoid senseless text like "dhjkwaldjwa", "asdasdasd", "123 123 123 123", etc. Use a few lines of code or | ||||
| the following template: | ||||
| ```text | ||||
| Lorem Ipsum | ||||
|  | ||||
| Lorem ipsum dolor sit amet, | ||||
| consectetur adipiscing elit | ||||
| Sed in orci mauris. | ||||
| Cras id tellus in ex imperdiet egestas. | ||||
| ``` | ||||
|  | ||||
| 3. Don't forget to test your functionality with line start, line end, file start, file end, empty line, multiple | ||||
| carets, dollar motion, etc. | ||||
| @@ -120,6 +131,17 @@ 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`. | ||||
|  | ||||
|  | ||||
| ## Fleet refactoring | ||||
| At the moment, IdeaVim is under an active refactoring aiming to split IdeaVim into two modules: vim-engine and IdeaVim. | ||||
|  | ||||
| If you develop a plugin that depends on IdeaVim: We have an instrument to check that our changes don't affect | ||||
| the plugins in the marketplace. Also, we commit to support currently used API at least till the end of 2022. | ||||
| If you still encounter any issues with the newer versions of IdeaVim, please [contact maintainers](https://github.com/JetBrains/ideavim#contact-maintainers). | ||||
| We kindly ask you not to use anything from the new API (like `VimEditor`, `injector`) because at the moment we don't | ||||
| guarantee the compatibility of this API in the future versions. | ||||
|  | ||||
|  | ||||
| ----- | ||||
|  | ||||
| ### I read the whole page but something is still unclear. | ||||
| @@ -138,7 +160,7 @@ This is just terrible. [You know what to do](https://github.com/JetBrains/ideavi | ||||
|  | ||||
| ### Resources: | ||||
|  | ||||
| * [Continuous integration builds](https://teamcity.jetbrains.com/project.html?projectId=IdeaVim&guest=1) | ||||
| * [Continuous integration builds](https://ideavim.teamcity.com/) | ||||
| * [Bug tracker](https://youtrack.jetbrains.com/issues/VIM) | ||||
| * [Chat on gitter](https://gitter.im/JetBrains/ideavim) | ||||
| * [IdeaVim Channel](https://jb.gg/bi6zp7) on [JetBrains Server](https://discord.gg/jetbrains) | ||||
| @@ -146,5 +168,5 @@ This is just terrible. [You know what to do](https://github.com/JetBrains/ideavi | ||||
| * [Changelog](CHANGES.md) | ||||
| * [Contributors listing](AUTHORS.md) | ||||
|  | ||||
| [teamcity-build-status]: https://teamcity.jetbrains.com/viewType.html?buildTypeId=IdeaVim_TestsForIntelliJEAP&guest=1 | ||||
| [teamcity-build-status-svg]: https://teamcity.jetbrains.com/app/rest/builds/buildType:(id:IdeaVim_TestsForIntelliJEAP)/statusIcon.svg?guest=1 | ||||
| [teamcity-build-status]: https://ideavim.teamcity.com/viewType.html?buildTypeId=Ideavim_IdeaVimTests_Latest_EAP&guest=1 | ||||
| [teamcity-build-status-svg]: https://ideavim.teamcity.com/app/rest/builds/buildType:(id:Ideavim_IdeaVimTests_Latest_EAP)/statusIcon.svg?guest=1 | ||||
|   | ||||
							
								
								
									
										352
									
								
								LICENSE.txt
									
									
									
									
									
								
							
							
						
						| @@ -1,339 +1,21 @@ | ||||
|                     GNU GENERAL PUBLIC LICENSE | ||||
|                        Version 2, June 1991 | ||||
| MIT License | ||||
|  | ||||
|  Copyright (C) 1989, 1991 Free Software Foundation, Inc., | ||||
|  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | ||||
|  Everyone is permitted to copy and distribute verbatim copies | ||||
|  of this license document, but changing it is not allowed. | ||||
| Copyright (c) 2003-present The IdeaVim authors | ||||
|  | ||||
|                             Preamble | ||||
| Permission is hereby granted, free of charge, to any person obtaining a copy | ||||
| of this software and associated documentation files (the "Software"), to deal | ||||
| in the Software without restriction, including without limitation the rights | ||||
| to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||||
| copies of the Software, and to permit persons to whom the Software is | ||||
| furnished to do so, subject to the following conditions: | ||||
|  | ||||
|   The licenses for most software are designed to take away your | ||||
| freedom to share and change it.  By contrast, the GNU General Public | ||||
| License is intended to guarantee your freedom to share and change free | ||||
| software--to make sure the software is free for all its users.  This | ||||
| General Public License applies to most of the Free Software | ||||
| Foundation's software and to any other program whose authors commit to | ||||
| using it.  (Some other Free Software Foundation software is covered by | ||||
| the GNU Lesser General Public License instead.)  You can apply it to | ||||
| your programs, too. | ||||
| The above copyright notice and this permission notice shall be included in all | ||||
| copies or substantial portions of the Software. | ||||
|  | ||||
|   When we speak of free software, we are referring to freedom, not | ||||
| price.  Our General Public Licenses are designed to make sure that you | ||||
| have the freedom to distribute copies of free software (and charge for | ||||
| this service if you wish), that you receive source code or can get it | ||||
| if you want it, that you can change the software or use pieces of it | ||||
| in new free programs; and that you know you can do these things. | ||||
|  | ||||
|   To protect your rights, we need to make restrictions that forbid | ||||
| anyone to deny you these rights or to ask you to surrender the rights. | ||||
| These restrictions translate to certain responsibilities for you if you | ||||
| distribute copies of the software, or if you modify it. | ||||
|  | ||||
|   For example, if you distribute copies of such a program, whether | ||||
| gratis or for a fee, you must give the recipients all the rights that | ||||
| you have.  You must make sure that they, too, receive or can get the | ||||
| source code.  And you must show them these terms so they know their | ||||
| rights. | ||||
|  | ||||
|   We protect your rights with two steps: (1) copyright the software, and | ||||
| (2) offer you this license which gives you legal permission to copy, | ||||
| distribute and/or modify the software. | ||||
|  | ||||
|   Also, for each author's protection and ours, we want to make certain | ||||
| that everyone understands that there is no warranty for this free | ||||
| software.  If the software is modified by someone else and passed on, we | ||||
| want its recipients to know that what they have is not the original, so | ||||
| that any problems introduced by others will not reflect on the original | ||||
| authors' reputations. | ||||
|  | ||||
|   Finally, any free program is threatened constantly by software | ||||
| patents.  We wish to avoid the danger that redistributors of a free | ||||
| program will individually obtain patent licenses, in effect making the | ||||
| program proprietary.  To prevent this, we have made it clear that any | ||||
| patent must be licensed for everyone's free use or not licensed at all. | ||||
|  | ||||
|   The precise terms and conditions for copying, distribution and | ||||
| modification follow. | ||||
|  | ||||
|                     GNU GENERAL PUBLIC LICENSE | ||||
|    TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION | ||||
|  | ||||
|   0. This License applies to any program or other work which contains | ||||
| a notice placed by the copyright holder saying it may be distributed | ||||
| under the terms of this General Public License.  The "Program", below, | ||||
| refers to any such program or work, and a "work based on the Program" | ||||
| means either the Program or any derivative work under copyright law: | ||||
| that is to say, a work containing the Program or a portion of it, | ||||
| either verbatim or with modifications and/or translated into another | ||||
| language.  (Hereinafter, translation is included without limitation in | ||||
| the term "modification".)  Each licensee is addressed as "you". | ||||
|  | ||||
| Activities other than copying, distribution and modification are not | ||||
| covered by this License; they are outside its scope.  The act of | ||||
| running the Program is not restricted, and the output from the Program | ||||
| is covered only if its contents constitute a work based on the | ||||
| Program (independent of having been made by running the Program). | ||||
| Whether that is true depends on what the Program does. | ||||
|  | ||||
|   1. You may copy and distribute verbatim copies of the Program's | ||||
| source code as you receive it, in any medium, provided that you | ||||
| conspicuously and appropriately publish on each copy an appropriate | ||||
| copyright notice and disclaimer of warranty; keep intact all the | ||||
| notices that refer to this License and to the absence of any warranty; | ||||
| and give any other recipients of the Program a copy of this License | ||||
| along with the Program. | ||||
|  | ||||
| You may charge a fee for the physical act of transferring a copy, and | ||||
| you may at your option offer warranty protection in exchange for a fee. | ||||
|  | ||||
|   2. You may modify your copy or copies of the Program or any portion | ||||
| of it, thus forming a work based on the Program, and copy and | ||||
| distribute such modifications or work under the terms of Section 1 | ||||
| above, provided that you also meet all of these conditions: | ||||
|  | ||||
|     a) You must cause the modified files to carry prominent notices | ||||
|     stating that you changed the files and the date of any change. | ||||
|  | ||||
|     b) You must cause any work that you distribute or publish, that in | ||||
|     whole or in part contains or is derived from the Program or any | ||||
|     part thereof, to be licensed as a whole at no charge to all third | ||||
|     parties under the terms of this License. | ||||
|  | ||||
|     c) If the modified program normally reads commands interactively | ||||
|     when run, you must cause it, when started running for such | ||||
|     interactive use in the most ordinary way, to print or display an | ||||
|     announcement including an appropriate copyright notice and a | ||||
|     notice that there is no warranty (or else, saying that you provide | ||||
|     a warranty) and that users may redistribute the program under | ||||
|     these conditions, and telling the user how to view a copy of this | ||||
|     License.  (Exception: if the Program itself is interactive but | ||||
|     does not normally print such an announcement, your work based on | ||||
|     the Program is not required to print an announcement.) | ||||
|  | ||||
| These requirements apply to the modified work as a whole.  If | ||||
| identifiable sections of that work are not derived from the Program, | ||||
| and can be reasonably considered independent and separate works in | ||||
| themselves, then this License, and its terms, do not apply to those | ||||
| sections when you distribute them as separate works.  But when you | ||||
| distribute the same sections as part of a whole which is a work based | ||||
| on the Program, the distribution of the whole must be on the terms of | ||||
| this License, whose permissions for other licensees extend to the | ||||
| entire whole, and thus to each and every part regardless of who wrote it. | ||||
|  | ||||
| Thus, it is not the intent of this section to claim rights or contest | ||||
| your rights to work written entirely by you; rather, the intent is to | ||||
| exercise the right to control the distribution of derivative or | ||||
| collective works based on the Program. | ||||
|  | ||||
| In addition, mere aggregation of another work not based on the Program | ||||
| with the Program (or with a work based on the Program) on a volume of | ||||
| a storage or distribution medium does not bring the other work under | ||||
| the scope of this License. | ||||
|  | ||||
|   3. You may copy and distribute the Program (or a work based on it, | ||||
| under Section 2) in object code or executable form under the terms of | ||||
| Sections 1 and 2 above provided that you also do one of the following: | ||||
|  | ||||
|     a) Accompany it with the complete corresponding machine-readable | ||||
|     source code, which must be distributed under the terms of Sections | ||||
|     1 and 2 above on a medium customarily used for software interchange; or, | ||||
|  | ||||
|     b) Accompany it with a written offer, valid for at least three | ||||
|     years, to give any third party, for a charge no more than your | ||||
|     cost of physically performing source distribution, a complete | ||||
|     machine-readable copy of the corresponding source code, to be | ||||
|     distributed under the terms of Sections 1 and 2 above on a medium | ||||
|     customarily used for software interchange; or, | ||||
|  | ||||
|     c) Accompany it with the information you received as to the offer | ||||
|     to distribute corresponding source code.  (This alternative is | ||||
|     allowed only for noncommercial distribution and only if you | ||||
|     received the program in object code or executable form with such | ||||
|     an offer, in accord with Subsection b above.) | ||||
|  | ||||
| The source code for a work means the preferred form of the work for | ||||
| making modifications to it.  For an executable work, complete source | ||||
| code means all the source code for all modules it contains, plus any | ||||
| associated interface definition files, plus the scripts used to | ||||
| control compilation and installation of the executable.  However, as a | ||||
| special exception, the source code distributed need not include | ||||
| anything that is normally distributed (in either source or binary | ||||
| form) with the major components (compiler, kernel, and so on) of the | ||||
| operating system on which the executable runs, unless that component | ||||
| itself accompanies the executable. | ||||
|  | ||||
| If distribution of executable or object code is made by offering | ||||
| access to copy from a designated place, then offering equivalent | ||||
| access to copy the source code from the same place counts as | ||||
| distribution of the source code, even though third parties are not | ||||
| compelled to copy the source along with the object code. | ||||
|  | ||||
|   4. You may not copy, modify, sublicense, or distribute the Program | ||||
| except as expressly provided under this License.  Any attempt | ||||
| otherwise to copy, modify, sublicense or distribute the Program is | ||||
| void, and will automatically terminate your rights under this License. | ||||
| However, parties who have received copies, or rights, from you under | ||||
| this License will not have their licenses terminated so long as such | ||||
| parties remain in full compliance. | ||||
|  | ||||
|   5. You are not required to accept this License, since you have not | ||||
| signed it.  However, nothing else grants you permission to modify or | ||||
| distribute the Program or its derivative works.  These actions are | ||||
| prohibited by law if you do not accept this License.  Therefore, by | ||||
| modifying or distributing the Program (or any work based on the | ||||
| Program), you indicate your acceptance of this License to do so, and | ||||
| all its terms and conditions for copying, distributing or modifying | ||||
| the Program or works based on it. | ||||
|  | ||||
|   6. Each time you redistribute the Program (or any work based on the | ||||
| Program), the recipient automatically receives a license from the | ||||
| original licensor to copy, distribute or modify the Program subject to | ||||
| these terms and conditions.  You may not impose any further | ||||
| restrictions on the recipients' exercise of the rights granted herein. | ||||
| You are not responsible for enforcing compliance by third parties to | ||||
| this License. | ||||
|  | ||||
|   7. If, as a consequence of a court judgment or allegation of patent | ||||
| infringement or for any other reason (not limited to patent issues), | ||||
| conditions are imposed on you (whether by court order, agreement or | ||||
| otherwise) that contradict the conditions of this License, they do not | ||||
| excuse you from the conditions of this License.  If you cannot | ||||
| distribute so as to satisfy simultaneously your obligations under this | ||||
| License and any other pertinent obligations, then as a consequence you | ||||
| may not distribute the Program at all.  For example, if a patent | ||||
| license would not permit royalty-free redistribution of the Program by | ||||
| all those who receive copies directly or indirectly through you, then | ||||
| the only way you could satisfy both it and this License would be to | ||||
| refrain entirely from distribution of the Program. | ||||
|  | ||||
| If any portion of this section is held invalid or unenforceable under | ||||
| any particular circumstance, the balance of the section is intended to | ||||
| apply and the section as a whole is intended to apply in other | ||||
| circumstances. | ||||
|  | ||||
| It is not the purpose of this section to induce you to infringe any | ||||
| patents or other property right claims or to contest validity of any | ||||
| such claims; this section has the sole purpose of protecting the | ||||
| integrity of the free software distribution system, which is | ||||
| implemented by public license practices.  Many people have made | ||||
| generous contributions to the wide range of software distributed | ||||
| through that system in reliance on consistent application of that | ||||
| system; it is up to the author/donor to decide if he or she is willing | ||||
| to distribute software through any other system and a licensee cannot | ||||
| impose that choice. | ||||
|  | ||||
| This section is intended to make thoroughly clear what is believed to | ||||
| be a consequence of the rest of this License. | ||||
|  | ||||
|   8. If the distribution and/or use of the Program is restricted in | ||||
| certain countries either by patents or by copyrighted interfaces, the | ||||
| original copyright holder who places the Program under this License | ||||
| may add an explicit geographical distribution limitation excluding | ||||
| those countries, so that distribution is permitted only in or among | ||||
| countries not thus excluded.  In such case, this License incorporates | ||||
| the limitation as if written in the body of this License. | ||||
|  | ||||
|   9. The Free Software Foundation may publish revised and/or new versions | ||||
| of the General Public License from time to time.  Such new versions will | ||||
| be similar in spirit to the present version, but may differ in detail to | ||||
| address new problems or concerns. | ||||
|  | ||||
| Each version is given a distinguishing version number.  If the Program | ||||
| specifies a version number of this License which applies to it and "any | ||||
| later version", you have the option of following the terms and conditions | ||||
| either of that version or of any later version published by the Free | ||||
| Software Foundation.  If the Program does not specify a version number of | ||||
| this License, you may choose any version ever published by the Free Software | ||||
| Foundation. | ||||
|  | ||||
|   10. If you wish to incorporate parts of the Program into other free | ||||
| programs whose distribution conditions are different, write to the author | ||||
| to ask for permission.  For software which is copyrighted by the Free | ||||
| Software Foundation, write to the Free Software Foundation; we sometimes | ||||
| make exceptions for this.  Our decision will be guided by the two goals | ||||
| of preserving the free status of all derivatives of our free software and | ||||
| of promoting the sharing and reuse of software generally. | ||||
|  | ||||
|                             NO WARRANTY | ||||
|  | ||||
|   11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY | ||||
| FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN | ||||
| OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES | ||||
| PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED | ||||
| OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | ||||
| MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS | ||||
| TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE | ||||
| PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, | ||||
| REPAIR OR CORRECTION. | ||||
|  | ||||
|   12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING | ||||
| WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR | ||||
| REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, | ||||
| INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING | ||||
| OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED | ||||
| TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY | ||||
| YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER | ||||
| PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE | ||||
| POSSIBILITY OF SUCH DAMAGES. | ||||
|  | ||||
|                      END OF TERMS AND CONDITIONS | ||||
|  | ||||
|             How to Apply These Terms to Your New Programs | ||||
|  | ||||
|   If you develop a new program, and you want it to be of the greatest | ||||
| possible use to the public, the best way to achieve this is to make it | ||||
| free software which everyone can redistribute and change under these terms. | ||||
|  | ||||
|   To do so, attach the following notices to the program.  It is safest | ||||
| to attach them to the start of each source file to most effectively | ||||
| convey the exclusion of warranty; and each file should have at least | ||||
| the "copyright" line and a pointer to where the full notice is found. | ||||
|  | ||||
|     <one line to give the program's name and a brief idea of what it does.> | ||||
|     Copyright (C) <year>  <name of author> | ||||
|  | ||||
|     This program is free software; you can redistribute it and/or modify | ||||
|     it under the terms of the GNU General Public License as published by | ||||
|     the Free Software Foundation; either version 2 of the License, or | ||||
|     (at your option) any later version. | ||||
|  | ||||
|     This program is distributed in the hope that it will be useful, | ||||
|     but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|     GNU General Public License for more details. | ||||
|  | ||||
|     You should have received a copy of the GNU General Public License along | ||||
|     with this program; if not, write to the Free Software Foundation, Inc., | ||||
|     51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||||
|  | ||||
| Also add information on how to contact you by electronic and paper mail. | ||||
|  | ||||
| If the program is interactive, make it output a short notice like this | ||||
| when it starts in an interactive mode: | ||||
|  | ||||
|     Gnomovision version 69, Copyright (C) year name of author | ||||
|     Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. | ||||
|     This is free software, and you are welcome to redistribute it | ||||
|     under certain conditions; type `show c' for details. | ||||
|  | ||||
| The hypothetical commands `show w' and `show c' should show the appropriate | ||||
| parts of the General Public License.  Of course, the commands you use may | ||||
| be called something other than `show w' and `show c'; they could even be | ||||
| mouse-clicks or menu items--whatever suits your program. | ||||
|  | ||||
| You should also get your employer (if you work as a programmer) or your | ||||
| school, if any, to sign a "copyright disclaimer" for the program, if | ||||
| necessary.  Here is a sample; alter the names: | ||||
|  | ||||
|   Yoyodyne, Inc., hereby disclaims all copyright interest in the program | ||||
|   `Gnomovision' (which makes passes at compilers) written by James Hacker. | ||||
|  | ||||
|   <signature of Ty Coon>, 1 April 1989 | ||||
|   Ty Coon, President of Vice | ||||
|  | ||||
| This General Public License does not permit incorporating your program into | ||||
| proprietary programs.  If your program is a subroutine library, you may | ||||
| consider it more useful to permit linking proprietary applications with the | ||||
| library.  If this is what you want to do, use the GNU Lesser General | ||||
| Public License instead of this License. | ||||
| THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||||
| IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||
| FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||||
| AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||||
| LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||||
| OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||||
| SOFTWARE. | ||||
|   | ||||
							
								
								
									
										54
									
								
								README.md
									
									
									
									
									
								
							
							
						
						| @@ -9,9 +9,10 @@ IdeaVim | ||||
| [![Rating][plugin-rating-svg]][plugin-repo] | ||||
| [![Version][plugin-version-svg]][plugin-repo] | ||||
| [![Gitter][gitter-svg]][gitter] | ||||
| [](https://codecov.io/gh/JetBrains/ideavim) | ||||
| [![Twitter][twitter-svg]][twitter] | ||||
|  | ||||
| IdeaVim is a Vim emulation plugin for IntelliJ Platform-based IDEs. | ||||
| IdeaVim is a Vim engine for JetBrains IDEs. | ||||
|  | ||||
| ##### Contact maintainers: | ||||
| * [Bug tracker](https://youtrack.jetbrains.com/issues/VIM) | ||||
| @@ -21,9 +22,10 @@ IdeaVim is a Vim emulation plugin for IntelliJ Platform-based IDEs. | ||||
|  | ||||
| ##### Resources: | ||||
|  | ||||
| * [Plugin homepage](https://plugins.jetbrains.com/plugin/164-ideavim) | ||||
| * [Plugin homepage](https://lp.jetbrains.com/ideavim/) | ||||
| * [Plugin on Marketplace](https://plugins.jetbrains.com/plugin/164-ideavim) | ||||
| * [Changelog](CHANGES.md) | ||||
| * [Continuous integration builds](https://teamcity.jetbrains.com/project.html?projectId=IdeaVim&guest=1) | ||||
| * [Continuous integration builds](https://ideavim.teamcity.com/) | ||||
|  | ||||
| #### Compatibility | ||||
|  | ||||
| @@ -36,7 +38,7 @@ Setup | ||||
| - IdeaVim can be installed via `Settings | Plugins`. | ||||
| See the [detailed instructions](https://www.jetbrains.com/help/idea/managing-plugins.html#). | ||||
|  | ||||
| - Use `Tools | Vim Emulator` in the menu to enable or disable emulation. | ||||
| - Use `Tools | Vim` in the menu to enable or disable vim. | ||||
|  | ||||
| - Use the `~/.ideavimrc` file as an analog of `~/.vimrc` ([learn more](#Files)). The XDG standard is supported, as well. | ||||
|  | ||||
| @@ -52,7 +54,7 @@ Would you like to try new features and fixes? Join the Early Access Program and | ||||
| receive EAP builds as updates!   | ||||
|  | ||||
| 1. Click the  IdeaVim icon <img src="src/main/resources/META-INF/pluginIcon_noBorders.svg" width="16" height="16" alt="icon"/> | ||||
| in the status bar  | `Early Access Program` | `Subscibe to EAP` | ||||
| in the status bar  | `Early Access Program` | `Subscribe to EAP` | ||||
|  | ||||
|  | ||||
| Or subscribe to EAP updates manually: | ||||
| @@ -88,7 +90,7 @@ Here are some examples of supported vim features and commands: | ||||
| * Vim web help | ||||
| * `~/.ideavimrc` configuration file | ||||
|  | ||||
| [Emulated Vim plugins](https://github.com/JetBrains/ideavim/wiki/Emulated-plugins): | ||||
| [IdeaVim plugins](https://github.com/JetBrains/ideavim/wiki/IdeaVim-Plugins): | ||||
|  | ||||
| * vim-easymotion | ||||
| * NERDTree | ||||
| @@ -102,7 +104,8 @@ Here are some examples of supported vim features and commands: | ||||
| * vim-highlightedyank | ||||
| * vim-paragraph-motion | ||||
| * vim-indent-object | ||||
| * match.it | ||||
| * match.it   | ||||
| etc | ||||
|  | ||||
| See also: | ||||
|  | ||||
| @@ -198,10 +201,10 @@ Alternatively, you can set up initialization commands using [XDG](https://specif | ||||
| Put your settings to `$XDG_CONFIG_HOME/ideavim/ideavimrc` file. | ||||
|  | ||||
|  | ||||
| Emulated Vim Plugins | ||||
| IdeaVim Plugins | ||||
| -------------------- | ||||
|  | ||||
| See [doc/emulated-plugins.md](https://github.com/JetBrains/ideavim/wiki/Emulated-plugins) | ||||
| See [doc/IdeaVim Plugins.md](https://github.com/JetBrains/ideavim/wiki/IdeaVim-Plugins) | ||||
|  | ||||
| Executing IDE Actions | ||||
| --------------------- | ||||
| @@ -210,14 +213,14 @@ IdeaVim adds various commands for listing and executing arbitrary IDE actions as | ||||
| Ex commands or via `:map` command mappings: | ||||
|  | ||||
| ### Executing actions: | ||||
| * `:action {action_id}` | ||||
|     * Execute an action by `{action_id}`. Works from Ex command line. | ||||
|     * Please don't use `:action` in mappings. Use `<Action>` instead. | ||||
| * `<Action>({action_id})` | ||||
|     * For the mappings you can use a special `<Action>` keyword. Don't forget the parentheses. | ||||
|     * E.g. `map gh <Action>(ShowErrorDescription)`  <- execute hover on `gh`. | ||||
|     * :warning: Mappings to `<Action>` don't work with `noremap`.  | ||||
|       If you know the case when it's needed, please [let us know](https://github.com/JetBrains/ideavim#contact-maintainers). | ||||
| * `:action {action_id}` | ||||
|     * Execute an action by `{action_id}`. Works from Ex command line. | ||||
|     * Please don't use `:action` in mappings. Use `<Action>` instead. | ||||
|  | ||||
| ### Finding action ids: | ||||
|  | ||||
| @@ -226,7 +229,10 @@ Ex commands or via `:map` command mappings: | ||||
|  | ||||
|     <details> | ||||
|         <summary><strong>"Track action Ids" Details</strong> (click to see)</summary> | ||||
|         <img src="assets/readme/track_action_id.gif" alt="track action ids"/> | ||||
|         <picture> | ||||
|             <source media="(prefers-color-scheme: dark)" srcset="assets/readme/track_action_dark.gif"> | ||||
|             <img src="assets/readme/track_action_light.gif" alt="track action ids"/> | ||||
|         </picture> | ||||
|     </details> | ||||
|  | ||||
|  | ||||
| @@ -249,8 +255,7 @@ Ex commands or via `:map` command mappings: | ||||
| ##### Some popular actions: | ||||
|  | ||||
| ``` | ||||
| QuickJavaDoc - Quick Documentation (not only for java, all languages) | ||||
| ShowErrorDescription - Show description of the error under the caret (cursor hovering) | ||||
| ShowHoverInfo - Quick Documentation and Error Description | ||||
| QuickImplementations - Quick Definition | ||||
| ``` | ||||
|  | ||||
| @@ -319,7 +324,7 @@ 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` | ||||
|     - Sync IJ bookmarks and IdeaVim global marks: `set ideamarks` (works for marks with capital letters only) | ||||
|     - 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`. | ||||
| @@ -347,9 +352,12 @@ is the source of this knowledge. | ||||
| [Here](https://github.com/vim/vim/blob/759d81549c1340185f0d92524c563bb37697ea88/src/normal.c#L5365) | ||||
| is the full list of synonyms. | ||||
|  | ||||
| - You can read a [post](https://github.com/JetBrains/ideavim/wiki/how-many-modes-does-vim-have) about how modes work in Vim and IdeaVim. | ||||
|  | ||||
| - Have you ever used `U` after `dd`? [Don't even try](https://github.com/vim/vim/blob/759d81549c1340185f0d92524c563bb37697ea88/src/ops.c#L874). | ||||
|  | ||||
| - A lot of variables that refers to visual mode start with two uppercase letters, e.g. `VIsual_active`. [Some examples](https://github.com/vim/vim/blob/master/src/normal.c#L17). | ||||
| - A lot of variables that refer to visual mode start with two uppercase letters, e.g. `VIsual_active`. [Some examples](https://github.com/vim/vim/blob/master/src/normal.c#L17). | ||||
|   As mentioned [here](https://vi.stackexchange.com/a/42885/12441), this was done this way to avoid the clash with X11. | ||||
|  | ||||
| - Other [strange things](https://github.com/vim/vim/blob/759d81549c1340185f0d92524c563bb37697ea88/src/ex_docmd.c#L1845) from vi: | ||||
|     * ":3"       jumps to line 3 | ||||
| @@ -358,11 +366,19 @@ is the full list of synonyms. | ||||
|  | ||||
| - Vim script doesn't skip white space before comma. `F(a ,b)` => E475. | ||||
|  | ||||
| - Fancy constants for [undolevels](https://vimhelp.org/options.txt.html#%27undolevels%27): | ||||
|   > The local value is set to -123456 when the global value is to be used. | ||||
|  | ||||
| License | ||||
| ------- | ||||
|  | ||||
| IdeaVim is licensed under the terms of the GNU Public License version 2 | ||||
| or any later version. | ||||
| IdeaVim is licensed under the MIT license. | ||||
|  | ||||
| Third-party components and licenses are listed in [ThirdPartyLicenses.md](ThirdPartyLicenses.md). | ||||
|  | ||||
| All releases before 2.0.0 were licensed under terms of GPL-2.0 or later. | ||||
| The last commit before switch to MIT is 05852b07c6090ad40fde7d3cafe0b074604f7ac5. | ||||
| You can read more about the license change here: https://github.com/JetBrains/ideavim/discussions/543 | ||||
|  | ||||
|  | ||||
| <!-- Badges --> | ||||
|   | ||||
							
								
								
									
										86
									
								
								ThirdPartyLicenses.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,86 @@ | ||||
| IdeaVim project is licensed under MIT license except the following parts of it: | ||||
|  | ||||
| * File [RegExp.kt](src/main/java/com/maddyhome/idea/vim/regexp/RegExp.kt) is licensed under Vim License.   | ||||
| * File [ScrollViewHelper.kt](com/maddyhome/idea/vim/helper/ScrollViewHelper.kt) is licensed under Vim License. | ||||
| * File [Tutor.kt](src/main/java/com/maddyhome/idea/vim/ui/Tutor.kt) is licensed under Vim License. | ||||
|  | ||||
| ``` | ||||
| VIM LICENSE | ||||
|  | ||||
| I)  There are no restrictions on distributing unmodified copies of Vim except | ||||
|     that they must include this license text.  You can also distribute | ||||
|     unmodified parts of Vim, likewise unrestricted except that they must | ||||
|     include this license text.  You are also allowed to include executables | ||||
|     that you made from the unmodified Vim sources, plus your own usage | ||||
|     examples and Vim scripts. | ||||
|  | ||||
| II) It is allowed to distribute a modified (or extended) version of Vim, | ||||
|     including executables and/or source code, when the following four | ||||
|     conditions are met: | ||||
|     1) This license text must be included unmodified. | ||||
|     2) The modified Vim must be distributed in one of the following five ways: | ||||
|        a) If you make changes to Vim yourself, you must clearly describe in | ||||
|           the distribution how to contact you.  When the maintainer asks you | ||||
|           (in any way) for a copy of the modified Vim you distributed, you | ||||
|           must make your changes, including source code, available to the | ||||
|           maintainer without fee.  The maintainer reserves the right to | ||||
|           include your changes in the official version of Vim.  What the | ||||
|           maintainer will do with your changes and under what license they | ||||
|           will be distributed is negotiable.  If there has been no negotiation | ||||
|           then this license, or a later version, also applies to your changes. | ||||
|           The current maintainers are listed here: https://github.com/orgs/vim/people. | ||||
|           If this changes it will be announced in appropriate places (most likely | ||||
|           vim.sf.net, www.vim.org and/or comp.editors). When it is completely | ||||
|           impossible to contact the maintainer, the obligation to send him | ||||
|           your changes ceases.  Once the maintainer has confirmed that he has | ||||
|           received your changes they will not have to be sent again. | ||||
|        b) If you have received a modified Vim that was distributed as | ||||
|           mentioned under a) you are allowed to further distribute it | ||||
|           unmodified, as mentioned at I).  If you make additional changes the | ||||
|           text under a) applies to those changes. | ||||
|        c) Provide all the changes, including source code, with every copy of | ||||
|           the modified Vim you distribute.  This may be done in the form of a | ||||
|           context diff.  You can choose what license to use for new code you | ||||
|           add.  The changes and their license must not restrict others from | ||||
|           making their own changes to the official version of Vim. | ||||
|        d) When you have a modified Vim which includes changes as mentioned | ||||
|           under c), you can distribute it without the source code for the | ||||
|           changes if the following three conditions are met: | ||||
|           - The license that applies to the changes permits you to distribute | ||||
|             the changes to the Vim maintainer without fee or restriction, and | ||||
|             permits the Vim maintainer to include the changes in the official | ||||
|             version of Vim without fee or restriction. | ||||
|           - You keep the changes for at least three years after last | ||||
|             distributing the corresponding modified Vim.  When the maintainer | ||||
|             or someone who you distributed the modified Vim to asks you (in | ||||
|             any way) for the changes within this period, you must make them | ||||
|             available to him. | ||||
|           - You clearly describe in the distribution how to contact you.  This | ||||
|             contact information must remain valid for at least three years | ||||
|             after last distributing the corresponding modified Vim, or as long | ||||
|             as possible. | ||||
|        e) When the GNU General Public License (GPL) applies to the changes, | ||||
|           you can distribute the modified Vim under the GNU GPL version 2 or | ||||
|           any later version. | ||||
|     3) A message must be added, at least in the output of the ":version" | ||||
|        command and in the intro screen, such that the user of the modified Vim | ||||
|        is able to see that it was modified.  When distributing as mentioned | ||||
|        under 2)e) adding the message is only required for as far as this does | ||||
|        not conflict with the license used for the changes. | ||||
|     4) The contact information as required under 2)a) and 2)d) must not be | ||||
|        removed or changed, except that the person himself can make | ||||
|        corrections. | ||||
|  | ||||
| III) If you distribute a modified version of Vim, you are encouraged to use | ||||
|      the Vim license for your changes and make them available to the | ||||
|      maintainer, including the source code.  The preferred way to do this is | ||||
|      by e-mail or by uploading the files to a server and e-mailing the URL. | ||||
|      If the number of changes is small (e.g., a modified Makefile) e-mailing a | ||||
|      context diff will do.  The e-mail address to be used is | ||||
|      <maintainer@vim.org> | ||||
|  | ||||
| IV)  It is not allowed to remove this license from the distribution of the Vim | ||||
|      sources, parts of it or from a modified version.  You may use this | ||||
|      license for previous Vim releases instead of the license that they came | ||||
|      with, at your option. | ||||
| ``` | ||||
							
								
								
									
										42
									
								
								annotation-processors/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,42 @@ | ||||
| .gradle | ||||
| build/ | ||||
| !gradle/wrapper/gradle-wrapper.jar | ||||
| !**/src/main/**/build/ | ||||
| !**/src/test/**/build/ | ||||
|  | ||||
| ### IntelliJ IDEA ### | ||||
| .idea/modules.xml | ||||
| .idea/jarRepositories.xml | ||||
| .idea/compiler.xml | ||||
| .idea/libraries/ | ||||
| *.iws | ||||
| *.iml | ||||
| *.ipr | ||||
| out/ | ||||
| !**/src/main/**/out/ | ||||
| !**/src/test/**/out/ | ||||
|  | ||||
| ### Eclipse ### | ||||
| .apt_generated | ||||
| .classpath | ||||
| .factorypath | ||||
| .project | ||||
| .settings | ||||
| .springBeans | ||||
| .sts4-cache | ||||
| bin/ | ||||
| !**/src/main/**/bin/ | ||||
| !**/src/test/**/bin/ | ||||
|  | ||||
| ### NetBeans ### | ||||
| /nbproject/private/ | ||||
| /nbbuild/ | ||||
| /dist/ | ||||
| /nbdist/ | ||||
| /.nb-gradle/ | ||||
|  | ||||
| ### VS Code ### | ||||
| .vscode/ | ||||
|  | ||||
| ### Mac OS ### | ||||
| .DS_Store | ||||
							
								
								
									
										30
									
								
								annotation-processors/build.gradle.kts
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,30 @@ | ||||
| /* | ||||
|  * Copyright 2003-2023 The IdeaVim authors | ||||
|  * | ||||
|  * Use of this source code is governed by an MIT-style | ||||
|  * license that can be found in the LICENSE.txt file or at | ||||
|  * https://opensource.org/licenses/MIT. | ||||
|  */ | ||||
|  | ||||
| plugins { | ||||
|   kotlin("jvm") | ||||
|   kotlin("plugin.serialization") version "1.8.21" | ||||
| } | ||||
|  | ||||
| val kotlinxSerializationVersion: String by project | ||||
|  | ||||
| group = "com.intellij" | ||||
| version = "SNAPSHOT" | ||||
|  | ||||
| repositories { | ||||
|   mavenCentral() | ||||
| } | ||||
|  | ||||
| dependencies { | ||||
|   compileOnly("com.google.devtools.ksp:symbol-processing-api:1.9.22-1.0.16") | ||||
|   implementation("org.jetbrains.kotlinx:kotlinx-serialization-json-jvm:$kotlinxSerializationVersion") { | ||||
|     // kotlin stdlib is provided by IJ, so there is no need to include it into the distribution | ||||
|     exclude("org.jetbrains.kotlin", "kotlin-stdlib") | ||||
|     exclude("org.jetbrains.kotlin", "kotlin-stdlib-common") | ||||
|   } | ||||
| } | ||||
| @@ -0,0 +1,55 @@ | ||||
| /* | ||||
|  * Copyright 2003-2023 The IdeaVim authors | ||||
|  * | ||||
|  * Use of this source code is governed by an MIT-style | ||||
|  * license that can be found in the LICENSE.txt file or at | ||||
|  * https://opensource.org/licenses/MIT. | ||||
|  */ | ||||
|  | ||||
| package com.intellij.vim.annotations | ||||
|  | ||||
| // TODO support numpad keys parsing, see :keycodes | ||||
| /** | ||||
|  * It's not necessary a Vim command | ||||
|  * This annotation may be used for: | ||||
|  * - commands | ||||
|  * - motions | ||||
|  */ | ||||
| @Target(AnnotationTarget.CLASS) | ||||
| @Retention(AnnotationRetention.SOURCE) | ||||
| annotation class CommandOrMotion(val keys: Array<String>, vararg val modes: Mode) | ||||
|  | ||||
| annotation class TextObject(val keys: String) | ||||
|  | ||||
|  | ||||
| enum class Mode(val abbrev: Char) { | ||||
|   /** | ||||
|    * Indicates this key mapping applies to Normal mode | ||||
|    */ | ||||
|   NORMAL('N'), | ||||
|  | ||||
|   /** | ||||
|    * Indicates this key mapping applies to Visual mode | ||||
|    */ | ||||
|   VISUAL('X'), | ||||
|  | ||||
|   /** | ||||
|    * Indicates this key mapping applies to Select mode | ||||
|    */ | ||||
|   SELECT('S'), | ||||
|  | ||||
|   /** | ||||
|    * Indicates this key mapping applies to Operator Pending mode | ||||
|    */ | ||||
|   OP_PENDING('O'), | ||||
|  | ||||
|   /** | ||||
|    * Indicates this key mapping applies to Insert or Replace modes | ||||
|    */ | ||||
|   INSERT('I'), | ||||
|  | ||||
|   /** | ||||
|    * Indicates this key mapping applies to Command Line mode | ||||
|    */ | ||||
|   CMD_LINE('C'), | ||||
| } | ||||
| @@ -0,0 +1,16 @@ | ||||
| /* | ||||
|  * Copyright 2003-2023 The IdeaVim authors | ||||
|  * | ||||
|  * Use of this source code is governed by an MIT-style | ||||
|  * license that can be found in the LICENSE.txt file or at | ||||
|  * https://opensource.org/licenses/MIT. | ||||
|  */ | ||||
|  | ||||
| package com.intellij.vim.annotations | ||||
|  | ||||
| /** | ||||
|  * [command] is formatted the same way it is formatted in Vim (with optional part in square brackets). | ||||
|  */ | ||||
| @Target(AnnotationTarget.CLASS) | ||||
| @Retention(AnnotationRetention.SOURCE) | ||||
| annotation class ExCommand(val command: String) | ||||
| @@ -0,0 +1,13 @@ | ||||
| /* | ||||
|  * Copyright 2003-2023 The IdeaVim authors | ||||
|  * | ||||
|  * Use of this source code is governed by an MIT-style | ||||
|  * license that can be found in the LICENSE.txt file or at | ||||
|  * https://opensource.org/licenses/MIT. | ||||
|  */ | ||||
|  | ||||
| package com.intellij.vim.annotations | ||||
|  | ||||
| @Target(AnnotationTarget.CLASS) | ||||
| @Retention(AnnotationRetention.SOURCE) | ||||
| annotation class VimscriptFunction(val name: String) | ||||
| @@ -0,0 +1,14 @@ | ||||
| /* | ||||
|  * Copyright 2003-2023 The IdeaVim authors | ||||
|  * | ||||
|  * Use of this source code is governed by an MIT-style | ||||
|  * license that can be found in the LICENSE.txt file or at | ||||
|  * https://opensource.org/licenses/MIT. | ||||
|  */ | ||||
|  | ||||
| package com.intellij.vim.processors | ||||
|  | ||||
| import kotlinx.serialization.Serializable | ||||
|  | ||||
| @Serializable | ||||
| data class CommandBean(val keys: String, val `class`: String, val modes: String) | ||||
| @@ -0,0 +1,62 @@ | ||||
| /* | ||||
|  * Copyright 2003-2023 The IdeaVim authors | ||||
|  * | ||||
|  * Use of this source code is governed by an MIT-style | ||||
|  * license that can be found in the LICENSE.txt file or at | ||||
|  * https://opensource.org/licenses/MIT. | ||||
|  */ | ||||
|  | ||||
| package com.intellij.vim.processors | ||||
|  | ||||
| import com.google.devtools.ksp.KspExperimental | ||||
| import com.google.devtools.ksp.getAnnotationsByType | ||||
| import com.google.devtools.ksp.processing.Resolver | ||||
| import com.google.devtools.ksp.processing.SymbolProcessor | ||||
| import com.google.devtools.ksp.processing.SymbolProcessorEnvironment | ||||
| import com.google.devtools.ksp.symbol.KSAnnotated | ||||
| import com.google.devtools.ksp.symbol.KSClassDeclaration | ||||
| import com.google.devtools.ksp.symbol.KSFile | ||||
| import com.google.devtools.ksp.symbol.KSVisitorVoid | ||||
| import com.intellij.vim.annotations.CommandOrMotion | ||||
| import kotlinx.serialization.encodeToString | ||||
| import kotlinx.serialization.json.Json | ||||
| import java.nio.file.Files | ||||
| import kotlin.io.path.Path | ||||
| import kotlin.io.path.writeText | ||||
|  | ||||
| class CommandOrMotionProcessor(private val environment: SymbolProcessorEnvironment): SymbolProcessor { | ||||
|   private val visitor = CommandOrMotionVisitor() | ||||
|   private val commands = mutableListOf<CommandBean>() | ||||
|  | ||||
|   private val json = Json { prettyPrint = true } | ||||
|  | ||||
|   override fun process(resolver: Resolver): List<KSAnnotated> { | ||||
|     resolver.getAllFiles().forEach { it.accept(visitor, Unit) } | ||||
|  | ||||
|     val generatedDirPath = Path(environment.options["generated_directory"]!!) | ||||
|     Files.createDirectories(generatedDirPath) | ||||
|  | ||||
|     val filePath = generatedDirPath.resolve(environment.options["commands_file"]!!) | ||||
|     val fileContent = json.encodeToString(commands) | ||||
|     filePath.writeText(fileContent) | ||||
|  | ||||
|     return emptyList() | ||||
|   } | ||||
|  | ||||
|   private inner class CommandOrMotionVisitor : KSVisitorVoid() { | ||||
|     @OptIn(KspExperimental::class) | ||||
|     override fun visitClassDeclaration(classDeclaration: KSClassDeclaration, data: Unit) { | ||||
|       val commandAnnotation = classDeclaration.getAnnotationsByType(CommandOrMotion::class).firstOrNull() ?: return | ||||
|       for (key in commandAnnotation.keys) { | ||||
|         commands.add( | ||||
|           CommandBean(key, classDeclaration.qualifiedName!!.asString(), commandAnnotation.modes.map { it.abbrev }.joinToString(separator = "")) | ||||
|         ) | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     override fun visitFile(file: KSFile, data: Unit) { | ||||
|       file.declarations.forEach { it.accept(this, Unit) } | ||||
|     } | ||||
|   } | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,60 @@ | ||||
| /* | ||||
|  * Copyright 2003-2023 The IdeaVim authors | ||||
|  * | ||||
|  * Use of this source code is governed by an MIT-style | ||||
|  * license that can be found in the LICENSE.txt file or at | ||||
|  * https://opensource.org/licenses/MIT. | ||||
|  */ | ||||
|  | ||||
| package com.intellij.vim.processors | ||||
|  | ||||
| import com.google.devtools.ksp.KspExperimental | ||||
| import com.google.devtools.ksp.getAnnotationsByType | ||||
| import com.google.devtools.ksp.processing.Resolver | ||||
| import com.google.devtools.ksp.processing.SymbolProcessor | ||||
| import com.google.devtools.ksp.processing.SymbolProcessorEnvironment | ||||
| import com.google.devtools.ksp.symbol.KSAnnotated | ||||
| import com.google.devtools.ksp.symbol.KSClassDeclaration | ||||
| import com.google.devtools.ksp.symbol.KSFile | ||||
| import com.google.devtools.ksp.symbol.KSVisitorVoid | ||||
| import com.intellij.vim.annotations.ExCommand | ||||
| import kotlinx.serialization.encodeToString | ||||
| import kotlinx.serialization.json.Json | ||||
| import java.nio.file.Files | ||||
| import kotlin.io.path.Path | ||||
| import kotlin.io.path.writeText | ||||
|  | ||||
| class ExCommandProcessor(private val environment: SymbolProcessorEnvironment): SymbolProcessor { | ||||
|   private val visitor = EXCommandVisitor() | ||||
|   private val commandToClass = mutableMapOf<String, String>() | ||||
|  | ||||
|   private val json = Json { prettyPrint = true } | ||||
|  | ||||
|   override fun process(resolver: Resolver): List<KSAnnotated> { | ||||
|     resolver.getAllFiles().forEach { it.accept(visitor, Unit) } | ||||
|  | ||||
|     val generatedDirPath = Path(environment.options["generated_directory"]!!) | ||||
|     Files.createDirectories(generatedDirPath) | ||||
|  | ||||
|     val filePath = generatedDirPath.resolve(environment.options["ex_commands_file"]!!) | ||||
|     val fileContent = json.encodeToString(commandToClass) | ||||
|     filePath.writeText(fileContent) | ||||
|  | ||||
|     return emptyList() | ||||
|   } | ||||
|  | ||||
|   private inner class EXCommandVisitor : KSVisitorVoid() { | ||||
|     @OptIn(KspExperimental::class) | ||||
|     override fun visitClassDeclaration(classDeclaration: KSClassDeclaration, data: Unit) { | ||||
|       val exCommandAnnotation = classDeclaration.getAnnotationsByType(ExCommand::class).firstOrNull() ?: return | ||||
|       val commands = exCommandAnnotation.command.split(",") | ||||
|       for (command in commands) { | ||||
|         commandToClass[command] = classDeclaration.qualifiedName!!.asString() | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     override fun visitFile(file: KSFile, data: Unit) { | ||||
|       file.declarations.forEach { it.accept(this, Unit) } | ||||
|     } | ||||
|   } | ||||
| } | ||||
| @@ -0,0 +1,60 @@ | ||||
| /* | ||||
|  * Copyright 2003-2023 The IdeaVim authors | ||||
|  * | ||||
|  * Use of this source code is governed by an MIT-style | ||||
|  * license that can be found in the LICENSE.txt file or at | ||||
|  * https://opensource.org/licenses/MIT. | ||||
|  */ | ||||
|  | ||||
| package com.intellij.vim.processors | ||||
|  | ||||
| import com.google.devtools.ksp.KspExperimental | ||||
| import com.google.devtools.ksp.getAnnotationsByType | ||||
| import com.google.devtools.ksp.processing.Resolver | ||||
| import com.google.devtools.ksp.processing.SymbolProcessor | ||||
| import com.google.devtools.ksp.processing.SymbolProcessorEnvironment | ||||
| import com.google.devtools.ksp.symbol.KSAnnotated | ||||
| import com.google.devtools.ksp.symbol.KSClassDeclaration | ||||
| import com.google.devtools.ksp.symbol.KSFile | ||||
| import com.google.devtools.ksp.symbol.KSVisitorVoid | ||||
| import com.intellij.vim.annotations.VimscriptFunction | ||||
| import kotlinx.serialization.encodeToString | ||||
| import kotlinx.serialization.json.Json | ||||
| import java.nio.file.Files | ||||
| import kotlin.io.path.Path | ||||
| import kotlin.io.path.writeText | ||||
|  | ||||
| class VimscriptFunctionProcessor(private val environment: SymbolProcessorEnvironment) : SymbolProcessor { | ||||
|   private val visitor = VimscriptFunctionVisitor() | ||||
|   private val nameToClass = mutableMapOf<String, String>() | ||||
|  | ||||
|   private val json = Json { prettyPrint = true } | ||||
|  | ||||
|   override fun process(resolver: Resolver): List<KSAnnotated> { | ||||
|     resolver.getAllFiles().forEach { it.accept(visitor, Unit) } | ||||
|  | ||||
|     val generatedDirPath = Path(environment.options["generated_directory"]!!) | ||||
|     Files.createDirectories(generatedDirPath) | ||||
|  | ||||
|     val filePath = generatedDirPath.resolve(environment.options["vimscript_functions_file"]!!) | ||||
|     val fileContent = json.encodeToString(nameToClass) | ||||
|     filePath.writeText(fileContent) | ||||
|  | ||||
|     return emptyList() | ||||
|   } | ||||
|  | ||||
|   // todo inspection that annotation is properly used on proper classes | ||||
|   private inner class VimscriptFunctionVisitor : KSVisitorVoid() { | ||||
|     @OptIn(KspExperimental::class) | ||||
|     override fun visitClassDeclaration(classDeclaration: KSClassDeclaration, data: Unit) { | ||||
|       val vimscriptFunctionAnnotation = classDeclaration.getAnnotationsByType(VimscriptFunction::class).firstOrNull() ?: return | ||||
|       val functionName = vimscriptFunctionAnnotation.name | ||||
|       nameToClass[functionName] = classDeclaration.qualifiedName!!.asString() | ||||
|     } | ||||
|  | ||||
|     override fun visitFile(file: KSFile, data: Unit) { | ||||
|       file.declarations.forEach { it.accept(this, Unit) } | ||||
|     } | ||||
|   } | ||||
| } | ||||
|  | ||||
| @@ -0,0 +1,20 @@ | ||||
| /* | ||||
|  * Copyright 2003-2023 The IdeaVim authors | ||||
|  * | ||||
|  * Use of this source code is governed by an MIT-style | ||||
|  * license that can be found in the LICENSE.txt file or at | ||||
|  * https://opensource.org/licenses/MIT. | ||||
|  */ | ||||
|  | ||||
| package com.intellij.vim.providers | ||||
|  | ||||
| import com.google.devtools.ksp.processing.SymbolProcessor | ||||
| import com.google.devtools.ksp.processing.SymbolProcessorEnvironment | ||||
| import com.google.devtools.ksp.processing.SymbolProcessorProvider | ||||
| import com.intellij.vim.processors.CommandOrMotionProcessor | ||||
|  | ||||
| class CommandOrMotionProcessorProvider : SymbolProcessorProvider { | ||||
|   override fun create(environment: SymbolProcessorEnvironment): SymbolProcessor { | ||||
|     return CommandOrMotionProcessor(environment) | ||||
|   } | ||||
| } | ||||
| @@ -0,0 +1,20 @@ | ||||
| /* | ||||
|  * Copyright 2003-2023 The IdeaVim authors | ||||
|  * | ||||
|  * Use of this source code is governed by an MIT-style | ||||
|  * license that can be found in the LICENSE.txt file or at | ||||
|  * https://opensource.org/licenses/MIT. | ||||
|  */ | ||||
|  | ||||
| package com.intellij.vim.providers | ||||
|  | ||||
| import com.google.devtools.ksp.processing.SymbolProcessor | ||||
| import com.google.devtools.ksp.processing.SymbolProcessorEnvironment | ||||
| import com.google.devtools.ksp.processing.SymbolProcessorProvider | ||||
| import com.intellij.vim.processors.ExCommandProcessor | ||||
|  | ||||
| class ExCommandProcessorProvider : SymbolProcessorProvider { | ||||
|   override fun create(environment: SymbolProcessorEnvironment): SymbolProcessor { | ||||
|     return ExCommandProcessor(environment) | ||||
|   } | ||||
| } | ||||
| @@ -0,0 +1,20 @@ | ||||
| /* | ||||
|  * Copyright 2003-2023 The IdeaVim authors | ||||
|  * | ||||
|  * Use of this source code is governed by an MIT-style | ||||
|  * license that can be found in the LICENSE.txt file or at | ||||
|  * https://opensource.org/licenses/MIT. | ||||
|  */ | ||||
|  | ||||
| package com.intellij.vim.providers | ||||
|  | ||||
| import com.google.devtools.ksp.processing.SymbolProcessor | ||||
| import com.google.devtools.ksp.processing.SymbolProcessorEnvironment | ||||
| import com.google.devtools.ksp.processing.SymbolProcessorProvider | ||||
| import com.intellij.vim.processors.VimscriptFunctionProcessor | ||||
|  | ||||
| public class VimscriptFunctionProcessorProvider : SymbolProcessorProvider { | ||||
|   override fun create(environment: SymbolProcessorEnvironment): SymbolProcessor { | ||||
|     return VimscriptFunctionProcessor(environment) | ||||
|   } | ||||
| } | ||||
| @@ -0,0 +1,3 @@ | ||||
| com.intellij.vim.providers.CommandOrMotionProcessorProvider | ||||
| com.intellij.vim.providers.ExCommandProcessorProvider | ||||
| com.intellij.vim.providers.VimscriptFunctionProcessorProvider | ||||
							
								
								
									
										
											BIN
										
									
								
								assets/contributing/configs-dark.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 27 KiB | 
							
								
								
									
										
											BIN
										
									
								
								assets/contributing/configs-light.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 31 KiB | 
| Before Width: | Height: | Size: 22 KiB | 
							
								
								
									
										
											BIN
										
									
								
								assets/readme/track_action_dark.gif
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 1.0 MiB | 
| Before Width: | Height: | Size: 2.1 MiB | 
							
								
								
									
										
											BIN
										
									
								
								assets/readme/track_action_light.gif
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 981 KiB | 
							
								
								
									
										546
									
								
								build.gradle.kts
									
									
									
									
									
								
							
							
						
						| @@ -1,6 +1,39 @@ | ||||
| /* | ||||
|  * Copyright 2003-2023 The IdeaVim authors | ||||
|  * | ||||
|  * Use of this source code is governed by an MIT-style | ||||
|  * license that can be found in the LICENSE.txt file or at | ||||
|  * https://opensource.org/licenses/MIT. | ||||
|  */ | ||||
|  | ||||
| import dev.feedforward.markdownto.DownParser | ||||
| import io.ktor.client.* | ||||
| import io.ktor.client.call.* | ||||
| import io.ktor.client.engine.cio.* | ||||
| import io.ktor.client.plugins.auth.* | ||||
| import io.ktor.client.plugins.auth.providers.* | ||||
| import io.ktor.client.plugins.contentnegotiation.* | ||||
| import io.ktor.client.request.* | ||||
| import io.ktor.http.* | ||||
| import io.ktor.serialization.kotlinx.json.* | ||||
| import kotlinx.coroutines.runBlocking | ||||
| import kotlinx.serialization.json.Json | ||||
| import kotlinx.serialization.json.JsonArray | ||||
| import kotlinx.serialization.json.JsonObject | ||||
| import kotlinx.serialization.json.addJsonObject | ||||
| import kotlinx.serialization.json.buildJsonObject | ||||
| import kotlinx.serialization.json.jsonArray | ||||
| import kotlinx.serialization.json.jsonObject | ||||
| import kotlinx.serialization.json.jsonPrimitive | ||||
| import kotlinx.serialization.json.put | ||||
| import kotlinx.serialization.json.putJsonArray | ||||
| import kotlinx.serialization.json.putJsonObject | ||||
| import org.eclipse.jgit.api.Git | ||||
| import org.eclipse.jgit.lib.RepositoryBuilder | ||||
| import org.intellij.markdown.ast.getTextInNode | ||||
| import org.jetbrains.changelog.Changelog | ||||
| import org.jetbrains.changelog.exceptions.MissingVersionException | ||||
| import org.kohsuke.github.GHUser | ||||
| import java.net.HttpURLConnection | ||||
| import java.net.URL | ||||
|  | ||||
| @@ -11,24 +44,54 @@ buildscript { | ||||
|     } | ||||
|  | ||||
|     dependencies { | ||||
|         classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.21") | ||||
|         classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.21") | ||||
|         classpath("com.github.AlexPl292:mark-down-to-slack:1.1.2") | ||||
|         classpath("org.eclipse.jgit:org.eclipse.jgit:6.1.0.202203080745-r") | ||||
|         classpath("org.eclipse.jgit:org.eclipse.jgit:6.6.0.202305301015-r") | ||||
|  | ||||
|         // This is needed for jgit to connect to ssh | ||||
|         classpath("org.eclipse.jgit:org.eclipse.jgit.ssh.apache:6.8.0.202311291450-r") | ||||
|         classpath("org.kohsuke:github-api:1.305") | ||||
|         classpath("org.jetbrains:markdown:0.3.1") | ||||
|  | ||||
|         classpath("io.ktor:ktor-client-core:2.3.7") | ||||
|         classpath("io.ktor:ktor-client-cio:2.3.7") | ||||
|         classpath("io.ktor:ktor-client-auth:2.3.7") | ||||
|         classpath("io.ktor:ktor-client-content-negotiation:2.3.7") | ||||
|         classpath("io.ktor:ktor-serialization-kotlinx-json:2.3.7") | ||||
|  | ||||
|         // This comes from the changelog plugin | ||||
| //        classpath("org.jetbrains:markdown:0.3.1") | ||||
|     } | ||||
| } | ||||
|  | ||||
| plugins { | ||||
|     antlr | ||||
|     java | ||||
|     kotlin("jvm") version "1.6.21" | ||||
|     kotlin("jvm") version "1.8.21" | ||||
|     application | ||||
|  | ||||
|     id("org.jetbrains.intellij") version "1.7.0-SNAPSHOT" | ||||
|     id("org.jetbrains.changelog") version "1.3.1" | ||||
|     id("org.jetbrains.intellij") version "1.16.1" | ||||
|     id("org.jetbrains.changelog") version "2.2.0" | ||||
|  | ||||
|     // ktlint linter - read more: https://github.com/JLLeitschuh/ktlint-gradle | ||||
|     id("org.jlleitschuh.gradle.ktlint") version "10.2.1" | ||||
| //    id("org.jlleitschuh.gradle.ktlint") version "11.3.1" | ||||
|  | ||||
|     id("org.jetbrains.kotlinx.kover") version "0.6.1" | ||||
|     id("com.dorongold.task-tree") version "2.1.1" | ||||
|  | ||||
|     id("com.google.devtools.ksp") version "1.8.21-1.0.11" | ||||
| } | ||||
|  | ||||
| ksp { | ||||
|   arg("generated_directory", "$projectDir/src/main/resources/ksp-generated") | ||||
|   arg("vimscript_functions_file", "intellij_vimscript_functions.json") | ||||
|   arg("ex_commands_file", "intellij_ex_commands.json") | ||||
|   arg("commands_file", "intellij_commands.json") | ||||
| } | ||||
|  | ||||
| afterEvaluate { | ||||
| //  tasks.named("kspKotlin").configure { dependsOn("clean") } | ||||
|   tasks.named("kspKotlin").configure { dependsOn("generateGrammarSource") } | ||||
|   tasks.named("kspTestKotlin").configure { enabled = false } | ||||
| } | ||||
|  | ||||
| // Import variables from gradle.properties file | ||||
| @@ -44,6 +107,7 @@ val publishChannels: String by project | ||||
| val publishToken: String by project | ||||
|  | ||||
| val slackUrl: String by project | ||||
| val youtrackToken: String by project | ||||
|  | ||||
| repositories { | ||||
|     mavenCentral() | ||||
| @@ -51,8 +115,8 @@ repositories { | ||||
| } | ||||
|  | ||||
| dependencies { | ||||
|     compileOnly("org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlinVersion") | ||||
|     compileOnly("org.jetbrains:annotations:23.0.0") | ||||
|     compileOnly("org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion") | ||||
|     compileOnly("org.jetbrains:annotations:24.1.0") | ||||
|  | ||||
|     // https://mvnrepository.com/artifact/com.ensarsarajcic.neovim.java/neovim-api | ||||
|     testImplementation("com.ensarsarajcic.neovim.java:neovim-api:0.2.3") | ||||
| @@ -62,15 +126,24 @@ dependencies { | ||||
|     testImplementation("org.jetbrains.kotlin:kotlin-test:$kotlinVersion") | ||||
|  | ||||
|     // https://mvnrepository.com/artifact/org.mockito.kotlin/mockito-kotlin | ||||
|     testImplementation("org.mockito.kotlin:mockito-kotlin:4.0.0") | ||||
|     testImplementation("org.mockito.kotlin:mockito-kotlin:5.2.1") | ||||
|  | ||||
|     testImplementation("com.intellij.remoterobot:remote-robot:$remoteRobotVersion") | ||||
|     testImplementation("com.intellij.remoterobot:remote-fixtures:$remoteRobotVersion") | ||||
|     testImplementation("com.automation-remarks:video-recorder-junit:2.0") | ||||
|     testImplementation("com.automation-remarks:video-recorder-junit5:2.0") | ||||
|     runtimeOnly("org.antlr:antlr4-runtime:$antlrVersion") | ||||
|     antlr("org.antlr:antlr4:$antlrVersion") | ||||
|  | ||||
|     api(project(":vim-engine")) | ||||
|  | ||||
|     ksp(project(":annotation-processors")) | ||||
|     implementation(project(":annotation-processors")) | ||||
|  | ||||
|     testApi("com.squareup.okhttp3:okhttp:4.12.0") | ||||
|  | ||||
|     testImplementation("org.junit.jupiter:junit-jupiter-api:5.10.1") | ||||
|     testImplementation("org.junit.jupiter:junit-jupiter-engine:5.10.1") | ||||
|     testImplementation("org.junit.jupiter:junit-jupiter-params:5.10.1") | ||||
| } | ||||
|  | ||||
| configurations { | ||||
| @@ -85,16 +158,21 @@ tasks.register<Test>("testWithNeovim") { | ||||
|     group = "verification" | ||||
|     systemProperty("ideavim.nvim.test", "true") | ||||
|     exclude("/ui/**") | ||||
|     exclude("**/longrunning/**") | ||||
|     exclude("**/propertybased/**") | ||||
|     useJUnitPlatform() | ||||
| } | ||||
|  | ||||
| tasks.register<Test>("testPropertyBased") { | ||||
|     group = "verification" | ||||
| //    include("**/propertybased/**") | ||||
|     useJUnitPlatform() | ||||
| } | ||||
|  | ||||
| tasks.register<Test>("testLongRunning") { | ||||
|     group = "verification" | ||||
| //    include("**/longrunning/**") | ||||
|     useJUnitPlatform() | ||||
| } | ||||
|  | ||||
| tasks { | ||||
| @@ -106,6 +184,14 @@ tasks { | ||||
|         include("**/*test.class") | ||||
|         include("**/*Tests.class") | ||||
|         exclude("**/ParserTest.class") | ||||
|  | ||||
|         // Set teamcity env variable locally to run additional tests for leaks. | ||||
|         // By default, this test runs on TC only, but this test doesn't take a lot of time, | ||||
|         //   so we can turn it on for local development | ||||
|         if (environment["TEAMCITY_VERSION"] == null) { | ||||
|             println("Set env TEAMCITY_VERSION to X") | ||||
|             environment("TEAMCITY_VERSION" to "X") | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     val testWithNeovim by getting(Test::class) { | ||||
| @@ -115,6 +201,8 @@ tasks { | ||||
|         include("**/*test.class") | ||||
|         include("**/*Tests.class") | ||||
|         exclude("**/ParserTest.class") | ||||
|         exclude("**/longrunning/**") | ||||
|         exclude("**/propertybased/**") | ||||
|     } | ||||
|  | ||||
|     val testPropertyBased by getting(Test::class) { | ||||
| @@ -144,7 +232,7 @@ tasks { | ||||
|     compileKotlin { | ||||
|         kotlinOptions { | ||||
|             jvmTarget = javaVersion | ||||
|             apiVersion = "1.5" | ||||
|             apiVersion = "1.6" | ||||
|             freeCompilerArgs = listOf("-Xjvm-default=all-compatibility") | ||||
| //            allWarningsAsErrors = true | ||||
|         } | ||||
| @@ -152,12 +240,25 @@ tasks { | ||||
|     compileTestKotlin { | ||||
|         kotlinOptions { | ||||
|             jvmTarget = javaVersion | ||||
|             apiVersion = "1.5" | ||||
|             apiVersion = "1.6" | ||||
| //            allWarningsAsErrors = true | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| java { | ||||
|     toolchain { | ||||
|         languageVersion.set(JavaLanguageVersion.of(javaVersion)) | ||||
|     } | ||||
| } | ||||
|  | ||||
| kotlin { | ||||
|     explicitApi() | ||||
|     jvmToolchain { | ||||
|         languageVersion.set(JavaLanguageVersion.of(javaVersion)) | ||||
|     } | ||||
| } | ||||
|  | ||||
| gradle.projectsEvaluated { | ||||
|     tasks.compileJava { | ||||
| //        options.compilerArgs.add("-Werror") | ||||
| @@ -177,7 +278,7 @@ intellij { | ||||
|     instrumentCode.set(instrumentPluginCode.toBoolean()) | ||||
|     intellijRepository.set("https://www.jetbrains.com/intellij-repository") | ||||
|     // Yaml is only used for testing. It's part of the IdeaIC distribution, but needs to be included as a reference | ||||
|     plugins.set(listOf("java", "AceJump:3.8.4", "yaml")) | ||||
|     plugins.set(listOf("java", "AceJump:3.8.11", "yaml"/*, "Pythonid:231.8109.2", "com.intellij.clion-swift:231.8109.4"*/)) | ||||
| } | ||||
|  | ||||
| tasks { | ||||
| @@ -190,17 +291,24 @@ tasks { | ||||
|         token.set(publishToken) | ||||
|     } | ||||
|  | ||||
|     signPlugin { | ||||
|         certificateChain.set(providers.environmentVariable("CERTIFICATE_CHAIN")) | ||||
|         privateKey.set(providers.environmentVariable("PRIVATE_KEY")) | ||||
|         password.set(providers.environmentVariable("PRIVATE_KEY_PASSWORD")) | ||||
|     } | ||||
|  | ||||
|     runIdeForUiTests { | ||||
|         systemProperty("robot-server.port", "8082") | ||||
|         systemProperty("ide.mac.message.dialogs.as.sheets", "false") | ||||
|         systemProperty("jb.privacy.policy.text", "<!--999.999-->") | ||||
|         systemProperty("jb.consents.confirmation.enabled", "false") | ||||
|         systemProperty("ide.show.tips.on.startup.default.value", "false") | ||||
|     } | ||||
|  | ||||
|     runPluginVerifier { | ||||
|         downloadDir.set("${project.buildDir}/pluginVerifier/ides") | ||||
|         teamCityOutputFormat.set(true) | ||||
|         ideVersions.set(listOf("IC-2021.3.4")) | ||||
| //        ideVersions.set(listOf("IC-2021.3.4")) | ||||
|     } | ||||
|  | ||||
|     generateGrammarSource { | ||||
| @@ -212,17 +320,27 @@ tasks { | ||||
|     named("compileKotlin") { | ||||
|         dependsOn("generateGrammarSource") | ||||
|     } | ||||
|     named("compileTestKotlin") { | ||||
|         dependsOn("generateTestGrammarSource") | ||||
|     } | ||||
|  | ||||
|     // Add plugin open API sources to the plugin ZIP | ||||
|     val createOpenApiSourceJar by registering(Jar::class) { | ||||
|         dependsOn("generateGrammarSource") | ||||
|         // Java sources | ||||
|         from(sourceSets.main.get().java) { | ||||
|             include("**/com/maddyhome/idea/vim/**/*.java") | ||||
|         } | ||||
|         from(project(":vim-engine").sourceSets.main.get().java) { | ||||
|             include("**/com/maddyhome/idea/vim/**/*.java") | ||||
|         } | ||||
|         // Kotlin sources | ||||
|         from(kotlin.sourceSets.main.get().kotlin) { | ||||
|             include("**/com/maddyhome/idea/vim/**/*.kt") | ||||
|         } | ||||
|         from(project(":vim-engine").kotlin.sourceSets.main.get().kotlin) { | ||||
|             include("**/com/maddyhome/idea/vim/**/*.kt") | ||||
|         } | ||||
|         destinationDirectory.set(layout.buildDirectory.dir("libs")) | ||||
|         archiveClassifier.set("src") | ||||
|     } | ||||
| @@ -231,18 +349,40 @@ tasks { | ||||
|         dependsOn(createOpenApiSourceJar) | ||||
|         from(createOpenApiSourceJar) { into("lib/src") } | ||||
|     } | ||||
|  | ||||
|     val pluginVersion = version | ||||
|     // Don't forget to update plugin.xml | ||||
|     patchPluginXml { | ||||
|         // Get the latest available change notes from the changelog file | ||||
|         changeNotes.set( | ||||
|             provider { | ||||
|                 with(changelog) { | ||||
|                     val log = try { | ||||
|                         getUnreleased() | ||||
|                     } catch (e: MissingVersionException) { | ||||
|                         getOrNull(pluginVersion.toString()) ?: getLatest() | ||||
|                     } | ||||
|                     renderItem( | ||||
|                         log, | ||||
|                         org.jetbrains.changelog.Changelog.OutputType.HTML, | ||||
|                     ) | ||||
|                 } | ||||
|             }, | ||||
|         ) | ||||
|     } | ||||
| } | ||||
|  | ||||
| // --- Linting | ||||
|  | ||||
| ktlint { | ||||
|     disabledRules.add("no-wildcard-imports") | ||||
| } | ||||
| //ktlint { | ||||
| //    version.set("0.48.2") | ||||
| //} | ||||
|  | ||||
| // --- Tests | ||||
|  | ||||
| tasks { | ||||
|     test { | ||||
|         useJUnitPlatform() | ||||
|         exclude("**/propertybased/**") | ||||
|         exclude("**/longrunning/**") | ||||
|         exclude("/ui/**") | ||||
| @@ -251,6 +391,7 @@ tasks { | ||||
|  | ||||
| tasks.register<Test>("testUi") { | ||||
|     group = "verification" | ||||
|     useJUnitPlatform() | ||||
|     include("/ui/**") | ||||
| } | ||||
|  | ||||
| @@ -261,16 +402,24 @@ changelog { | ||||
|     itemPrefix.set("*") | ||||
|     path.set("${project.projectDir}/CHANGES.md") | ||||
|     unreleasedTerm.set("To Be Released") | ||||
|     headerParserRegex.set("\\d\\.\\d+(.\\d+)?".toRegex()) | ||||
|     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) | ||||
| // --- Kover | ||||
|  | ||||
| koverMerged { | ||||
|     enable() | ||||
| } | ||||
|  | ||||
| kover { | ||||
|     instrumentation { | ||||
|         // set of test tasks names to exclude from instrumentation. The results of their execution will not be presented in the report | ||||
|         excludeTasks += "testPropertyBased" | ||||
|         excludeTasks += "testLongRunning" | ||||
|         excludeTasks += "testWithNeovim" | ||||
|         excludeTasks += "testUi" | ||||
|     } | ||||
| } | ||||
|  | ||||
| @@ -282,7 +431,8 @@ tasks.register("slackNotification") { | ||||
|             println("Slack Url is not defined") | ||||
|             return@doLast | ||||
|         } | ||||
|         val changeLog = changelog.getLatest().toText() | ||||
|  | ||||
|         val changeLog = changelog.renderItem(changelog.getLatest(), Changelog.OutputType.PLAIN_TEXT) | ||||
|         val slackDown = DownParser(changeLog, true).toSlack().toString() | ||||
|  | ||||
|         //language=JSON | ||||
| @@ -314,20 +464,31 @@ tasks.register("slackNotification") { | ||||
|             println("Response code: $postRc") | ||||
|             if (postRc == 200) { | ||||
|                 println(inputStream.bufferedReader().use { it.readText() }) | ||||
|             } else { | ||||
|                 println(errorStream.bufferedReader().use { it.readText() }) | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| // --- Update authors | ||||
| // Uncomment to enable FUS testing mode | ||||
| // tasks { | ||||
| //    withType<org.jetbrains.intellij.tasks.RunIdeTask> { | ||||
| //        jvmArgs("-Didea.is.internal=true") | ||||
| //        jvmArgs("-Dfus.internal.test.mode=true") | ||||
| //    } | ||||
| // } | ||||
|  | ||||
| // --- 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" | ||||
|             "alex.plate@192.168.0.109", | ||||
|             "nikita.koshcheev@TeamCity", | ||||
|             "TeamCity@TeamCity", | ||||
|         ) | ||||
|         updateAuthors(uncheckedEmails) | ||||
|     } | ||||
| @@ -338,6 +499,7 @@ val prId: String by project | ||||
| tasks.register("updateMergedPr") { | ||||
|     doLast { | ||||
|         if (project.hasProperty("prId")) { | ||||
|             println("Got pr id: $prId") | ||||
|             updateMergedPr(prId.toInt()) | ||||
|         } else { | ||||
|             error("Cannot get prId") | ||||
| @@ -351,6 +513,87 @@ tasks.register("updateChangelog") { | ||||
|     } | ||||
| } | ||||
|  | ||||
| tasks.register("updateYoutrackOnCommit") { | ||||
|     doLast { | ||||
|         updateYoutrackOnCommit() | ||||
|     } | ||||
| } | ||||
|  | ||||
| val vimProjectId = "22-43" | ||||
| val fixVersionsFieldId = "123-285" | ||||
| val fixVersionsFieldType = "VersionProjectCustomField" | ||||
| val fixVersionsElementType = "VersionBundleElement" | ||||
|  | ||||
| tasks.register("releaseActions") { | ||||
|     group = "other" | ||||
|     doLast { | ||||
|         val tickets = getYoutrackTicketsByQuery("%23%7BReady+To+Release%7D") | ||||
|         if (tickets.isNotEmpty()) { | ||||
|             println("Updating statuses for tickets: $tickets") | ||||
|             setYoutrackStatus(tickets, "Fixed") | ||||
|             println("Checking if version $version exists...") | ||||
|             val versionId = getVersionIdByName(version.toString()) | ||||
|             if (versionId == null) { | ||||
|                 addReleaseToYoutrack(version.toString()) | ||||
|             } else { | ||||
|                 println("Version $version already exists in YouTrack. Version id: $versionId") | ||||
|             } | ||||
|             setYoutrackFixVersion(tickets, version.toString()) | ||||
|         } else { | ||||
|             println("No tickets to update statuses") | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| tasks.register("integrationsTest") { | ||||
|     group = "other" | ||||
|     doLast { | ||||
|         val testTicketId = "VIM-2784" | ||||
|  | ||||
|         // YouTrack set to Ready To Release on Fix commit | ||||
|         setYoutrackStatus(listOf(testTicketId), "Ready To Release") | ||||
|         if ("Ready To Release" != getYoutrackStatus(testTicketId)) { | ||||
|             error("Ticket status was not updated") | ||||
|         } | ||||
|         setYoutrackStatus(listOf(testTicketId), "Open") | ||||
|  | ||||
|         // Check YouTrack requests | ||||
|         val prevStatus = getYoutrackStatus(testTicketId) | ||||
|         setYoutrackStatus(listOf(testTicketId), "Ready To Release") | ||||
|         val tickets = getYoutrackTicketsByQuery("%23%7BReady+To+Release%7D") | ||||
|         if (testTicketId !in tickets) { | ||||
|             error("Test ticket is not found in request") | ||||
|         } | ||||
|         setYoutrackStatus(listOf(testTicketId), prevStatus) | ||||
|  | ||||
|         // Check adding and removing release | ||||
|         val existingVersionId = getVersionIdByName("TEST_VERSION") | ||||
|         if (existingVersionId != null) { | ||||
|             deleteVersionById(existingVersionId) | ||||
|         } | ||||
|         val versionId = addReleaseToYoutrack("TEST_VERSION") | ||||
|         guard(getVersionIdByName("TEST_VERSION") != null) { "Test version isn't created" } | ||||
|         setYoutrackStatus(listOf(testTicketId), "Fixed") | ||||
|         setYoutrackFixVersion(listOf(testTicketId), "TEST_VERSION") | ||||
|         deleteVersionById(versionId) | ||||
|         setYoutrackStatus(listOf(testTicketId), "Open") | ||||
|         guard(getVersionIdByName("TEST_VERSION") == null) { "Test version isn't deleted" } | ||||
|  | ||||
|         updateMergedPr(525) | ||||
|         // TODO: test Ticket parsing | ||||
|         // TODO: test Update CHANGES | ||||
|         // TODO: test Update AUTHORS | ||||
|         // TODO: test Slack notification | ||||
|         // TODO: Add a comment on EAP release | ||||
|     } | ||||
| } | ||||
|  | ||||
| fun guard(check: Boolean, ifWrong: () -> String) { | ||||
|     if (!check) { | ||||
|         error(ifWrong()) | ||||
|     } | ||||
| } | ||||
|  | ||||
| tasks.register("testUpdateChangelog") { | ||||
|     group = "verification" | ||||
|     description = "This is a task to manually assert the correctness of the update tasks" | ||||
| @@ -367,37 +610,152 @@ tasks.register("testUpdateChangelog") { | ||||
|     } | ||||
| } | ||||
|  | ||||
| fun addReleaseToYoutrack(name: String): String { | ||||
|     val client = httpClient() | ||||
|     println("Creating new release version in YouTrack: $name") | ||||
|  | ||||
|     return runBlocking { | ||||
|         val response = client.post("https://youtrack.jetbrains.com/api/admin/projects/$vimProjectId/customFields/$fixVersionsFieldId/bundle/values?fields=id,name") { | ||||
|             contentType(ContentType.Application.Json) | ||||
|             accept(ContentType.Application.Json) | ||||
|             val request = buildJsonObject { | ||||
|                 put("name", name) | ||||
|                 put("\$type", fixVersionsElementType) | ||||
|             } | ||||
|             setBody(request) | ||||
|         } | ||||
|         response.body<JsonObject>().getValue("id").jsonPrimitive.content | ||||
|     } | ||||
| } | ||||
|  | ||||
| fun getVersionIdByName(name: String): String? { | ||||
|     val client = httpClient() | ||||
|  | ||||
|     return runBlocking { | ||||
|         val response = client.get("https://youtrack.jetbrains.com/api/admin/projects/$vimProjectId/customFields/$fixVersionsFieldId/bundle/values?fields=id,name&query=$name") | ||||
|         response.body<JsonArray>().singleOrNull()?.jsonObject?.get("id")?.jsonPrimitive?.content | ||||
|     } | ||||
| } | ||||
|  | ||||
| fun deleteVersionById(id: String) { | ||||
|     val client = httpClient() | ||||
|  | ||||
|     runBlocking { | ||||
|         client.delete("https://youtrack.jetbrains.com/api/admin/projects/$vimProjectId/customFields/$fixVersionsFieldId/bundle/values/$id") | ||||
|     } | ||||
| } | ||||
|  | ||||
| fun updateYoutrackOnCommit() { | ||||
|     println("Start updating youtrack") | ||||
|     println(projectDir) | ||||
|  | ||||
|     val newFixes = changes() | ||||
|     val newTickets = newFixes.map { it.id } | ||||
|     println("Set new status for $newTickets") | ||||
|     setYoutrackStatus(newTickets, "Ready To Release") | ||||
| } | ||||
|  | ||||
| fun getYoutrackTicketsByQuery(query: String): Set<String> { | ||||
|     val client = httpClient() | ||||
|  | ||||
|     return runBlocking { | ||||
|         val response = client.get("https://youtrack.jetbrains.com/api/issues/?fields=idReadable&query=project:VIM+$query") | ||||
|         response.body<JsonArray>().mapTo(HashSet()) { it.jsonObject.getValue("idReadable").jsonPrimitive.content } | ||||
|     } | ||||
| } | ||||
|  | ||||
| fun setYoutrackStatus(tickets: Collection<String>, status: String) { | ||||
|     val client = httpClient() | ||||
|  | ||||
|     runBlocking { | ||||
|         for (ticket in tickets) { | ||||
|             println("Try to set $ticket to $status") | ||||
|             val response = client.post("https://youtrack.jetbrains.com/api/issues/$ticket?fields=customFields(id,name,value(id,name))") { | ||||
|                 contentType(ContentType.Application.Json) | ||||
|                 accept(ContentType.Application.Json) | ||||
|                 val request = buildJsonObject { | ||||
|                     putJsonArray("customFields") { | ||||
|                         addJsonObject { | ||||
|                             put("name", "State") | ||||
|                             put("\$type", "SingleEnumIssueCustomField") | ||||
|                             putJsonObject("value") { | ||||
|                                 put("name", status) | ||||
|                             } | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|                 setBody(request) | ||||
|             } | ||||
|             println(response) | ||||
|             println(response.body<String>()) | ||||
|             if (!response.status.isSuccess()) { | ||||
|                 error("Request failed. $ticket, ${response.body<String>()}") | ||||
|             } | ||||
|             val finalState = response.body<JsonObject>()["customFields"]!!.jsonArray | ||||
|                 .single { it.jsonObject["name"]!!.jsonPrimitive.content == "State" } | ||||
|                 .jsonObject["value"]!! | ||||
|                 .jsonObject["name"]!! | ||||
|                 .jsonPrimitive.content | ||||
|             if (finalState != status) { | ||||
|                 error("Ticket $ticket is not updated! Expected status $status, but actually $finalState") | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| fun setYoutrackFixVersion(tickets: Collection<String>, version: String) { | ||||
|     val client = httpClient() | ||||
|  | ||||
|     runBlocking { | ||||
|         for (ticket in tickets) { | ||||
|             println("Try to set fix version $version for $ticket") | ||||
|             val response = client.post("https://youtrack.jetbrains.com/api/issues/$ticket?fields=customFields(id,name,value(id,name))") { | ||||
|                 contentType(ContentType.Application.Json) | ||||
|                 accept(ContentType.Application.Json) | ||||
|                 val request = buildJsonObject { | ||||
|                     putJsonArray("customFields") { | ||||
|                         addJsonObject { | ||||
|                             put("name", "Fix versions") | ||||
|                             put("\$type", "MultiVersionIssueCustomField") | ||||
|                             putJsonArray("value") { | ||||
|                                 addJsonObject { put("name", version) } | ||||
|                             } | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|                 setBody(request) | ||||
|             } | ||||
|             println(response) | ||||
|             println(response.body<String>()) | ||||
|             if (!response.status.isSuccess()) { | ||||
|                 error("Request failed. $ticket, ${response.body<String>()}") | ||||
|             } | ||||
|             val finalState = response.body<JsonObject>()["customFields"]!!.jsonArray | ||||
|                 .single { it.jsonObject["name"]!!.jsonPrimitive.content == "Fix versions" } | ||||
|                 .jsonObject["value"]!! | ||||
|                 .jsonArray[0] | ||||
|                 .jsonObject["name"]!! | ||||
|                 .jsonPrimitive.content | ||||
|             if (finalState != version) { | ||||
|                 error("Ticket $ticket is not updated! Expected fix version $version, but actually $finalState") | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| fun getYoutrackStatus(ticket: String): String { | ||||
|     val client = httpClient() | ||||
|  | ||||
|     return runBlocking { | ||||
|         val response = client.get("https://youtrack.jetbrains.com/api/issues/$ticket/customFields/123-129?fields=value(name)") | ||||
|         response.body<JsonObject>()["value"]!!.jsonObject.getValue("name").jsonPrimitive.content | ||||
|     } | ||||
| } | ||||
|  | ||||
| fun updateChangelog() { | ||||
|     println("Start update authors") | ||||
|     println(projectDir) | ||||
|     val repository = org.eclipse.jgit.lib.RepositoryBuilder().setGitDir(File("$projectDir/.git")).build() | ||||
|     val git = org.eclipse.jgit.api.Git(repository) | ||||
|     val lastSuccessfulCommit = System.getenv("SUCCESS_COMMIT")!! | ||||
|     val messages = git.log().call() | ||||
|         .takeWhile { | ||||
|             !it.id.name.equals(lastSuccessfulCommit, ignoreCase = true) | ||||
|         } | ||||
|         .map { it.shortMessage } | ||||
|  | ||||
|     // Collect fixes | ||||
|     val newFixes = mutableListOf<Change>() | ||||
|     println("Last successful commit: $lastSuccessfulCommit") | ||||
|     println("Amount of commits: ${messages.size}") | ||||
|     println("Start emails processing") | ||||
|     for (message in messages) { | ||||
|         println("Processing '$message'...") | ||||
|         val lowercaseMessage = message.toLowerCase() | ||||
|         val regex = "^fix\\((vim-\\d+)\\):".toRegex() | ||||
|         val findResult = regex.find(lowercaseMessage) | ||||
|         if (findResult != null) { | ||||
|             println("Message matches") | ||||
|             val value = findResult.groups[1]!!.value.toUpperCase() | ||||
|             val shortMessage = message.drop(findResult.range.last + 1).trim() | ||||
|             newFixes += Change(value, shortMessage) | ||||
|         } else { | ||||
|             println("Message doesn't match") | ||||
|         } | ||||
|     } | ||||
|     val newFixes = changes() | ||||
|  | ||||
|     // Update changes file | ||||
|     val changesFile = File("$projectDir/CHANGES.md") | ||||
| @@ -423,8 +781,8 @@ fun updateChangelog() { | ||||
| fun updateAuthors(uncheckedEmails: Set<String>) { | ||||
|     println("Start update authors") | ||||
|     println(projectDir) | ||||
|     val repository = org.eclipse.jgit.lib.RepositoryBuilder().setGitDir(File("$projectDir/.git")).build() | ||||
|     val git = org.eclipse.jgit.api.Git(repository) | ||||
|     val repository = RepositoryBuilder().setGitDir(File("$projectDir/.git")).build() | ||||
|     val git = Git(repository) | ||||
|     val lastSuccessfulCommit = System.getenv("SUCCESS_COMMIT")!! | ||||
|     val hashesAndEmailes = git.log().call() | ||||
|         .takeWhile { | ||||
| @@ -449,7 +807,15 @@ fun updateAuthors(uncheckedEmails: Set<String>) { | ||||
|             println("Email '$email' is from dependabot. Skip it") | ||||
|             continue | ||||
|         } | ||||
|         val user = ghRepository.getCommit(hash).author | ||||
|         if ("tcuser" in email) { | ||||
|             println("Email '$email' is from teamcity. Skip it") | ||||
|             continue | ||||
|         } | ||||
|         val user: GHUser? = ghRepository.getCommit(hash).author | ||||
|         if (user == null) { | ||||
|             println("Cant get the commit author. Email: $email. Commit: $hash") | ||||
|             continue | ||||
|         } | ||||
|         val htmlUrl = user.htmlUrl.toString() | ||||
|         val name = user.name ?: user.login | ||||
|         users.add(Author(name, htmlUrl, email)) | ||||
| @@ -467,7 +833,7 @@ fun updateAuthors(uncheckedEmails: Set<String>) { | ||||
|     for (child in contributorsSection.children) { | ||||
|         if (child.children.size > 1) { | ||||
|             existingEmails.add( | ||||
|                 child.children[1].children[0].children[2].children[2].getTextInNode(authors).toString() | ||||
|                 child.children[1].children[0].children[2].children[2].getTextInNode(authors).toString(), | ||||
|             ) | ||||
|         } | ||||
|     } | ||||
| @@ -500,8 +866,12 @@ data class Author(val name: String, val url: String, val mail: String) | ||||
| data class Change(val id: String, val text: String) | ||||
|  | ||||
| fun updateMergedPr(number: Int) { | ||||
|     val gitHub = org.kohsuke.github.GitHub.connect() | ||||
|     val token = System.getenv("GITHUB_OAUTH") | ||||
|     println("Token size: ${token.length}") | ||||
|     val gitHub = org.kohsuke.github.GitHubBuilder().withOAuthToken(token).build() | ||||
|     println("Connecting to the repo...") | ||||
|     val repository = gitHub.getRepository("JetBrains/ideavim") | ||||
|     println("Getting pull requests...") | ||||
|     val pullRequest = repository.getPullRequest(number) | ||||
|     if (pullRequest.user.login == "dependabot[bot]") return | ||||
|  | ||||
| @@ -515,7 +885,7 @@ fun updateMergedPr(number: Int) { | ||||
|     if (pullRequest.user.login == "dependabot[bot]") return | ||||
|  | ||||
|     val prNumber = pullRequest.number | ||||
|     val userName = pullRequest.user.name | ||||
|     val userName = pullRequest.user.name ?: pullRequest.user.login | ||||
|     val login = pullRequest.user.login | ||||
|     val title = pullRequest.title | ||||
|     val section = | ||||
| @@ -593,3 +963,57 @@ val sections = listOf( | ||||
|     "### Fixes:", | ||||
|     "### Merged PRs:", | ||||
| ) | ||||
|  | ||||
| fun changes(): List<Change> { | ||||
|     val repository = RepositoryBuilder().setGitDir(File("$projectDir/.git")).build() | ||||
|     val git = Git(repository) | ||||
|     val lastSuccessfulCommit = System.getenv("SUCCESS_COMMIT")!! | ||||
|     val messages = git.log().call() | ||||
|         .takeWhile { | ||||
|             !it.id.name.equals(lastSuccessfulCommit, ignoreCase = true) | ||||
|         } | ||||
|         .map { it.shortMessage } | ||||
|  | ||||
|     // Collect fixes | ||||
|     val newFixes = mutableListOf<Change>() | ||||
|     println("Last successful commit: $lastSuccessfulCommit") | ||||
|     println("Amount of commits: ${messages.size}") | ||||
|     println("Start changes processing") | ||||
|     for (message in messages) { | ||||
|         println("Processing '$message'...") | ||||
|         val lowercaseMessage = message.toLowerCase() | ||||
|         val regex = "^fix\\((vim-\\d+)\\):".toRegex() | ||||
|         val findResult = regex.find(lowercaseMessage) | ||||
|         if (findResult != null) { | ||||
|             println("Message matches") | ||||
|             val value = findResult.groups[1]!!.value.toUpperCase() | ||||
|             val shortMessage = message.drop(findResult.range.last + 1).trim() | ||||
|             newFixes += Change(value, shortMessage) | ||||
|         } else { | ||||
|             println("Message doesn't match") | ||||
|         } | ||||
|     } | ||||
|     return newFixes | ||||
| } | ||||
|  | ||||
| fun httpClient(): HttpClient { | ||||
|     return HttpClient(CIO) { | ||||
|         expectSuccess = true | ||||
|         install(Auth) { | ||||
|             bearer { | ||||
|                 loadTokens { | ||||
|                     val accessToken = youtrackToken.ifBlank { System.getenv("YOUTRACK_TOKEN")!! } | ||||
|                     BearerTokens(accessToken, "") | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|         install(ContentNegotiation) { | ||||
|             json( | ||||
|                 Json { | ||||
|                     prettyPrint = true | ||||
|                     isLenient = true | ||||
|                 }, | ||||
|             ) | ||||
|         } | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -1,6 +0,0 @@ | ||||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <baseline version="1.0"> | ||||
| 	<file name="src/main/java/com/maddyhome/idea/vim/listener/RiderSpecifics.kt"> | ||||
| 		<error line="1" column="1" source="filename" /> | ||||
| 	</file> | ||||
| </baseline> | ||||
| @@ -1,248 +0,0 @@ | ||||
| Emulated Vim Plugins | ||||
| -------------------- | ||||
|  | ||||
| IdeaVim extensions emulate plugins of the original Vim. In order to use | ||||
| IdeaVim extensions, you have to enable them via this command in your `~/.ideavimrc`: | ||||
|  | ||||
| ``` | ||||
| Plug '<extension-github-reference>' | ||||
| ``` | ||||
|  | ||||
| If you reuse your existing `.vimrc` file using `source ~/.vimrc`, IdeaVim can parse and enable plugins that are defined | ||||
| using [vim-plug](https://github.com/junegunn/vim-plug) or [vundle](https://github.com/VundleVim/Vundle.vim). | ||||
| No additional set commands in `~/.ideavimrc` are required.   | ||||
| If you'd like to disable some plugin that's enabled in `.vimrc`, you can use `set no<extension-name>` | ||||
| in `~/.ideavimrc`. E.g. `set nosurround`. | ||||
|  | ||||
| Available extensions: | ||||
|  | ||||
| ## easymotion | ||||
|  | ||||
| * Setup: | ||||
|     * Install [IdeaVim-EasyMotion](https://plugins.jetbrains.com/plugin/13360-ideavim-easymotion/) | ||||
|       and [AceJump](https://plugins.jetbrains.com/plugin/7086-acejump/) plugins. | ||||
|     * `Plug 'easymotion/vim-easymotion'` | ||||
|     * <details> | ||||
|       <summary>Alternative syntax</summary> | ||||
|       <code>Plug 'https://github.com/easymotion/vim-easymotion'</code> | ||||
|       <br/> | ||||
|       <code>Plug 'vim-easymotion'</code> | ||||
|       <br/> | ||||
|       <code>set easymotion</code> | ||||
|       </details> | ||||
| * Emulates [vim-easymotion](https://github.com/easymotion/vim-easymotion) | ||||
| * Commands: All commands with the mappings are supported. See the [full list of supported commands](https://github.com/AlexPl292/IdeaVim-EasyMotion#supported-commands). | ||||
|  | ||||
| ## NERDTree | ||||
| * Setup: `Plug 'preservim/nerdtree'` | ||||
|     * <details> | ||||
|       <summary>Alternative vim-plug / vundle syntax</summary> | ||||
|       <code>Plug 'https://github.com/preservim/nerdtree'</code> | ||||
|       <br/> | ||||
|       <code>Plug 'nerdtree'</code> | ||||
|       <br/> | ||||
|       <code>set NERDTree</code> | ||||
|       </details> | ||||
| * Emulates [NERDTree](https://github.com/preservim/nerdtree) | ||||
| * Commands: [[see here|NERDTree-support]] | ||||
|  | ||||
| ## surround | ||||
|  | ||||
| * Setup: `Plug 'tpope/vim-surround'` | ||||
|     * <details> | ||||
|       <summary>Alternative vim-plug / vundle syntax</summary> | ||||
|       <code>Plug 'https://github.com/tpope/vim-surround'</code> | ||||
|       <br/> | ||||
|       <code>Plug 'vim-surround'</code> | ||||
|       <br/> | ||||
|       <code>Plug 'https://www.vim.org/scripts/script.php?script_id=1697'</code> | ||||
|       <br/> | ||||
|       <code>set surround</code> | ||||
|       </details> | ||||
| * Emulates [vim-surround](https://github.com/tpope/vim-surround) | ||||
| * Commands: `ys`, `cs`, `ds`, `S` | ||||
|  | ||||
| ## multiple-cursors | ||||
|  | ||||
| * Setup: `Plug 'terryma/vim-multiple-cursors'` | ||||
|     * <details> | ||||
|       <summary>Alternative vim-plug / vundle syntax</summary> | ||||
|       <code>Plug 'https://github.com/terryma/vim-multiple-cursors'</code> | ||||
|       <br/> | ||||
|       <code>Plug 'vim-multiple-cursors'</code> | ||||
|       <br/> | ||||
|       <code>set multiple-cursors</code> | ||||
|       </details> | ||||
| * Emulates [vim-multiple-cursors](https://github.com/terryma/vim-multiple-cursors) | ||||
| * Commands: `<A-n>`, `<A-x>`, `<A-p>`, `g<A-n>` | ||||
|  | ||||
| ## commentary | ||||
|  | ||||
| * Setup: `Plug 'tpope/vim-commentary'` | ||||
|     * <details> | ||||
|       <summary>Alternative vim-plug / vundle syntax</summary> | ||||
|       <code>Plug 'https://github.com/tpope/vim-commentary'</code> | ||||
|       <br/> | ||||
|       <code>Plug 'vim-commentary'</code> | ||||
|       <br/> | ||||
|       <code>Plug 'https://www.vim.org/scripts/script.php?script_id=3695'</code> | ||||
|       <br/> | ||||
|       <code>Plug 'tomtom/tcomment_vim'</code> | ||||
|       <br/> | ||||
|       <code>Plug 'tcomment_vim'</code> | ||||
|       <br/> | ||||
|       <code>Plug 'https://www.vim.org/scripts/script.php?script_id=1173'</code> | ||||
|       <br/> | ||||
|       <code>set commentary</code> | ||||
|       </details> | ||||
| * Emulates [commentary.vim](https://github.com/tpope/vim-commentary) | ||||
| * Commands: `gcc`, `gc + motion`, `v_gc` | ||||
| * By [Daniel Leong](https://github.com/dhleong) | ||||
|  | ||||
| ## ReplaceWithRegister | ||||
|  | ||||
| * Setup: `Plug 'vim-scripts/ReplaceWithRegister'` | ||||
|     * <details> | ||||
|       <summary>Alternative vim-plug / vundle syntax</summary> | ||||
|       <code>Plug 'https://github.com/vim-scripts/ReplaceWithRegister'</code> | ||||
|       <br/> | ||||
|       <code>Plug 'ReplaceWithRegister'</code> | ||||
|       <br/> | ||||
|       <code>Plug 'https://github.com/inkarkat/vim-ReplaceWithRegister'</code> | ||||
|       <br/> | ||||
|       <code>Plug 'inkarkat/vim-ReplaceWithRegister'</code> | ||||
|       <br/> | ||||
|       <code>Plug 'vim-ReplaceWithRegister'</code> | ||||
|       <br/> | ||||
|       <code>Plug 'https://www.vim.org/scripts/script.php?script_id=2703'</code> | ||||
|       <br/> | ||||
|       <code>set ReplaceWithRegister</code> | ||||
|       </details> | ||||
| * Emulates [ReplaceWithRegister](https://github.com/vim-scripts/ReplaceWithRegister) | ||||
| * Commands: `gr`, `grr` | ||||
| * By [igrekster](https://github.com/igrekster) | ||||
|  | ||||
| ## argtextobj | ||||
|  | ||||
| * Setup: | ||||
|     * `Plug 'vim-scripts/argtextobj.vim'` | ||||
|     * <details> | ||||
|       <summary>Alternative vim-plug / vundle syntax</summary> | ||||
|       <code>Plug 'https://github.com/vim-scripts/argtextobj.vim'</code> | ||||
|       <br/> | ||||
|       <code>Plug 'argtextobj.vim'</code> | ||||
|       <br/> | ||||
|       <code>Plug 'https://www.vim.org/scripts/script.php?script_id=2699'</code> | ||||
|       <br/> | ||||
|       <code>set argtextobj</code> | ||||
|       </details> | ||||
|     * By default, only the arguments inside parenthesis are considered. To extend the functionality | ||||
|       to other types of brackets, set `g:argtextobj_pairs` variable to a comma-separated | ||||
|       list of colon-separated pairs (same as VIM's `matchpairs` option), like | ||||
|       `let g:argtextobj_pairs="(:),{:},<:>"`. The order of pairs matters when | ||||
|       handling symbols that can also be operators: `func(x << 5, 20) >> 17`. To handle | ||||
|       this syntax parenthesis, must come before angle brackets in the list. | ||||
| * Emulates [argtextobj.vim](https://www.vim.org/scripts/script.php?script_id=2699) | ||||
| * Additional text objects: `aa`, `ia` | ||||
|  | ||||
| ## exchange | ||||
|  | ||||
| * Setup: `Plug 'tommcdo/vim-exchange'` | ||||
|     * <details> | ||||
|       <summary>Alternative vim-plug / vundle syntax</summary> | ||||
|       <code>Plug 'https://github.com/tommcdo/vim-exchange'</code> | ||||
|       <br/> | ||||
|       <code>Plug 'vim-exchange'</code> | ||||
|       <br/> | ||||
|       <code>set exchange</code> | ||||
|       </details> | ||||
| * Emulates [vim-exchange](https://github.com/tommcdo/vim-exchange) | ||||
| * Commands: `cx`, `cxx`, `X`, `cxc` | ||||
| * By [fan-tom](https://github.com/fan-tom) | ||||
|  | ||||
| ## textobj-entire | ||||
|  | ||||
| * Setup: `Plug 'kana/vim-textobj-entire'` | ||||
|     * <details> | ||||
|       <summary>Alternative vim-plug / vundle syntax</summary> | ||||
|       <code>Plug 'https://github.com/kana/vim-textobj-entire'</code> | ||||
|       <br/> | ||||
|       <code>Plug 'vim-textobj-entire'</code> | ||||
|       <br/> | ||||
|       <code>Plug 'https://www.vim.org/scripts/script.php?script_id=2610'</code> | ||||
|       <br/> | ||||
|       <code>set textobj-entire</code> | ||||
|       </details> | ||||
| * Emulates [vim-textobj-entire](https://github.com/kana/vim-textobj-entire) | ||||
| * Additional text objects: `ae`, `ie` | ||||
| * By [Alexandre Grison](https://github.com/agrison) | ||||
|  | ||||
| ## highlightedyank | ||||
|  | ||||
| * Setup: | ||||
|     * `Plug 'machakann/vim-highlightedyank'` | ||||
|     * <details> | ||||
|       <summary>Alternative vim-plug / vundle syntax</summary> | ||||
|       <code>Plug 'https://github.com/machakann/vim-highlightedyank'</code> | ||||
|       <br/> | ||||
|       <code>Plug 'vim-highlightedyank'</code> | ||||
|       <br/> | ||||
|       <code>set highlightedyank</code> | ||||
|       </details> | ||||
|     * if you want to optimize highlight duration, assign a time in milliseconds:   | ||||
|       `let g:highlightedyank_highlight_duration = "1000"`   | ||||
|       A negative number makes the highlight persistent.   | ||||
|       `let g:highlightedyank_highlight_duration = "-1"` | ||||
|     * if you want to change background color of highlight you can provide the rgba of the color you want e.g.   | ||||
|       `let g:highlightedyank_highlight_color = "rgba(160, 160, 160, 155)"` | ||||
| * Emulates [vim-highlightedyank](https://github.com/machakann/vim-highlightedyank) | ||||
| * By [KostkaBrukowa](https://github.com/KostkaBrukowa) | ||||
|  | ||||
| ## vim-paragraph-motion | ||||
|  | ||||
| * Setup: `Plug 'dbakker/vim-paragraph-motion'` | ||||
|     * <details> | ||||
|       <summary>Alternative vim-plug / vundle syntax</summary> | ||||
|       <code>Plug 'https://github.com/dbakker/vim-paragraph-motion'</code> | ||||
|       <br/> | ||||
|       <code>Plug 'vim-paragraph-motion'</code> | ||||
|       <br/> | ||||
|       <code>Plug 'https://github.com/vim-scripts/Improved-paragraph-motion'</code> | ||||
|       <br/> | ||||
|       <code>Plug 'vim-scripts/Improved-paragraph-motion'</code> | ||||
|       <br/> | ||||
|       <code>Plug 'Improved-paragraph-motion'</code> | ||||
|       <br/> | ||||
|       <code>set vim-paragraph-motion</code> | ||||
|       </details> | ||||
| * Emulates [vim-paragraph-motion](https://github.com/dbakker/vim-paragraph-motion) | ||||
|  | ||||
| ## vim-indent-object | ||||
|  | ||||
| * Setup: `Plug 'michaeljsmith/vim-indent-object'` | ||||
|     * <details> | ||||
|       <summary>Alternative vim-plug / vundle syntax</summary> | ||||
|       <code>Plug 'https://github.com/michaeljsmith/vim-indent-object'</code> | ||||
|       <br/> | ||||
|       <code>Plug 'vim-indent-object'</code> | ||||
|       <br/> | ||||
|       <code>set textobj-indent</code> | ||||
|       </details> | ||||
| * Emulates [vim-indent-object](https://github.com/michaeljsmith/vim-indent-object) | ||||
| * Additional text objects: `ai`, `ii`, `aI` | ||||
| * By [Shrikant Sharat Kandula](https://github.com/sharat87) | ||||
|  | ||||
| ## matchit.vim | ||||
|  | ||||
| * Setup: `packadd matchit` | ||||
|     * <details> | ||||
|       <summary>Alternative vim-plug / vundle syntax</summary> | ||||
|       <code>Plug 'vim-matchit'</code> | ||||
|       <br/> | ||||
|       <code>Plug 'chrisbra/matchit'</code> | ||||
|       <br/> | ||||
|       <code>set matchit</code> | ||||
|       </details> | ||||
| * Emulates [matchit.vim](https://github.com/chrisbra/matchit) | ||||
| * Currently works for HTML/XML and ruby | ||||
| * By [Martin Yzeiri](https://github.com/myzeiri) | ||||
| @@ -1,6 +1,6 @@ | ||||
| Welcome to the IdeaVim wiki! | ||||
|  | ||||
| - List of emulated plugins: [[plugins|Emulated-plugins]] | ||||
| - Examples of `ideajoin` option (also known as "smart join"): [["ideajoin" examples|"ideajoin"-examples]] | ||||
| - List of "set" commands: [["set" commands|"set"-commands]] | ||||
| - Docs about "select" mode in vim: [[select mode|Select-mode]] | ||||
| - List of IdeaVim plugins: [plugins](IdeaVim%20Plugins.md) | ||||
| - Examples of `ideajoin` option (also known as "smart join"): ["ideajoin" examples](ideajoin-examples.md) | ||||
| - List of "set" commands: ["set" commands](set-commands.md) | ||||
| - Docs about "select" mode in vim: [select mode](Select-mode.md) | ||||
|   | ||||
							
								
								
									
										414
									
								
								doc/IdeaVim Plugins.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,414 @@ | ||||
| IdeaVim Plugins | ||||
| -------------------- | ||||
|  | ||||
| IdeaVim plugins work like the original Vim plugins. If you want to turn any of them on, you have to enable it via this command in your `~/.ideavimrc`: | ||||
|  | ||||
| ``` | ||||
| Plug '<plugin-github-reference>' | ||||
| ``` | ||||
|  | ||||
| If you reuse your existing `.vimrc` file using `source ~/.vimrc`, IdeaVim can parse and enable plugins that are defined | ||||
| using [vim-plug](https://github.com/junegunn/vim-plug) or [vundle](https://github.com/VundleVim/Vundle.vim). | ||||
| No additional set commands in `~/.ideavimrc` are required.   | ||||
| If you'd like to disable some plugin that's enabled in `.vimrc`, you can use `set no<extension-name>` | ||||
| in `~/.ideavimrc`. E.g. `set nosurround`. | ||||
|  | ||||
| Available plugins: | ||||
|  | ||||
| <details> | ||||
| <summary><h2>easymotion</h2></summary> | ||||
|     | ||||
| Original plugin: [vim-easymotion](https://github.com/easymotion/vim-easymotion). | ||||
|     | ||||
| ### Setup: | ||||
| - Install [IdeaVim-EasyMotion](https://plugins.jetbrains.com/plugin/13360-ideavim-easymotion/) | ||||
|       and [AceJump](https://plugins.jetbrains.com/plugin/7086-acejump/) plugins. | ||||
| - Add the following command to `~/.ideavimrc`: `Plug 'easymotion/vim-easymotion'` | ||||
|     <details> | ||||
|       <summary>Alternative syntax</summary> | ||||
|       <code>Plugin 'easymotion/vim-easymotion'</code> | ||||
|       <br/> | ||||
|       <code>Plug 'https://github.com/easymotion/vim-easymotion'</code> | ||||
|       <br/> | ||||
|       <code>Plug 'vim-easymotion'</code> | ||||
|       <br/> | ||||
|       <code>set easymotion</code> | ||||
|       </details> | ||||
|     | ||||
| ### Instructions | ||||
|     | ||||
| All commands with the mappings are supported. See the [full list of supported commands](https://github.com/AlexPl292/IdeaVim-EasyMotion#supported-commands). | ||||
|  | ||||
| </details> | ||||
|  | ||||
|  | ||||
| <details> | ||||
| <summary><h2>sneak</h2></summary> | ||||
|     | ||||
| Original plugin: [vim-sneak](https://github.com/justinmk/vim-sneak). | ||||
|     | ||||
| ### Setup: | ||||
| - Install [IdeaVim-sneak](https://plugins.jetbrains.com/plugin/15348-ideavim-sneak) plugin. | ||||
| - Add the following command to `~/.ideavimrc`: `set sneak` | ||||
|     | ||||
| ### Instructions | ||||
|     | ||||
| See the [docs](https://github.com/Mishkun/ideavim-sneak#usage) | ||||
|  | ||||
| </details> | ||||
|  | ||||
| <details> | ||||
| <summary><h2>NERDTree</h2></summary> | ||||
|     | ||||
| Original plugin: [NERDTree](https://github.com/preservim/nerdtree). | ||||
|     | ||||
| ### Setup: | ||||
| - Add the following command to `~/.ideavimrc`: `Plug 'preservim/nerdtree'` | ||||
|     <details> | ||||
|       <summary>Alternative syntax</summary> | ||||
|       <code>Plugin 'preservim/nerdtree'</code> | ||||
|       <br/> | ||||
|       <code>Plug 'https://github.com/preservim/nerdtree'</code> | ||||
|       <br/> | ||||
|       <code>Plug 'nerdtree'</code> | ||||
|       <br/> | ||||
|       <code>set NERDTree</code> | ||||
|       </details> | ||||
|     | ||||
| ### Instructions | ||||
|     | ||||
| [See here](NERDTree-support.md). | ||||
|  | ||||
| </details> | ||||
|  | ||||
| <details> | ||||
| <summary><h2>surround</h2></summary> | ||||
|     | ||||
| Original plugin: [vim-surround](https://github.com/tpope/vim-surround). | ||||
|     | ||||
| ### Setup: | ||||
| - Add the following command to `~/.ideavimrc`: `Plug 'tpope/vim-surround'` | ||||
|     <details> | ||||
|       <summary>Alternative syntax</summary> | ||||
|       <code>Plugin 'tpope/vim-surround'</code> | ||||
|       <br/> | ||||
|       <code>Plug 'https://www.vim.org/scripts/script.php?script_id=1697'</code> | ||||
|       <br/> | ||||
|       <code>Plug 'vim-surround'</code> | ||||
|       <br/> | ||||
|       <code>set surround</code> | ||||
|       </details> | ||||
|     | ||||
| ### Instructions | ||||
|     | ||||
| https://github.com/tpope/vim-surround/blob/master/doc/surround.txt | ||||
|  | ||||
| </details> | ||||
|  | ||||
| <details> | ||||
| <summary><h2>multiple-cursors</h2></summary> | ||||
|     | ||||
| Original plugin: [vim-multiple-cursors](https://github.com/terryma/vim-multiple-cursors). | ||||
|     | ||||
| ### Setup: | ||||
| - Add the following command to `~/.ideavimrc`: `Plug 'terryma/vim-multiple-cursors'` | ||||
|     <details> | ||||
|       <summary>Alternative syntax</summary> | ||||
|       <code>Plugin 'terryma/vim-multiple-cursors'</code> | ||||
|       <br/> | ||||
|       <code>Plug 'https://github.com/terryma/vim-multiple-cursors'</code> | ||||
|       <br/> | ||||
|       <code>Plug 'vim-multiple-cursors'</code> | ||||
|       <br/> | ||||
|       <code>set multiple-cursors</code> | ||||
|       </details> | ||||
|     | ||||
| ### Instructions | ||||
|     | ||||
| https://github.com/terryma/vim-multiple-cursors/blob/master/doc/multiple_cursors.txt | ||||
|  | ||||
| </details> | ||||
|  | ||||
| <details> | ||||
| <summary><h2>commentary</h2></summary> | ||||
|  | ||||
| By [Daniel Leong](https://github.com/dhleong)   | ||||
| Original plugin: [commentary.vim](https://github.com/tpope/vim-commentary). | ||||
|     | ||||
| ### Setup: | ||||
| - Add the following command to `~/.ideavimrc`: `Plug 'tpope/vim-commentary'` | ||||
|     <details> | ||||
|       <summary>Alternative syntax</summary> | ||||
|       <code>Plugin 'tpope/vim-commentary'</code> | ||||
|       <br/> | ||||
|       <code>Plug 'https://github.com/tpope/vim-commentary'</code> | ||||
|       <br/> | ||||
|       <code>Plug 'vim-commentary'</code> | ||||
|       <br/> | ||||
|       <code>Plug 'tcomment_vim'</code> | ||||
|       <br/> | ||||
|       <code>set commentary</code> | ||||
|       </details> | ||||
|     | ||||
| ### Instructions | ||||
|     | ||||
| https://github.com/tpope/vim-commentary/blob/master/doc/commentary.txt | ||||
|  | ||||
| </details> | ||||
|  | ||||
| <details> | ||||
| <summary><h2>ReplaceWithRegister</h2></summary> | ||||
|     | ||||
| By [igrekster](https://github.com/igrekster)   | ||||
| Original plugin: [ReplaceWithRegister](https://github.com/vim-scripts/ReplaceWithRegister). | ||||
|     | ||||
| ### Setup: | ||||
| - Add the following command to `~/.ideavimrc`: `Plug 'vim-scripts/ReplaceWithRegister'` | ||||
|     <details> | ||||
|       <summary>Alternative syntax</summary> | ||||
|       <code>Plugin 'vim-scripts/ReplaceWithRegister'</code> | ||||
|       <br/> | ||||
|       <code>Plug 'ReplaceWithRegister'</code> | ||||
|       <br/> | ||||
|       <code>Plug 'https://github.com/inkarkat/vim-ReplaceWithRegister'</code> | ||||
|       <br/> | ||||
|       <code>Plug 'inkarkat/vim-ReplaceWithRegister'</code> | ||||
|       <br/> | ||||
|       <code>Plug 'vim-ReplaceWithRegister'</code> | ||||
|       <br/> | ||||
|       <code>Plug 'https://www.vim.org/scripts/script.php?script_id=2703'</code> | ||||
|       <br/> | ||||
|       <code>set ReplaceWithRegister</code> | ||||
|       </details> | ||||
|     | ||||
| ### Instructions | ||||
|     | ||||
| https://github.com/vim-scripts/ReplaceWithRegister/blob/master/doc/ReplaceWithRegister.txt | ||||
|  | ||||
| </details> | ||||
|  | ||||
| <details> | ||||
| <summary><h2>argtextobj</h2></summary> | ||||
|  | ||||
| Original plugin: [argtextobj.vim](https://www.vim.org/scripts/script.php?script_id=2699). | ||||
|     | ||||
| ### Setup: | ||||
| - Add the following command to `~/.ideavimrc`: `Plug 'vim-scripts/argtextobj.vim'` | ||||
|     <details> | ||||
|       <summary>Alternative syntax</summary> | ||||
|       <code>Plugin 'vim-scripts/argtextobj.vim'</code> | ||||
|       <br/> | ||||
|       <code>Plug 'https://github.com/vim-scripts/argtextobj.vim'</code> | ||||
|       <br/> | ||||
|       <code>Plug 'argtextobj.vim'</code> | ||||
|       <br/> | ||||
|       <code>Plug 'https://www.vim.org/scripts/script.php?script_id=2699'</code> | ||||
|       <br/> | ||||
|       <code>set argtextobj</code> | ||||
|       </details> | ||||
|     | ||||
| ### Instructions | ||||
|     | ||||
| By default, only the arguments inside parenthesis are considered. To extend the functionality | ||||
|       to other types of brackets, set `g:argtextobj_pairs` variable to a comma-separated | ||||
|       list of colon-separated pairs (same as VIM's `matchpairs` option), like | ||||
|       `let g:argtextobj_pairs="(:),{:},<:>"`. The order of pairs matters when | ||||
|       handling symbols that can also be operators: `func(x << 5, 20) >> 17`. To handle | ||||
|       this syntax parenthesis, must come before angle brackets in the list. | ||||
|     | ||||
| https://www.vim.org/scripts/script.php?script_id=2699 | ||||
|  | ||||
| </details> | ||||
|     | ||||
|  | ||||
| <details> | ||||
| <summary><h2>exchange</h2></summary> | ||||
|  | ||||
| By [fan-tom](https://github.com/fan-tom)   | ||||
| Original plugin: [vim-exchange](https://github.com/tommcdo/vim-exchange). | ||||
|     | ||||
| ### Setup: | ||||
| - Add the following command to `~/.ideavimrc`: `Plug 'tommcdo/vim-exchange'` | ||||
|     <details> | ||||
|       <summary>Alternative syntax</summary> | ||||
|       <code>Plugin 'tommcdo/vim-exchange'</code> | ||||
|       <br/> | ||||
|       <code>Plug 'https://github.com/tommcdo/vim-exchange'</code> | ||||
|       <br/> | ||||
|       <code>Plug 'vim-exchange'</code> | ||||
|       <br/> | ||||
|       <code>set exchange</code> | ||||
|       </details> | ||||
|     | ||||
| ### Instructions | ||||
|     | ||||
| https://github.com/tommcdo/vim-exchange/blob/master/doc/exchange.txt | ||||
|  | ||||
| </details> | ||||
|     | ||||
| <details> | ||||
| <summary><h2>textobj-entire</h2></summary> | ||||
|  | ||||
| By [Alexandre Grison](https://github.com/agrison)   | ||||
| Original plugin: [vim-textobj-entire](https://github.com/kana/vim-textobj-entire). | ||||
|     | ||||
| ### Setup: | ||||
| - Add the following command to `~/.ideavimrc`: `Plug 'kana/vim-textobj-entire'` | ||||
|     <details> | ||||
|       <summary>Alternative syntax</summary> | ||||
|       <code>Plugin 'kana/vim-textobj-entire'</code> | ||||
|       <br/> | ||||
|       <code>Plug 'vim-textobj-entire'</code> | ||||
|       <br/> | ||||
|       <code>Plug 'https://www.vim.org/scripts/script.php?script_id=2610'</code> | ||||
|       <br/> | ||||
|       <code>set textobj-entire</code> | ||||
|       </details> | ||||
|     | ||||
| ### Instructions | ||||
|     | ||||
| https://github.com/kana/vim-textobj-entire/blob/master/doc/textobj-entire.txt | ||||
|  | ||||
| </details> | ||||
|     | ||||
| <details> | ||||
| <summary><h2>highlightedyank</h2></summary> | ||||
|  | ||||
| By [KostkaBrukowa](https://github.com/KostkaBrukowa)   | ||||
| Original plugin: [vim-highlightedyank](https://github.com/machakann/vim-highlightedyank). | ||||
|     | ||||
| ### Setup: | ||||
| - Add the following command to `~/.ideavimrc`: `Plug 'machakann/vim-highlightedyank'` | ||||
|     <details> | ||||
|       <summary>Alternative syntax</summary> | ||||
|       <code>Plugin 'machakann/vim-highlightedyank'</code> | ||||
|       <br/> | ||||
|       <code>Plug 'https://github.com/machakann/vim-highlightedyank'</code> | ||||
|       <br/> | ||||
|       <code>Plug 'vim-highlightedyank'</code> | ||||
|       <br/> | ||||
|       <code>set highlightedyank</code> | ||||
|       </details> | ||||
|     | ||||
| ### Instructions | ||||
|     | ||||
| If you want to optimize highlight duration, assign a time in milliseconds:   | ||||
|       `let g:highlightedyank_highlight_duration = "1000"`   | ||||
|       A negative number makes the highlight persistent.   | ||||
|     | ||||
| If you want to change background color of highlight you can provide the rgba of the color you want e.g.   | ||||
|       `let g:highlightedyank_highlight_color = "rgba(160, 160, 160, 155)"` | ||||
|     | ||||
| https://github.com/machakann/vim-highlightedyank/blob/master/doc/highlightedyank.txt | ||||
|  | ||||
| </details> | ||||
|  | ||||
| <details> | ||||
| <summary><h2>vim-paragraph-motion</h2></summary> | ||||
|  | ||||
| Original plugin: [vim-paragraph-motion](https://github.com/dbakker/vim-paragraph-motion). | ||||
|     | ||||
| ### Setup: | ||||
| - Add the following command to `~/.ideavimrc`: `Plug 'dbakker/vim-paragraph-motion'` | ||||
|     <details> | ||||
|       <summary>Alternative syntax</summary> | ||||
|       <code>Plugin 'dbakker/vim-paragraph-motion'</code> | ||||
|       <br/> | ||||
|       <code>Plug 'https://github.com/dbakker/vim-paragraph-motion'</code> | ||||
|       <br/> | ||||
|       <code>Plug 'vim-paragraph-motion'</code> | ||||
|       <br/> | ||||
|       <code>Plug 'https://github.com/vim-scripts/Improved-paragraph-motion'</code> | ||||
|       <br/> | ||||
|       <code>Plug 'vim-scripts/Improved-paragraph-motion'</code> | ||||
|       <br/> | ||||
|       <code>Plug 'Improved-paragraph-motion'</code> | ||||
|       <br/> | ||||
|       <code>set vim-paragraph-motion</code> | ||||
|       </details> | ||||
|     | ||||
| ### Instructions | ||||
|     | ||||
| https://github.com/dbakker/vim-paragraph-motion#vim-paragraph-motion | ||||
|  | ||||
| </details> | ||||
|     | ||||
| <details> | ||||
| <summary><h2>vim-indent-object</h2></summary> | ||||
|  | ||||
| By [Shrikant Sharat Kandula](https://github.com/sharat87)   | ||||
| Original plugin: [vim-indent-object](https://github.com/michaeljsmith/vim-indent-object). | ||||
|     | ||||
| ### Setup: | ||||
| - Add the following command to `~/.ideavimrc`: `Plug 'michaeljsmith/vim-indent-object'` | ||||
|     <details> | ||||
|       <summary>Alternative syntax</summary> | ||||
|       <code>Plugin 'michaeljsmith/vim-indent-object'</code> | ||||
|       <br/> | ||||
|       <code>Plug 'https://github.com/michaeljsmith/vim-indent-object'</code> | ||||
|       <br/> | ||||
|       <code>Plug 'vim-indent-object'</code> | ||||
|       <br/> | ||||
|       <code>set textobj-indent</code> | ||||
|       </details> | ||||
|     | ||||
| ### Instructions | ||||
|     | ||||
| https://github.com/michaeljsmith/vim-indent-object/blob/master/doc/indent-object.txt | ||||
|  | ||||
| </details> | ||||
|     | ||||
|     | ||||
| <details> | ||||
| <summary><h2>matchit.vim</h2></summary> | ||||
|  | ||||
| By [Martin Yzeiri](https://github.com/myzeiri) | ||||
| Original plugin: [matchit.vim](https://github.com/chrisbra/matchit). | ||||
|     | ||||
| ### Setup: | ||||
| - Add the following command to `~/.ideavimrc`: `packadd matchit` | ||||
|     <details> | ||||
|       <summary>Alternative syntax</summary> | ||||
|       <code>Plug 'vim-matchit'</code> | ||||
|       <br/> | ||||
|       <code>Plug 'chrisbra/matchit'</code> | ||||
|       <br/> | ||||
|       <code>set matchit</code> | ||||
|       </details> | ||||
|     | ||||
| ### Instructions | ||||
|     | ||||
| https://github.com/adelarsq/vim-matchit/blob/master/doc/matchit.txt | ||||
|  | ||||
| </details> | ||||
|  | ||||
| <details> | ||||
| <summary><h2>IdeaVim-Quickscope</h2></summary> | ||||
|  | ||||
| Original plugin: [quick-scope](https://github.com/unblevable/quick-scope). | ||||
|  | ||||
| ### Setup: | ||||
| - Install [IdeaVim-Quickscope](https://plugins.jetbrains.com/plugin/19417-ideavim-quickscope) plugin. | ||||
| - Add the following command to `~/.ideavimrc`: `set quickscope` | ||||
|  | ||||
| ### Instructions | ||||
|  | ||||
| https://plugins.jetbrains.com/plugin/19417-ideavim-quickscope | ||||
|  | ||||
| </details> | ||||
|  | ||||
|  | ||||
| <details> | ||||
| <summary><h2>Which-Key</h2></summary> | ||||
|  | ||||
| Original plugin: [vim-which-key](https://github.com/liuchengxu/vim-which-key). | ||||
|  | ||||
| ### Setup: | ||||
| - Install [Which-Key](https://plugins.jetbrains.com/plugin/15976-which-key) plugin. | ||||
| - Add the following command to `~/.ideavimrc`: `set which-key` | ||||
|  | ||||
| ### Instructions | ||||
|  | ||||
| https://github.com/TheBlob42/idea-which-key?tab=readme-ov-file#installation | ||||
|  | ||||
| </details> | ||||
| @@ -1,8 +1,8 @@ | ||||
| # NERDTree | ||||
|  | ||||
| IdeaVim supports emulation of the NERDTree plugin. Update your `~/.ideavimrc` to turn it on: | ||||
| IdeaVim supports the NERDTree plugin. Update your `~/.ideavimrc` to turn it on: | ||||
| ```vim | ||||
| Plug 'preservim/nerdtree` | ||||
| Plug 'preservim/nerdtree' | ||||
| ``` | ||||
| or | ||||
| ```vim | ||||
| @@ -15,7 +15,7 @@ Use `set noNERDTree` to disable this extension. | ||||
|  | ||||
| ```vim | ||||
| set NERDTree | ||||
| Plug 'preservim/nerdtree` | ||||
| Plug 'preservim/nerdtree' | ||||
| Plug 'https://github.com/preservim/nerdtree' | ||||
| Plug 'https://github.com/scrooloose/nerdtree' | ||||
| Plug 'scrooloose/nerdtree' | ||||
|   | ||||
| @@ -3,6 +3,11 @@ Put `set ideajoin` to your `~/.ideavimrc` to enable this functionality. | ||||
|  | ||||
| Now, you can press `J` (`shift+j`) on a line or a selected block of text to join the lines together. | ||||
|  | ||||
| :warning: This feature is language-specific. This means that the IDE should implement this feature for a particular | ||||
| language in order for the IDE to work as described below. If any of the examples provided below don't match your case,  | ||||
| please file an issue in the project related to your IDE: https://youtrack.jetbrains.com/.   | ||||
| Here is a list of known requests: https://youtrack.jetbrains.com/issues?q=links:VIM-3214. | ||||
|  | ||||
| * Automatic join concatenated lines: | ||||
|  | ||||
| ``` | ||||
|   | ||||
							
								
								
									
										
											BIN
										
									
								
								doc/images/action-id-notification.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 46 KiB | 
							
								
								
									
										13
									
								
								doc/marketplace-plugin-example.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,13 @@ | ||||
| Using actions from external plugins is the same, as tracking and reusing any IDE action. As an example, let's create a mapping that will toggle case of the word under caret using the CamelCase plugin when you press `<leader>t`. | ||||
|  | ||||
| **Steps to make this mapping** | ||||
|  | ||||
| 1. Install the plugin via Marketplace | ||||
| 2. Enable action tracking. You can enable it by one of the following ways: | ||||
|     * Execute `:set trackactionids` ex command or just `:set tai` | ||||
|     * Open the "Find actions" window by pressing `Ctrl-Shift-A` and search for "Track Action Ids" to find the toggle that enables and disables action tracking | ||||
| 3. Execute the plugin action the way intended by plugin author "See Edit menu or use ⇧ + ⌥ + U / Shift + Alt + U" or just find the `Toggle Camel Case` action in the "Find actions" window (`Ctrl-Shift-A`). If you action tracking is on, you will see this notification in your right bottom corner: | ||||
|     | ||||
|    <img alt="Notification" src="images/action-id-notification.png"/> | ||||
| 4. Copy the action id from the notification to create the following mapping in your .ideavimrc | ||||
| ```map <leader>t <Action>(de.netnexus.CamelCasePlugin.ToggleCamelCase)``` | ||||