mirror of https://github.com/sharkdp/bat.git
Compare commits
968 Commits
Author | SHA1 | Date |
---|---|---|
Bryan Honof | b265b20721 | |
Ethan P | a7a9727c11 | |
Ethan P. | 90dfa7f18d | |
Ethan P. | 3f8d62e7d6 | |
Ethan P. | 3f22311ec8 | |
Ethan P. | 9e8176b1c6 | |
Ethan P. | 70ff93d238 | |
Tong Zhaoqi | c264ecd26b | |
Ethan P | 10a1b24191 | |
Ethan P. | 243819ecdc | |
Ethan P. | 9c76b72825 | |
Ethan P. | b4fe182960 | |
dependabot[bot] | b7e44c76dc | |
dependabot[bot] | f3cc69733f | |
dependabot[bot] | 3625f0ea1c | |
dependabot[bot] | e6e2d4c65d | |
dependabot[bot] | 340e873eff | |
Keith Hall | 3407bf4bf6 | |
ccQpein | 25cd4991d2 | |
ccQpein | 503b2c5126 | |
ccQpein | 026bc05d70 | |
ccQpein | 61005f19fa | |
someposer | 8f8c953ab6 | |
dependabot[bot] | b4e3a84e1a | |
dependabot[bot] | f7c39e8353 | |
dependabot[bot] | 37d9f0533c | |
dependabot[bot] | d560f2a515 | |
Stéphane Blondon | bb4d1cbd2e | |
Stéphane Blondon | 23ec433167 | |
Sharun | 9eaed3e3f0 | |
sblondon | d5bd4aa93f | |
Keith Hall | 66b70dd8ed | |
Michael Vorburger | 01731478a6 | |
Rivera Calzadillas | f8c5429a6c | |
Rivera Calzadillas | f71226adbb | |
一个不知名の睡觉高手 | e8d777b73a | |
dependabot[bot] | 3cff44b652 | |
dependabot[bot] | 26302a8b08 | |
dependabot[bot] | adc5bd0402 | |
dependabot[bot] | e3c3be950a | |
dependabot[bot] | 8d92dc2083 | |
dependabot[bot] | a1f85b9e06 | |
dependabot[bot] | 424c02dfa7 | |
David Peter | 018a482621 | |
guoguangwu | 4790def1ef | |
Hamir Mahal | 07c26adc35 | |
David Peter | f29f9387b5 | |
Hamir Mahal | c290bfff1e | |
dependabot[bot] | 42153f2b99 | |
dependabot[bot] | 6d7537d3ec | |
dependabot[bot] | b30ec9f975 | |
dependabot[bot] | a7074f10d4 | |
David Peter | d185f0973b | |
cyqsimon | 071874ea8f | |
cyqsimon | 46a2c004a2 | |
cyqsimon | 26ac179548 | |
Lena | 4c85483486 | |
einfachIrgendwer0815 | 487bed2d95 | |
David Peter | 6f69682552 | |
David Peter | bc5beaec5d | |
einfachIrgendwer0815 | 83b00bc653 | |
einfachIrgendwer0815 | f041ff8c5f | |
einfachIrgendwer0815 | 1fbdbfc4b2 | |
einfachIrgendwer0815 | 2323aa0def | |
einfachIrgendwer0815 | 6c2ce63101 | |
einfachIrgendwer0815 | 13204c46e2 | |
Ethan P | 9bb0271e7d | |
Ethan P | 0e4e10edb6 | |
Ethan P | 0c7e5299bf | |
Ethan P | c36ed32816 | |
David Peter | e1a3fc5529 | |
David Peter | 1ae9e843ed | |
David Peter | dbe4cfb763 | |
David Peter | 4549f83689 | |
David Peter | e6e8f847be | |
David Peter | b9e249f782 | |
David Peter | 3ffa3648cf | |
David Peter | 5c2cc53882 | |
David Peter | a6f01af8de | |
David Peter | 85a549e293 | |
David Peter | b718889ba2 | |
David Peter | 708c74f6af | |
David Peter | 74d666f5c0 | |
David Peter | 7604fe5567 | |
David Peter | 0080b043c4 | |
cyqsimon | c7bce46622 | |
cyqsimon | 2b4339663c | |
cyqsimon | 6a6b02117b | |
cyqsimon | 511cd30105 | |
cyqsimon | 92915e22e7 | |
cyqsimon | d499191b0a | |
cyqsimon | 152d69fe98 | |
cyqsimon | 81aa24310c | |
cyqsimon | 75cdabaf13 | |
Oliver Looney | 1f628203e5 | |
David Peter | 1b9fc1d5af | |
David Peter | bc1ca1a346 | |
David Peter | f735120978 | |
Ethan P. | 25b5a41189 | |
Ethan P. | c94cf4e14e | |
Ethan P. | 84d80eebd0 | |
Ethan P. | 915dd9fbf8 | |
Ethan P. | 9d77c1373c | |
Oliver Looney | c3f2ddf509 | |
Oliver looney | 8a51172b11 | |
einfachIrgendwer0815 | 875046e4cd | |
mxaddict | a5bd9f51be | |
Ethan P | 5a2a20af42 | |
Ethan P | 61029c8bd2 | |
Ethan P | 1023399c5e | |
Ethan P | 6549e26f5d | |
Ethan P | 165c495e75 | |
Ethan P | 6b9b085be3 | |
Ethan P | 2d46d54ae3 | |
Ethan P | 3d04699710 | |
Ethan P | 054421268f | |
Ethan P | 414403b062 | |
Ethan P | c29bf2ff28 | |
David Peter | ab4e5ed52e | |
David Tolnay | 1a54c9bf6d | |
Oliver looney | 02077db53e | |
Oliver looney | 7ce010d9ed | |
dependabot[bot] | 95993cf37e | |
David Peter | 3761df9112 | |
Ethan P. | adfaef19da | |
dependabot[bot] | f7bea6de5b | |
dependabot[bot] | 65aae5d0a1 | |
dependabot[bot] | e3866b1f7e | |
dependabot[bot] | 23de8e093b | |
dependabot[bot] | 196a4cb18f | |
Andy Kipp | 695cf1f387 | |
Andy Kipp | 0af1df5258 | |
Oliver looney | a8d07333e9 | |
Oliver looney | 7f12989127 | |
Oliver looney | 60e32cf823 | |
Oliver looney | e9a6aaa30f | |
Oliver looney | 9be2a36a01 | |
Oliver looney | 22254936a2 | |
Oliver looney | f6d76e0104 | |
Oliver looney | c911829771 | |
Oliver looney | b33e33fe26 | |
Oliver looney | 9239b125b1 | |
David Peter | 2086cd2668 | |
Filip Razek | 1b88267320 | |
Filip Razek | e586751208 | |
Filip Razek | e7256a624b | |
Filip Razek | 5c1f47359e | |
Filip Razek | 45ee2dc4c7 | |
David Peter | db66e4459b | |
cyqsimon | 55e02e101d | |
cyqsimon | 230abfd2bc | |
cyqsimon | c0f2d6f934 | |
cyqsimon | 9f36a7a284 | |
cyqsimon | e4d637a3d8 | |
rhysd | 98a2b6bc17 | |
rhysd | 8e66bc8722 | |
dependabot[bot] | cd81c7fa6b | |
Oliver Looney | b4fdb5dc36 | |
dependabot[bot] | c76ed99db2 | |
dependabot[bot] | 06aef22943 | |
dependabot[bot] | 128b0d6dd3 | |
dependabot[bot] | 15dc20109f | |
dependabot[bot] | 5c4bcd6611 | |
Keith Hall | ecf4029dc7 | |
Oliver looney | c261b41578 | |
Oliver Looney | 6f1cc80d68 | |
Oliver looney | 3b0ade9cb8 | |
Oliver looney | 57016f4e04 | |
Víctor González Prieto | 497342fabb | |
David Tolnay | bf56cd90f0 | |
David Tolnay | 0acb979e9e | |
Oliver Looney | d7503bfc09 | |
Martin Nordholts | b89dc15be1 | |
cyqsimon | 15ab4478c9 | |
Oliver looney | 5b4ce684a1 | |
Oliver looney | 0027055a83 | |
Oliver looney | 321b3ec81b | |
Oliver looney | 1679460f42 | |
Oliver looney | 907af9e35f | |
Oliver looney | 12b74dfb4e | |
Oliver looney | fd84e4f49f | |
cyqsimon | f0a6fe216d | |
cyqsimon | d792dc5804 | |
cyqsimon | 8a08025091 | |
cyqsimon | 586c804b1e | |
cyqsimon | e30161ac3c | |
cyqsimon | 3865908439 | |
cyqsimon | 9474b4cf8b | |
cyqsimon | b48bda21a3 | |
cyqsimon | daf33709a0 | |
cyqsimon | 36073a3d95 | |
cyqsimon | 12fa2cb1eb | |
cyqsimon | 1f10d846a3 | |
cyqsimon | 22531eab90 | |
cyqsimon | 0c1b80faab | |
cyqsimon | 2c9bf229e1 | |
cyqsimon | 822e81bb24 | |
cyqsimon | ad628c0471 | |
cyqsimon | f483d2df42 | |
cyqsimon | 4ad3002543 | |
cyqsimon | cfd622d6e1 | |
cyqsimon | 1c7c9a6b6d | |
cyqsimon | 0c93ca80f4 | |
cyqsimon | de6d418d42 | |
cyqsimon | c016b462c0 | |
cyqsimon | 7e1fbcfe95 | |
cyqsimon | 4815b6155e | |
cyqsimon | 075b5b288a | |
cyqsimon | 7cfd1e0d78 | |
cyqsimon | 9f7d70f642 | |
cyqsimon | 0fea82cff9 | |
cyqsimon | 64840fbbae | |
cyqsimon | 827b3eca2f | |
cyqsimon | 9478d2dfe8 | |
cyqsimon | d24501ab5e | |
cyqsimon | 9f4259721a | |
cyqsimon | 77e491161c | |
cyqsimon | 97780f987e | |
cyqsimon | d1bc0ef0d4 | |
cyqsimon | 52f94b4623 | |
cyqsimon | 37fd050100 | |
cyqsimon | 83286975ff | |
cyqsimon | f705fcb984 | |
cyqsimon | 9ca1f20f43 | |
Oliver looney | 6ad800e43a | |
Oliver looney | 069318b139 | |
Oliver looney | b9b554248d | |
Oliver looney | 4863d428dd | |
Oliver looney | 2e103ee6b3 | |
Lena | 28990bc451 | |
cyqsimon | 748e2a681f | |
Broono Lu | bfa0b5241f | |
Oliver looney | 4af4bfc0f1 | |
cyqsimon | 51203ff750 | |
dependabot[bot] | 96cef9a24e | |
Oliver Kiddle | b43d31b75a | |
dependabot[bot] | ad3ff26960 | |
dependabot[bot] | 86b40993c3 | |
dependabot[bot] | 31bed250ba | |
Cosmic Horror | 7658334645 | |
cyqsimon | 491ae70aa9 | |
cyqsimon | d64c568196 | |
cyqsimon | b5982a6174 | |
Maria José Solano | 04e7d2a313 | |
cyqsimon | bcc2de86b4 | |
cyqsimon | 1296aea836 | |
cyqsimon | 5498c24c33 | |
cyqsimon | 79a03b4299 | |
cyqsimon | f3a5e9a73c | |
cyqsimon | 2710a19ecb | |
cyqsimon | 6d0ef259f6 | |
cyqsimon | b1577cc083 | |
cyqsimon | 28d947fd8b | |
cyqsimon | b000db8f32 | |
dependabot[bot] | 116a6cc9a8 | |
dependabot[bot] | c8291a36b7 | |
dependabot[bot] | 8180c76890 | |
dependabot[bot] | a0f33b1cdc | |
dependabot[bot] | 8b60dae81c | |
cyqsimon | 4b33093f9e | |
einfachIrgendwer0815 | 3d87b25b19 | |
dependabot[bot] | f2f6902279 | |
dependabot[bot] | c0b17e73e1 | |
dependabot[bot] | 94544d963b | |
dependabot[bot] | 72abbd22de | |
dependabot[bot] | 64e10ffb21 | |
Martin Nordholts | 35d8146bba | |
Martin Nordholts | a5a7ede698 | |
dependabot[bot] | b551049706 | |
dependabot[bot] | 99cfc13eab | |
dependabot[bot] | 4b0b5afa13 | |
dependabot[bot] | d343428441 | |
dependabot[bot] | 16e409ec87 | |
dependabot[bot] | 94d059f258 | |
dependabot[bot] | c8b9de889d | |
dependabot[bot] | 75340d54f9 | |
dependabot[bot] | b28383e0fa | |
dependabot[bot] | 8e866db281 | |
dependabot[bot] | 0eb157e090 | |
dependabot[bot] | 85636c28bc | |
dependabot[bot] | a70e5c6c65 | |
dependabot[bot] | 32e01f740b | |
dependabot[bot] | 7b20f8fc7b | |
Martin Nordholts | 86ac48d68e | |
Martin Nordholts | c42fc810ea | |
Martin Nordholts | 6baebd79fa | |
Martin Nordholts | c6cae09f99 | |
Martin Nordholts | fc9546854f | |
Martin Nordholts | 32da58e723 | |
Mészáros Máté Róbert | 63aaa03013 | |
David Peter | fbe9b6f15f | |
David Peter | c946ddb012 | |
rhysd | e5c81ed41e | |
skoriop | 0937d575fd | |
skoriop | 4382be5e7c | |
skoriop | d89df18de2 | |
skoriop | 9fcc57e496 | |
Raghav-Bell | 8e35a56712 | |
Linda_pp | 9f795dd947 | |
dependabot[bot] | 721f956c1c | |
dependabot[bot] | db4cdc1cb8 | |
dependabot[bot] | e455f93a1e | |
rhysd | d756d6f1ed | |
rhysd | 6568fb775d | |
rhysd | d376a4b631 | |
dependabot[bot] | 6e5fd36882 | |
dependabot[bot] | c7cc4b5c59 | |
dependabot[bot] | db76091a53 | |
David Peter | 506fe65474 | |
Connor Sullivan | 69c326fd41 | |
Connor Sullivan | 466b275e87 | |
Dan Gohman | 319c675f3e | |
Nicolas AMBRY | 5a240f36b9 | |
J-Kappes | e2bf85e749 | |
Anomalocaridid | fe73010a5e | |
Anomalocaridid | 150c04acb6 | |
Anomalocaridid | 433176ab54 | |
Anomalocaridid | b56021ffa9 | |
Anomalocaridid | ac2953c070 | |
Boy van Duuren | d6e11b59e7 | |
Martin Nordholts | f49278cfaa | |
pseudometa | 9b73eda957 | |
pseudometa | ed99a3a104 | |
Anomalocaridid | e32ad0b048 | |
David Peter | 3abc0c0fc4 | |
David Peter | b06f13f0c5 | |
Utkarsh Gupta | a721cc31f3 | |
David Peter | 1e52785d35 | |
Orion Yeung | 9ba3b6ed13 | |
Peter Hebden | 72e1a40bab | |
Peter Hebden | 33a89410d4 | |
Peter Hebden | b2c28cdddb | |
Peter Hebden | 906e774372 | |
Peter Hebden | d929becefc | |
Peter Hebden | 103a2f0d9b | |
rhysd | d33b2e158e | |
David Peter | d295b3a394 | |
David Peter | 81a217b1f3 | |
dependabot[bot] | bb17f74757 | |
dependabot[bot] | 75928d20f8 | |
dependabot[bot] | 2cc45eea1a | |
dependabot[bot] | 7dbc6e3da4 | |
dependabot[bot] | f34b852aa8 | |
einfachIrgendwer0815 | 4b04f901fe | |
einfachIrgendwer0815 | 26111950b3 | |
Orion Yeung | f21d3502e1 | |
Maros Kukan | 5687af8bc7 | |
nazar | 0f5f51f9ba | |
Jan T. Sott | 32c0e1fb45 | |
Jan T. Sott | 34440f1b0c | |
Jan T. Sott | f1d6cc7a64 | |
Jan T. Sott | 628ba5d31f | |
dependabot[bot] | e24150ca3f | |
WinterCore | d580445aef | |
Martin Nordholts | 48dc2b0d90 | |
mataha | 82664e3c82 | |
Ville Skyttä | 1893405cbf | |
Keith Hall | 00b7e3b864 | |
John Higgins | 7826e506f8 | |
David Peter | 6dd8b28b0d | |
John Higgins | b720af8a06 | |
John Higgins | b1fbcc8a6e | |
Martin Nordholts | 9bf74d687f | |
Keith Hall | 783d4877e1 | |
einfachIrgendwer0815 | 8b187e6997 | |
einfachIrgendwer0815 | c46c53320b | |
dependabot[bot] | 7f884fa582 | |
David Peter | 8676bbf97f | |
sitiom | 77069b368c | |
David Peter | 70e49bd32b | |
dependabot[bot] | 5042f969e5 | |
dependabot[bot] | 876f5d4113 | |
dependabot[bot] | 39d9d64e1e | |
cyqsimon | 8e866babfc | |
cyqsimon | f8c700027e | |
Martin Nordholts | 7639e8b406 | |
Nigecat | 149dec6953 | |
lesleyrs | b420c42aff | |
lesleyrs | 3da7adb763 | |
dependabot[bot] | 165e5da6b9 | |
dependabot[bot] | c5a9fdff93 | |
dependabot[bot] | 8aac5acc0a | |
dependabot[bot] | 7162e38d50 | |
dependabot[bot] | 63ac60a3a0 | |
Constantin Nickel | 9683bfdb3f | |
Adrián Bíro | e155f56484 | |
Constantin Nickel | e828d7840a | |
Constantin Nickel | 52f7a5a06f | |
Constantin Nickel | baa1476d8d | |
Constantin Nickel | 6be56972b6 | |
dependabot[bot] | 08445eba91 | |
dependabot[bot] | 2298422e85 | |
David Peter | c5731b9079 | |
dependabot[bot] | 458e818ab4 | |
dependabot[bot] | 993b33b5b4 | |
dependabot[bot] | ba95955fe6 | |
Constantin Nickel | 57cc0d8435 | |
sitiom | 60a9ac041f | |
Ryan Caezar Itang | 33997106da | |
David Peter | 1b2c69aee8 | |
David Peter | 87e87a349a | |
David Peter | e49235e119 | |
David Peter | 1712ec9e73 | |
Marcin Puc | 3ca8c43a67 | |
Marcin Puc | 01f1b1efe8 | |
David Peter | c7905a6029 | |
David Peter | d27aaffead | |
David Peter | 871abd27aa | |
David Peter | 3c2ee04b9c | |
David Peter | 949f207275 | |
David Peter | 58dbbd1cd4 | |
David Peter | 2042eace2a | |
David Peter | a113b0df12 | |
Collin Styles | ad3586f58a | |
Collin Styles | 7929179a74 | |
David Peter | a422fea06d | |
David Peter | 4e491c4594 | |
David Peter | 1a142a82b4 | |
David Peter | 4d9aaece09 | |
Constantin Nickel | 0e148e35dd | |
Constantin Nickel | da3aa4e2fd | |
Keith Hall | b65a02681a | |
Constantin Nickel | 89c5683f8d | |
David Peter | d20405b975 | |
Constantin Nickel | 52f6239d28 | |
David Peter | 6428125827 | |
Constantin Nickel | c094cd3ee5 | |
David Peter | 231ad86f04 | |
David Peter | 12f2b7281b | |
Constantin Nickel | 40abebff8e | |
Constantin Nickel | 22cc6ffb5a | |
einfachIrgendwer0815 | 8f99a78cf1 | |
Martin Nordholts | 40a423905a | |
David Peter | c5602f9766 | |
Constantin Nickel | 3c59a4203c | |
Constantin Nickel | f0fe88a732 | |
Keith Hall | 5e77ca37e8 | |
dependabot[bot] | 2ac584dd72 | |
dependabot[bot] | a967b88882 | |
Martin Nordholts | ec6e9c29ac | |
David Peter | e3d8b56c8f | |
David Peter | e142ea38e3 | |
David Peter | 4ab2af3870 | |
David Peter | fed4dafb71 | |
David Peter | f177f7ce6f | |
dependabot[bot] | 7049932542 | |
dependabot[bot] | 47ab4fa988 | |
dependabot[bot] | d440cae3ec | |
dependabot[bot] | bc714dd7a2 | |
dependabot[bot] | c4ad9ad25e | |
Keith Hall | 52ef1bc0d6 | |
BlackHoleFox | 1004018941 | |
David Peter | 6122d43e79 | |
0x8ff | d43d241f5b | |
David Peter | 269b6b7e28 | |
David Peter | 9a9ba65d11 | |
dependabot[bot] | 37ae4989a2 | |
dependabot[bot] | d83cc3a116 | |
dependabot[bot] | 105e55456c | |
dependabot[bot] | c012def1e4 | |
dependabot[bot] | 3687969aa9 | |
dependabot[bot] | 70f24b85a7 | |
David Peter | ac734db421 | |
David Peter | 39eebde3e5 | |
David Peter | 5cd77662b5 | |
David Peter | 09ab1905d0 | |
rhysd | 4cc2a489d0 | |
rhysd | 5e3abcad07 | |
dependabot[bot] | 362af8a0a6 | |
dependabot[bot] | d5084cd391 | |
dependabot[bot] | 6d40fd6482 | |
dependabot[bot] | 79198e8048 | |
dependabot[bot] | c6a9b01c4f | |
Josh Toft | e79e1a23eb | |
dependabot[bot] | 7fc6dae036 | |
Martin Nordholts | 4e34b362f8 | |
cyqsimon | b6b9d3a629 | |
David Peter | e19bebc1f6 | |
Víctor González Prieto | 3ffa7edbd5 | |
dependabot[bot] | 41ca247e32 | |
Martin Nordholts | 906de11975 | |
dependabot[bot] | d5b397f66a | |
dependabot[bot] | 52764624c9 | |
dependabot[bot] | 5c510a20c1 | |
dependabot[bot] | c9ac95e341 | |
dependabot[bot] | 8e960fc59c | |
David Peter | 416845dcd0 | |
Miles Liu | e39178b101 | |
David Peter | 7c847d84b0 | |
David Peter | accc1b6d10 | |
David Peter | 78a67ac77e | |
Aaron Kollasch | 017e830bf2 | |
Aaron Kollasch | 1224403aa1 | |
Aaron Kollasch | d084cdc72b | |
Aaron Kollasch | 1a07baf5f2 | |
Aaron Kollasch | bad2292950 | |
Aaron Kollasch | e773b48135 | |
Aaron Kollasch | 4bcea01e9d | |
Aaron Kollasch | 76aad7c74f | |
Aaron Kollasch | 36ccc6a31e | |
David Peter | 5652038f01 | |
David Peter | 4724d50e1d | |
David Peter | b6a5004a9c | |
David Peter | bb2e3b52b8 | |
David Peter | 12affef049 | |
David Peter | e29db4d052 | |
David Peter | a934be8ac5 | |
David Peter | 21791ffbfb | |
dependabot[bot] | 600de05840 | |
dependabot[bot] | ea7cc9d82f | |
dependabot[bot] | e536aa933e | |
dependabot[bot] | eb841434cd | |
dependabot[bot] | 043c04d3c4 | |
dependabot[bot] | b3f340e418 | |
David Peter | a7b0449967 | |
David Peter | 41b40f924f | |
David Peter | 14742a82bd | |
David Peter | b0359644dc | |
David Peter | 0cf069ba1b | |
David Peter | 85921864aa | |
David Peter | b29f66c40d | |
David Peter | c3347c6be5 | |
David Peter | a65b0828ee | |
David Peter | ccde13c9e8 | |
David Peter | 985666a390 | |
David Peter | 3668464f3d | |
David Peter | 8e15c9c501 | |
David Peter | 3c9c960612 | |
Ville Skyttä | 6378a95308 | |
Wu Zhenyu | 37da5659c5 | |
Wu Zhenyu | 6010b334c6 | |
Wu Zhenyu | 46dc044c03 | |
BANO.notIT | 31f964f468 | |
BANO.notIT | 316f1b3601 | |
BANO.notIT | 1a85b4c3b5 | |
BANO.notIT | 346e53705e | |
John Higgins | ff71303349 | |
John Higgins | bf114f5844 | |
wzy | f215d07366 | |
wenzdey | 9679ae3662 | |
Ville Skyttä | 21bdcbb71f | |
John Higgins | 20f272168a | |
John Higgins | 236a2c5794 | |
John Higgins | 03216c9c18 | |
John Higgins | 8f31ffa9df | |
John Higgins | 375b392478 | |
Matthew Bauer | 46f8e29de4 | |
Matthew Bauer | 3e238b82f6 | |
dependabot[bot] | 5fce1389e5 | |
dependabot[bot] | 0cc4e98560 | |
Gábor Lipták | 1e0b0f7c5c | |
Gábor Lipták | 9051fc5465 | |
Masanori Kakura | 16d181a755 | |
dependabot[bot] | 42a3ef28e8 | |
dependabot[bot] | b9d5f3878d | |
dependabot[bot] | 10ab72f8ae | |
dependabot[bot] | 9d39054e18 | |
dependabot[bot] | c662801ad8 | |
Marc Poulhiès | 06b403aa92 | |
Ville Skyttä | 2dbc88d3af | |
Ville Skyttä | 66edfe5dff | |
Ville Skyttä | c816188f97 | |
Ville Skyttä | 46bf3c1e9a | |
Ville Skyttä | 066701d671 | |
Ville Skyttä | e96cdc3b95 | |
Martin Nordholts | 8bd5a88f07 | |
Martin Nordholts | e5d9579614 | |
Martin Nordholts | 352309b056 | |
John Higgins | 2af54dbacd | |
John Higgins | a272d3df16 | |
David Peter | 6680f65e4b | |
David Peter | 1f9519d8b9 | |
David Peter | 3c33b28507 | |
dag-h | 08386daa3a | |
David Peter | 0e03dce130 | |
David Peter | 6a0ab0095a | |
oidro | b213949aeb | |
rhysd | 3d7817d662 | |
rhysd | abd69f2deb | |
David Peter | 113276a62b | |
Kid | 1e1fa7cde5 | |
Kid | d6d8b61131 | |
Kid | 839e62cff8 | |
David Peter | ca9843fa83 | |
David Peter | 546dcf6a55 | |
Kid | d7b6519422 | |
Martin Nordholts | 799bb1639c | |
Martin Nordholts | bc2dc0796b | |
Martin Nordholts | 2dd2994b2f | |
David Peter | 48541b8507 | |
Jon Eskin | eab1c9eb46 | |
Keith Hall | c6775cc41e | |
David Peter | 45d6b1af3b | |
dependabot[bot] | b295850cb3 | |
Ed Page | 08c91a116c | |
Ed Page | 3d398b35c3 | |
Ed Page | 6099f2c146 | |
Ed Page | 50bb924ee3 | |
Ed Page | e8e1c1d6c9 | |
Ed Page | 542b3d2317 | |
Ed Page | 2323804f7e | |
Martin Nordholts | 49875d6ce7 | |
Martin Nordholts | 8b8ff96c32 | |
dependabot[bot] | 3d35469414 | |
dependabot[bot] | 3480b61eae | |
dependabot[bot] | 0167ba55dd | |
dependabot[bot] | 06dcead2d5 | |
dependabot[bot] | cc7df1e92b | |
Martin Nordholts | 899fdbb347 | |
Z. Grace Moreau | a6297b282c | |
Z. Grace Moreau | 33ba136fa3 | |
Z. Grace Moreau | f36df73ac1 | |
Z. Grace Moreau | d14e0fe292 | |
Martin Nordholts | 621ab6078f | |
Martin Nordholts | 020492f7e6 | |
Christopher Acosta | 9a924b445b | |
dependabot[bot] | c14ce4f7ca | |
Marie Katrine Ekeberg | 9c7ca33929 | |
David Peter | 02a9d191ed | |
dependabot[bot] | 71e71aa31e | |
dependabot[bot] | a091811be9 | |
dependabot[bot] | 2dd8ee97a9 | |
Martin Nordholts | ab8f97b0bb | |
dependabot[bot] | 4514a362fa | |
dependabot[bot] | 3a93798e8b | |
dependabot[bot] | 44fa7a9af3 | |
dependabot[bot] | 00eb7480f7 | |
dependabot[bot] | 44daae4a8f | |
dependabot[bot] | dd2c6e07b8 | |
John Higgins | 7b2e0ece55 | |
yuvalmo | c4d9d7561b | |
Anders Kaseorg | 4583826a5b | |
dependabot[bot] | c8b11873b1 | |
dependabot[bot] | b48cb99805 | |
Kian-Meng Ang | f93d650708 | |
Cre3per | ed4997c77c | |
dependabot[bot] | 16488f3d82 | |
dependabot[bot] | 373b22824d | |
dependabot[bot] | 17c099e589 | |
dependabot[bot] | 7d6aa09a56 | |
dependabot[bot] | b99ada8918 | |
Martin Nordholts | 3339eee2dc | |
David Peter | e9f8370b13 | |
David Peter | 892b186ba5 | |
David Peter | 6db64cf050 | |
Martin Nordholts | 5f139e5ec2 | |
Martin Nordholts | 8b50ef87fd | |
Martin Nordholts | 405e5f7460 | |
Martin Nordholts | 8d4f8ba1b2 | |
Martin Nordholts | d3f89bc4bc | |
Martin Nordholts | 5fe9b3e1b3 | |
Martin Nordholts | dc7d5a862f | |
Martin Nordholts | 4789c71a37 | |
Martin Nordholts | be99b759d3 | |
Martin Nordholts | 5f7ae6b277 | |
Martin Nordholts | ea5aaa03a2 | |
Martin Nordholts | 7334ab4542 | |
Martin Nordholts | 719248f1c1 | |
dependabot[bot] | ef3e398b2b | |
Tejinder Singh | 52bab63e18 | |
Martin Nordholts | 0851bbbb28 | |
Ryan Zoeller | 05ebf5ed26 | |
Isaac Horvath | adea895026 | |
dependabot[bot] | a6bd28a78b | |
Keith Hall | b5294f1cb2 | |
Nathan Fisher | 5114c0189d | |
dependabot[bot] | f2727d74d5 | |
dependabot[bot] | 735bee47eb | |
dependabot[bot] | a05ac53040 | |
Martin Nordholts | acb1231e40 | |
cyqsimon | 3ae05333b0 | |
dependabot[bot] | 4291fd5c65 | |
Víctor González Prieto | b0898900ce | |
Martin Nordholts | 3239d3be2a | |
Martin Nordholts | 19033d7315 | |
Martin Nordholts | 520081a92c | |
Martin Nordholts | 47e0dc22d2 | |
acheronfail | 33a984992b | |
acheronfail | b1e67e215c | |
dependabot[bot] | 49317adcd3 | |
dependabot[bot] | 738304fe27 | |
dependabot[bot] | a191552031 | |
dependabot[bot] | cec7229b6a | |
dependabot[bot] | e735562098 | |
Keith Hall | 1b030dc03b | |
Keith Hall | c0ec03e08a | |
Patrick Pichler | 6b660ef63a | |
Patrick Pichler | 5ed64444e3 | |
Martin Nordholts | 9ab378b5dc | |
dependabot[bot] | a153a78d7a | |
dependabot[bot] | 3ff738602e | |
David Peter | 282b70291f | |
David Peter | 6330f36495 | |
Patrick Hilhorst | e7df748b6d | |
Patrick Hilhorst | 67124f8513 | |
Patrick Hilhorst | 16f940c2d3 | |
Patrick Hilhorst | da5921b4a9 | |
TruncatedDinosour | cde239e809 | |
dependabot[bot] | 97a98e037d | |
dependabot[bot] | 3ffff8d2d8 | |
dependabot[bot] | 95796a9cc0 | |
Martin Nordholts | 7be9485c36 | |
Martin Nordholts | 448bfaf748 | |
Martin Nordholts | 0655ecf23d | |
Martin Nordholts | 671fc952bc | |
Martin Nordholts | 3c057aa590 | |
Martin Nordholts | 8e8c350391 | |
Martin Nordholts | 1ee49b4d97 | |
cyqsimon | 14ddda0a8b | |
yuuji.yaginuma | 36093dd3bc | |
Josh Pencheon | ad6cae433a | |
ltdk | e4f6fb2afe | |
Mahdi Dibaiee | d21f1e8f17 | |
Martin Nordholts | f6ce5d2054 | |
cyqsimon | b60225051d | |
David Peter | f2166ec6ec | |
David Peter | 491d32cbf3 | |
Keith Hall | 478712be38 | |
Keith Hall | d5d2fc4016 | |
Keith Hall | ed7cd1c45b | |
Keith Hall | f340893a21 | |
dependabot[bot] | 9ad147278f | |
Dan Davison | 4e36a56014 | |
Mahdi Dibaiee | 312c8ef01f | |
dependabot[bot] | f3f8194932 | |
dependabot[bot] | 6ce26c43c9 | |
Martin Nordholts | 486510395b | |
dependabot[bot] | 2ae4ffcdfa | |
dependabot[bot] | f5a7f86a64 | |
Martin Nordholts | 0fa99518ce | |
dependabot[bot] | a565662cf3 | |
dependabot[bot] | af44f0b3ff | |
dependabot[bot] | 5ae1957c0e | |
Keith Hall | 36be8d5929 | |
Keith Hall | a05c8ee1a8 | |
Keith Hall | eb4b1eb28f | |
klemens | 9287cf6b0b | |
Martin Nordholts | 76aa138230 | |
Martin Nordholts | 59a8f58be7 | |
Martin Nordholts | d3956be616 | |
Martin Nordholts | 53fb0baa06 | |
Martin Nordholts | c2232d457f | |
Martin Nordholts | 77f51f0ee3 | |
Martin Nordholts | 743c4ccb17 | |
Martin Nordholts | 5b37438f08 | |
Mahdi Dibaiee | 3f7bff90ba | |
Firegem | 0c19d3e51a | |
Firegem | e73c3d2378 | |
Firegem | 31ca212f86 | |
Martin Nordholts | 68528983d7 | |
Martin Nordholts | f89869b5b2 | |
dependabot[bot] | d4744dbed5 | |
dependabot[bot] | abbccc91ed | |
dependabot[bot] | 080c5f3de4 | |
dependabot[bot] | 079f6be88c | |
dependabot[bot] | c522ba78ed | |
dependabot[bot] | 392bff6666 | |
Mahdi Dibaiee | 6dc621ec18 | |
dependabot[bot] | 3358b075fb | |
dependabot[bot] | a02713dc15 | |
dependabot[bot] | ee1f5a9e89 | |
Martin Nordholts | 84a15f0b6e | |
Martin Nordholts | a3ea798246 | |
Ethan P | 63ad53817d | |
Martin Nordholts | 6d0eb0749e | |
Martin Nordholts | 36c1ea4599 | |
Martin Nordholts | e250da8aaa | |
Martin Nordholts | 7fceb4878f | |
Ersikan | 29711c178a | |
dependabot[bot] | 8072d5a3e3 | |
D3ara1n | a5234105e5 | |
Martin Nordholts | 4236fa97cb | |
dependabot[bot] | f5e3d9f010 | |
dependabot[bot] | 6313e9ef2a | |
Martin Nordholts | ce89fb2751 | |
David Peter | 3338699257 | |
Martin Nordholts | 747b15436a | |
Martin Nordholts | 206bf5b8d6 | |
Bojan Durdevic | 9a2979df5f | |
Bojan Durdevic | b8e79a2160 | |
Bojan Durdevic | 715b0d8bf5 | |
Bojan Durdevic | 0eb4aaac1e | |
Bojan Durdevic | bc86c29185 | |
David Peter | d2175d6382 | |
David Peter | b3aefd2d41 | |
David Peter | f7eb55aa01 | |
David Peter | 5e63d67960 | |
David Peter | 6fd78ea3f6 | |
David Peter | b12503a46a | |
David Peter | ea2faf45e4 | |
David Peter | 1822c981da | |
Martin Nordholts | 5519f9c716 | |
Martin Nordholts | dd0925a946 | |
Martin Nordholts | d7671fa8e3 | |
Martin Nordholts | e79b07bf5e | |
Shun Sakai | 619cf6e6d6 | |
Bojan Đurđević | d6ed5e6746 | |
Isabella Basso | 59d4cfb75c | |
dependabot[bot] | 194e7bbcd1 | |
Michael Currin | 5d92a7c591 | |
dependabot[bot] | 7fbe090525 | |
dependabot[bot] | eaf64df4c6 | |
dependabot[bot] | a1558fb6bf | |
dependabot[bot] | 18e999c92a | |
rhysd | d5f737f402 | |
cbolgiano | 7fe4fdf33d | |
David Peter | 0b63ad5e8b | |
Martin Nordholts | 4081ace4b9 | |
Martin Nordholts | dde770aa21 | |
Martin Nordholts | 6eb2cc9cac | |
rhysd | f28d9db3d0 | |
rhysd | deb80af449 | |
rhysd | dc0acbbb90 | |
rhysd | 92ba42a602 | |
Ashutosh Sajan | d5e61d2316 | |
rhysd | ed3246c423 | |
Diva M | 2339d78bf4 | |
Diva M | 3a3cd0acba | |
Diva M | ce4ddc0911 | |
i-ky | aed4ea144f | |
Raf Czlonka | eea061c1d9 | |
Ikko Ashimine | 10288e309e | |
mac.mini | ebdb00d4fc | |
NotWearingPants | 6fc7ebf37a | |
USER | 8f6a0cd9e2 | |
Martin Nordholts | 994c21a5e1 | |
Martin Nordholts | 554374667e | |
Martin Nordholts | 043f3381b0 | |
Georgy Komarov | d04a83de7b | |
invakid404 | b622a4d890 | |
Roneo.Org | b551d28a2f | |
Roneo.Org | e6caa04209 | |
Roneo.Org | adadedeab1 | |
dependabot[bot] | a6cf5235aa | |
dependabot[bot] | 1477338106 | |
Martin Nordholts | 418fce5683 | |
dependabot[bot] | 7a15ba3796 | |
dependabot[bot] | 0f002a5b06 | |
dependabot[bot] | 5344a32d34 | |
dependabot[bot] | c9645693a4 | |
dependabot[bot] | f607263bdc | |
dependabot[bot] | f309d2fbd2 | |
Kuan-Yi Li | 47283f226a | |
Martin Nordholts | aefc8fd824 | |
Martin Nordholts | 405a80f3ee | |
Martin Nordholts | ad98d35a48 | |
Martin Nordholts | b69ab219d7 | |
Martin Nordholts | dc8225f682 | |
Martin Nordholts | 9d9b266f54 | |
Martin Nordholts | b9d01c1a61 | |
Martin Nordholts | 122cae7902 | |
David Peter | 44a332c1c4 | |
Martin Nordholts | 5143f3ad43 | |
Martin Nordholts | a6dc25a216 | |
Martin Nordholts | f04d2a9d6a | |
Martin Nordholts | eb3b3b9f8d | |
Martin Nordholts | 0994f3783f | |
Martin Nordholts | 974dec38e3 | |
Martin Nordholts | a0c363647f | |
Martin Nordholts | d989224a8a | |
Martin Nordholts | 82f439e715 | |
Martin Nordholts | b034879eae | |
Martin Nordholts | 9ed9a6fc3d | |
Martin Nordholts | e84b702309 | |
Martin Nordholts | 6226eba52a | |
Martin Nordholts | 9e0ea06435 | |
Marcin Puc | 863d9cacd0 | |
Marcin Puc | 4baa346aae | |
Marcin Puc | 7956485e37 | |
Marcin Puc | 372e42f350 | |
Martin Nordholts | 9124271eaf | |
Kevin John Mulligan | 156dec2737 | |
David Peter | 27f046ec03 | |
dependabot[bot] | 74ae3dee91 | |
Martin Nordholts | 87978e7755 | |
Martin Nordholts | d935ea1cda | |
dependabot[bot] | 9602195910 | |
Martin Nordholts | 8ca852c728 | |
dependabot[bot] | df067f7d1f | |
dependabot[bot] | a8a81e99d2 | |
dependabot[bot] | 65e7c531de | |
Ville Skyttä | 7c41bd72da | |
Martin Nordholts | 355a82db54 | |
Martin Nordholts | b3e17bde82 | |
Martin Nordholts | 4b38e7b1d7 | |
Rashil Gandhi | 43afae34be | |
Martin Nordholts | 27fa55d274 | |
Martin Nordholts | 19c3e82abf | |
Martin Nordholts | f1c0fd7343 | |
Martin Nordholts | 12dfbdc400 | |
Bojan Durdevic | c86a179412 | |
Bojan Durdevic | 0748783404 | |
Martin Nordholts | b3247d9364 | |
Martin Nordholts | ba8a694314 | |
David Peter | ff70a80741 | |
David Peter | ecdb17148d | |
David Peter | 11bd523f7e | |
David Peter | 01fbedc246 | |
David Peter | 05e4e1f2f2 | |
David Peter | 20223ad77c | |
a1346054 | 51edacb5eb | |
a1346054 | 5197ef9048 | |
a1346054 | 19678527e5 | |
a1346054 | 5d319dee94 | |
Ville Skyttä | 43e1a11ad8 | |
Martin Nordholts | ed09f90e5e | |
Martin Nordholts | cbd96237fd | |
Martin Nordholts | f5c1cb2dff | |
Keith Hall | 5eb93a6eae | |
Martin Nordholts | 25fa577cd0 | |
Martin Nordholts | deddc81426 | |
Keith Hall | 133b06e945 | |
Mario Finelli | 699f1e65cc | |
Mario Finelli | 9ef87dab27 | |
Mario Finelli | 5125e9c941 | |
Bill Risher | 6c62ed5608 | |
Bill Risher | bf78288e9e | |
Keith Hall | f8498b260b | |
Ville Skyttä | 79f08588c6 | |
Ville Skyttä | 2d92a4dbb3 | |
Ville Skyttä | f508ddf66d | |
Ville Skyttä | 02218c916c | |
Martin Nordholts | 89217e0d58 | |
Martin Nordholts | cb4973987b | |
Martin Nordholts | 905902d811 | |
Martin Nordholts | c83e382eac | |
Martin Nordholts | f6975e2acd | |
Martin Nordholts | d8b813c0bf | |
Martin Nordholts | 5236ed135e | |
Martin Nordholts | 47d955a2ab | |
Martin Nordholts | bd797c75a4 | |
Keith Hall | 05c11964fc | |
Martin Nordholts | 8ecd23eab4 | |
Martin Nordholts | 1ef0206f24 | |
dependabot[bot] | 6694aa369e | |
Martin Nordholts | 0331d28ee4 | |
Layle | Luca | 51c7eb7ac1 | |
Keith Hall | 5516bcb839 | |
Keith Hall | 056b966501 | |
Martin Nordholts | 28eca6a2be | |
dependabot[bot] | b7fd55242e | |
dependabot[bot] | 8161955cc7 | |
Keith Hall | 3b020fd95a | |
Martin Nordholts | 697d106bd4 | |
Keith Hall | 50e1c6074f | |
Martin Nordholts | a610987ef7 | |
dependabot[bot] | a7fd9f4b1b | |
dependabot[bot] | 5f5b77cdda | |
dependabot[bot] | 83808a63be | |
Keith Hall | 6d5ff671e7 | |
Martin Nordholts | ffdf349a96 | |
David Peter | f3d53b79a2 | |
Martin Nordholts | 6acec2c074 | |
Martin Nordholts | 1bac3750df | |
Martin Nordholts | b040efff79 | |
Martin Nordholts | a81009607a | |
Martin Nordholts | c0e09662b4 | |
Martin Nordholts | ccf4563573 | |
David Peter | fb1ab09e3e | |
Sarvesh MD | f464b1ba39 | |
Frank Steffahn | 2ea6348b85 | |
David Peter | 6e536ab06d | |
Ville Skyttä | 7537e309d8 | |
David Peter | 84e2a2e5d1 | |
Martin Nordholts | f6fc826dc6 | |
Martin Nordholts | 375d55aa5d | |
Martin Nordholts | 6ef2bb3283 | |
bl-ue | fc0794a83d |
|
@ -0,0 +1 @@
|
||||||
|
github: [sharkdp, keith-hall, Enselic]
|
|
@ -7,9 +7,26 @@ assignees: ''
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
<!-- Hey there, thank you for creating an issue! -->
|
<!--
|
||||||
|
|
||||||
**Describe the bug you encountered:**
|
Hey there, thank you for reporting a bug!
|
||||||
|
|
||||||
|
Please note that the following bugs have already been reported:
|
||||||
|
|
||||||
|
* dpkg: error processing archive /some/path/some-program.deb (--unpack):
|
||||||
|
trying to overwrite '/usr/.crates2.json'
|
||||||
|
|
||||||
|
See https://github.com/sharkdp/bat/issues/938
|
||||||
|
|
||||||
|
-->
|
||||||
|
|
||||||
|
**What steps will reproduce the bug?**
|
||||||
|
|
||||||
|
1. step 1
|
||||||
|
2. step 2
|
||||||
|
3. ...
|
||||||
|
|
||||||
|
**What happens?**
|
||||||
|
|
||||||
...
|
...
|
||||||
|
|
||||||
|
|
|
@ -1,2 +1 @@
|
||||||
blank_issues_enabled: true
|
blank_issues_enabled: true
|
||||||
|
|
||||||
|
|
|
@ -7,4 +7,3 @@ assignees: ''
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -7,4 +7,5 @@ assignees: ''
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
<!-- Using a normal ticket is still fine, but feel free to ask your
|
||||||
|
questions about bat on https://github.com/sharkdp/bat/discussions instead. -->
|
||||||
|
|
|
@ -26,4 +26,4 @@ guidelines for adding new syntaxes:
|
||||||
[Name or description of the syntax/language here]
|
[Name or description of the syntax/language here]
|
||||||
|
|
||||||
**Guideline Criteria:**
|
**Guideline Criteria:**
|
||||||
[packagecontro.io link here]
|
[packagecontrol.io link here]
|
||||||
|
|
|
@ -16,3 +16,9 @@ updates:
|
||||||
interval: monthly
|
interval: monthly
|
||||||
time: "04:00"
|
time: "04:00"
|
||||||
timezone: Europe/Berlin
|
timezone: Europe/Berlin
|
||||||
|
- package-ecosystem: "github-actions"
|
||||||
|
directory: "/"
|
||||||
|
schedule:
|
||||||
|
interval: monthly
|
||||||
|
time: "04:00"
|
||||||
|
timezone: Europe/Berlin
|
||||||
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
# This workflow triggers auto-merge of any PR that dependabot creates so that
|
||||||
|
# PRs will be merged automatically without maintainer intervention if CI passes
|
||||||
|
name: Auto-merge dependabot PRs
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request_target:
|
||||||
|
types: [opened]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
auto-merge:
|
||||||
|
if: github.repository == 'sharkdp/bat' && startsWith(github.head_ref, 'dependabot/')
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
environment:
|
||||||
|
name: auto-merge
|
||||||
|
url: https://github.com/sharkdp/bat/blob/main/.github/workflows/Auto-merge-dependabot-PRs.yml
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.AUTO_MERGE_GITHUB_TOKEN }}
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- run: |
|
||||||
|
gh pr review ${{ github.event.pull_request.number }} --comment --body "If CI passes, this dependabot PR will be [auto-merged](https://github.com/sharkdp/bat/blob/main/.github/workflows/Auto-merge-dependabot-PRs.yml) 🚀"
|
||||||
|
- run: |
|
||||||
|
gh pr merge --auto --squash ${{ github.event.pull_request.number }}
|
|
@ -1,8 +1,8 @@
|
||||||
name: CICD
|
name: CICD
|
||||||
|
|
||||||
env:
|
env:
|
||||||
MIN_SUPPORTED_RUST_VERSION: "1.45.0"
|
|
||||||
CICD_INTERMEDIATES_DIR: "_cicd-intermediates"
|
CICD_INTERMEDIATES_DIR: "_cicd-intermediates"
|
||||||
|
MSRV_FEATURES: --no-default-features --features minimal-application,bugreport,build-assets
|
||||||
|
|
||||||
on:
|
on:
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
@ -14,125 +14,197 @@ on:
|
||||||
- '*'
|
- '*'
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
|
all-jobs:
|
||||||
|
if: always() # Otherwise this job is skipped if the matrix job fails
|
||||||
|
name: all-jobs
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
needs:
|
||||||
|
- crate_metadata
|
||||||
|
- ensure_cargo_fmt
|
||||||
|
- min_version
|
||||||
|
- license_checks
|
||||||
|
- test_with_new_syntaxes_and_themes
|
||||||
|
- test_with_system_config
|
||||||
|
- documentation
|
||||||
|
- cargo-audit
|
||||||
|
- build
|
||||||
|
steps:
|
||||||
|
- run: jq --exit-status 'all(.result == "success")' <<< '${{ toJson(needs) }}'
|
||||||
|
|
||||||
|
crate_metadata:
|
||||||
|
name: Extract crate metadata
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- name: Extract crate information
|
||||||
|
id: crate_metadata
|
||||||
|
run: |
|
||||||
|
cargo metadata --no-deps --format-version 1 | jq -r '"name=" + .packages[0].name' | tee -a $GITHUB_OUTPUT
|
||||||
|
cargo metadata --no-deps --format-version 1 | jq -r '"version=" + .packages[0].version' | tee -a $GITHUB_OUTPUT
|
||||||
|
cargo metadata --no-deps --format-version 1 | jq -r '"maintainer=" + .packages[0].authors[0]' | tee -a $GITHUB_OUTPUT
|
||||||
|
cargo metadata --no-deps --format-version 1 | jq -r '"homepage=" + .packages[0].homepage' | tee -a $GITHUB_OUTPUT
|
||||||
|
cargo metadata --no-deps --format-version 1 | jq -r '"msrv=" + .packages[0].rust_version' | tee -a $GITHUB_OUTPUT
|
||||||
|
outputs:
|
||||||
|
name: ${{ steps.crate_metadata.outputs.name }}
|
||||||
|
version: ${{ steps.crate_metadata.outputs.version }}
|
||||||
|
maintainer: ${{ steps.crate_metadata.outputs.maintainer }}
|
||||||
|
homepage: ${{ steps.crate_metadata.outputs.homepage }}
|
||||||
|
msrv: ${{ steps.crate_metadata.outputs.msrv }}
|
||||||
|
|
||||||
|
ensure_cargo_fmt:
|
||||||
|
name: Ensure 'cargo fmt' has been run
|
||||||
|
runs-on: ubuntu-20.04
|
||||||
|
steps:
|
||||||
|
- uses: dtolnay/rust-toolchain@stable
|
||||||
|
with:
|
||||||
|
components: rustfmt
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- run: cargo fmt -- --check
|
||||||
|
|
||||||
min_version:
|
min_version:
|
||||||
name: Minimum supported rust version
|
name: Minimum supported rust version
|
||||||
runs-on: ubuntu-18.04
|
runs-on: ubuntu-20.04
|
||||||
|
needs: crate_metadata
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout source code
|
- name: Checkout source code
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Install rust toolchain (v${{ env.MIN_SUPPORTED_RUST_VERSION }})
|
- name: Install rust toolchain (v${{ needs.crate_metadata.outputs.msrv }})
|
||||||
uses: actions-rs/toolchain@v1
|
uses: dtolnay/rust-toolchain@master
|
||||||
with:
|
with:
|
||||||
toolchain: ${{ env.MIN_SUPPORTED_RUST_VERSION }}
|
toolchain: ${{ needs.crate_metadata.outputs.msrv }}
|
||||||
default: true
|
|
||||||
profile: minimal # minimal component installation (ie, no documentation)
|
|
||||||
components: clippy
|
components: clippy
|
||||||
- name: Run clippy (on minimum supported rust version to prevent warnings we can't fix)
|
- name: Run clippy (on minimum supported rust version to prevent warnings we can't fix)
|
||||||
uses: actions-rs/cargo@v1
|
run: cargo clippy --locked --all-targets ${{ env.MSRV_FEATURES }}
|
||||||
with:
|
|
||||||
command: clippy
|
|
||||||
args: --all-targets --all-features
|
|
||||||
- name: Run tests
|
- name: Run tests
|
||||||
uses: actions-rs/cargo@v1
|
run: cargo test --locked ${{ env.MSRV_FEATURES }}
|
||||||
|
|
||||||
|
license_checks:
|
||||||
|
name: License checks
|
||||||
|
runs-on: ubuntu-20.04
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
command: test
|
submodules: true # we especially want to perform license checks on submodules
|
||||||
|
- run: tests/scripts/license-checks.sh
|
||||||
|
|
||||||
test_with_new_syntaxes_and_themes:
|
test_with_new_syntaxes_and_themes:
|
||||||
name: Run tests with updated syntaxes and themes
|
name: Run tests with updated syntaxes and themes
|
||||||
runs-on: ubuntu-18.04
|
runs-on: ubuntu-20.04
|
||||||
steps:
|
steps:
|
||||||
- name: Git checkout
|
- name: Git checkout
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
submodules: true # we need all syntax and theme submodules
|
submodules: true # we need all syntax and theme submodules
|
||||||
- name: Install Rust toolchain
|
- name: Install Rust toolchain
|
||||||
uses: actions-rs/toolchain@v1
|
uses: dtolnay/rust-toolchain@stable
|
||||||
with:
|
|
||||||
toolchain: stable
|
|
||||||
default: true
|
|
||||||
profile: minimal
|
|
||||||
- name: Build and install bat
|
- name: Build and install bat
|
||||||
uses: actions-rs/cargo@v1
|
run: cargo install --locked --path .
|
||||||
with:
|
|
||||||
command: install
|
|
||||||
args: --locked --path .
|
|
||||||
- name: Rebuild binary assets (syntaxes and themes)
|
- name: Rebuild binary assets (syntaxes and themes)
|
||||||
run: bash assets/create.sh
|
run: bash assets/create.sh
|
||||||
- name: Build and install bat with updated assets
|
- name: Build and install bat with updated assets
|
||||||
uses: actions-rs/cargo@v1
|
run: cargo install --locked --path .
|
||||||
with:
|
|
||||||
command: install
|
|
||||||
args: --locked --path .
|
|
||||||
- name: Run unit tests with new syntaxes and themes
|
- name: Run unit tests with new syntaxes and themes
|
||||||
uses: actions-rs/cargo@v1
|
run: cargo test --locked --release
|
||||||
with:
|
|
||||||
command: test
|
|
||||||
args: --release
|
|
||||||
- name: Run ignored-by-default unit tests with new syntaxes and themes
|
- name: Run ignored-by-default unit tests with new syntaxes and themes
|
||||||
uses: actions-rs/cargo@v1
|
run: cargo test --locked --release --test assets -- --ignored
|
||||||
with:
|
|
||||||
command: test
|
|
||||||
args: --release -- --ignored
|
|
||||||
- name: Syntax highlighting regression test
|
- name: Syntax highlighting regression test
|
||||||
run: tests/syntax-tests/regression_test.sh
|
run: tests/syntax-tests/regression_test.sh
|
||||||
- name: List of languages
|
- name: List of languages
|
||||||
run: bat --list-languages
|
run: bat --list-languages
|
||||||
- name: List of themes
|
- name: List of themes
|
||||||
run: bat --list-themes
|
run: bat --list-themes
|
||||||
|
- name: Test custom assets
|
||||||
|
run: tests/syntax-tests/test_custom_assets.sh
|
||||||
|
|
||||||
|
test_with_system_config:
|
||||||
|
name: Run tests with system wide configuration
|
||||||
|
runs-on: ubuntu-20.04
|
||||||
|
steps:
|
||||||
|
- name: Git checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
- name: Prepare environment variables
|
||||||
|
run: |
|
||||||
|
echo "BAT_SYSTEM_CONFIG_PREFIX=$GITHUB_WORKSPACE/tests/examples/system_config" >> $GITHUB_ENV
|
||||||
|
- name: Install Rust toolchain
|
||||||
|
uses: dtolnay/rust-toolchain@stable
|
||||||
|
- name: Build and install bat
|
||||||
|
run: cargo install --locked --path .
|
||||||
|
- name: Run unit tests
|
||||||
|
run: cargo test --locked --test system_wide_config -- --ignored
|
||||||
|
|
||||||
|
documentation:
|
||||||
|
name: Documentation
|
||||||
|
runs-on: ubuntu-20.04
|
||||||
|
steps:
|
||||||
|
- name: Git checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
- name: Install Rust toolchain
|
||||||
|
uses: dtolnay/rust-toolchain@stable
|
||||||
- name: Check documentation
|
- name: Check documentation
|
||||||
env:
|
env:
|
||||||
RUSTDOCFLAGS: -D warnings
|
RUSTDOCFLAGS: -D warnings
|
||||||
uses: actions-rs/cargo@v1
|
run: cargo doc --locked --no-deps --document-private-items --all-features
|
||||||
with:
|
- name: Show man page
|
||||||
command: doc
|
run: man $(find . -name bat.1)
|
||||||
args: --no-deps --document-private-items --all-features
|
|
||||||
|
cargo-audit:
|
||||||
|
name: cargo audit
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- run: cargo audit
|
||||||
|
|
||||||
build:
|
build:
|
||||||
name: ${{ matrix.job.os }} (${{ matrix.job.target }})
|
name: ${{ matrix.job.target }} (${{ matrix.job.os }})
|
||||||
runs-on: ${{ matrix.job.os }}
|
runs-on: ${{ matrix.job.os }}
|
||||||
|
needs: crate_metadata
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
job:
|
job:
|
||||||
- { os: ubuntu-18.04, target: arm-unknown-linux-gnueabihf , use-cross: true }
|
- { target: aarch64-unknown-linux-musl , os: ubuntu-20.04, dpkg_arch: arm64, use-cross: true }
|
||||||
- { os: ubuntu-18.04, target: aarch64-unknown-linux-gnu , use-cross: true }
|
- { target: aarch64-unknown-linux-gnu , os: ubuntu-20.04, dpkg_arch: arm64, use-cross: true }
|
||||||
- { os: ubuntu-18.04, target: i686-unknown-linux-gnu , use-cross: true }
|
- { target: arm-unknown-linux-gnueabihf , os: ubuntu-20.04, dpkg_arch: armhf, use-cross: true }
|
||||||
- { os: ubuntu-18.04, target: i686-unknown-linux-musl , use-cross: true }
|
- { target: arm-unknown-linux-musleabihf, os: ubuntu-20.04, dpkg_arch: musl-linux-armhf, use-cross: true }
|
||||||
- { os: ubuntu-18.04, target: x86_64-unknown-linux-gnu }
|
- { target: i686-pc-windows-msvc , os: windows-2019, }
|
||||||
- { os: ubuntu-18.04, target: x86_64-unknown-linux-musl , use-cross: true }
|
- { target: i686-unknown-linux-gnu , os: ubuntu-20.04, dpkg_arch: i686, use-cross: true }
|
||||||
- { os: macos-10.15 , target: x86_64-apple-darwin }
|
- { target: i686-unknown-linux-musl , os: ubuntu-20.04, dpkg_arch: musl-linux-i686, use-cross: true }
|
||||||
# - { os: windows-2019, target: i686-pc-windows-gnu } ## disabled; error: linker `i686-w64-mingw32-gcc` not found
|
- { target: x86_64-apple-darwin , os: macos-12, }
|
||||||
- { os: windows-2019, target: i686-pc-windows-msvc }
|
- { target: aarch64-apple-darwin , os: macos-14, }
|
||||||
- { os: windows-2019, target: x86_64-pc-windows-gnu }
|
- { target: x86_64-pc-windows-gnu , os: windows-2019, }
|
||||||
- { os: windows-2019, target: x86_64-pc-windows-msvc }
|
- { target: x86_64-pc-windows-msvc , os: windows-2019, }
|
||||||
|
- { target: x86_64-unknown-linux-gnu , os: ubuntu-20.04, dpkg_arch: amd64, use-cross: true }
|
||||||
|
- { target: x86_64-unknown-linux-musl , os: ubuntu-20.04, dpkg_arch: musl-linux-amd64, use-cross: true }
|
||||||
|
env:
|
||||||
|
BUILD_CMD: cargo
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout source code
|
- name: Checkout source code
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Install prerequisites
|
- name: Install prerequisites
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
case ${{ matrix.job.target }} in
|
case ${{ matrix.job.target }} in
|
||||||
arm-unknown-linux-gnueabihf) sudo apt-get -y update ; sudo apt-get -y install gcc-arm-linux-gnueabihf ;;
|
arm-unknown-linux-*) sudo apt-get -y update ; sudo apt-get -y install gcc-arm-linux-gnueabihf ;;
|
||||||
aarch64-unknown-linux-gnu) sudo apt-get -y update ; sudo apt-get -y install gcc-aarch64-linux-gnu ;;
|
aarch64-unknown-linux-gnu) sudo apt-get -y update ; sudo apt-get -y install gcc-aarch64-linux-gnu ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
- name: Extract crate information
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
echo "PROJECT_NAME=$(sed -n 's/^name = "\(.*\)"/\1/p' Cargo.toml | head -n1)" >> $GITHUB_ENV
|
|
||||||
echo "PROJECT_VERSION=$(sed -n 's/^version = "\(.*\)"/\1/p' Cargo.toml | head -n1)" >> $GITHUB_ENV
|
|
||||||
echo "PROJECT_MAINTAINER=$(sed -n 's/^authors = \["\(.*\)"\]/\1/p' Cargo.toml)" >> $GITHUB_ENV
|
|
||||||
echo "PROJECT_HOMEPAGE=$(sed -n 's/^homepage = "\(.*\)"/\1/p' Cargo.toml)" >> $GITHUB_ENV
|
|
||||||
|
|
||||||
- name: Install Rust toolchain
|
- name: Install Rust toolchain
|
||||||
uses: actions-rs/toolchain@v1
|
uses: dtolnay/rust-toolchain@stable
|
||||||
with:
|
with:
|
||||||
toolchain: stable
|
targets: ${{ matrix.job.target }}
|
||||||
target: ${{ matrix.job.target }}
|
|
||||||
override: true
|
- name: Install cross
|
||||||
profile: minimal # minimal component installation (ie, no documentation)
|
if: matrix.job.use-cross
|
||||||
|
uses: taiki-e/install-action@v2
|
||||||
|
with:
|
||||||
|
tool: cross
|
||||||
|
|
||||||
|
- name: Overwrite build command env variable
|
||||||
|
if: matrix.job.use-cross
|
||||||
|
shell: bash
|
||||||
|
run: echo "BUILD_CMD=cross" >> $GITHUB_ENV
|
||||||
|
|
||||||
- name: Show version information (Rust, cargo, GCC)
|
- name: Show version information (Rust, cargo, GCC)
|
||||||
shell: bash
|
shell: bash
|
||||||
|
@ -145,14 +217,11 @@ jobs:
|
||||||
rustc -V
|
rustc -V
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
uses: actions-rs/cargo@v1
|
shell: bash
|
||||||
with:
|
run: $BUILD_CMD build --locked --release --target=${{ matrix.job.target }}
|
||||||
use-cross: ${{ matrix.job.use-cross }}
|
|
||||||
command: build
|
|
||||||
args: --release --target=${{ matrix.job.target }}
|
|
||||||
|
|
||||||
- name: Strip debug information from executable
|
- name: Set binary name & path
|
||||||
id: strip
|
id: bin
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
# Figure out suffix of binary
|
# Figure out suffix of binary
|
||||||
|
@ -161,31 +230,13 @@ jobs:
|
||||||
*-pc-windows-*) EXE_suffix=".exe" ;;
|
*-pc-windows-*) EXE_suffix=".exe" ;;
|
||||||
esac;
|
esac;
|
||||||
|
|
||||||
# Figure out what strip tool to use if any
|
|
||||||
STRIP="strip"
|
|
||||||
case ${{ matrix.job.target }} in
|
|
||||||
arm-unknown-linux-gnueabihf) STRIP="arm-linux-gnueabihf-strip" ;;
|
|
||||||
aarch64-unknown-linux-gnu) STRIP="aarch64-linux-gnu-strip" ;;
|
|
||||||
*-pc-windows-msvc) STRIP="" ;;
|
|
||||||
esac;
|
|
||||||
|
|
||||||
# Setup paths
|
# Setup paths
|
||||||
BIN_DIR="${{ env.CICD_INTERMEDIATES_DIR }}/stripped-release-bin/"
|
BIN_NAME="${{ needs.crate_metadata.outputs.name }}${EXE_suffix}"
|
||||||
mkdir -p "${BIN_DIR}"
|
BIN_PATH="target/${{ matrix.job.target }}/release/${BIN_NAME}"
|
||||||
BIN_NAME="${{ env.PROJECT_NAME }}${EXE_suffix}"
|
|
||||||
BIN_PATH="${BIN_DIR}/${BIN_NAME}"
|
|
||||||
|
|
||||||
# Copy the release build binary to the result location
|
# Let subsequent steps know where to find the binary
|
||||||
cp "target/${{ matrix.job.target }}/release/${BIN_NAME}" "${BIN_DIR}"
|
echo "BIN_PATH=${BIN_PATH}" >> $GITHUB_OUTPUT
|
||||||
|
echo "BIN_NAME=${BIN_NAME}" >> $GITHUB_OUTPUT
|
||||||
# Also strip if possible
|
|
||||||
if [ -n "${STRIP}" ]; then
|
|
||||||
"${STRIP}" "${BIN_PATH}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Let subsequent steps know where to find the (stripped) bin
|
|
||||||
echo ::set-output name=BIN_PATH::${BIN_PATH}
|
|
||||||
echo ::set-output name=BIN_NAME::${BIN_NAME}
|
|
||||||
|
|
||||||
- name: Set testing options
|
- name: Set testing options
|
||||||
id: test-options
|
id: test-options
|
||||||
|
@ -193,66 +244,55 @@ jobs:
|
||||||
run: |
|
run: |
|
||||||
# test only library unit tests and binary for arm-type targets
|
# test only library unit tests and binary for arm-type targets
|
||||||
unset CARGO_TEST_OPTIONS
|
unset CARGO_TEST_OPTIONS
|
||||||
unset CARGO_TEST_OPTIONS ; case ${{ matrix.job.target }} in arm-* | aarch64-*) CARGO_TEST_OPTIONS="--lib --bin ${PROJECT_NAME}" ;; esac;
|
unset CARGO_TEST_OPTIONS ; case ${{ matrix.job.target }} in arm-* | aarch64-*) CARGO_TEST_OPTIONS="--lib --bin ${{ needs.crate_metadata.outputs.name }}" ;; esac;
|
||||||
echo ::set-output name=CARGO_TEST_OPTIONS::${CARGO_TEST_OPTIONS}
|
echo "CARGO_TEST_OPTIONS=${CARGO_TEST_OPTIONS}" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
- name: Run tests
|
- name: Run tests
|
||||||
uses: actions-rs/cargo@v1
|
shell: bash
|
||||||
with:
|
run: |
|
||||||
use-cross: ${{ matrix.job.use-cross }}
|
if [[ ${{ matrix.job.os }} = windows-* ]]
|
||||||
command: test
|
then
|
||||||
args: --target=${{ matrix.job.target }} ${{ steps.test-options.outputs.CARGO_TEST_OPTIONS}}
|
powershell.exe -command "$BUILD_CMD test --locked --target=${{ matrix.job.target }} ${{ steps.test-options.outputs.CARGO_TEST_OPTIONS}}"
|
||||||
|
else
|
||||||
|
$BUILD_CMD test --locked --target=${{ matrix.job.target }} ${{ steps.test-options.outputs.CARGO_TEST_OPTIONS}}
|
||||||
|
fi
|
||||||
|
|
||||||
- name: Run bat
|
- name: Run bat
|
||||||
uses: actions-rs/cargo@v1
|
shell: bash
|
||||||
with:
|
run: $BUILD_CMD run --locked --target=${{ matrix.job.target }} -- --paging=never --color=always --theme=ansi Cargo.toml src/config.rs
|
||||||
use-cross: ${{ matrix.job.use-cross }}
|
|
||||||
command: run
|
|
||||||
args: --target=${{ matrix.job.target }} -- --paging=never --color=always --theme=ansi Cargo.toml src/config.rs
|
|
||||||
|
|
||||||
- name: Show diagnostics (bat --diagnostic)
|
- name: Show diagnostics (bat --diagnostic)
|
||||||
uses: actions-rs/cargo@v1
|
shell: bash
|
||||||
with:
|
run: $BUILD_CMD run --locked --target=${{ matrix.job.target }} -- --paging=never --color=always --theme=ansi Cargo.toml src/config.rs --diagnostic
|
||||||
use-cross: ${{ matrix.job.use-cross }}
|
|
||||||
command: run
|
|
||||||
args: --target=${{ matrix.job.target }} -- --paging=never --color=always --theme=ansi Cargo.toml src/config.rs --diagnostic
|
|
||||||
|
|
||||||
- name: "Feature check: regex-onig"
|
- name: "Feature check: regex-onig"
|
||||||
uses: actions-rs/cargo@v1
|
shell: bash
|
||||||
with:
|
run: $BUILD_CMD check --locked --target=${{ matrix.job.target }} --verbose --lib --no-default-features --features regex-onig
|
||||||
use-cross: ${{ matrix.job.use-cross }}
|
|
||||||
command: check
|
|
||||||
args: --target=${{ matrix.job.target }} --verbose --lib --no-default-features --features regex-onig
|
|
||||||
|
|
||||||
- name: "Feature check: regex-onig,git"
|
- name: "Feature check: regex-onig,git"
|
||||||
uses: actions-rs/cargo@v1
|
shell: bash
|
||||||
with:
|
run: $BUILD_CMD check --locked --target=${{ matrix.job.target }} --verbose --lib --no-default-features --features regex-onig,git
|
||||||
use-cross: ${{ matrix.job.use-cross }}
|
|
||||||
command: check
|
|
||||||
args: --target=${{ matrix.job.target }} --verbose --lib --no-default-features --features regex-onig,git
|
|
||||||
|
|
||||||
- name: "Feature check: regex-onig,paging"
|
- name: "Feature check: regex-onig,paging"
|
||||||
uses: actions-rs/cargo@v1
|
shell: bash
|
||||||
with:
|
run: $BUILD_CMD check --locked --target=${{ matrix.job.target }} --verbose --lib --no-default-features --features regex-onig,paging
|
||||||
use-cross: ${{ matrix.job.use-cross }}
|
|
||||||
command: check
|
|
||||||
args: --target=${{ matrix.job.target }} --verbose --lib --no-default-features --features regex-onig,paging
|
|
||||||
|
|
||||||
- name: "Feature check: regex-onig,git,paging"
|
- name: "Feature check: regex-onig,git,paging"
|
||||||
uses: actions-rs/cargo@v1
|
shell: bash
|
||||||
with:
|
run: $BUILD_CMD check --locked --target=${{ matrix.job.target }} --verbose --lib --no-default-features --features regex-onig,git,paging
|
||||||
use-cross: ${{ matrix.job.use-cross }}
|
|
||||||
command: check
|
- name: "Feature check: minimal-application"
|
||||||
args: --target=${{ matrix.job.target }} --verbose --lib --no-default-features --features regex-onig,git,paging
|
shell: bash
|
||||||
|
run: $BUILD_CMD check --locked --target=${{ matrix.job.target }} --verbose --no-default-features --features minimal-application
|
||||||
|
|
||||||
- name: Create tarball
|
- name: Create tarball
|
||||||
id: package
|
id: package
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
PKG_suffix=".tar.gz" ; case ${{ matrix.job.target }} in *-pc-windows-*) PKG_suffix=".zip" ;; esac;
|
PKG_suffix=".tar.gz" ; case ${{ matrix.job.target }} in *-pc-windows-*) PKG_suffix=".zip" ;; esac;
|
||||||
PKG_BASENAME=${PROJECT_NAME}-v${PROJECT_VERSION}-${{ matrix.job.target }}
|
PKG_BASENAME=${{ needs.crate_metadata.outputs.name }}-v${{ needs.crate_metadata.outputs.version }}-${{ matrix.job.target }}
|
||||||
PKG_NAME=${PKG_BASENAME}${PKG_suffix}
|
PKG_NAME=${PKG_BASENAME}${PKG_suffix}
|
||||||
echo ::set-output name=PKG_NAME::${PKG_NAME}
|
echo "PKG_NAME=${PKG_NAME}" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
PKG_STAGING="${{ env.CICD_INTERMEDIATES_DIR }}/package"
|
PKG_STAGING="${{ env.CICD_INTERMEDIATES_DIR }}/package"
|
||||||
ARCHIVE_DIR="${PKG_STAGING}/${PKG_BASENAME}/"
|
ARCHIVE_DIR="${PKG_STAGING}/${PKG_BASENAME}/"
|
||||||
|
@ -260,18 +300,19 @@ jobs:
|
||||||
mkdir -p "${ARCHIVE_DIR}/autocomplete"
|
mkdir -p "${ARCHIVE_DIR}/autocomplete"
|
||||||
|
|
||||||
# Binary
|
# Binary
|
||||||
cp "${{ steps.strip.outputs.BIN_PATH }}" "$ARCHIVE_DIR"
|
cp "${{ steps.bin.outputs.BIN_PATH }}" "$ARCHIVE_DIR"
|
||||||
|
|
||||||
# Man page
|
|
||||||
cp 'target/${{ matrix.job.target }}/release/build/${{ env.PROJECT_NAME }}'-*/out/assets/manual/bat.1 "$ARCHIVE_DIR"
|
|
||||||
|
|
||||||
# README, LICENSE and CHANGELOG files
|
# README, LICENSE and CHANGELOG files
|
||||||
cp "README.md" "LICENSE-MIT" "LICENSE-APACHE" "CHANGELOG.md" "$ARCHIVE_DIR"
|
cp "README.md" "LICENSE-MIT" "LICENSE-APACHE" "CHANGELOG.md" "$ARCHIVE_DIR"
|
||||||
|
|
||||||
|
# Man page
|
||||||
|
cp 'target/${{ matrix.job.target }}/release/build/${{ needs.crate_metadata.outputs.name }}'-*/out/assets/manual/bat.1 "$ARCHIVE_DIR"
|
||||||
|
|
||||||
# Autocompletion files
|
# Autocompletion files
|
||||||
cp 'target/${{ matrix.job.target }}/release/build/${{ env.PROJECT_NAME }}'-*/out/assets/completions/bat.bash "$ARCHIVE_DIR/autocomplete/${{ env.PROJECT_NAME }}.bash"
|
cp 'target/${{ matrix.job.target }}/release/build/${{ needs.crate_metadata.outputs.name }}'-*/out/assets/completions/bat.bash "$ARCHIVE_DIR/autocomplete/${{ needs.crate_metadata.outputs.name }}.bash"
|
||||||
cp 'target/${{ matrix.job.target }}/release/build/${{ env.PROJECT_NAME }}'-*/out/assets/completions/bat.fish "$ARCHIVE_DIR/autocomplete/${{ env.PROJECT_NAME }}.fish"
|
cp 'target/${{ matrix.job.target }}/release/build/${{ needs.crate_metadata.outputs.name }}'-*/out/assets/completions/bat.fish "$ARCHIVE_DIR/autocomplete/${{ needs.crate_metadata.outputs.name }}.fish"
|
||||||
cp 'target/${{ matrix.job.target }}/release/build/${{ env.PROJECT_NAME }}'-*/out/assets/completions/bat.zsh "$ARCHIVE_DIR/autocomplete/${{ env.PROJECT_NAME }}.zsh"
|
cp 'target/${{ matrix.job.target }}/release/build/${{ needs.crate_metadata.outputs.name }}'-*/out/assets/completions/_bat.ps1 "$ARCHIVE_DIR/autocomplete/_${{ needs.crate_metadata.outputs.name }}.ps1"
|
||||||
|
cp 'target/${{ matrix.job.target }}/release/build/${{ needs.crate_metadata.outputs.name }}'-*/out/assets/completions/bat.zsh "$ARCHIVE_DIR/autocomplete/${{ needs.crate_metadata.outputs.name }}.zsh"
|
||||||
|
|
||||||
# base compressed package
|
# base compressed package
|
||||||
pushd "${PKG_STAGING}/" >/dev/null
|
pushd "${PKG_STAGING}/" >/dev/null
|
||||||
|
@ -282,7 +323,7 @@ jobs:
|
||||||
popd >/dev/null
|
popd >/dev/null
|
||||||
|
|
||||||
# Let subsequent steps know where to find the compressed package
|
# Let subsequent steps know where to find the compressed package
|
||||||
echo ::set-output name=PKG_PATH::"${PKG_STAGING}/${PKG_NAME}"
|
echo "PKG_PATH=${PKG_STAGING}/${PKG_NAME}" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
- name: Create Debian package
|
- name: Create Debian package
|
||||||
id: debian-package
|
id: debian-package
|
||||||
|
@ -294,33 +335,25 @@ jobs:
|
||||||
DPKG_DIR="${DPKG_STAGING}/dpkg"
|
DPKG_DIR="${DPKG_STAGING}/dpkg"
|
||||||
mkdir -p "${DPKG_DIR}"
|
mkdir -p "${DPKG_DIR}"
|
||||||
|
|
||||||
DPKG_BASENAME=${PROJECT_NAME}
|
DPKG_BASENAME=${{ needs.crate_metadata.outputs.name }}
|
||||||
DPKG_CONFLICTS=${PROJECT_NAME}-musl
|
DPKG_CONFLICTS=${{ needs.crate_metadata.outputs.name }}-musl
|
||||||
case ${{ matrix.job.target }} in *-musl) DPKG_BASENAME=${PROJECT_NAME}-musl ; DPKG_CONFLICTS=${PROJECT_NAME} ;; esac;
|
case ${{ matrix.job.target }} in *-musl) DPKG_BASENAME=${{ needs.crate_metadata.outputs.name }}-musl ; DPKG_CONFLICTS=${{ needs.crate_metadata.outputs.name }} ;; esac;
|
||||||
DPKG_VERSION=${PROJECT_VERSION}
|
DPKG_VERSION=${{ needs.crate_metadata.outputs.version }}
|
||||||
|
DPKG_ARCH="${{ matrix.job.dpkg_arch }}"
|
||||||
unset DPKG_ARCH
|
|
||||||
case ${{ matrix.job.target }} in
|
|
||||||
aarch64-*-linux-*) DPKG_ARCH=arm64 ;;
|
|
||||||
arm-*-linux-*hf) DPKG_ARCH=armhf ;;
|
|
||||||
i686-*-linux-*) DPKG_ARCH=i686 ;;
|
|
||||||
x86_64-*-linux-*) DPKG_ARCH=amd64 ;;
|
|
||||||
*) DPKG_ARCH=notset ;;
|
|
||||||
esac;
|
|
||||||
|
|
||||||
DPKG_NAME="${DPKG_BASENAME}_${DPKG_VERSION}_${DPKG_ARCH}.deb"
|
DPKG_NAME="${DPKG_BASENAME}_${DPKG_VERSION}_${DPKG_ARCH}.deb"
|
||||||
echo ::set-output name=DPKG_NAME::${DPKG_NAME}
|
echo "DPKG_NAME=${DPKG_NAME}" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
# Binary
|
# Binary
|
||||||
install -Dm755 "${{ steps.strip.outputs.BIN_PATH }}" "${DPKG_DIR}/usr/bin/${{ steps.strip.outputs.BIN_NAME }}"
|
install -Dm755 "${{ steps.bin.outputs.BIN_PATH }}" "${DPKG_DIR}/usr/bin/${{ steps.bin.outputs.BIN_NAME }}"
|
||||||
|
|
||||||
# Man page
|
# Man page
|
||||||
install -Dm644 'target/${{ matrix.job.target }}/release/build/${{ env.PROJECT_NAME }}'-*/out/assets/manual/bat.1 "${DPKG_DIR}/usr/share/man/man1/${{ env.PROJECT_NAME }}.1"
|
install -Dm644 'target/${{ matrix.job.target }}/release/build/${{ needs.crate_metadata.outputs.name }}'-*/out/assets/manual/bat.1 "${DPKG_DIR}/usr/share/man/man1/${{ needs.crate_metadata.outputs.name }}.1"
|
||||||
gzip -n --best "${DPKG_DIR}/usr/share/man/man1/${{ env.PROJECT_NAME }}.1"
|
gzip -n --best "${DPKG_DIR}/usr/share/man/man1/${{ needs.crate_metadata.outputs.name }}.1"
|
||||||
|
|
||||||
# Autocompletion files
|
# Autocompletion files
|
||||||
install -Dm644 'target/${{ matrix.job.target }}/release/build/${{ env.PROJECT_NAME }}'-*/out/assets/completions/bat.fish "${DPKG_DIR}/usr/share/fish/vendor_completions.d/${{ env.PROJECT_NAME }}.fish"
|
install -Dm644 'target/${{ matrix.job.target }}/release/build/${{ needs.crate_metadata.outputs.name }}'-*/out/assets/completions/bat.bash "${DPKG_DIR}/usr/share/bash-completion/completions/${{ needs.crate_metadata.outputs.name }}"
|
||||||
install -Dm644 'target/${{ matrix.job.target }}/release/build/${{ env.PROJECT_NAME }}'-*/out/assets/completions/bat.zsh "${DPKG_DIR}/usr/share/zsh/vendor-completions/_${{ env.PROJECT_NAME }}"
|
install -Dm644 'target/${{ matrix.job.target }}/release/build/${{ needs.crate_metadata.outputs.name }}'-*/out/assets/completions/bat.fish "${DPKG_DIR}/usr/share/fish/vendor_completions.d/${{ needs.crate_metadata.outputs.name }}.fish"
|
||||||
|
install -Dm644 'target/${{ matrix.job.target }}/release/build/${{ needs.crate_metadata.outputs.name }}'-*/out/assets/completions/bat.zsh "${DPKG_DIR}/usr/share/zsh/vendor-completions/_${{ needs.crate_metadata.outputs.name }}"
|
||||||
|
|
||||||
# README and LICENSE
|
# README and LICENSE
|
||||||
install -Dm644 "README.md" "${DPKG_DIR}/usr/share/doc/${DPKG_BASENAME}/README.md"
|
install -Dm644 "README.md" "${DPKG_DIR}/usr/share/doc/${DPKG_BASENAME}/README.md"
|
||||||
|
@ -331,12 +364,12 @@ jobs:
|
||||||
|
|
||||||
cat > "${DPKG_DIR}/usr/share/doc/${DPKG_BASENAME}/copyright" <<EOF
|
cat > "${DPKG_DIR}/usr/share/doc/${DPKG_BASENAME}/copyright" <<EOF
|
||||||
Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
|
Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
|
||||||
Upstream-Name: ${{ env.PROJECT_NAME }}
|
Upstream-Name: ${{ needs.crate_metadata.outputs.name }}
|
||||||
Source: ${{ env.PROJECT_HOMEPAGE }}
|
Source: ${{ needs.crate_metadata.outputs.homepage }}
|
||||||
|
|
||||||
Files: *
|
Files: *
|
||||||
Copyright: ${{ env.PROJECT_MAINTAINER }}
|
Copyright: ${{ needs.crate_metadata.outputs.maintainer }}
|
||||||
Copyright: $COPYRIGHT_YEARS ${{ env.PROJECT_MAINTAINER }}
|
Copyright: $COPYRIGHT_YEARS ${{ needs.crate_metadata.outputs.maintainer }}
|
||||||
License: Apache-2.0 or MIT
|
License: Apache-2.0 or MIT
|
||||||
|
|
||||||
License: Apache-2.0
|
License: Apache-2.0
|
||||||
|
@ -377,17 +410,17 @@ jobs:
|
||||||
Version: ${DPKG_VERSION}
|
Version: ${DPKG_VERSION}
|
||||||
Section: utils
|
Section: utils
|
||||||
Priority: optional
|
Priority: optional
|
||||||
Maintainer: ${{ env.PROJECT_MAINTAINER }}
|
Maintainer: ${{ needs.crate_metadata.outputs.maintainer }}
|
||||||
Homepage: ${{ env.PROJECT_HOMEPAGE }}
|
Homepage: ${{ needs.crate_metadata.outputs.homepage }}
|
||||||
Architecture: ${DPKG_ARCH}
|
Architecture: ${DPKG_ARCH}
|
||||||
Provides: ${{ env.PROJECT_NAME }}
|
Provides: ${{ needs.crate_metadata.outputs.name }}
|
||||||
Conflicts: ${DPKG_CONFLICTS}
|
Conflicts: ${DPKG_CONFLICTS}
|
||||||
Description: cat(1) clone with wings.
|
Description: cat(1) clone with wings.
|
||||||
A cat(1) clone with syntax highlighting and Git integration.
|
A cat(1) clone with syntax highlighting and Git integration.
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
DPKG_PATH="${DPKG_STAGING}/${DPKG_NAME}"
|
DPKG_PATH="${DPKG_STAGING}/${DPKG_NAME}"
|
||||||
echo ::set-output name=DPKG_PATH::${DPKG_PATH}
|
echo "DPKG_PATH=${DPKG_PATH}" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
# build dpkg
|
# build dpkg
|
||||||
fakeroot dpkg-deb --build "${DPKG_DIR}" "${DPKG_PATH}"
|
fakeroot dpkg-deb --build "${DPKG_DIR}" "${DPKG_PATH}"
|
||||||
|
@ -410,10 +443,10 @@ jobs:
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
unset IS_RELEASE ; if [[ $GITHUB_REF =~ ^refs/tags/v[0-9].* ]]; then IS_RELEASE='true' ; fi
|
unset IS_RELEASE ; if [[ $GITHUB_REF =~ ^refs/tags/v[0-9].* ]]; then IS_RELEASE='true' ; fi
|
||||||
echo ::set-output name=IS_RELEASE::${IS_RELEASE}
|
echo "IS_RELEASE=${IS_RELEASE}" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
- name: Publish archives and packages
|
- name: Publish archives and packages
|
||||||
uses: softprops/action-gh-release@v1
|
uses: softprops/action-gh-release@v2
|
||||||
if: steps.is-release.outputs.IS_RELEASE
|
if: steps.is-release.outputs.IS_RELEASE
|
||||||
with:
|
with:
|
||||||
files: |
|
files: |
|
||||||
|
@ -421,3 +454,15 @@ jobs:
|
||||||
${{ steps.debian-package.outputs.DPKG_PATH }}
|
${{ steps.debian-package.outputs.DPKG_PATH }}
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
|
winget:
|
||||||
|
name: Publish to Winget
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
needs: build
|
||||||
|
if: startsWith(github.ref, 'refs/tags/v')
|
||||||
|
steps:
|
||||||
|
- uses: vedantmgoyal2009/winget-releaser@v2
|
||||||
|
with:
|
||||||
|
identifier: sharkdp.bat
|
||||||
|
installers-regex: '-pc-windows-msvc\.zip$'
|
||||||
|
token: ${{ secrets.WINGET_TOKEN }}
|
||||||
|
|
|
@ -0,0 +1,33 @@
|
||||||
|
name: Changelog
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
check-changelog:
|
||||||
|
name: Check for changelog entry
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
# dependabot PRs are automerged if CI passes; we shouldn't block these
|
||||||
|
if: github.actor != 'dependabot[bot]'
|
||||||
|
env:
|
||||||
|
PR_NUMBER: ${{ github.event.number }}
|
||||||
|
PR_BASE: ${{ github.base_ref }}
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- name: Fetch PR base
|
||||||
|
run: git fetch --no-tags --prune --depth=1 origin
|
||||||
|
|
||||||
|
# cannot use `github.actor`: the triggering commit may be authored by a maintainer
|
||||||
|
- name: Get PR submitter
|
||||||
|
id: get-submitter
|
||||||
|
run: curl -sSfL https://api.github.com/repos/sharkdp/bat/pulls/${PR_NUMBER} | jq -r '"submitter=" + .user.login' | tee -a $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Search for added line in changelog
|
||||||
|
env:
|
||||||
|
PR_SUBMITTER: ${{ steps.get-submitter.outputs.submitter }}
|
||||||
|
run: |
|
||||||
|
ADDED=$(git diff -U0 "origin/${PR_BASE}" HEAD -- CHANGELOG.md | grep -P '^\+[^\+].+$')
|
||||||
|
echo "Added lines in CHANGELOG.md:"
|
||||||
|
echo "$ADDED"
|
||||||
|
echo "Grepping for PR info (see CONTRIBUTING.md):"
|
||||||
|
grep "#${PR_NUMBER}\\b.*@${PR_SUBMITTER}\\b" <<< "$ADDED"
|
|
@ -67,9 +67,6 @@
|
||||||
[submodule "assets/syntaxes/JavaScript (Babel)"]
|
[submodule "assets/syntaxes/JavaScript (Babel)"]
|
||||||
path = assets/syntaxes/02_Extra/JavaScript (Babel)
|
path = assets/syntaxes/02_Extra/JavaScript (Babel)
|
||||||
url = https://github.com/babel/babel-sublime
|
url = https://github.com/babel/babel-sublime
|
||||||
[submodule "assets/syntaxes/Dart"]
|
|
||||||
path = assets/syntaxes/02_Extra/Dart
|
|
||||||
url = https://github.com/guillermooo/dart-sublime-bundle
|
|
||||||
[submodule "assets/syntaxes/FSharp"]
|
[submodule "assets/syntaxes/FSharp"]
|
||||||
path = assets/syntaxes/02_Extra/FSharp
|
path = assets/syntaxes/02_Extra/FSharp
|
||||||
url = https://github.com/hoest/sublimetext-fsharp
|
url = https://github.com/hoest/sublimetext-fsharp
|
||||||
|
@ -113,9 +110,6 @@
|
||||||
[submodule "assets/syntaxes/Org mode"]
|
[submodule "assets/syntaxes/Org mode"]
|
||||||
path = assets/syntaxes/02_Extra/Org mode
|
path = assets/syntaxes/02_Extra/Org mode
|
||||||
url = https://github.com/jezcope/Org.tmbundle.git
|
url = https://github.com/jezcope/Org.tmbundle.git
|
||||||
[submodule "assets/syntaxes/requirementstxt"]
|
|
||||||
path = assets/syntaxes/02_Extra/requirementstxt
|
|
||||||
url = https://github.com/wuub/requirementstxt
|
|
||||||
[submodule "assets/syntaxes/DotENV"]
|
[submodule "assets/syntaxes/DotENV"]
|
||||||
path = assets/syntaxes/02_Extra/DotENV
|
path = assets/syntaxes/02_Extra/DotENV
|
||||||
url = https://github.com/zaynali53/DotENV
|
url = https://github.com/zaynali53/DotENV
|
||||||
|
@ -203,6 +197,9 @@
|
||||||
[submodule "assets/syntaxes/02_Extra/Lean"]
|
[submodule "assets/syntaxes/02_Extra/Lean"]
|
||||||
path = assets/syntaxes/02_Extra/Lean
|
path = assets/syntaxes/02_Extra/Lean
|
||||||
url = https://github.com/leanprover/vscode-lean.git
|
url = https://github.com/leanprover/vscode-lean.git
|
||||||
|
[submodule "assets/syntaxes/02_Extra/LiveScript"]
|
||||||
|
path = assets/syntaxes/02_Extra/LiveScript
|
||||||
|
url = https://github.com/paulmillr/LiveScript.tmbundle
|
||||||
[submodule "assets/syntaxes/02_Extra/Zig"]
|
[submodule "assets/syntaxes/02_Extra/Zig"]
|
||||||
path = assets/syntaxes/02_Extra/Zig
|
path = assets/syntaxes/02_Extra/Zig
|
||||||
url = https://github.com/ziglang/sublime-zig-language.git
|
url = https://github.com/ziglang/sublime-zig-language.git
|
||||||
|
@ -218,3 +215,48 @@
|
||||||
[submodule "assets/syntaxes/02_Extra/SublimeEthereum"]
|
[submodule "assets/syntaxes/02_Extra/SublimeEthereum"]
|
||||||
path = assets/syntaxes/02_Extra/SublimeEthereum
|
path = assets/syntaxes/02_Extra/SublimeEthereum
|
||||||
url = https://github.com/davidhq/SublimeEthereum.git
|
url = https://github.com/davidhq/SublimeEthereum.git
|
||||||
|
[submodule "assets/syntaxes/02_Extra/Groff"]
|
||||||
|
path = assets/syntaxes/02_Extra/Groff
|
||||||
|
url = https://github.com/carsonoid/sublime_man_page_support
|
||||||
|
[submodule "assets/syntaxes/02_Extra/http-request-response"]
|
||||||
|
path = assets/syntaxes/02_Extra/http-request-response
|
||||||
|
url = https://github.com/keith-hall/http-request-response-syntax.git
|
||||||
|
[submodule "assets/syntaxes/02_Extra/LLVM"]
|
||||||
|
path = assets/syntaxes/02_Extra/LLVM
|
||||||
|
url = https://github.com/ioncodes/LLVM.tmBundle
|
||||||
|
[submodule "assets/syntaxes/02_Extra/Slim"]
|
||||||
|
path = assets/syntaxes/02_Extra/Slim
|
||||||
|
url = https://github.com/slim-template/ruby-slim.tmbundle.git
|
||||||
|
[submodule "assets/syntaxes/02_Extra/Racket"]
|
||||||
|
path = assets/syntaxes/02_Extra/Racket
|
||||||
|
url = https://github.com/follesoe/sublime-racket.git
|
||||||
|
[submodule "assets/syntaxes/02_Extra/MediaWiki"]
|
||||||
|
path = assets/syntaxes/02_Extra/MediaWiki
|
||||||
|
url = https://github.com/tosher/Mediawiker.git
|
||||||
|
[submodule "assets/syntaxes/02_Extra/Dart"]
|
||||||
|
path = assets/syntaxes/02_Extra/Dart
|
||||||
|
url = https://github.com/elMuso/Dartlight.git
|
||||||
|
[submodule "assets/syntaxes/02_Extra/SublimeJQ"]
|
||||||
|
path = assets/syntaxes/02_Extra/SublimeJQ
|
||||||
|
url = https://github.com/zogwarg/SublimeJQ.git
|
||||||
|
[submodule "assets/syntaxes/02_Extra/cmd-help"]
|
||||||
|
path = assets/syntaxes/02_Extra/cmd-help
|
||||||
|
url = https://github.com/victor-gp/cmd-help-sublime-syntax.git
|
||||||
|
branch = main
|
||||||
|
shallow = true
|
||||||
|
[submodule "assets/syntaxes/02_Extra/TodoTxt"]
|
||||||
|
path = assets/syntaxes/02_Extra/TodoTxt
|
||||||
|
url = https://github.com/dertuxmalwieder/SublimeTodoTxt
|
||||||
|
[submodule "assets/syntaxes/02_Extra/Ada"]
|
||||||
|
path = assets/syntaxes/02_Extra/Ada
|
||||||
|
url = https://github.com/wiremoons/ada-sublime-syntax
|
||||||
|
|
||||||
|
[submodule "assets/syntaxes/02_Extra/Crontab"]
|
||||||
|
path = assets/syntaxes/02_Extra/Crontab
|
||||||
|
url = https://github.com/michaelblyons/SublimeSyntax-Crontab
|
||||||
|
[submodule "assets/syntaxes/02_Extra/NSIS"]
|
||||||
|
path = assets/syntaxes/02_Extra/NSIS
|
||||||
|
url = https://github.com/SublimeText/NSIS
|
||||||
|
[submodule "assets/syntaxes/02_Extra/vscode-wgsl"]
|
||||||
|
path = assets/syntaxes/02_Extra/vscode-wgsl
|
||||||
|
url = https://github.com/PolyMeilex/vscode-wgsl.git
|
||||||
|
|
293
CHANGELOG.md
293
CHANGELOG.md
|
@ -2,22 +2,311 @@
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
|
||||||
|
- Set terminal title to file names when Paging is not Paging::Never #2807 (@Oliver-Looney)
|
||||||
|
- `bat --squeeze-blank`/`bat -s` will now squeeze consecutive empty lines, see #1441 (@eth-p) and #2665 (@einfachIrgendwer0815)
|
||||||
|
- `bat --squeeze-limit` to set the maximum number of empty consecutive when using `--squeeze-blank`, see #1441 (@eth-p) and #2665 (@einfachIrgendwer0815)
|
||||||
|
- `PrettyPrinter::squeeze_empty_lines` to support line squeezing for bat as a library, see #1441 (@eth-p) and #2665 (@einfachIrgendwer0815)
|
||||||
|
- Syntax highlighting for JavaScript files that start with `#!/usr/bin/env bun` #2913 (@sharunkumar)
|
||||||
|
- `bat --strip-ansi={never,always,auto}` to remove ANSI escape sequences from bat's input, see #2999 (@eth-p)
|
||||||
|
|
||||||
## Bugfixes
|
## Bugfixes
|
||||||
|
|
||||||
|
- Fix long file name wrapping in header, see #2835 (@FilipRazek)
|
||||||
|
- Fix `NO_COLOR` support, see #2767 (@acuteenvy)
|
||||||
|
- Fix handling of inputs with OSC ANSI escape sequences, see #2541 and #2544 (@eth-p)
|
||||||
|
- Fix handling of inputs with combined ANSI color and attribute sequences, see #2185 and #2856 (@eth-p)
|
||||||
|
- Fix panel width when line 10000 wraps, see #2854 (@eth-p)
|
||||||
|
|
||||||
## Other
|
## Other
|
||||||
|
|
||||||
|
- Upgrade to Rust 2021 edition #2748 (@cyqsimon)
|
||||||
|
- Refactor and cleanup build script #2756 (@cyqsimon)
|
||||||
|
- Checks changelog has been written to for PRs in CI #2766 (@cyqsimon)
|
||||||
|
- Use GitHub API to get correct PR submitter #2791 (@cyqsimon)
|
||||||
|
- Minor benchmark script improvements #2768 (@cyqsimon)
|
||||||
|
- Update Arch Linux package URL in README files #2779 (@brunobell)
|
||||||
|
- Update and improve `zsh` completion, see #2772 (@okapia)
|
||||||
|
- More extensible syntax mapping mechanism #2755 (@cyqsimon)
|
||||||
|
- Use proper Architecture for Debian packages built for musl, see #2811 (@Enselic)
|
||||||
|
- Pull in fix for unsafe-libyaml security advisory, see #2812 (@dtolnay)
|
||||||
|
- Update git-version dependency to use Syn v2, see #2816 (@dtolnay)
|
||||||
|
- Update git2 dependency to v0.18.2, see #2852 (@eth-p)
|
||||||
|
- Improve performance when color output disabled, see #2397 and #2857 (@eth-p)
|
||||||
|
- Relax syntax mapping rule restrictions to allow brace expansion #2865 (@cyqsimon)
|
||||||
|
- Apply clippy fixes #2864 (@cyqsimon)
|
||||||
|
- Faster startup by offloading glob matcher building to a worker thread #2868 (@cyqsimon)
|
||||||
|
- Display which theme is the default one in basic output (no colors), see #2937 (@sblondon)
|
||||||
|
- Display which theme is the default one in colored output, see #2838 (@sblondon)
|
||||||
|
- Add aarch64-apple-darwin ("Apple Silicon") binary tarballs to releases, see #2967 (@someposer)
|
||||||
|
- Update the Lisp syntax, see #2970 (@ccqpein)
|
||||||
|
- Use bat's ANSI iterator during tab expansion, see #2998 (@eth-p)
|
||||||
|
- Support 'statically linked binary' for aarch64 in 'Release' page, see #2992 (@tzq0301)
|
||||||
|
|
||||||
## Syntaxes
|
## Syntaxes
|
||||||
|
|
||||||
|
- `cmd-help`: scope subcommands followed by other terms, and other misc improvements, see #2819 (@victor-gp)
|
||||||
|
- Upgrade JQ syntax, see #2820 (@dependabot[bot])
|
||||||
|
- Add syntax mapping for quadman quadlets #2866 (@cyqsimon)
|
||||||
|
- Map containers .conf files to TOML syntax #2867 (@cyqsimon)
|
||||||
|
- Associate `xsh` files with `xonsh` syntax that is Python, see #2840 (@anki-code).
|
||||||
|
- Added auto detect syntax for `.jsonc` #2795 (@mxaddict)
|
||||||
|
- Added auto detect syntax for `.aws/{config,credentials}` #2795 (@mxaddict)
|
||||||
|
- Add syntax mapping for Wireguard config #2874 (@cyqsimon)
|
||||||
|
|
||||||
## New themes
|
## Themes
|
||||||
|
|
||||||
|
|
||||||
## `bat` as a library
|
## `bat` as a library
|
||||||
|
|
||||||
|
- Changes to `syntax_mapping::SyntaxMapping` #2755 (@cyqsimon)
|
||||||
|
- `SyntaxMapping::get_syntax_for` is now correctly public
|
||||||
|
- [BREAKING] `SyntaxMapping::{empty,builtin}` are removed; use `SyntaxMapping::new` instead
|
||||||
|
- [BREAKING] `SyntaxMapping::mappings` is replaced by `SyntaxMapping::{builtin,custom,all}_mappings`
|
||||||
|
- Make `Controller::run_with_error_handler`'s error handler `FnMut`, see #2831 (@rhysd)
|
||||||
|
- Improve compile time by 20%, see #2815 (@dtolnay)
|
||||||
|
|
||||||
|
# v0.24.0
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
- Add environment variable `BAT_PAGING`, see #2629 (@einfachIrgendwer0815)
|
||||||
|
- Add opt-in (`--features lessopen`) support for `LESSOPEN` and `LESSCLOSE`. See #1597, #1739, #2444, #2602, and #2662 (@Anomalocaridid)
|
||||||
|
|
||||||
|
## Bugfixes
|
||||||
|
|
||||||
|
- Fix `more` not being found on Windows when provided via `BAT_PAGER`, see #2570, #2580, and #2651 (@mataha)
|
||||||
|
- Switched default behavior of `--map-syntax` to be case insensitive #2520
|
||||||
|
- Updated version of `serde_yaml` to `0.9`. See #2627 (@Raghav-Bell)
|
||||||
|
- Fix arithmetic overflow in `LineRange::from` and `LineRange::parse_range`, see #2674, #2698 (@skoriop)
|
||||||
|
- Fix paging not happening when stdout is interactive but stdin is not, see #2574 (@Nigecat)
|
||||||
|
- Make `-pp` override `--paging` and vice versa when passed as a later argument, see #2660 (@J-Kappes)
|
||||||
|
|
||||||
|
## Other
|
||||||
|
|
||||||
|
- Output directory for generated assets (completion, manual) can be customized, see #2515 (@tranzystorek-io)
|
||||||
|
- Use the `is-terminal` crate instead of `atty`, see #2530 (@nickelc)
|
||||||
|
- Add Winget Releaser workflow, see #2519 (@sitiom)
|
||||||
|
- Bump MSRV to 1.70, see #2651 (@mataha)
|
||||||
|
|
||||||
|
## Syntaxes
|
||||||
|
|
||||||
|
- Associate `os-release` with `bash` syntax, see #2587 (@cyqsimon)
|
||||||
|
- Associate `Containerfile` with `Dockerfile` syntax, see #2606 (@einfachIrgendwer0815)
|
||||||
|
- Replaced quotes with double quotes so fzf integration example script works on windows and linux. see #2095 (@johnmatthiggins)
|
||||||
|
- Associate `ksh` files with `bash` syntax, see #2633 (@johnmatthiggins)
|
||||||
|
- Associate `sarif` files with `JSON` syntax, see #2695 (@rhysd)
|
||||||
|
- Associate `ron` files with `rust` syntax, see #2427 (@YeungOnion)
|
||||||
|
- Add support for [WebGPU Shader Language](https://www.w3.org/TR/WGSL/), see #2692 (@rhysd)
|
||||||
|
- Add `.dpkg-new` and `.dpkg-tmp` to ignored suffixe, see #2595 (@scop)
|
||||||
|
- fix: Add syntax mapping `*.jsonl` => `json`, see #2539 (@WinterCore)
|
||||||
|
- Update `Julia` syntax, see #2553 (@dependabot)
|
||||||
|
- add `NSIS` support, see #2577 (@idleberg)
|
||||||
|
- Update `ssh-config`, see #2697 (@mrmeszaros)
|
||||||
|
|
||||||
|
## `bat` as a library
|
||||||
|
|
||||||
|
- Add optional output_buffer arg to `Controller::run()` and `Controller::run_with_error_handler()`, see #2618 (@Piturnah)
|
||||||
|
|
||||||
|
|
||||||
|
# v0.23.0
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
- Implemented `-S` and `--chop-long-lines` flags as aliases for `--wrap=never`. See #2309 (@johnmatthiggins)
|
||||||
|
- Breaking change: Environment variables can now override config file settings (but command-line arguments still have the highest precedence), see #1152, #1281, and #2381 (@aaronkollasch)
|
||||||
|
- Implemented `--nonprintable-notation=caret` to support showing non-printable characters using caret notation. See #2429 (@einfachIrgendwer0815)
|
||||||
|
|
||||||
|
## Bugfixes
|
||||||
|
|
||||||
|
- Fix `bat cache --clear` not clearing the `--target` dir if specified. See #2393 (@miles170)
|
||||||
|
|
||||||
|
## Other
|
||||||
|
|
||||||
|
- Various bash completion improvements, see #2310 (@scop)
|
||||||
|
- Disable completion of `cache` subcommand, see #2399 (@cyqsimon)
|
||||||
|
- Signifigantly improve startup performance on macOS, see #2442 (@BlackHoleFox)
|
||||||
|
- Bump MSRV to 1.62, see #2496 (@Enselic)
|
||||||
|
|
||||||
|
## Syntaxes
|
||||||
|
|
||||||
|
- Added support for Ada, see #1300 and #2316 (@dkm)
|
||||||
|
- Added `todo.txt` syntax, see #2375 (@BANOnotIT)
|
||||||
|
- Improve Manpage.sublime-syntax. See #2364 (@Freed-Wu) and #2461 (@keith-hall)
|
||||||
|
- Added a new `requirements.txt` syntax, see #2361 (@Freed-Wu)
|
||||||
|
- Added a new VimHelp syntax, see #2366 (@Freed-Wu)
|
||||||
|
- Associate `pdm.lock` with `TOML` syntax, see #2410
|
||||||
|
- `Todo.txt`: Fix highlighting of contexts and projects at beginning of done.txt, see #2411
|
||||||
|
- `cmd-help`: overhaul scope names (colors) to improve theme support; misc syntax improvements. See #2419 (@victor-gp)
|
||||||
|
- Added support for Crontab, see #2509 (@keith-hall)
|
||||||
|
|
||||||
|
## Themes
|
||||||
|
|
||||||
|
## `bat` as a library
|
||||||
|
|
||||||
|
- `PrettyPrinter::header` correctly displays a header with the filename, see #2378 and #2406 (@cstyles)
|
||||||
|
|
||||||
|
|
||||||
|
# v0.22.1
|
||||||
|
|
||||||
|
## Bugfixes
|
||||||
|
|
||||||
|
- Bring back pre-processing of ANSI escape characters to so that some common `bat` use cases starts working again. See #2308 (@Enselic)
|
||||||
|
|
||||||
|
# v0.22.0
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
- Make the default macOS theme depend on Dark Mode. See #2197, #1746 (@Enselic)
|
||||||
|
- Support for separate system and user config files. See #668 (@patrickpichler)
|
||||||
|
|
||||||
|
## Bugfixes
|
||||||
|
|
||||||
|
- Prevent fork nightmare with `PAGER=batcat`. See #2235 (@johnmatthiggins)
|
||||||
|
- Make `--no-paging`/`-P` override `--paging=...` if passed as a later arg, see #2201 (@themkat)
|
||||||
|
- `--map-syntax` and `--ignored-suffix` now works together, see #2093 (@czzrr)
|
||||||
|
- Strips byte order mark from output when in non-loop-through mode. See #1922 (@dag-h)
|
||||||
|
|
||||||
|
## Other
|
||||||
|
|
||||||
|
- Relaxed glibc requirements on amd64, see #2106 and #2194 (@sharkdp)
|
||||||
|
- Improved fish completions. See #2275 (@zgracem)
|
||||||
|
- Stop pre-processing ANSI escape characters. Syntax highlighting on ANSI escaped input is not supported. See #2185 and #2189 (@Enselic)
|
||||||
|
|
||||||
|
## Syntaxes
|
||||||
|
|
||||||
|
- NSE (Nmap Scripting Engine) is mapped to Lua, see #2151 (@Cre3per)
|
||||||
|
- Correctly color `fstab` dump and pass fields, see #2246 (@yuvalmo)
|
||||||
|
- Update `Command Help` syntax, see #2255
|
||||||
|
- `Julia`: Fix syntax highlighting for function name starting with `struct`, see #2230
|
||||||
|
- Minor update to `LiveScript`, see #2291
|
||||||
|
- Associate `.mts` and `.cts` files with the `TypeScript` syntax. See #2236 (@kidonng)
|
||||||
|
- Fish history is mapped to YAML. See #2237 (@kidonng)
|
||||||
|
|
||||||
|
## `bat` as a library
|
||||||
|
|
||||||
|
- Make `bat::PrettyPrinter::syntaxes()` iterate over new `bat::Syntax` struct instead of `&syntect::parsing::SyntaxReference`. See #2222 (@Enselic)
|
||||||
|
- Clear highlights after printing, see #1919 and #1920 (@rhysd)
|
||||||
|
|
||||||
|
|
||||||
|
# v0.21.0
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
- Correctly render tab stops in `--show-all`, see #2038 (@Synthetica9)
|
||||||
|
- Add a `--style=default` option and make it the default. It is less verbose than `full`, see #2061 (@IsaacHorvath)
|
||||||
|
- Enable BusyBox `less` as pager, see #2162 (@nfisher1226)
|
||||||
|
- File extensions are now matched case-insensitively. See #1854, #2181 (@Enselic)
|
||||||
|
|
||||||
|
## Bugfixes
|
||||||
|
|
||||||
|
- Bump `regex` dependency from 1.5.4 to 1.5.5 to fix [CVE-2022-24713](https://blog.rust-lang.org/2022/03/08/cve-2022-24713.html), see #2145, #2139 (@Enselic)
|
||||||
|
- `bat` no longer crashes when encountering files that references missing syntaxes. See #915, #2181 (@Enselic)
|
||||||
|
|
||||||
|
## Performance
|
||||||
|
|
||||||
|
- Skip syntax highlighting on long lines (> 16384 chars) to help improve performance. See #2165 (@keith-hall)
|
||||||
|
- Vastly improve startup time by lazy-loading syntaxes via syntect 5.0.0. This makes bat display small files ~75% faster than before. See #951, #2181 (@Enselic)
|
||||||
|
|
||||||
|
## Other
|
||||||
|
|
||||||
|
- Include info about custom assets in `--diagnostics` if used. See #2107, #2144 (@Enselic)
|
||||||
|
|
||||||
|
## Syntaxes
|
||||||
|
|
||||||
|
- Mapped clang-format config file (.clang-format) to YAML syntax (@TruncatedDinosour)
|
||||||
|
- log syntax: improved handling of escape characters in double quoted strings. See #2123 (@keith-hall)
|
||||||
|
- Associate `/var/spool/mail/*` and `/var/mail/*` with the `Email` syntax. See #2156 (@cyqsimon)
|
||||||
|
- Added cmd-help syntax to scope --help messages. See #2148 (@victor-gp)
|
||||||
|
- Slightly adjust Zig syntax. See #2136 (@Enselic)
|
||||||
|
- Associate `.inf` files with the `INI` syntax. See #2190 (@Enselic)
|
||||||
|
|
||||||
|
## `bat` as a library
|
||||||
|
|
||||||
|
- Allow configuration of `show_nonprintable` with `PrettyPrinter`, see #2142
|
||||||
|
- The binary format of syntaxes.bin has been changed due to syntaxes now being lazy-loaded via syntect 5.0.0. See #2181 (@Enselic)
|
||||||
|
- Mark `bat::error::Error` enum as `#[non_exhaustive]` to allow adding new variants without future semver breakage. See #2181 (@Enselic)
|
||||||
|
- Change `Error::SyntectError(syntect::LoadingError)` to `Error::SyntectError(syntect::Error)`. See #2181 (@Enselic)
|
||||||
|
- Add `Error::SyntectLoadingError(syntect::LoadingError)` enum variant. See #2181 (@Enselic)
|
||||||
|
|
||||||
|
|
||||||
|
# v0.20.0
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
- New style component `header-filesize` to show size of the displayed file in the header. See #1988 (@mdibaiee)
|
||||||
|
- Use underline for line highlighting on ANSI, see #1730 (@mdibaiee)
|
||||||
|
|
||||||
|
## Bugfixes
|
||||||
|
|
||||||
|
- Fix bash completion on bash 3.x and bash-completion 1.x. See #2066 (@joshpencheon)
|
||||||
|
|
||||||
|
## Syntaxes
|
||||||
|
|
||||||
|
- `GraphQL`: Add support for interfaces implementing interfaces and consider ampersand an operator. See #2000
|
||||||
|
- Associate `_vimrc` and `_gvimrc` files with the `VimL` syntax. See #2002
|
||||||
|
- Associate `poetry.lock` files with the `TOML` syntax. See #2049
|
||||||
|
- Associate `.mesh`, `.task`, `.rgen`, `.rint`, `.rahit`, `.rchit`, `.rmiss`, and `.rcall` with the `GLSL` syntax. See #2050
|
||||||
|
- Added support for `JQ` syntax, see #2072
|
||||||
|
- Properly associate global git config files rooted in `$XDG_CONFIG_HOME/git/` or `$HOME/.config/git/`. See #2067 (@cyqsimon)
|
||||||
|
|
||||||
|
## `bat` as a library
|
||||||
|
|
||||||
|
- Exposed `get_syntax_set` and `get_theme` methods on `HighlightingAssets`. See #2030 (@dandavison)
|
||||||
|
- Added `HeaderFilename` and `HeaderFilesize` to `StyleComponent` enum, and mark it `#[non_exhaustive]`. See #1988 (@mdibaiee)
|
||||||
|
|
||||||
|
|
||||||
|
# v0.19.0
|
||||||
|
|
||||||
|
## Performance
|
||||||
|
|
||||||
|
- Reduce startup time in loop-through mode (e.g. when redirecting output) by 90%. See #1747 (@Enselic)
|
||||||
|
- Load themes lazily to make bat start 25% faster when disregarding syntax load time. See #1969 (@Enselic)
|
||||||
|
- Python syntax highlighting no longer suffers from abysmal performance in specific scenarios. See #1688 (@keith-hall)
|
||||||
|
- Fix for poor performance when ANSI escape sequences are piped to `bat`, see #1596 (@eth-p)
|
||||||
|
- Fix for incorrect handling of ANSI escape sequences when using `--wrap=never`, see #1596 (@eth-p)
|
||||||
|
- Load custom assets as fast as integrated assets, see #1753 (@Enselic)
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
- Support for `x:-delta` (minus) syntax in line ranges (e.g. `20:-10`). See #1901 (@bojan88)
|
||||||
|
- Support for `--ignored-suffix` argument. See #1892 (@bojan88)
|
||||||
|
- `$BAT_CONFIG_DIR` is now a recognized environment variable. It has precedence over `$XDG_CONFIG_HOME`, see #1727 (@billrisher)
|
||||||
|
- Support for `x:+delta` syntax in line ranges (e.g. `20:+10`). See #1810 (@bojan88)
|
||||||
|
- Add new `--acknowledgements` option that gives credit to theme and syntax definition authors. See #1971 (@Enselic)
|
||||||
|
- Include git hash in `bat -V` and `bat --version` output if present. See #1921 (@Enselic)
|
||||||
|
|
||||||
|
## Bugfixes
|
||||||
|
|
||||||
|
- First line not shown in diff context. See #1891 (@divagant-martian)
|
||||||
|
- Do not ignore syntaxes that handle file names with a `*.conf` extension. See #1703 (@cbolgiano)
|
||||||
|
|
||||||
|
## Other
|
||||||
|
|
||||||
|
- Add PowerShell completion, see #1826 (@rashil2000)
|
||||||
|
- Minimum supported Rust version (MSRV) bumped to 1.51, see #1994 (@mdibaiee)
|
||||||
|
|
||||||
|
## Syntaxes
|
||||||
|
|
||||||
|
- Groff, see #1685 (@scop)
|
||||||
|
- HTTP Requests and Responses, see #1748 (@keith-hall)
|
||||||
|
- LLVM, see #1777 (@ioncodes)
|
||||||
|
- Highlight for `vimrc` and `gvimrc` files, see #1763 (@SuperSandro2000)
|
||||||
|
- Syslog highlighting improvements, see #1793 (@scop)
|
||||||
|
- Added support for `slim` syntax, see #1693 (@mfinelli)
|
||||||
|
- Racket, see #1884 (@jubnzv)
|
||||||
|
- LiveScript, see #1915 (@Enselic)
|
||||||
|
- MediaWiki, see #1925 (@sorairolake)
|
||||||
|
- The `requirements.txt` syntax has been removed due to incompatible license requirements.
|
||||||
|
- Dart, new highlighter, see #1959 (@Ersikan)
|
||||||
|
- SCSS and Sass syntaxes updated, see #1766 (@Enselic)
|
||||||
|
- PowerShell syntax updated, see #1935 (@Enselic)
|
||||||
|
- TypeScript syntax updated, see #1834 (@Enselic)
|
||||||
|
|
||||||
|
## `bat` as a library
|
||||||
|
|
||||||
|
- Deprecate `HighlightingAssets::syntaxes()` and `HighlightingAssets::syntax_for_file_name()`. Use `HighlightingAssets::get_syntaxes()` and `HighlightingAssets::get_syntax_for_path()` instead. They return a `Result` which is needed for upcoming lazy-loading work to improve startup performance. They also return which `SyntaxSet` the returned `SyntaxReference` belongs to. See #1747, #1755, #1776, #1862 (@Enselic)
|
||||||
|
- Remove `HighlightingAssets::from_files` and `HighlightingAssets::save_to_cache`. Instead of calling the former and then the latter you now make a single call to `bat::assets::build`. See #1802, #1971 (@Enselic)
|
||||||
|
- Replace the `error::Error(error::ErrorKind, _)` struct and enum with an `error::Error` enum. `Error(ErrorKind::UnknownSyntax, _)` becomes `Error::UnknownSyntax`, etc. Also remove the `error::ResultExt` trait. These changes stem from replacing `error-chain` with `thiserror`. See #1820 (@Enselic)
|
||||||
|
- Add new `MappingTarget` enum variant `MapExtensionToUnknown`. Refer to its documentation for more information. Also mark `MappingTarget` as `#[non_exhaustive]` since more enum variants might be added in the future. See #1703 (@cbolgiano), #2012 (@Enselic)
|
||||||
|
|
||||||
|
|
||||||
# v0.18.3
|
# v0.18.3
|
||||||
|
|
|
@ -6,21 +6,42 @@ Thank you for considering to contribute to `bat`!
|
||||||
|
|
||||||
## Add an entry to the changelog
|
## Add an entry to the changelog
|
||||||
|
|
||||||
If your contribution changes the behavior of `bat` (as opposed to a typo-fix
|
Keeping the [`CHANGELOG.md`](CHANGELOG.md) file up-to-date makes the release
|
||||||
in the documentation), please update the [`CHANGELOG.md`](CHANGELOG.md) file
|
process much easier and therefore helps to get your changes into a new `bat`
|
||||||
and describe your changes. This makes the release process much easier and
|
release faster. However, not every change to the repository requires a
|
||||||
therefore helps to get your changes into a new `bat` release faster.
|
changelog entry. Below are a few examples of that.
|
||||||
|
|
||||||
|
Please update the changelog if your contribution contains changes regarding
|
||||||
|
any of the following:
|
||||||
|
- the behavior of `bat`
|
||||||
|
- syntax mappings
|
||||||
|
- syntax definitions
|
||||||
|
- themes
|
||||||
|
- the build system, linting, or CI workflows
|
||||||
|
|
||||||
|
A changelog entry is not necessary when:
|
||||||
|
- updating documentation
|
||||||
|
- fixing typos
|
||||||
|
|
||||||
|
>[!NOTE]
|
||||||
|
> For PRs, a CI workflow verifies that a suitable changelog entry is
|
||||||
|
> added. If such an entry is missing, the workflow will fail. If your
|
||||||
|
> changes do not need an entry to the changelog (see above), that
|
||||||
|
> workflow failure can be disregarded.
|
||||||
|
|
||||||
|
|
||||||
|
### Changelog entry format
|
||||||
|
|
||||||
The top of the `CHANGELOG` contains a *"unreleased"* section with a few
|
The top of the `CHANGELOG` contains a *"unreleased"* section with a few
|
||||||
subsections (Features, Bugfixes, …). Please add your entry to the subsection
|
subsections (Features, Bugfixes, …). Please add your entry to the subsection
|
||||||
that best describes your change.
|
that best describes your change.
|
||||||
|
|
||||||
Entries follow this format:
|
Entries must follow this format:
|
||||||
```
|
```
|
||||||
- Short description of what has been changed, see #123 (@user)
|
- Short description of what has been changed, see #123 (@user)
|
||||||
```
|
```
|
||||||
Here, `#123` is the number of the original issue and/or your pull request.
|
Please replace `#123` with the number of your pull request (not issue) and
|
||||||
Please replace `@user` by your GitHub username.
|
`@user` by your GitHub username.
|
||||||
|
|
||||||
|
|
||||||
## Development
|
## Development
|
||||||
|
@ -33,7 +54,7 @@ section in the README.
|
||||||
|
|
||||||
Please consider opening a
|
Please consider opening a
|
||||||
[feature request ticket](https://github.com/sharkdp/bat/issues/new?assignees=&labels=feature-request&template=feature_request.md)
|
[feature request ticket](https://github.com/sharkdp/bat/issues/new?assignees=&labels=feature-request&template=feature_request.md)
|
||||||
first in order to give us a chance to discuss the feature first.
|
first in order to give us a chance to discuss the details and specifics of the potential new feature before you go and build it.
|
||||||
|
|
||||||
|
|
||||||
## Adding new syntaxes/languages or themes
|
## Adding new syntaxes/languages or themes
|
||||||
|
@ -46,3 +67,25 @@ If you really think that a particular syntax or theme should be added for all
|
||||||
users, please read the corresponding
|
users, please read the corresponding
|
||||||
[documentation](https://github.com/sharkdp/bat/blob/master/doc/assets.md)
|
[documentation](https://github.com/sharkdp/bat/blob/master/doc/assets.md)
|
||||||
first.
|
first.
|
||||||
|
|
||||||
|
|
||||||
|
## Regression tests
|
||||||
|
|
||||||
|
You are **strongly encouraged** to add regression tests. Regression tests are great,
|
||||||
|
not least because they:
|
||||||
|
|
||||||
|
* ensure that your contribution will never completely stop working.
|
||||||
|
|
||||||
|
* makes code reviews easier, because it becomes very clear what the code is
|
||||||
|
supposed to do.
|
||||||
|
|
||||||
|
For functional changes, you most likely want to add a test to
|
||||||
|
[`tests/integration_tests.rs`](https://github.com/sharkdp/bat/blob/master/tests/integration_tests.rs).
|
||||||
|
Look at existing tests to know how to write a new test. In short, you will
|
||||||
|
invoke the `bat` binary with a certain set of arguments, and then assert on
|
||||||
|
stdout/stderr.
|
||||||
|
|
||||||
|
To learn how to write regression tests for theme and syntax changes, read the
|
||||||
|
[Syntax
|
||||||
|
tests](https://github.com/sharkdp/bat/blob/master/doc/assets.md#syntax-tests)
|
||||||
|
section in `assets.md`.
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
114
Cargo.toml
114
Cargo.toml
|
@ -3,89 +3,121 @@ authors = ["David Peter <mail@david-peter.de>"]
|
||||||
categories = ["command-line-utilities"]
|
categories = ["command-line-utilities"]
|
||||||
description = "A cat(1) clone with wings."
|
description = "A cat(1) clone with wings."
|
||||||
homepage = "https://github.com/sharkdp/bat"
|
homepage = "https://github.com/sharkdp/bat"
|
||||||
license = "MIT/Apache-2.0"
|
license = "MIT OR Apache-2.0"
|
||||||
name = "bat"
|
name = "bat"
|
||||||
repository = "https://github.com/sharkdp/bat"
|
repository = "https://github.com/sharkdp/bat"
|
||||||
version = "0.18.3"
|
version = "0.24.0"
|
||||||
exclude = ["assets/syntaxes/*", "assets/themes/*"]
|
exclude = ["assets/syntaxes/*", "assets/themes/*"]
|
||||||
build = "build.rs"
|
build = "build/main.rs"
|
||||||
edition = '2018'
|
edition = '2021'
|
||||||
|
rust-version = "1.70"
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
default = ["application"]
|
default = ["application"]
|
||||||
# Feature required for bat the application. Should be disabled when depending on
|
# Feature required for bat the application. Should be disabled when depending on
|
||||||
# bat as a library.
|
# bat as a library.
|
||||||
application = [
|
application = [
|
||||||
"atty",
|
"bugreport",
|
||||||
"clap",
|
"build-assets",
|
||||||
"dirs-next",
|
|
||||||
"git",
|
"git",
|
||||||
"lazy_static",
|
"minimal-application",
|
||||||
|
]
|
||||||
|
# Mainly for developers that want to iterate quickly
|
||||||
|
# Be aware that the included features might change in the future
|
||||||
|
minimal-application = [
|
||||||
|
"clap",
|
||||||
|
"etcetera",
|
||||||
"paging",
|
"paging",
|
||||||
"wild",
|
|
||||||
"regex-onig",
|
"regex-onig",
|
||||||
|
"wild",
|
||||||
]
|
]
|
||||||
git = ["git2"] # Support indicating git modifications
|
git = ["git2"] # Support indicating git modifications
|
||||||
paging = ["shell-words"] # Support applying a pager on the output
|
paging = ["shell-words", "grep-cli"] # Support applying a pager on the output
|
||||||
|
lessopen = ["run_script", "os_str_bytes"] # Support $LESSOPEN preprocessor
|
||||||
|
build-assets = ["syntect/yaml-load", "syntect/plist-load", "regex", "walkdir"]
|
||||||
|
|
||||||
# You need to use one of these if you depend on bat as a library:
|
# You need to use one of these if you depend on bat as a library:
|
||||||
regex-onig = ["syntect/regex-onig"] # Use the "oniguruma" regex engine
|
regex-onig = ["syntect/regex-onig"] # Use the "oniguruma" regex engine
|
||||||
regex-fancy = ["syntect/regex-fancy"] # Use the rust-only "fancy-regex" engine
|
regex-fancy = ["syntect/regex-fancy"] # Use the rust-only "fancy-regex" engine
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
atty = { version = "0.2.14", optional = true }
|
nu-ansi-term = "0.50.0"
|
||||||
ansi_term = "^0.12.1"
|
ansi_colours = "^1.2"
|
||||||
ansi_colours = "^1.0"
|
bincode = "1.0"
|
||||||
console = "0.14.1"
|
console = "0.15.8"
|
||||||
lazy_static = { version = "1.4", optional = true }
|
flate2 = "1.0"
|
||||||
wild = { version = "2.0", optional = true }
|
once_cell = "1.19"
|
||||||
|
thiserror = "1.0"
|
||||||
|
wild = { version = "2.2", optional = true }
|
||||||
content_inspector = "0.2.4"
|
content_inspector = "0.2.4"
|
||||||
encoding = "0.2"
|
shell-words = { version = "1.1.0", optional = true }
|
||||||
shell-words = { version = "1.0.0", optional = true }
|
unicode-width = "0.1.11"
|
||||||
unicode-width = "0.1.8"
|
|
||||||
globset = "0.4"
|
globset = "0.4"
|
||||||
serde = { version = "1.0", features = ["derive"] }
|
serde = "1.0"
|
||||||
serde_yaml = "0.8"
|
serde_derive = "1.0"
|
||||||
semver = "0.11"
|
serde_yaml = "0.9.28"
|
||||||
|
semver = "1.0"
|
||||||
path_abs = { version = "0.5", default-features = false }
|
path_abs = { version = "0.5", default-features = false }
|
||||||
clircle = "0.3"
|
clircle = "0.5"
|
||||||
bugreport = "0.4"
|
bugreport = { version = "0.5.0", optional = true }
|
||||||
dirs-next = { version = "2.0.0", optional = true }
|
etcetera = { version = "0.8.0", optional = true }
|
||||||
grep-cli = "0.1.6"
|
grep-cli = { version = "0.1.10", optional = true }
|
||||||
|
regex = { version = "1.10.2", optional = true }
|
||||||
|
walkdir = { version = "2.4", optional = true }
|
||||||
|
bytesize = { version = "1.3.0" }
|
||||||
|
encoding_rs = "0.8.33"
|
||||||
|
os_str_bytes = { version = "~7.0", optional = true }
|
||||||
|
run_script = { version = "^0.10.1", optional = true}
|
||||||
|
|
||||||
[dependencies.git2]
|
[dependencies.git2]
|
||||||
version = "0.13"
|
version = "0.18"
|
||||||
optional = true
|
optional = true
|
||||||
default-features = false
|
default-features = false
|
||||||
|
|
||||||
[dependencies.syntect]
|
[dependencies.syntect]
|
||||||
version = "4.5.0"
|
version = "5.2.0"
|
||||||
default-features = false
|
default-features = false
|
||||||
features = ["parsing", "yaml-load", "dump-load", "dump-create"]
|
features = ["parsing"]
|
||||||
|
|
||||||
[dependencies.clap]
|
[dependencies.clap]
|
||||||
version = "2.33"
|
version = "4.4.12"
|
||||||
optional = true
|
optional = true
|
||||||
default-features = false
|
features = ["wrap_help", "cargo"]
|
||||||
features = ["suggestions", "color", "wrap_help"]
|
|
||||||
|
|
||||||
[dependencies.error-chain]
|
[target.'cfg(target_os = "macos")'.dependencies]
|
||||||
version = "0.12"
|
home = "0.5.9"
|
||||||
default-features = false
|
plist = "1.6.0"
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
assert_cmd = "1.0.5"
|
assert_cmd = "2.0.12"
|
||||||
serial_test = "0.5.1"
|
expect-test = "1.4.1"
|
||||||
predicates = "1.0.7"
|
serial_test = { version = "2.0.0", default-features = false }
|
||||||
|
predicates = "3.1.0"
|
||||||
wait-timeout = "0.2.0"
|
wait-timeout = "0.2.0"
|
||||||
tempfile = "3.2.0"
|
tempfile = "3.8.1"
|
||||||
|
serde = { version = "1.0", features = ["derive"] }
|
||||||
|
|
||||||
[target.'cfg(unix)'.dev-dependencies]
|
[target.'cfg(unix)'.dev-dependencies]
|
||||||
nix = "0.21.0"
|
nix = { version = "0.26.4", default-features = false, features = ["term"] }
|
||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
clap = { version = "2.33", optional = true }
|
anyhow = "1.0.78"
|
||||||
|
indexmap = { version = "2.2.6", features = ["serde"] }
|
||||||
|
itertools = "0.13.0"
|
||||||
|
once_cell = "1.18"
|
||||||
|
regex = "1.10.2"
|
||||||
|
serde = "1.0"
|
||||||
|
serde_derive = "1.0"
|
||||||
|
serde_with = { version = "3.8.1", default-features = false, features = ["macros"] }
|
||||||
|
toml = { version = "0.8.9", features = ["preserve_order"] }
|
||||||
|
walkdir = "2.4"
|
||||||
|
|
||||||
|
[build-dependencies.clap]
|
||||||
|
version = "4.4.12"
|
||||||
|
optional = true
|
||||||
|
features = ["wrap_help", "cargo"]
|
||||||
|
|
||||||
[profile.release]
|
[profile.release]
|
||||||
lto = true
|
lto = true
|
||||||
|
strip = true
|
||||||
codegen-units = 1
|
codegen-units = 1
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
Copyright (c) 2018-2021 bat-developers (https://github.com/sharkdp/bat).
|
Copyright (c) 2018-2023 bat-developers (https://github.com/sharkdp/bat).
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
Copyright (c) 2018-2021 bat-developers (https://github.com/sharkdp/bat).
|
||||||
|
|
||||||
|
bat is made available under the terms of either the MIT License or the Apache
|
||||||
|
License 2.0, at your option.
|
||||||
|
|
||||||
|
See the LICENSE-APACHE and LICENSE-MIT files for license details.
|
197
README.md
197
README.md
|
@ -12,9 +12,36 @@
|
||||||
<a href="#installation">Installation</a> •
|
<a href="#installation">Installation</a> •
|
||||||
<a href="#customization">Customization</a> •
|
<a href="#customization">Customization</a> •
|
||||||
<a href="#project-goals-and-alternatives">Project goals, alternatives</a><br>
|
<a href="#project-goals-and-alternatives">Project goals, alternatives</a><br>
|
||||||
[<a href="https://github.com/chinanf-boy/bat-zh">中文</a>] [<a href="doc/README-ja.md">日本語</a>] [<a href="doc/README-ko.md">한국어</a>] [<a href="doc/README-ru.md">Русский</a>]
|
[English]
|
||||||
|
[<a href="doc/README-zh.md">中文</a>]
|
||||||
|
[<a href="doc/README-ja.md">日本語</a>]
|
||||||
|
[<a href="doc/README-ko.md">한국어</a>]
|
||||||
|
[<a href="doc/README-ru.md">Русский</a>]
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
### Sponsors
|
||||||
|
|
||||||
|
A special *thank you* goes to our biggest <a href="doc/sponsors.md">sponsors</a>:<br>
|
||||||
|
<a href="https://workos.com/?utm_campaign=github_repo&utm_medium=referral&utm_content=bat&utm_source=github">
|
||||||
|
<img src="doc/sponsors/workos-logo-white-bg.svg" width="200" alt="WorkOS">
|
||||||
|
<br>
|
||||||
|
<strong>Your app, enterprise-ready.</strong>
|
||||||
|
<br>
|
||||||
|
<sub>Start selling to enterprise customers with just a few lines of code.</sub>
|
||||||
|
<br>
|
||||||
|
<sup>Add Single Sign-On (and more) in minutes instead of months.</sup>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a href="https://www.warp.dev/?utm_source=github&utm_medium=referral&utm_campaign=bat_20231001">
|
||||||
|
<img src="doc/sponsors/warp-logo.png" width="200" alt="Warp">
|
||||||
|
<br>
|
||||||
|
<strong>Warp is a modern, Rust-based terminal with AI built in<br>so you and your team can build great software, faster.</strong>
|
||||||
|
<br>
|
||||||
|
<sub>Feel more productive on the command line with parameterized commands,</sub>
|
||||||
|
<br>
|
||||||
|
<sup>autosuggestions, and an IDE-like text editor.</sup>
|
||||||
|
</a>
|
||||||
|
|
||||||
### Syntax highlighting
|
### Syntax highlighting
|
||||||
|
|
||||||
`bat` supports syntax highlighting for a large number of programming and markup
|
`bat` supports syntax highlighting for a large number of programming and markup
|
||||||
|
@ -38,7 +65,7 @@ characters:
|
||||||
|
|
||||||
### Automatic paging
|
### Automatic paging
|
||||||
|
|
||||||
By default, `bat` pipes its own output to a pager (e.g `less`) if the output is too large for one screen.
|
By default, `bat` pipes its own output to a pager (e.g. `less`) if the output is too large for one screen.
|
||||||
If you would rather `bat` work like `cat` all the time (never page output), you can set `--paging=never` as an option, either on the command line or in your configuration file.
|
If you would rather `bat` work like `cat` all the time (never page output), you can set `--paging=never` as an option, either on the command line or in your configuration file.
|
||||||
If you intend to alias `cat` to `bat` in your shell configuration, you can use `alias cat='bat --paging=never'` to preserve the default behavior.
|
If you intend to alias `cat` to `bat` in your shell configuration, you can use `alias cat='bat --paging=never'` to preserve the default behavior.
|
||||||
|
|
||||||
|
@ -99,19 +126,23 @@ bat f - g # output 'f', then stdin, then 'g'.
|
||||||
You can use `bat` as a previewer for [`fzf`](https://github.com/junegunn/fzf). To do this,
|
You can use `bat` as a previewer for [`fzf`](https://github.com/junegunn/fzf). To do this,
|
||||||
use `bat`s `--color=always` option to force colorized output. You can also use `--line-range`
|
use `bat`s `--color=always` option to force colorized output. You can also use `--line-range`
|
||||||
option to restrict the load times for long files:
|
option to restrict the load times for long files:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
fzf --preview 'bat --color=always --style=numbers --line-range=:500 {}'
|
fzf --preview "bat --color=always --style=numbers --line-range=:500 {}"
|
||||||
```
|
```
|
||||||
For more information, see [`fzf`s `README`](https://github.com/junegunn/fzf#preview-window).
|
|
||||||
|
For more information, see [`fzf`'s `README`](https://github.com/junegunn/fzf#preview-window).
|
||||||
|
|
||||||
#### `find` or `fd`
|
#### `find` or `fd`
|
||||||
|
|
||||||
You can use the `-exec` option of `find` to preview all search results with `bat`:
|
You can use the `-exec` option of `find` to preview all search results with `bat`:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
find … -exec bat {} +
|
find … -exec bat {} +
|
||||||
```
|
```
|
||||||
|
|
||||||
If you happen to use [`fd`](https://github.com/sharkdp/fd), you can use the `-X`/`--exec-batch` option to do the same:
|
If you happen to use [`fd`](https://github.com/sharkdp/fd), you can use the `-X`/`--exec-batch` option to do the same:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
fd … -X bat
|
fd … -X bat
|
||||||
```
|
```
|
||||||
|
@ -127,9 +158,11 @@ batgrep needle src/
|
||||||
#### `tail -f`
|
#### `tail -f`
|
||||||
|
|
||||||
`bat` can be combined with `tail -f` to continuously monitor a given file with syntax highlighting.
|
`bat` can be combined with `tail -f` to continuously monitor a given file with syntax highlighting.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
tail -f /var/log/pacman.log | bat --paging=never -l log
|
tail -f /var/log/pacman.log | bat --paging=never -l log
|
||||||
```
|
```
|
||||||
|
|
||||||
Note that we have to switch off paging in order for this to work. We have also specified the syntax
|
Note that we have to switch off paging in order for this to work. We have also specified the syntax
|
||||||
explicitly (`-l log`), as it can not be auto-detected in this case.
|
explicitly (`-l log`), as it can not be auto-detected in this case.
|
||||||
|
|
||||||
|
@ -137,6 +170,7 @@ explicitly (`-l log`), as it can not be auto-detected in this case.
|
||||||
|
|
||||||
You can combine `bat` with `git show` to view an older version of a given file with proper syntax
|
You can combine `bat` with `git show` to view an older version of a given file with proper syntax
|
||||||
highlighting:
|
highlighting:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git show v0.6.0:src/main.rs | bat -l rs
|
git show v0.6.0:src/main.rs | bat -l rs
|
||||||
```
|
```
|
||||||
|
@ -147,7 +181,7 @@ You can combine `bat` with `git diff` to view lines around code changes with pro
|
||||||
highlighting:
|
highlighting:
|
||||||
```bash
|
```bash
|
||||||
batdiff() {
|
batdiff() {
|
||||||
git diff --name-only --diff-filter=d | xargs bat --diff
|
git diff --name-only --relative --diff-filter=d | xargs bat --diff
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
If you prefer to use this as a separate tool, check out `batdiff` in [`bat-extras`](https://github.com/eth-p/bat-extras).
|
If you prefer to use this as a separate tool, check out `batdiff` in [`bat-extras`](https://github.com/eth-p/bat-extras).
|
||||||
|
@ -173,7 +207,7 @@ bat main.cpp | xclip
|
||||||
export MANPAGER="sh -c 'col -bx | bat -l man -p'"
|
export MANPAGER="sh -c 'col -bx | bat -l man -p'"
|
||||||
man 2 select
|
man 2 select
|
||||||
```
|
```
|
||||||
(replace `bat` by `batcat` if you are on Debian or Ubuntu)
|
(replace `bat` with `batcat` if you are on Debian or Ubuntu)
|
||||||
|
|
||||||
It might also be necessary to set `MANROFFOPT="-c"` if you experience
|
It might also be necessary to set `MANROFFOPT="-c"` if you experience
|
||||||
formatting problems.
|
formatting problems.
|
||||||
|
@ -188,23 +222,49 @@ Also, note that this will [not work](https://github.com/sharkdp/bat/issues/1145)
|
||||||
|
|
||||||
The [`prettybat`](https://github.com/eth-p/bat-extras/blob/master/doc/prettybat.md) script is a wrapper that will format code and print it with `bat`.
|
The [`prettybat`](https://github.com/eth-p/bat-extras/blob/master/doc/prettybat.md) script is a wrapper that will format code and print it with `bat`.
|
||||||
|
|
||||||
|
#### Highlighting `--help` messages
|
||||||
|
|
||||||
|
You can use `bat` to colorize help text: `$ cp --help | bat -plhelp`
|
||||||
|
|
||||||
|
You can also use a wrapper around this:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# in your .bashrc/.zshrc/*rc
|
||||||
|
alias bathelp='bat --plain --language=help'
|
||||||
|
help() {
|
||||||
|
"$@" --help 2>&1 | bathelp
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Then you can do `$ help cp` or `$ help git commit`.
|
||||||
|
|
||||||
|
When you are using `zsh`, you can also use global aliases to override `-h` and `--help` entirely:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
alias -g -- -h='-h 2>&1 | bat --language=help --style=plain'
|
||||||
|
alias -g -- --help='--help 2>&1 | bat --language=help --style=plain'
|
||||||
|
```
|
||||||
|
|
||||||
|
This way, you can keep on using `cp --help`, but get colorized help pages.
|
||||||
|
|
||||||
|
Be aware that in some cases, `-h` may not be a shorthand of `--help` (for example with `ls`).
|
||||||
|
|
||||||
|
Please report any issues with the help syntax in [this repository](https://github.com/victor-gp/cmd-help-sublime-syntax).
|
||||||
|
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
[![Packaging status](https://repology.org/badge/vertical-allrepos/bat-cat.svg)](https://repology.org/project/bat-cat/versions)
|
[![Packaging status](https://repology.org/badge/vertical-allrepos/bat-cat.svg?columns=3&exclude_unsupported=1)](https://repology.org/project/bat-cat/versions)
|
||||||
|
|
||||||
### On Ubuntu (using `apt`)
|
### On Ubuntu (using `apt`)
|
||||||
*... and other Debian-based Linux distributions.*
|
*... and other Debian-based Linux distributions.*
|
||||||
|
|
||||||
`bat` is making its way through the [Ubuntu](https://packages.ubuntu.com/eoan/bat) and
|
`bat` is available on [Ubuntu since 20.04 ("Focal")](https://packages.ubuntu.com/search?keywords=bat&exact=1) and [Debian since August 2021 (Debian 11 - "Bullseye")](https://packages.debian.org/bullseye/bat).
|
||||||
[Debian](https://packages.debian.org/testing/bat) package release process, and is available
|
|
||||||
for Ubuntu as of Eoan 19.10. On Debian `bat` is currently available on the unstable
|
|
||||||
"Sid" branch and on the testing branch.
|
|
||||||
|
|
||||||
If your Ubuntu/Debian installation is new enough you can simply run:
|
If your Ubuntu/Debian installation is new enough you can simply run:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
apt install bat
|
sudo apt install bat
|
||||||
```
|
```
|
||||||
|
|
||||||
**Important**: If you install `bat` this way, please note that the executable may be installed as `batcat` instead of `bat` (due to [a name
|
**Important**: If you install `bat` this way, please note that the executable may be installed as `batcat` instead of `bat` (due to [a name
|
||||||
|
@ -236,7 +296,7 @@ apk add bat
|
||||||
|
|
||||||
### On Arch Linux
|
### On Arch Linux
|
||||||
|
|
||||||
You can install [the `bat` package](https://www.archlinux.org/packages/community/x86_64/bat/)
|
You can install [the `bat` package](https://www.archlinux.org/packages/extra/x86_64/bat/)
|
||||||
from the official sources:
|
from the official sources:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
@ -251,6 +311,14 @@ You can install [the `bat` package](https://koji.fedoraproject.org/koji/packagei
|
||||||
dnf install bat
|
dnf install bat
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### On Funtoo Linux
|
||||||
|
|
||||||
|
You can install [the `bat` package](https://github.com/funtoo/dev-kit/tree/1.4-release/sys-apps/bat) from dev-kit.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
emerge sys-apps/bat
|
||||||
|
```
|
||||||
|
|
||||||
### On Gentoo Linux
|
### On Gentoo Linux
|
||||||
|
|
||||||
You can install [the `bat` package](https://packages.gentoo.org/packages/sys-apps/bat)
|
You can install [the `bat` package](https://packages.gentoo.org/packages/sys-apps/bat)
|
||||||
|
@ -289,6 +357,14 @@ cd /usr/ports/textproc/bat
|
||||||
make install
|
make install
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### On OpenBSD
|
||||||
|
|
||||||
|
You can install `bat` package using [`pkg_add(1)`](https://man.openbsd.org/pkg_add.1):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pkg_add bat
|
||||||
|
```
|
||||||
|
|
||||||
### Via nix
|
### Via nix
|
||||||
|
|
||||||
You can install `bat` using the [nix package manager](https://nixos.org/nix):
|
You can install `bat` using the [nix package manager](https://nixos.org/nix):
|
||||||
|
@ -297,6 +373,14 @@ You can install `bat` using the [nix package manager](https://nixos.org/nix):
|
||||||
nix-env -i bat
|
nix-env -i bat
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Via flox
|
||||||
|
|
||||||
|
You can install `bat` using [Flox](https://flox.dev)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
flox install bat
|
||||||
|
```
|
||||||
|
|
||||||
### On openSUSE
|
### On openSUSE
|
||||||
|
|
||||||
You can install `bat` with zypper:
|
You can install `bat` with zypper:
|
||||||
|
@ -312,7 +396,7 @@ Existing packages may be available, but are not officially supported and may con
|
||||||
|
|
||||||
### On macOS (or Linux) via Homebrew
|
### On macOS (or Linux) via Homebrew
|
||||||
|
|
||||||
You can install `bat` with [Homebrew on MacOS](https://formulae.brew.sh/formula/bat) or [Homebrew on Linux](https://formulae.brew.sh/formula-linux/bat):
|
You can install `bat` with [Homebrew](https://formulae.brew.sh/formula/bat):
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
brew install bat
|
brew install bat
|
||||||
|
@ -335,6 +419,14 @@ take a look at the ["Using `bat` on Windows"](#using-bat-on-windows) section.
|
||||||
|
|
||||||
You will need to install the [Visual C++ Redistributable](https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads) package.
|
You will need to install the [Visual C++ Redistributable](https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads) package.
|
||||||
|
|
||||||
|
#### With WinGet
|
||||||
|
|
||||||
|
You can install `bat` via [WinGet](https://learn.microsoft.com/en-us/windows/package-manager/winget):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
winget install sharkdp.bat
|
||||||
|
```
|
||||||
|
|
||||||
#### With Chocolatey
|
#### With Chocolatey
|
||||||
|
|
||||||
You can install `bat` via [Chocolatey](https://chocolatey.org/packages/Bat):
|
You can install `bat` via [Chocolatey](https://chocolatey.org/packages/Bat):
|
||||||
|
@ -363,7 +455,7 @@ binaries are also available: look for archives with `musl` in the file name.
|
||||||
|
|
||||||
### From source
|
### From source
|
||||||
|
|
||||||
If you want to build `bat` from source, you need Rust 1.45 or
|
If you want to build `bat` from source, you need Rust 1.70.0 or
|
||||||
higher. You can then use `cargo` to build everything:
|
higher. You can then use `cargo` to build everything:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
@ -491,8 +583,9 @@ command line option. The option takes an argument of the form `pattern:syntax` w
|
||||||
the absolute file path. The `syntax` part is the full name of a supported language
|
the absolute file path. The `syntax` part is the full name of a supported language
|
||||||
(use `bat --list-languages` for an overview).
|
(use `bat --list-languages` for an overview).
|
||||||
|
|
||||||
Note: You probably want to use this option as an entry in `bat`s configuration file instead
|
**Note:** You probably want to use this option as [an entry in `bat`'s configuration file](#configuration-file)
|
||||||
of passing it on the command line (see below).
|
for persistence instead of passing it on the command line as a one-off. Generally
|
||||||
|
you'd just use `-l` if you want to manually specify a language for a file.
|
||||||
|
|
||||||
Example: To use "INI" syntax highlighting for all files with a `.conf` file extension, use
|
Example: To use "INI" syntax highlighting for all files with a `.conf` file extension, use
|
||||||
```bash
|
```bash
|
||||||
|
@ -517,7 +610,8 @@ set, `less` is used by default. If you want to use a different pager, you can ei
|
||||||
`PAGER` variable or set the `BAT_PAGER` environment variable to override what is specified in
|
`PAGER` variable or set the `BAT_PAGER` environment variable to override what is specified in
|
||||||
`PAGER`.
|
`PAGER`.
|
||||||
|
|
||||||
**Note**: If `PAGER` is `more` or `most`, `bat` will silently use `less` instead to ensure support for colors.
|
>[!NOTE]
|
||||||
|
> If `PAGER` is `more` or `most`, `bat` will silently use `less` instead to ensure support for colors.
|
||||||
|
|
||||||
If you want to pass command-line arguments to the pager, you can also set them via the
|
If you want to pass command-line arguments to the pager, you can also set them via the
|
||||||
`PAGER`/`BAT_PAGER` variables:
|
`PAGER`/`BAT_PAGER` variables:
|
||||||
|
@ -528,20 +622,37 @@ export BAT_PAGER="less -RF"
|
||||||
|
|
||||||
Instead of using environment variables, you can also use `bat`s [configuration file](https://github.com/sharkdp/bat#configuration-file) to configure the pager (`--pager` option).
|
Instead of using environment variables, you can also use `bat`s [configuration file](https://github.com/sharkdp/bat#configuration-file) to configure the pager (`--pager` option).
|
||||||
|
|
||||||
**Note**: By default, if the pager is set to `less` (and no command-line options are specified),
|
|
||||||
`bat` will pass the following command line options to the pager: `-R`/`--RAW-CONTROL-CHARS`,
|
|
||||||
`-F`/`--quit-if-one-screen` and `-X`/`--no-init`. The last option (`-X`) is only used for `less`
|
|
||||||
versions older than 530.
|
|
||||||
|
|
||||||
The `-R` option is needed to interpret ANSI colors correctly. The second option (`-F`) instructs
|
### Using `less` as a pager
|
||||||
less to exit immediately if the output size is smaller than the vertical size of the terminal.
|
|
||||||
This is convenient for small files because you do not have to press `q` to quit the pager. The
|
|
||||||
third option (`-X`) is needed to fix a bug with the `--quit-if-one-screen` feature in old versions
|
|
||||||
of `less`. Unfortunately, it also breaks mouse-wheel support in `less`.
|
|
||||||
|
|
||||||
If you want to enable mouse-wheel scrolling on older versions of `less`, you can pass just `-R` (as
|
When using `less` as a pager, `bat` will automatically pass extra options along to `less`
|
||||||
in the example above, this will disable the quit-if-one-screen feature). For less 530 or newer,
|
to improve the experience. Specifically, `-R`/`--RAW-CONTROL-CHARS`, `-F`/`--quit-if-one-screen`,
|
||||||
it should work out of the box.
|
and under certain conditions, `-X`/`--no-init` and/or `-S`/`--chop-long-lines`.
|
||||||
|
|
||||||
|
>[!IMPORTANT]
|
||||||
|
> These options will not be added if:
|
||||||
|
> - The pager is not named `less`.
|
||||||
|
> - The `--pager` argument contains any command-line arguments (e.g. `--pager="less -R"`).
|
||||||
|
> - The `BAT_PAGER` environment variable contains any command-line arguments (e.g. `export BAT_PAGER="less -R"`)
|
||||||
|
>
|
||||||
|
> The `--quit-if-one-screen` option will not be added when:
|
||||||
|
> - The `--paging=always` argument is used.
|
||||||
|
> - The `BAT_PAGING` environment is set to `always`.
|
||||||
|
|
||||||
|
The `-R` option is needed to interpret ANSI colors correctly.
|
||||||
|
|
||||||
|
The `-F` option instructs `less` to exit immediately if the output size is smaller than
|
||||||
|
the vertical size of the terminal. This is convenient for small files because you do not
|
||||||
|
have to press `q` to quit the pager.
|
||||||
|
|
||||||
|
The `-X` option is needed to fix a bug with the `--quit-if-one-screen` feature in versions
|
||||||
|
of `less` older than version 530. Unfortunately, it also breaks mouse-wheel support in `less`.
|
||||||
|
If you want to enable mouse-wheel scrolling on older versions of `less` and do not mind losing
|
||||||
|
the quit-if-one-screen feature, you can set the pager (via `--pager` or `BAT_PAGER`) to `less -R`.
|
||||||
|
For `less` 530 or newer, it should work out of the box.
|
||||||
|
|
||||||
|
The `-S` option is added when `bat`'s `-S`/`--chop-long-lines` option is used. This tells `less`
|
||||||
|
to truncate any lines larger than the terminal width.
|
||||||
|
|
||||||
### Indentation
|
### Indentation
|
||||||
|
|
||||||
|
@ -568,7 +679,7 @@ alias cat="bat --theme=\$(defaults read -globalDomain AppleInterfaceStyle &> /de
|
||||||
|
|
||||||
`bat` can also be customized with a configuration file. The location of the file is dependent
|
`bat` can also be customized with a configuration file. The location of the file is dependent
|
||||||
on your operating system. To get the default path for your system, call
|
on your operating system. To get the default path for your system, call
|
||||||
```
|
```bash
|
||||||
bat --config-file
|
bat --config-file
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -583,6 +694,10 @@ A default configuration file can be created with the `--generate-config-file` op
|
||||||
bat --generate-config-file
|
bat --generate-config-file
|
||||||
```
|
```
|
||||||
|
|
||||||
|
There is also now a systemwide configuration file, which is located under `/etc/bat/config` on
|
||||||
|
Linux and Mac OS and `C:\ProgramData\bat\config` on windows. If the system wide configuration
|
||||||
|
file is present, the content of the user configuration will simply be appended to it.
|
||||||
|
|
||||||
### Format
|
### Format
|
||||||
|
|
||||||
The configuration file is a simple list of command line arguments. Use `bat --help` to see a full list of possible options and values. In addition, you can add comments by prepending a line with the `#` character.
|
The configuration file is a simple list of command line arguments. Use `bat --help` to see a full list of possible options and values. In addition, you can add comments by prepending a line with the `#` character.
|
||||||
|
@ -598,7 +713,7 @@ Example configuration file:
|
||||||
# Use italic text on the terminal (not supported on all terminals)
|
# Use italic text on the terminal (not supported on all terminals)
|
||||||
--italic-text=always
|
--italic-text=always
|
||||||
|
|
||||||
# Use C++ syntax for .ino files
|
# Use C++ syntax for Arduino .ino files
|
||||||
--map-syntax "*.ino:C++"
|
--map-syntax "*.ino:C++"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -624,9 +739,7 @@ Windows 10 natively supports colors in both `conhost.exe` (Command Prompt) and P
|
||||||
well as in newer versions of bash. On earlier versions of Windows, you can use
|
well as in newer versions of bash. On earlier versions of Windows, you can use
|
||||||
[Cmder](http://cmder.net/), which includes [ConEmu](https://conemu.github.io/).
|
[Cmder](http://cmder.net/), which includes [ConEmu](https://conemu.github.io/).
|
||||||
|
|
||||||
**Note:** The Git and MSYS versions of `less` do not correctly interpret colors on Windows. If you
|
**Note:** Old versions of `less` do not correctly interpret colors on Windows. To fix this, you can add the optional Unix tools to your PATH when installing Git. If you don’t have any other pagers installed, you can disable paging entirely by passing `--paging=never` or by setting `BAT_PAGER` to an empty string.
|
||||||
don’t have any other pagers installed, you can disable paging entirely by passing `--paging=never`
|
|
||||||
or by setting `BAT_PAGER` to an empty string.
|
|
||||||
|
|
||||||
### Cygwin
|
### Cygwin
|
||||||
|
|
||||||
|
@ -650,6 +763,18 @@ bat() {
|
||||||
|
|
||||||
## Troubleshooting
|
## Troubleshooting
|
||||||
|
|
||||||
|
### Garbled output
|
||||||
|
|
||||||
|
If an input file contains color codes or other ANSI escape sequences or control characters, `bat` will have problems
|
||||||
|
performing syntax highlighting and text wrapping, and thus the output can become garbled.
|
||||||
|
|
||||||
|
If your version of `bat` supports the `--strip-ansi=auto` option, it can be used to remove such sequences
|
||||||
|
before syntax highlighting. Alternatively, you may disable both syntax highlighting and wrapping by
|
||||||
|
passing the `--color=never --wrap=never` options to `bat`.
|
||||||
|
|
||||||
|
> [!NOTE]
|
||||||
|
> The `auto` option of `--strip-ansi` avoids removing escape sequences when the syntax is plain text.
|
||||||
|
|
||||||
### Terminals & colors
|
### Terminals & colors
|
||||||
|
|
||||||
`bat` handles terminals *with* and *without* truecolor support. However, the colors in most syntax
|
`bat` handles terminals *with* and *without* truecolor support. However, the colors in most syntax
|
||||||
|
@ -734,7 +859,7 @@ There are a lot of alternatives, if you are looking for similar programs. See
|
||||||
[this document](doc/alternatives.md) for a comparison.
|
[this document](doc/alternatives.md) for a comparison.
|
||||||
|
|
||||||
## License
|
## License
|
||||||
Copyright (c) 2018-2021 [bat-developers](https://github.com/sharkdp/bat).
|
Copyright (c) 2018-2023 [bat-developers](https://github.com/sharkdp/bat).
|
||||||
|
|
||||||
`bat` is made available under the terms of either the MIT License or the Apache License 2.0, at your option.
|
`bat` is made available under the terms of either the MIT License or the Apache License 2.0, at your option.
|
||||||
|
|
||||||
|
|
Binary file not shown.
|
@ -0,0 +1,95 @@
|
||||||
|
|
||||||
|
using namespace System.Management.Automation
|
||||||
|
using namespace System.Management.Automation.Language
|
||||||
|
|
||||||
|
Register-ArgumentCompleter -Native -CommandName '{{PROJECT_EXECUTABLE}}' -ScriptBlock {
|
||||||
|
param($wordToComplete, $commandAst, $cursorPosition)
|
||||||
|
|
||||||
|
$commandElements = $commandAst.CommandElements
|
||||||
|
$command = @(
|
||||||
|
'{{PROJECT_EXECUTABLE}}'
|
||||||
|
for ($i = 1; $i -lt $commandElements.Count; $i++) {
|
||||||
|
$element = $commandElements[$i]
|
||||||
|
if ($element -isnot [StringConstantExpressionAst] -or
|
||||||
|
$element.StringConstantType -ne [StringConstantType]::BareWord -or
|
||||||
|
$element.Value.StartsWith('-')) {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
$element.Value
|
||||||
|
}) -join ';'
|
||||||
|
|
||||||
|
$completions = @(switch ($command) {
|
||||||
|
'{{PROJECT_EXECUTABLE}}' {
|
||||||
|
[CompletionResult]::new('-l', 'l', [CompletionResultType]::ParameterName, 'Set the language for syntax highlighting.')
|
||||||
|
[CompletionResult]::new('--language', 'language', [CompletionResultType]::ParameterName, 'Set the language for syntax highlighting.')
|
||||||
|
[CompletionResult]::new('-H', 'H', [CompletionResultType]::ParameterName, 'Highlight lines N through M.')
|
||||||
|
[CompletionResult]::new('--highlight-line', 'highlight-line', [CompletionResultType]::ParameterName, 'Highlight lines N through M.')
|
||||||
|
[CompletionResult]::new('--file-name', 'file-name', [CompletionResultType]::ParameterName, 'Specify the name to display for a file.')
|
||||||
|
[CompletionResult]::new('--diff-context', 'diff-context', [CompletionResultType]::ParameterName, 'diff-context')
|
||||||
|
[CompletionResult]::new('--tabs', 'tabs', [CompletionResultType]::ParameterName, 'Set the tab width to T spaces.')
|
||||||
|
[CompletionResult]::new('--wrap', 'wrap', [CompletionResultType]::ParameterName, 'Specify the text-wrapping mode (*auto*, never, character).')
|
||||||
|
[CompletionResult]::new('--terminal-width', 'terminal-width', [CompletionResultType]::ParameterName, 'Explicitly set the width of the terminal instead of determining it automatically. If prefixed with ''+'' or ''-'', the value will be treated as an offset to the actual terminal width. See also: ''--wrap''.')
|
||||||
|
[CompletionResult]::new('--color', 'color', [CompletionResultType]::ParameterName, 'When to use colors (*auto*, never, always).')
|
||||||
|
[CompletionResult]::new('--italic-text', 'italic-text', [CompletionResultType]::ParameterName, 'Use italics in output (always, *never*)')
|
||||||
|
[CompletionResult]::new('--decorations', 'decorations', [CompletionResultType]::ParameterName, 'When to show the decorations (*auto*, never, always).')
|
||||||
|
[CompletionResult]::new('--paging', 'paging', [CompletionResultType]::ParameterName, 'Specify when to use the pager, or use `-P` to disable (*auto*, never, always).')
|
||||||
|
[CompletionResult]::new('--pager', 'pager', [CompletionResultType]::ParameterName, 'Determine which pager to use.')
|
||||||
|
[CompletionResult]::new('-m', 'm', [CompletionResultType]::ParameterName, 'Use the specified syntax for files matching the glob pattern (''*.cpp:C++'').')
|
||||||
|
[CompletionResult]::new('--map-syntax', 'map-syntax', [CompletionResultType]::ParameterName, 'Use the specified syntax for files matching the glob pattern (''*.cpp:C++'').')
|
||||||
|
[CompletionResult]::new('--theme', 'theme', [CompletionResultType]::ParameterName, 'Set the color theme for syntax highlighting.')
|
||||||
|
[CompletionResult]::new('--style', 'style', [CompletionResultType]::ParameterName, 'Comma-separated list of style elements to display (*default*, auto, full, plain, changes, header, header-filename, header-filesize, grid, rule, numbers, snip).')
|
||||||
|
[CompletionResult]::new('-r', 'r', [CompletionResultType]::ParameterName, 'Only print the lines from N to M.')
|
||||||
|
[CompletionResult]::new('--line-range', 'line-range', [CompletionResultType]::ParameterName, 'Only print the lines from N to M.')
|
||||||
|
[CompletionResult]::new('-A', 'A', [CompletionResultType]::ParameterName, 'Show non-printable characters (space, tab, newline, ..).')
|
||||||
|
[CompletionResult]::new('--show-all', 'show-all', [CompletionResultType]::ParameterName, 'Show non-printable characters (space, tab, newline, ..).')
|
||||||
|
[CompletionResult]::new('-p', 'p', [CompletionResultType]::ParameterName, 'Show plain style (alias for ''--style=plain'').')
|
||||||
|
[CompletionResult]::new('--plain', 'plain', [CompletionResultType]::ParameterName, 'Show plain style (alias for ''--style=plain'').')
|
||||||
|
[CompletionResult]::new('-d', 'd', [CompletionResultType]::ParameterName, 'Only show lines that have been added/removed/modified.')
|
||||||
|
[CompletionResult]::new('--diff', 'diff', [CompletionResultType]::ParameterName, 'Only show lines that have been added/removed/modified.')
|
||||||
|
[CompletionResult]::new('-n', 'n', [CompletionResultType]::ParameterName, 'Show line numbers (alias for ''--style=numbers'').')
|
||||||
|
[CompletionResult]::new('--number', 'number', [CompletionResultType]::ParameterName, 'Show line numbers (alias for ''--style=numbers'').')
|
||||||
|
[CompletionResult]::new('-f', 'f', [CompletionResultType]::ParameterName, 'f')
|
||||||
|
[CompletionResult]::new('--force-colorization', 'force-colorization', [CompletionResultType]::ParameterName, 'force-colorization')
|
||||||
|
[CompletionResult]::new('-P', 'P', [CompletionResultType]::ParameterName, 'Alias for ''--paging=never''')
|
||||||
|
[CompletionResult]::new('--no-paging', 'no-paging', [CompletionResultType]::ParameterName, 'Alias for ''--paging=never''')
|
||||||
|
[CompletionResult]::new('--list-themes', 'list-themes', [CompletionResultType]::ParameterName, 'Display all supported highlighting themes.')
|
||||||
|
[CompletionResult]::new('-L', 'L', [CompletionResultType]::ParameterName, 'Display all supported languages.')
|
||||||
|
[CompletionResult]::new('--list-languages', 'list-languages', [CompletionResultType]::ParameterName, 'Display all supported languages.')
|
||||||
|
[CompletionResult]::new('-u', 'u', [CompletionResultType]::ParameterName, 'u')
|
||||||
|
[CompletionResult]::new('--unbuffered', 'unbuffered', [CompletionResultType]::ParameterName, 'unbuffered')
|
||||||
|
[CompletionResult]::new('--no-config', 'no-config', [CompletionResultType]::ParameterName, 'Do not use the configuration file')
|
||||||
|
[CompletionResult]::new('--no-custom-assets', 'no-custom-assets', [CompletionResultType]::ParameterName, 'Do not load custom assets')
|
||||||
|
[CompletionResult]::new('--lessopen', 'lessopen', [CompletionResultType]::ParameterName, 'Enable the $LESSOPEN preprocessor')
|
||||||
|
[CompletionResult]::new('--no-lessopen', 'no-lessopen', [CompletionResultType]::ParameterName, 'Disable the $LESSOPEN preprocessor if enabled (overrides --lessopen)')
|
||||||
|
[CompletionResult]::new('--config-file', 'config-file', [CompletionResultType]::ParameterName, 'Show path to the configuration file.')
|
||||||
|
[CompletionResult]::new('--generate-config-file', 'generate-config-file', [CompletionResultType]::ParameterName, 'Generates a default configuration file.')
|
||||||
|
[CompletionResult]::new('--config-dir', 'config-dir', [CompletionResultType]::ParameterName, 'Show bat''s configuration directory.')
|
||||||
|
[CompletionResult]::new('--cache-dir', 'cache-dir', [CompletionResultType]::ParameterName, 'Show bat''s cache directory.')
|
||||||
|
[CompletionResult]::new('--diagnostic', 'diagnostic', [CompletionResultType]::ParameterName, 'Show diagnostic information for bug reports.')
|
||||||
|
[CompletionResult]::new('-h', 'h', [CompletionResultType]::ParameterName, 'Print this help message.')
|
||||||
|
[CompletionResult]::new('--help', 'help', [CompletionResultType]::ParameterName, 'Print this help message.')
|
||||||
|
[CompletionResult]::new('-V', 'V', [CompletionResultType]::ParameterName, 'Show version information.')
|
||||||
|
[CompletionResult]::new('--version', 'version', [CompletionResultType]::ParameterName, 'Show version information.')
|
||||||
|
## Completion of the 'cache' command itself is removed for better UX
|
||||||
|
## See https://github.com/sharkdp/bat/issues/2085#issuecomment-1271646802
|
||||||
|
break
|
||||||
|
}
|
||||||
|
'{{PROJECT_EXECUTABLE}};cache' {
|
||||||
|
[CompletionResult]::new('--source', 'source', [CompletionResultType]::ParameterName, 'Use a different directory to load syntaxes and themes from.')
|
||||||
|
[CompletionResult]::new('--target', 'target', [CompletionResultType]::ParameterName, 'Use a different directory to store the cached syntax and theme set.')
|
||||||
|
[CompletionResult]::new('-b', 'b', [CompletionResultType]::ParameterName, 'Initialize (or update) the syntax/theme cache.')
|
||||||
|
[CompletionResult]::new('--build', 'build', [CompletionResultType]::ParameterName, 'Initialize (or update) the syntax/theme cache.')
|
||||||
|
[CompletionResult]::new('-c', 'c', [CompletionResultType]::ParameterName, 'Remove the cached syntax definitions and themes.')
|
||||||
|
[CompletionResult]::new('--clear', 'clear', [CompletionResultType]::ParameterName, 'Remove the cached syntax definitions and themes.')
|
||||||
|
[CompletionResult]::new('--blank', 'blank', [CompletionResultType]::ParameterName, 'Create completely new syntax and theme sets (instead of appending to the default sets).')
|
||||||
|
[CompletionResult]::new('-h', 'h', [CompletionResultType]::ParameterName, 'Prints help information')
|
||||||
|
[CompletionResult]::new('--help', 'help', [CompletionResultType]::ParameterName, 'Prints help information')
|
||||||
|
[CompletionResult]::new('-V', 'V', [CompletionResultType]::ParameterName, 'Prints version information')
|
||||||
|
[CompletionResult]::new('--version', 'version', [CompletionResultType]::ParameterName, 'Prints version information')
|
||||||
|
break
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
$completions.Where{ $_.CompletionText -like "$wordToComplete*" } |
|
||||||
|
Sort-Object -Property ListItemText
|
||||||
|
}
|
|
@ -2,9 +2,43 @@
|
||||||
|
|
||||||
# Requires https://github.com/scop/bash-completion
|
# Requires https://github.com/scop/bash-completion
|
||||||
|
|
||||||
|
# Macs have bash3 for which the bash-completion package doesn't include
|
||||||
|
# _init_completion. This is a minimal version of that function.
|
||||||
|
__bat_init_completion()
|
||||||
|
{
|
||||||
|
COMPREPLY=()
|
||||||
|
_get_comp_words_by_ref "$@" cur prev words cword
|
||||||
|
}
|
||||||
|
|
||||||
|
__bat_escape_completions()
|
||||||
|
{
|
||||||
|
# Do not escape if completing a quoted value.
|
||||||
|
[[ $cur == [\"\']* ]] && return 0
|
||||||
|
# printf -v to an array index is available in bash >= 4.1.
|
||||||
|
# Use it if available, as -o filenames is semantically incorrect if
|
||||||
|
# we are not actually completing filenames, and it has side effects
|
||||||
|
# (e.g. adds trailing slash to candidates matching present dirs).
|
||||||
|
if ((
|
||||||
|
BASH_VERSINFO[0] > 4 || \
|
||||||
|
BASH_VERSINFO[0] == 4 && BASH_VERSINFO[1] > 0
|
||||||
|
)); then
|
||||||
|
local i
|
||||||
|
for i in ${!COMPREPLY[*]}; do
|
||||||
|
printf -v "COMPREPLY[i]" %q "${COMPREPLY[i]}"
|
||||||
|
done
|
||||||
|
else
|
||||||
|
compopt -o filenames
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
_bat() {
|
_bat() {
|
||||||
local cur prev words cword split
|
local cur prev words split=false
|
||||||
|
if declare -F _init_completion >/dev/null 2>&1; then
|
||||||
_init_completion -s || return 0
|
_init_completion -s || return 0
|
||||||
|
else
|
||||||
|
__bat_init_completion -n "=" || return 0
|
||||||
|
_split_longopt && split=true
|
||||||
|
fi
|
||||||
|
|
||||||
if [[ ${words[1]-} == cache ]]; then
|
if [[ ${words[1]-} == cache ]]; then
|
||||||
case $prev in
|
case $prev in
|
||||||
|
@ -14,7 +48,12 @@ _bat() {
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
COMPREPLY=($(compgen -W "
|
COMPREPLY=($(compgen -W "
|
||||||
--build --clear --source --target --blank --help
|
--build
|
||||||
|
--clear
|
||||||
|
--source
|
||||||
|
--target
|
||||||
|
--blank
|
||||||
|
--help
|
||||||
" -- "$cur"))
|
" -- "$cur"))
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
|
@ -27,13 +66,27 @@ _bat() {
|
||||||
printf "%s\n" "$lang"
|
printf "%s\n" "$lang"
|
||||||
done
|
done
|
||||||
)" -- "$cur"))
|
)" -- "$cur"))
|
||||||
compopt -o filenames # for escaping
|
__bat_escape_completions
|
||||||
return 0
|
return 0
|
||||||
;;
|
;;
|
||||||
-H | --highlight-line | --diff-context | --tabs | --terminal-width | \
|
-H | --highlight-line | \
|
||||||
-m | --map-syntax | --style | --line-range | -h | --help | -V | \
|
--diff-context | \
|
||||||
--version | --diagnostic | --config-file | --config-dir | \
|
--tabs | \
|
||||||
--cache-dir | --generate-config-file)
|
--terminal-width | \
|
||||||
|
-m | --map-syntax | \
|
||||||
|
--ignored-suffix | \
|
||||||
|
--list-themes | \
|
||||||
|
--line-range | \
|
||||||
|
-L | --list-languages | \
|
||||||
|
--lessopen | \
|
||||||
|
--diagnostic | \
|
||||||
|
--acknowledgements | \
|
||||||
|
-h | --help | \
|
||||||
|
-V | --version | \
|
||||||
|
--cache-dir | \
|
||||||
|
--config-dir | \
|
||||||
|
--config-file | \
|
||||||
|
--generate-config-file)
|
||||||
# argument required but no completion available, or option
|
# argument required but no completion available, or option
|
||||||
# causes an exit
|
# causes an exit
|
||||||
return 0
|
return 0
|
||||||
|
@ -61,28 +114,79 @@ _bat() {
|
||||||
--theme)
|
--theme)
|
||||||
local IFS=$'\n'
|
local IFS=$'\n'
|
||||||
COMPREPLY=($(compgen -W "$("$1" --list-themes)" -- "$cur"))
|
COMPREPLY=($(compgen -W "$("$1" --list-themes)" -- "$cur"))
|
||||||
compopt -o filenames # for escaping
|
__bat_escape_completions
|
||||||
return 0
|
return 0
|
||||||
;;
|
;;
|
||||||
|
--style)
|
||||||
|
# shellcheck disable=SC2034
|
||||||
|
local -a styles=(
|
||||||
|
default
|
||||||
|
full
|
||||||
|
auto
|
||||||
|
plain
|
||||||
|
changes
|
||||||
|
header
|
||||||
|
header-filename
|
||||||
|
header-filesize
|
||||||
|
grid
|
||||||
|
rule
|
||||||
|
numbers
|
||||||
|
snip
|
||||||
|
)
|
||||||
|
# shellcheck disable=SC2016
|
||||||
|
if declare -F _comp_delimited >/dev/null 2>&1; then
|
||||||
|
# bash-completion > 2.11
|
||||||
|
_comp_delimited , -W '"${styles[@]}"'
|
||||||
|
else
|
||||||
|
COMPREPLY=($(compgen -W '${styles[@]}' -- "$cur"))
|
||||||
|
fi
|
||||||
|
return 0
|
||||||
esac
|
esac
|
||||||
|
|
||||||
$split && return 0
|
$split && return 0
|
||||||
|
|
||||||
if [[ $cur == -* ]]; then
|
if [[ $cur == -* ]]; then
|
||||||
|
# --unbuffered excluded intentionally (no-op)
|
||||||
COMPREPLY=($(compgen -W "
|
COMPREPLY=($(compgen -W "
|
||||||
--show-all --plain --language --highlight-line
|
--show-all
|
||||||
--file-name --diff --diff-context --tabs --wrap
|
--plain
|
||||||
--terminal-width --number --color --italic-text
|
--language
|
||||||
--decorations --paging --pager --map-syntax --theme
|
--highlight-line
|
||||||
--list-themes --style --line-range --list-languages
|
--file-name
|
||||||
--help --version --force-colorization --unbuffered
|
--diff
|
||||||
--diagnostic --config-file --config-dir --cache-dir
|
--diff-context
|
||||||
|
--tabs
|
||||||
|
--wrap
|
||||||
|
--terminal-width
|
||||||
|
--number
|
||||||
|
--color
|
||||||
|
--italic-text
|
||||||
|
--decorations
|
||||||
|
--force-colorization
|
||||||
|
--paging
|
||||||
|
--pager
|
||||||
|
--map-syntax
|
||||||
|
--ignored-suffix
|
||||||
|
--theme
|
||||||
|
--list-themes
|
||||||
|
--style
|
||||||
|
--line-range
|
||||||
|
--list-languages
|
||||||
|
--lessopen
|
||||||
|
--diagnostic
|
||||||
|
--acknowledgements
|
||||||
|
--help
|
||||||
|
--version
|
||||||
|
--cache-dir
|
||||||
|
--config-dir
|
||||||
|
--config-file
|
||||||
--generate-config-file
|
--generate-config-file
|
||||||
" -- "$cur"))
|
" -- "$cur"))
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
_filedir
|
_filedir
|
||||||
((cword == 1)) && COMPREPLY+=($(compgen -W cache -- "$cur"))
|
|
||||||
|
|
||||||
|
## Completion of the 'cache' command itself is removed for better UX
|
||||||
|
## See https://github.com/sharkdp/bat/issues/2085#issuecomment-1271646802
|
||||||
} && complete -F _bat {{PROJECT_EXECUTABLE}}
|
} && complete -F _bat {{PROJECT_EXECUTABLE}}
|
||||||
|
|
|
@ -1,78 +1,230 @@
|
||||||
# Fish Shell Completions
|
# Fish Shell Completions
|
||||||
# Place or symlink to $XDG_CONFIG_HOME/fish/completions/{{PROJECT_EXECUTABLE}}.fish ($XDG_CONFIG_HOME is usually set to ~/.config)
|
# Copy or symlink to $XDG_CONFIG_HOME/fish/completions/{{PROJECT_EXECUTABLE}}.fish
|
||||||
|
# ($XDG_CONFIG_HOME is usually set to ~/.config)
|
||||||
|
|
||||||
# Helper function:
|
# `bat` is `batcat` on Debian and Ubuntu
|
||||||
function __{{PROJECT_EXECUTABLE}}_autocomplete_languages --description "A helper function used by "(status filename)
|
set bat {{PROJECT_EXECUTABLE}}
|
||||||
{{PROJECT_EXECUTABLE}} --list-languages | awk -F':' '
|
|
||||||
{
|
|
||||||
lang=$1
|
|
||||||
split($2, exts, ",")
|
|
||||||
|
|
||||||
for (i in exts) {
|
# Helper functions:
|
||||||
ext=exts[i]
|
|
||||||
if (ext !~ /[A-Z].*/ && ext !~ /^\..*rc$/) {
|
function __bat_complete_files -a token
|
||||||
print ext"\t"lang
|
# Cheat to complete files by calling `complete -C` on a fake command name,
|
||||||
}
|
# like `__fish_complete_directories` does.
|
||||||
}
|
set -l fake_command aaabccccdeeeeefffffffffgghhhhhhiiiii
|
||||||
}
|
complete -C"$fake_command $token"
|
||||||
' | sort
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function __bat_complete_one_language -a comp
|
||||||
|
command $bat --list-languages | string split -f1 : | string match -e "$comp"
|
||||||
|
end
|
||||||
|
|
||||||
|
function __bat_complete_list_languages
|
||||||
|
for spec in (command $bat --list-languages)
|
||||||
|
set -l name (string split -f1 : $spec)
|
||||||
|
for ext in (string split -f2 : $spec | string split ,)
|
||||||
|
test -n "$ext"; or continue
|
||||||
|
string match -rq '[/*]' $ext; and continue
|
||||||
|
printf "%s\t%s\n" $ext $name
|
||||||
|
end
|
||||||
|
printf "%s\t\n" $name
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function __bat_complete_map_syntax
|
||||||
|
set -l token (commandline -ct)
|
||||||
|
|
||||||
|
if string match -qr '(?<glob>.+):(?<syntax>.*)' -- $token
|
||||||
|
# If token ends with a colon, complete with the list of language names.
|
||||||
|
set -f comps $glob:(__bat_complete_one_language $syntax)
|
||||||
|
else if string match -qr '\*' -- $token
|
||||||
|
# If token contains a globbing character (`*`), complete only possible
|
||||||
|
# globs in the current directory
|
||||||
|
set -f comps (__bat_complete_files $token | string match -er '[*]'):
|
||||||
|
else
|
||||||
|
# Complete files (and globs).
|
||||||
|
set -f comps (__bat_complete_files $token | string match -erv '/$'):
|
||||||
|
end
|
||||||
|
|
||||||
|
if set -q comps[1]
|
||||||
|
printf "%s\t\n" $comps
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function __bat_cache_subcommand
|
||||||
|
__fish_seen_subcommand_from cache
|
||||||
|
end
|
||||||
|
|
||||||
|
# Returns true if no exclusive arguments seen.
|
||||||
|
function __bat_no_excl_args
|
||||||
|
not __bat_cache_subcommand; and not __fish_seen_argument \
|
||||||
|
-s h -l help \
|
||||||
|
-s V -l version \
|
||||||
|
-l acknowledgements \
|
||||||
|
-l config-dir -l config-file \
|
||||||
|
-l diagnostic \
|
||||||
|
-l list-languages -l list-themes
|
||||||
|
end
|
||||||
|
|
||||||
|
# Returns true if the 'cache' subcommand is seen without any exclusive arguments.
|
||||||
|
function __bat_cache_no_excl
|
||||||
|
__bat_cache_subcommand; and not __fish_seen_argument \
|
||||||
|
-s h -l help \
|
||||||
|
-l acknowledgements -l build -l clear
|
||||||
|
end
|
||||||
|
|
||||||
|
function __bat_style_opts
|
||||||
|
set -l style_opts \
|
||||||
|
"default,recommended components" \
|
||||||
|
"auto,same as 'default' unless piped" \
|
||||||
|
"full,all components" \
|
||||||
|
"plain,no components" \
|
||||||
|
"changes,Git change markers" \
|
||||||
|
"header,alias for header-filename" \
|
||||||
|
"header-filename,filename above content" \
|
||||||
|
"header-filesize,filesize above content" \
|
||||||
|
"grid,lines b/w sidebar/header/content" \
|
||||||
|
"numbers,line numbers in sidebar" \
|
||||||
|
"rule,separate files" \
|
||||||
|
"snip,separate ranges"
|
||||||
|
|
||||||
|
string replace , \t $style_opts
|
||||||
|
end
|
||||||
|
|
||||||
|
# Use option argument descriptions to indicate which is the default, saving
|
||||||
|
# horizontal space and making sure the option description isn't truncated.
|
||||||
|
set -l color_opts '
|
||||||
|
auto\tdefault
|
||||||
|
never\t
|
||||||
|
always\t
|
||||||
|
'
|
||||||
|
set -l decorations_opts $color_opts
|
||||||
|
set -l paging_opts $color_opts
|
||||||
|
|
||||||
|
# Include some examples so we can indicate the default.
|
||||||
|
set -l pager_opts '
|
||||||
|
less\tdefault
|
||||||
|
less\ -FR\t
|
||||||
|
more\t
|
||||||
|
vimpager\t
|
||||||
|
'
|
||||||
|
|
||||||
|
set -l italic_text_opts '
|
||||||
|
always\t
|
||||||
|
never\tdefault
|
||||||
|
'
|
||||||
|
|
||||||
|
set -l wrap_opts '
|
||||||
|
auto\tdefault
|
||||||
|
never\t
|
||||||
|
character\t
|
||||||
|
'
|
||||||
|
|
||||||
|
# While --tabs theoretically takes any number, most people should be OK with these.
|
||||||
|
# Specifying a list lets us explain what 0 does.
|
||||||
|
set -l tabs_opts '
|
||||||
|
0\tpass\ tabs\ through\ directly
|
||||||
|
1\t
|
||||||
|
2\t
|
||||||
|
4\t
|
||||||
|
8\t
|
||||||
|
'
|
||||||
|
|
||||||
# Completions:
|
# Completions:
|
||||||
|
|
||||||
complete -c {{PROJECT_EXECUTABLE}} -l color -xka "auto never always" -d "Specify when to use colored output (default: auto)" -n "not __fish_seen_subcommand_from cache"
|
complete -c $bat -l acknowledgements -d "Print acknowledgements" -n __fish_is_first_arg
|
||||||
|
|
||||||
complete -c {{PROJECT_EXECUTABLE}} -l config-dir -d "Display location of '{{PROJECT_EXECUTABLE}}' configuration directory" -n "not __fish_seen_subcommand_from cache"
|
complete -c $bat -l color -x -a "$color_opts" -d "When to use colored output" -n __bat_no_excl_args
|
||||||
|
|
||||||
complete -c {{PROJECT_EXECUTABLE}} -l config-file -d "Display location of '{{PROJECT_EXECUTABLE}}' configuration file" -n "not __fish_seen_subcommand_from cache"
|
complete -c $bat -l config-dir -f -d "Display location of configuration directory" -n __fish_is_first_arg
|
||||||
|
|
||||||
complete -c {{PROJECT_EXECUTABLE}} -l decorations -xka "auto never always" -d "Specify when to use the decorations specified with '--style' (default: auto)" -n "not __fish_seen_subcommand_from cache"
|
complete -c $bat -l config-file -f -d "Display location of configuration file" -n __fish_is_first_arg
|
||||||
|
|
||||||
complete -c {{PROJECT_EXECUTABLE}} -s h -l help -d "Print help message" -n "not __fish_seen_subcommand_from cache"
|
complete -c $bat -l decorations -x -a "$decorations_opts" -d "When to use --style decorations" -n __bat_no_excl_args
|
||||||
|
|
||||||
complete -c {{PROJECT_EXECUTABLE}} -s H -l highlight-line -x -d "<N> Highlight the N-th line with a different background color" -n "not __fish_seen_subcommand_from cache"
|
complete -c $bat -l diagnostic -d "Print diagnostic info for bug reports" -n __fish_is_first_arg
|
||||||
|
|
||||||
complete -c {{PROJECT_EXECUTABLE}} -l italic-text -xka "always never" -d "Specify when to use ANSI sequences for italic text (default: never)" -n "not __fish_seen_subcommand_from cache"
|
complete -c $bat -s d -l diff -d "Only show lines with Git changes" -n __bat_no_excl_args
|
||||||
|
|
||||||
complete -c {{PROJECT_EXECUTABLE}} -s l -l language -d "Set the language for syntax highlighting" -n "not __fish_seen_subcommand_from cache" -xa "(__{{PROJECT_EXECUTABLE}}_autocomplete_languages)"
|
complete -c $bat -l diff-context -x -d "Show N context lines around Git changes" -n "__fish_seen_argument -s d -l diff"
|
||||||
|
|
||||||
complete -c {{PROJECT_EXECUTABLE}} -s r -l line-range -x -d "<N:M> Only print the specified range of lines for each file" -n "not __fish_seen_subcommand_from cache"
|
complete -c $bat -l generate-config-file -f -d "Generates a default configuration file" -n __fish_is_first_arg
|
||||||
|
|
||||||
complete -c {{PROJECT_EXECUTABLE}} -l list-languages -d "Display list of supported languages for syntax highlighting" -n "not __fish_seen_subcommand_from cache"
|
complete -c $bat -l file-name -x -d "Specify the display name" -n __bat_no_excl_args
|
||||||
|
|
||||||
complete -c {{PROJECT_EXECUTABLE}} -l list-themes -d "Display a list of supported themes for syntax highlighting" -n "not __fish_seen_subcommand_from cache"
|
complete -c $bat -s f -l force-colorization -d "Force color and decorations" -n __bat_no_excl_args
|
||||||
|
|
||||||
complete -c {{PROJECT_EXECUTABLE}} -s m -l map-syntax -x -d "<from:to> Map a file extension or file name to an existing syntax" -n "not __fish_seen_subcommand_from cache"
|
complete -c $bat -s h -d "Print a concise overview" -n __fish_is_first_arg
|
||||||
|
|
||||||
complete -c {{PROJECT_EXECUTABLE}} -s n -l number -d "Only show line numbers, no other decorations. Alias for '--style=numbers'" -n "not __fish_seen_subcommand_from cache"
|
complete -c $bat -l help -f -d "Print all help information" -n __fish_is_first_arg
|
||||||
|
|
||||||
complete -c {{PROJECT_EXECUTABLE}} -l pager -x -d "<command> Specify which pager program to use (default: less)" -n "not __fish_seen_subcommand_from cache"
|
complete -c $bat -s H -l highlight-line -x -d "Highlight line(s) N[:M]" -n __bat_no_excl_args
|
||||||
|
|
||||||
complete -c {{PROJECT_EXECUTABLE}} -l paging -xka "auto never always" -d "Specify when to use the pager (default: auto)" -n "not __fish_seen_subcommand_from cache"
|
complete -c $bat -l ignored-suffix -x -d "Ignore extension" -n __bat_no_excl_args
|
||||||
|
|
||||||
complete -c {{PROJECT_EXECUTABLE}} -s p -l plain -d "Only show plain style, no decorations. Alias for '--style=plain'" -n "not __fish_seen_subcommand_from cache"
|
complete -c $bat -l italic-text -x -a "$italic_text_opts" -d "When to use italic text in the output" -n __bat_no_excl_args
|
||||||
|
|
||||||
complete -c {{PROJECT_EXECUTABLE}} -s P -d "Disable paging. Alias for '--paging=never'" -n "not __fish_seen_subcommand_from cache"
|
complete -c $bat -s l -l language -x -k -a "(__bat_complete_list_languages)" -d "Set the syntax highlighting language" -n __bat_no_excl_args
|
||||||
|
|
||||||
complete -c {{PROJECT_EXECUTABLE}} -s A -l show-all -d "Show non-printable characters like space/tab/newline" -n "not __fish_seen_subcommand_from cache"
|
complete -c $bat -l lessopen -d "Enable the $LESSOPEN preprocessor" -n __fish_is_first_arg
|
||||||
|
|
||||||
complete -c {{PROJECT_EXECUTABLE}} -l style -xka "auto full plain changes header grid numbers" -d "Comma-separated list of style elements or presets to display with file contents" -n "not __fish_seen_subcommand_from cache"
|
complete -c $bat -s r -l line-range -x -d "Only print lines [M]:[N] (either optional)" -n __bat_no_excl_args
|
||||||
|
|
||||||
complete -c {{PROJECT_EXECUTABLE}} -l tabs -x -d "<T> Set the tab width to T spaces (width of 0 passes tabs through directly)" -n "not __fish_seen_subcommand_from cache"
|
complete -c $bat -l list-languages -f -d "List syntax highlighting languages" -n __fish_is_first_arg
|
||||||
|
|
||||||
complete -c {{PROJECT_EXECUTABLE}} -l terminal-width -x -d "<width> Explicitly set terminal width; Prefix with '+' or '-' to offset (default width is auto determined)" -n "not __fish_seen_subcommand_from cache"
|
complete -c $bat -l list-themes -f -d "List syntax highlighting themes" -n __fish_is_first_arg
|
||||||
|
|
||||||
complete -c {{PROJECT_EXECUTABLE}} -l theme -xka "({{PROJECT_EXECUTABLE}} --list-themes | cat)" -d "Set the theme for syntax highlighting" -n "not __fish_seen_subcommand_from cache"
|
complete -c $bat -s m -l map-syntax -x -a "(__bat_complete_map_syntax)" -d "Map <glob pattern>:<language syntax>" -n __bat_no_excl_args
|
||||||
|
|
||||||
complete -c {{PROJECT_EXECUTABLE}} -s u -l unbuffered -d "POSIX-compliant unbuffered output. Option is ignored" -n "not __fish_seen_subcommand_from cache"
|
complete -c $bat -l no-config -d "Do not use the configuration file"
|
||||||
|
|
||||||
complete -c {{PROJECT_EXECUTABLE}} -s V -l version -d "Show version information" -n "not __fish_seen_subcommand_from cache"
|
complete -c $bat -l no-custom-assets -d "Do not load custom assets"
|
||||||
|
|
||||||
complete -c {{PROJECT_EXECUTABLE}} -l wrap -xka "auto never character" -d "<mode> Specify the text-wrapping mode (default: auto)" -n "not __fish_seen_subcommand_from cache"
|
complete -c $bat -l no-lessopen -d "Disable the $LESSOPEN preprocessor if enabled (overrides --lessopen)"
|
||||||
|
|
||||||
|
complete -c $bat -s n -l number -d "Only show line numbers, no other decorations" -n __bat_no_excl_args
|
||||||
|
|
||||||
|
complete -c $bat -l pager -x -a "$pager_opts" -d "Which pager to use" -n __bat_no_excl_args
|
||||||
|
|
||||||
|
complete -c $bat -l paging -x -a "$paging_opts" -d "When to use the pager" -n __bat_no_excl_args
|
||||||
|
|
||||||
|
complete -c $bat -s p -l plain -d "Disable decorations" -n __bat_no_excl_args
|
||||||
|
|
||||||
|
complete -c $bat -o pp -d "Disable decorations and paging" -n __bat_no_excl_args
|
||||||
|
|
||||||
|
complete -c $bat -s P -d "Disable paging" -n __bat_no_excl_args
|
||||||
|
|
||||||
|
complete -c $bat -s A -l show-all -d "Show non-printable characters" -n __bat_no_excl_args
|
||||||
|
|
||||||
|
complete -c $bat -l style -x -k -a "(__fish_complete_list , __bat_style_opts)" -d "Specify which non-content elements to display" -n __bat_no_excl_args
|
||||||
|
|
||||||
|
complete -c $bat -l tabs -x -a "$tabs_opts" -d "Set tab width" -n __bat_no_excl_args
|
||||||
|
|
||||||
|
complete -c $bat -l terminal-width -x -d "Set terminal <width>, +<offset>, or -<offset>" -n __bat_no_excl_args
|
||||||
|
|
||||||
|
complete -c $bat -l theme -x -a "(command $bat --list-themes | command cat)" -d "Set the syntax highlighting theme" -n __bat_no_excl_args
|
||||||
|
|
||||||
|
complete -c $bat -s V -l version -f -d "Show version information" -n __fish_is_first_arg
|
||||||
|
|
||||||
|
complete -c $bat -l wrap -x -a "$wrap_opts" -d "Text-wrapping mode" -n __bat_no_excl_args
|
||||||
|
|
||||||
# Sub-command 'cache' completions
|
# Sub-command 'cache' completions
|
||||||
complete -c {{PROJECT_EXECUTABLE}} -a "cache" -d "Modify the syntax/language definition cache" -n "not __fish_seen_subcommand_from cache"
|
## Completion of the 'cache' command itself is removed for better UX
|
||||||
|
## See https://github.com/sharkdp/bat/issues/2085#issuecomment-1271646802
|
||||||
|
|
||||||
complete -c {{PROJECT_EXECUTABLE}} -l build -f -d "Parse syntaxes/language definitions into cache" -n "__fish_seen_subcommand_from cache"
|
complete -c $bat -l build -f -d "Parse new definitions into cache" -n __bat_cache_no_excl
|
||||||
|
|
||||||
complete -c {{PROJECT_EXECUTABLE}} -l clear -f -d "Reset syntaxes/language definitions to default settings" -n "__fish_seen_subcommand_from cache"
|
complete -c $bat -l clear -f -d "Reset definitions to defaults" -n __bat_cache_no_excl
|
||||||
|
|
||||||
|
complete -c $bat -l blank -f -d "Create new data instead of appending" -n "__bat_cache_subcommand; and not __fish_seen_argument -l clear"
|
||||||
|
|
||||||
|
complete -c $bat -l source -x -a "(__fish_complete_directories)" -d "Load syntaxes and themes from DIR" -n "__bat_cache_subcommand; and not __fish_seen_argument -l clear"
|
||||||
|
|
||||||
|
complete -c $bat -l target -x -a "(__fish_complete_directories)" -d "Store cache in DIR" -n __bat_cache_subcommand
|
||||||
|
|
||||||
|
complete -c $bat -l acknowledgements -d "Build acknowledgements.bin" -n __bat_cache_no_excl
|
||||||
|
|
||||||
|
complete -c $bat -s h -d "Print a concise overview of $bat-cache help" -n __bat_cache_no_excl
|
||||||
|
|
||||||
|
complete -c $bat -l help -f -d "Print all $bat-cache help" -n __bat_cache_no_excl
|
||||||
|
|
||||||
|
# vim:ft=fish
|
||||||
|
|
|
@ -1,19 +1,20 @@
|
||||||
#compdef {{PROJECT_EXECUTABLE}}
|
#compdef {{PROJECT_EXECUTABLE}}
|
||||||
|
|
||||||
local context state state_descr line
|
local curcontext="$curcontext" ret=1
|
||||||
|
local -a state state_descr line
|
||||||
typeset -A opt_args
|
typeset -A opt_args
|
||||||
|
|
||||||
(( $+functions[_{{PROJECT_EXECUTABLE}}_cache_subcommand] )) ||
|
(( $+functions[_{{PROJECT_EXECUTABLE}}_cache_subcommand] )) ||
|
||||||
_{{PROJECT_EXECUTABLE}}_cache_subcommand() {
|
_{{PROJECT_EXECUTABLE}}_cache_subcommand() {
|
||||||
local -a args
|
local -a args
|
||||||
args=(
|
args=(
|
||||||
'(-b --build -c --clear)'{-b,--build}'[Initialize or update the syntax/theme cache]'
|
'(-b --build -c --clear)'{-b,--build}'[initialize or update the syntax/theme cache]'
|
||||||
'(-b --build -c --clear)'{-c,--clear}'[Remove the cached syntax definitions and themes]'
|
'(-b --build -c --clear)'{-c,--clear}'[remove the cached syntax definitions and themes]'
|
||||||
'(--source)'--source='[Use a different directory to load syntaxes and themes from]:directory:_files -/'
|
--source='[specify directory to load syntaxes and themes from]:directory:_files -/'
|
||||||
'(--target)'--target='[Use a different directory to store the cached syntax and theme set]:directory:_files -/'
|
--target='[specify directory to store the cached syntax and theme set in]:directory:_files -/'
|
||||||
'(--blank)'--blank'[Create completely new syntax and theme sets]'
|
--blank'[create completely new syntax and theme sets]'
|
||||||
'(: -)'{-h,--help}'[Prints help information]'
|
--acknowledgements'[build acknowledgements.bin]'
|
||||||
'*: :'
|
'(: -)'{-h,--help}'[show help information]'
|
||||||
)
|
)
|
||||||
|
|
||||||
_arguments -S -s $args
|
_arguments -S -s $args
|
||||||
|
@ -23,71 +24,79 @@ _{{PROJECT_EXECUTABLE}}_cache_subcommand() {
|
||||||
_{{PROJECT_EXECUTABLE}}_main() {
|
_{{PROJECT_EXECUTABLE}}_main() {
|
||||||
local -a args
|
local -a args
|
||||||
args=(
|
args=(
|
||||||
'(-A --show-all)'{-A,--show-all}'[Show non-printable characters (space, tab, newline, ..)]'
|
'(-A --show-all)'{-A,--show-all}'[show non-printable characters (space, tab, newline, ..)]'
|
||||||
'*'{-p,--plain}'[Show plain style (alias for `--style=plain`), repeat twice to disable disable automatic paging (alias for `--paging=never`)]'
|
--nonprintable-notation='[specify how to display non-printable characters when using --show-all]:notation:(caret unicode)'
|
||||||
'(-l --language)'{-l+,--language=}'[Set the language for syntax highlighting]:<language>:->language'
|
\*{-p,--plain}'[show plain style (alias for `--style=plain`), repeat twice to disable disable automatic paging (alias for `--paging=never`)]'
|
||||||
'(-H --highlight-line)'{-H,--highlight-line}'[Highlight lines N through M]:<N\:M>...'
|
'(-l --language)'{-l+,--language=}'[set the language for syntax highlighting]:language:->languages'
|
||||||
'(--file-name)'--file-name'[Specify the name to display for a file]:<name>...:_files'
|
\*{-H+,--highlight-line=}'[highlight specified block of lines]:start\:end'
|
||||||
'(-d --diff)'--diff'[Only show lines that have been added/removed/modified]'
|
\*--file-name='[specify the name to display for a file]:name:_files'
|
||||||
'(--diff-context)'--diff-context'[Include N lines of context around added/removed/modified lines when using `--diff`]:<N> (lines):()'
|
'(-d --diff)'--diff'[only show lines that have been added/removed/modified]'
|
||||||
'(--tabs)'--tabs'[Set the tab width to T spaces]:<T> (tab width):()'
|
--diff-context='[specify lines of context around added/removed/modified lines when using `--diff`]:lines'
|
||||||
'(--wrap)'--wrap='[Specify the text-wrapping mode]:<when>:(auto never character)'
|
--tabs='[set the tab width]:tab width [4]'
|
||||||
'(--terminal-width)'--terminal-width'[Explicitly set the width of the terminal instead of determining it automatically]:<width>'
|
--wrap='[specify the text-wrapping mode]:mode [auto]:(auto never character)'
|
||||||
'(-n --number)'{-n,--number}'[Show line numbers]'
|
'!(--wrap)'{-S,--chop-long-lines}
|
||||||
'(--color)'--color='[When to use colors]:<when>:(auto never always)'
|
--terminal-width='[explicitly set the width of the terminal instead of determining it automatically]:width'
|
||||||
'(--italic-text)'--italic-text='[Use italics in output]:<when>:(always never)'
|
'(-n --number --diff --diff-context)'{-n,--number}'[show line numbers]'
|
||||||
'(--decorations)'--decorations='[When to show the decorations]:<when>:(auto never always)'
|
--color='[specify when to use colors]:when:(auto never always)'
|
||||||
'(--paging)'--paging='[Specify when to use the pager]:<when>:(auto never always)'
|
--italic-text='[use italics in output]:when:(always never)'
|
||||||
'(-m --map-syntax)'{-m+,--map-syntax=}'[Use the specified syntax for files matching the glob pattern]:<glob\:syntax>...'
|
--decorations='[specify when to show the decorations]:when:(auto never always)'
|
||||||
'(--theme)'--theme='[Set the color theme for syntax highlighting]:<theme>:->theme'
|
--paging='[specify when to use the pager]:when:(auto never always)'
|
||||||
'(: --list-themes --list-languages -L)'--list-themes'[Display all supported highlighting themes]'
|
'(-m --map-syntax)'{-m+,--map-syntax=}'[map a glob pattern to an existing syntax name]: :->syntax-maps'
|
||||||
'(--style)'--style='[Comma-separated list of style elements to display]:<components>:->style'
|
'(--theme)'--theme='[set the color theme for syntax highlighting]:theme:->themes'
|
||||||
'(-r --line-range)'{-r+,--line-range=}'[Only print the lines from N to M]:<N\:M>...'
|
'(: --list-themes --list-languages -L)'--list-themes'[show all supported highlighting themes]'
|
||||||
'(: --list-themes --list-languages -L)'{-L,--list-languages}'[Display all supported languages]'
|
--style='[comma-separated list of style elements to display]: : _values "style [default]"
|
||||||
'(: --no-config)'--no-config'[Do not use the configuration file]'
|
default auto full plain changes header header-filename header-filesize grid rule numbers snip'
|
||||||
'(: --config-dir)'--config-dir'[Show bat'"'"'s configuration directory]'
|
\*{-r+,--line-range=}'[only print the specified line range]:start\:end'
|
||||||
'(: --config-file)'--config-file'[Show path to the configuration file]'
|
'(* -)'{-L,--list-languages}'[display all supported languages]'
|
||||||
'(: --generate-config-file)'--generate-config-file'[Generates a default configuration file]'
|
"--no-config[don't use the configuration file]"
|
||||||
'(: --cache-dir)'--cache-dir'[Show bat'"'"'s cache directory]'
|
"--no-custom-assets[don't load custom assets]"
|
||||||
'(: -)'{-h,--help}'[Print this help message]'
|
'(--no-lessopen)'--lessopen'[enable the $LESSOPEN preprocessor]'
|
||||||
'(: -)'{-V,--version}'[Show version information]'
|
'(--lessopen)'--no-lessopen'[disable the $LESSOPEN preprocessor if enabled (overrides --lessopen)]'
|
||||||
'*: :_files'
|
'(* -)'--config-dir"[show bat's configuration directory]"
|
||||||
|
'(* -)'--config-file'[show path to the configuration file]'
|
||||||
|
'(* -)'--generate-config-file'[generate a default configuration file]'
|
||||||
|
'(* -)'--cache-dir"[show bat's cache directory]"
|
||||||
|
'(* -)'{-h,--help}'[show help information]'
|
||||||
|
'(* -)'{-V,--version}'[show version information]'
|
||||||
|
'*: :{ _files || compadd cache }'
|
||||||
)
|
)
|
||||||
|
|
||||||
_arguments -S -s $args
|
_arguments -S -s $args && ret=0
|
||||||
|
|
||||||
case "$state" in
|
case "$state" in
|
||||||
language)
|
syntax-maps)
|
||||||
|
if ! compset -P '*:'; then
|
||||||
|
_message -e patterns 'glob pattern:language'
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
;& # fall-through
|
||||||
|
|
||||||
|
languages)
|
||||||
local IFS=$'\n'
|
local IFS=$'\n'
|
||||||
local -a languages
|
local -a languages
|
||||||
languages=( $({{PROJECT_EXECUTABLE}} --list-languages | awk -F':|,' '{ for (i = 1; i <= NF; ++i) printf("%s:%s\n", $i, $1) }') )
|
languages=( $({{PROJECT_EXECUTABLE}} --list-languages | awk -F':|,' '{ for (i = 1; i <= NF; ++i) printf("%s:%s\n", $i, $1) }') )
|
||||||
|
|
||||||
_describe 'language' languages
|
_describe 'language' languages && ret=0
|
||||||
;;
|
;;
|
||||||
|
|
||||||
theme)
|
themes)
|
||||||
local IFS=$'\n'
|
local -a themes expl
|
||||||
local -a themes
|
themes=( ${(f)"$(_call_program themes {{PROJECT_EXECUTABLE}} --list-themes)"} )
|
||||||
themes=( $({{PROJECT_EXECUTABLE}} --list-themes | sort) )
|
|
||||||
|
|
||||||
_values 'theme' $themes
|
_wanted themes expl 'theme' compadd -a themes && ret=0
|
||||||
;;
|
|
||||||
|
|
||||||
style)
|
|
||||||
_values -s , 'style' auto full plain changes header grid numbers snip
|
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
return ret
|
||||||
}
|
}
|
||||||
|
|
||||||
# first positional argument
|
|
||||||
if (( ${#words} == 2 )); then
|
|
||||||
local -a subcommands
|
|
||||||
subcommands=('cache:Modify the syntax-definition and theme cache')
|
|
||||||
_describe subcommand subcommands
|
|
||||||
_{{PROJECT_EXECUTABLE}}_main
|
|
||||||
else
|
|
||||||
case $words[2] in
|
case $words[2] in
|
||||||
cache)
|
cache)
|
||||||
|
## Completion of the 'cache' command itself is removed for better UX
|
||||||
|
## See https://github.com/sharkdp/bat/issues/2085#issuecomment-1271646802
|
||||||
|
shift words
|
||||||
|
(( CURRENT-- ))
|
||||||
|
curcontext="${curcontext%:*}-${words[1]}:"
|
||||||
_{{PROJECT_EXECUTABLE}}_cache_subcommand
|
_{{PROJECT_EXECUTABLE}}_cache_subcommand
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
@ -95,4 +104,3 @@ else
|
||||||
_{{PROJECT_EXECUTABLE}}_main
|
_{{PROJECT_EXECUTABLE}}_main
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
fi
|
|
||||||
|
|
|
@ -5,7 +5,7 @@ ASSET_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||||
REPO_DIR="$ASSET_DIR/.."
|
REPO_DIR="$ASSET_DIR/.."
|
||||||
|
|
||||||
# Ensure submodules are initialized.
|
# Ensure submodules are initialized.
|
||||||
function update_submodules() {
|
update_submodules() {
|
||||||
local submodule
|
local submodule
|
||||||
local submodule_prompt=unspecified
|
local submodule_prompt=unspecified
|
||||||
local submodule_path
|
local submodule_path
|
||||||
|
@ -46,6 +46,7 @@ bat cache --clear
|
||||||
# - Remove the JavaDoc patch once https://github.com/trishume/syntect/issues/222 has been fixed
|
# - Remove the JavaDoc patch once https://github.com/trishume/syntect/issues/222 has been fixed
|
||||||
# - Remove the C# patch once https://github.com/sublimehq/Packages/pull/2331 has been merged
|
# - Remove the C# patch once https://github.com/sublimehq/Packages/pull/2331 has been merged
|
||||||
|
|
||||||
|
# Apply patches
|
||||||
(
|
(
|
||||||
cd "$ASSET_DIR"
|
cd "$ASSET_DIR"
|
||||||
for patch in patches/*.patch; do
|
for patch in patches/*.patch; do
|
||||||
|
@ -53,11 +54,16 @@ bat cache --clear
|
||||||
done
|
done
|
||||||
)
|
)
|
||||||
|
|
||||||
bat cache --build --blank --source="$ASSET_DIR" --target="$ASSET_DIR"
|
reverse_patches() {
|
||||||
|
|
||||||
(
|
(
|
||||||
cd "$ASSET_DIR"
|
cd "$ASSET_DIR"
|
||||||
for patch in patches/*.patch; do
|
for patch in patches/*.patch; do
|
||||||
patch --strip=0 --reverse <"$patch"
|
patch --strip=0 --reverse <"$patch"
|
||||||
done
|
done
|
||||||
)
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
# Make sure to always reverse patches, even if the `bat cache` command fails or aborts
|
||||||
|
trap reverse_patches EXIT
|
||||||
|
|
||||||
|
bat cache --build --blank --acknowledgements --source="$ASSET_DIR" --target="$ASSET_DIR"
|
||||||
|
|
|
@ -25,11 +25,23 @@ either '--language value', '--language=value', '-l value' or '-lvalue'.
|
||||||
Show non\-printable characters like space, tab or newline. Use '\-\-tabs' to
|
Show non\-printable characters like space, tab or newline. Use '\-\-tabs' to
|
||||||
control the width of the tab\-placeholders.
|
control the width of the tab\-placeholders.
|
||||||
.HP
|
.HP
|
||||||
|
\fB\-\-nonprintable\-notation\fR <notation>
|
||||||
|
.IP
|
||||||
|
Specify how to display non-printable characters when using \-\-show\-all.
|
||||||
|
|
||||||
|
Possible values:
|
||||||
|
.RS
|
||||||
|
.IP "caret"
|
||||||
|
Use character sequences like ^G, ^J, ^@, .. to identify non-printable characters
|
||||||
|
.IP "unicode"
|
||||||
|
Use special Unicode code points to identify non-printable characters
|
||||||
|
.RE
|
||||||
|
.HP
|
||||||
\fB\-p\fR, \fB\-\-plain\fR
|
\fB\-p\fR, \fB\-\-plain\fR
|
||||||
.IP
|
.IP
|
||||||
Only show plain style, no decorations. This is an alias for
|
Only show plain style, no decorations. This is an alias for
|
||||||
\&'\-\-style=plain'. When '\-p' is used twice ('\-pp'), it also disables
|
\&'\-\-style=plain'. When '\-p' is used twice ('\-pp'), it also disables
|
||||||
automatic paging (alias for '\-\-style=plain \fB\-\-pager\fR=\fI\,never\/\fR').
|
automatic paging (alias for '\-\-style=plain \fB\-\-paging\fR=\fI\,never\/\fR').
|
||||||
.HP
|
.HP
|
||||||
\fB\-l\fR, \fB\-\-language\fR <language>
|
\fB\-l\fR, \fB\-\-language\fR <language>
|
||||||
.IP
|
.IP
|
||||||
|
@ -50,6 +62,8 @@ highlights lines 30 to 40
|
||||||
highlights lines 1 to 40
|
highlights lines 1 to 40
|
||||||
.IP "\-\-highlight\-line 40:"
|
.IP "\-\-highlight\-line 40:"
|
||||||
highlights lines 40 to the end of the file
|
highlights lines 40 to the end of the file
|
||||||
|
.IP "\-\-highlight\-line 30:+10"
|
||||||
|
highlights lines 30 to 40
|
||||||
.RE
|
.RE
|
||||||
.HP
|
.HP
|
||||||
\fB\-\-file\-name\fR <name>...
|
\fB\-\-file\-name\fR <name>...
|
||||||
|
@ -116,6 +130,8 @@ which pager is used, see the '\-\-pager' option. Possible values: *auto*, never,
|
||||||
Determine which pager is used. This option will override the PAGER and BAT_PAGER
|
Determine which pager is used. This option will override the PAGER and BAT_PAGER
|
||||||
environment variables. The default pager is 'less'. To control when the pager is used, see
|
environment variables. The default pager is 'less'. To control when the pager is used, see
|
||||||
the '\-\-paging' option. Example: '\-\-pager "less \fB\-RF\fR"'.
|
the '\-\-paging' option. Example: '\-\-pager "less \fB\-RF\fR"'.
|
||||||
|
|
||||||
|
Note: By default, if the pager is set to 'less' (and no command-line options are specified), 'bat' will pass the following command line options to the pager: '-R'/'--RAW-CONTROL-CHARS', '-F'/'--quit-if-one-screen' and '-X'/'--no-init'. The last option ('-X') is only used for 'less' versions older than 530. The '-R' option is needed to interpret ANSI colors correctly. The second option ('-F') instructs less to exit immediately if the output size is smaller than the vertical size of the terminal. This is convenient for small files because you do not have to press 'q' to quit the pager. The third option ('-X') is needed to fix a bug with the '--quit-if-one-screen' feature in old versions of 'less'. Unfortunately, it also breaks mouse-wheel support in 'less'. If you want to enable mouse-wheel scrolling on older versions of 'less', you can pass just '-R' (as in the example above, this will disable the quit-if-one-screen feature). For less 530 or newer, it should work out of the box.
|
||||||
.HP
|
.HP
|
||||||
\fB\-m\fR, \fB\-\-map\-syntax\fR <glob-pattern:syntax-name>...
|
\fB\-m\fR, \fB\-\-map\-syntax\fR <glob-pattern:syntax-name>...
|
||||||
.IP
|
.IP
|
||||||
|
@ -142,7 +158,8 @@ Configure which elements (line numbers, file headers, grid borders, Git modifica
|
||||||
of components to display (e.g. 'numbers,changes,grid') or a pre\-defined style ('full').
|
of components to display (e.g. 'numbers,changes,grid') or a pre\-defined style ('full').
|
||||||
To set a default style, add the '\-\-style=".."' option to the configuration file or
|
To set a default style, add the '\-\-style=".."' option to the configuration file or
|
||||||
export the BAT_STYLE environment variable (e.g.: export BAT_STYLE=".."). Possible
|
export the BAT_STYLE environment variable (e.g.: export BAT_STYLE=".."). Possible
|
||||||
values: *auto*, full, plain, changes, header, grid, rule, numbers, snip.
|
values: *default*, full, auto, plain, changes, header, header-filename, header-filesize, grid,
|
||||||
|
rule, numbers, snip.
|
||||||
.HP
|
.HP
|
||||||
\fB\-r\fR, \fB\-\-line\-range\fR <N:M>...
|
\fB\-r\fR, \fB\-\-line\-range\fR <N:M>...
|
||||||
.IP
|
.IP
|
||||||
|
@ -154,6 +171,8 @@ prints lines 30 to 40
|
||||||
prints lines 1 to 40
|
prints lines 1 to 40
|
||||||
.IP "\-\-line\-range 40:"
|
.IP "\-\-line\-range 40:"
|
||||||
prints lines 40 to the end of the file
|
prints lines 40 to the end of the file
|
||||||
|
.IP "\-\-line\-range 30:+10"
|
||||||
|
prints lines 30 to 40
|
||||||
.RE
|
.RE
|
||||||
.HP
|
.HP
|
||||||
\fB\-L\fR, \fB\-\-list\-languages\fR
|
\fB\-L\fR, \fB\-\-list\-languages\fR
|
||||||
|
@ -224,6 +243,23 @@ If you ever want to remove the custom languages, you can clear the cache with `\
|
||||||
Similarly to custom languages, {{PROJECT_EXECUTABLE}} supports Sublime Text \fB.tmTheme\fR themes.
|
Similarly to custom languages, {{PROJECT_EXECUTABLE}} supports Sublime Text \fB.tmTheme\fR themes.
|
||||||
These can be installed to `\fB$({{PROJECT_EXECUTABLE}} --config-dir)/themes\fR`, and are added to the cache with
|
These can be installed to `\fB$({{PROJECT_EXECUTABLE}} --config-dir)/themes\fR`, and are added to the cache with
|
||||||
`\fB{{PROJECT_EXECUTABLE}} cache --build`.
|
`\fB{{PROJECT_EXECUTABLE}} cache --build`.
|
||||||
|
|
||||||
|
.SH "INPUT PREPROCESSOR"
|
||||||
|
Much like less(1) does, {{PROJECT_EXECUTABLE}} supports input preprocessors via the LESSOPEN and LESSCLOSE environment variables.
|
||||||
|
In addition, {{PROJECT_EXECUTABLE}} attempts to be as compatible with less's preprocessor implementation as possible.
|
||||||
|
|
||||||
|
To use the preprocessor, call:
|
||||||
|
|
||||||
|
\fB{{PROJECT_EXECUTABLE}} --lessopen\fR
|
||||||
|
|
||||||
|
Alternatively, the preprocessor may be enabled by default by adding the '\-\-lessopen' option to the configuration file.
|
||||||
|
|
||||||
|
To temporarily disable the preprocessor if it is enabled by default, call:
|
||||||
|
|
||||||
|
\fB{{PROJECT_EXECUTABLE}} --no-lessopen\fR
|
||||||
|
|
||||||
|
For more information, see the "INPUT PREPROCESSOR" section of less(1).
|
||||||
|
|
||||||
.SH "MORE INFORMATION"
|
.SH "MORE INFORMATION"
|
||||||
|
|
||||||
For more information and up-to-date documentation, visit the {{PROJECT_EXECUTABLE}} repo:
|
For more information and up-to-date documentation, visit the {{PROJECT_EXECUTABLE}} repo:
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
diff --git syntaxes/02_Extra/Groff/Man Page/Man Page.sublime-syntax syntaxes/02_Extra/Groff/Man Page/Man Page.sublime-syntax
|
||||||
|
index 57834af..6648664 100644
|
||||||
|
--- syntaxes/02_Extra/Groff/Man Page/Man Page.sublime-syntax
|
||||||
|
+++ syntaxes/02_Extra/Groff/Man Page/Man Page.sublime-syntax
|
||||||
|
@@ -4,9 +4,9 @@
|
||||||
|
# - man-pages(7)
|
||||||
|
# - groff(7)
|
||||||
|
---
|
||||||
|
-name: Man Page (groff/troff)
|
||||||
|
+name: Groff/troff
|
||||||
|
scope: text.groff
|
||||||
|
-file_extensions: [man, groff, troff, '1', '2', '3', '4', '5', '6', '7']
|
||||||
|
+file_extensions: [groff, troff, '1', '2', '3', '4', '5', '6', '7', '8', '9']
|
||||||
|
|
||||||
|
contexts:
|
||||||
|
main:
|
|
@ -0,0 +1,14 @@
|
||||||
|
Submodule assets/syntaxes/01_Packages contains modified content
|
||||||
|
diff --git syntaxes/01_Packages/JavaScript/JavaScript.sublime-syntax syntaxes/01_Packages/JavaScript/JavaScript.sublime-syntax
|
||||||
|
index 05a4fed6..78a7bf55 100644
|
||||||
|
--- syntaxes/01_Packages/JavaScript/JavaScript.sublime-syntax
|
||||||
|
+++ syntaxes/01_Packages/JavaScript/JavaScript.sublime-syntax
|
||||||
|
@@ -5,7 +5,7 @@ name: JavaScript
|
||||||
|
file_extensions:
|
||||||
|
- js
|
||||||
|
- htc
|
||||||
|
-first_line_match: ^#!\s*/.*\b(node|js)\b
|
||||||
|
+first_line_match: ^#!\s*/.*\b(node|bun|js)\b
|
||||||
|
scope: source.js
|
||||||
|
variables:
|
||||||
|
bin_digit: '[01_]'
|
File diff suppressed because one or more lines are too long
|
@ -1,5 +1,5 @@
|
||||||
diff --git syntaxes/01_Packages/Markdown/Markdown.sublime-syntax syntaxes/01_Packages/Markdown/Markdown.sublime-syntax
|
diff --git syntaxes/01_Packages/Markdown/Markdown.sublime-syntax syntaxes/01_Packages/Markdown/Markdown.sublime-syntax
|
||||||
index 19dc685d..6afd87ae 100644
|
index 19dc685d..44440c7f 100644
|
||||||
--- syntaxes/01_Packages/Markdown/Markdown.sublime-syntax
|
--- syntaxes/01_Packages/Markdown/Markdown.sublime-syntax
|
||||||
+++ syntaxes/01_Packages/Markdown/Markdown.sublime-syntax
|
+++ syntaxes/01_Packages/Markdown/Markdown.sublime-syntax
|
||||||
@@ -24,7 +24,6 @@ variables:
|
@@ -24,7 +24,6 @@ variables:
|
||||||
|
@ -166,3 +166,12 @@ index 19dc685d..6afd87ae 100644
|
||||||
- match: ^\s*$\n?
|
- match: ^\s*$\n?
|
||||||
scope: invalid.illegal.non-terminated.bold-italic.markdown
|
scope: invalid.illegal.non-terminated.bold-italic.markdown
|
||||||
pop: true
|
pop: true
|
||||||
|
@@ -1152,7 +1110,7 @@ contexts:
|
||||||
|
- match: |-
|
||||||
|
(?x)
|
||||||
|
{{fenced_code_block_start}}
|
||||||
|
- ((?i:rust))
|
||||||
|
+ ((?i:rust|rs))
|
||||||
|
{{fenced_code_block_trailing_infostring_characters}}
|
||||||
|
captures:
|
||||||
|
0: meta.code-fence.definition.begin.rust.markdown-gfm
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
diff --git syntaxes/02_Extra/MediaWiki/MediawikiNG.sublime-syntax syntaxes/02_Extra/MediaWiki/MediawikiNG.sublime-syntax
|
||||||
|
index f542c9e..8eaf020 100644
|
||||||
|
--- syntaxes/02_Extra/MediaWiki/MediawikiNG.sublime-syntax
|
||||||
|
+++ syntaxes/02_Extra/MediaWiki/MediawikiNG.sublime-syntax
|
||||||
|
@@ -1,7 +1,7 @@
|
||||||
|
%YAML 1.2
|
||||||
|
---
|
||||||
|
# http://www.sublimetext.com/docs/3/syntax.html
|
||||||
|
-name: Mediawiki NG
|
||||||
|
+name: MediaWiki
|
||||||
|
file_extensions: [mediawiki, wikipedia, wiki]
|
||||||
|
scope: text.html.mediawiki
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
diff --git syntaxes/01_Packages/Python/Python.sublime-syntax syntaxes/01_Packages/Python/Python.sublime-syntax
|
||||||
|
index 2acd86d8..86257f7b 100644
|
||||||
|
--- syntaxes/01_Packages/Python/Python.sublime-syntax
|
||||||
|
+++ syntaxes/01_Packages/Python/Python.sublime-syntax
|
||||||
|
@@ -988,10 +988,6 @@ contexts:
|
||||||
|
- match: \}
|
||||||
|
scope: punctuation.section.mapping-or-set.end.python
|
||||||
|
set: after-expression
|
||||||
|
- - match: (?={{simple_expression}}:|\s*\*\*)
|
||||||
|
- set: inside-dictionary
|
||||||
|
- - match: (?={{simple_expression}}[,}]|\s*\*)
|
||||||
|
- set: inside-set
|
||||||
|
- match: ','
|
||||||
|
scope: punctuation.separator.set.python
|
||||||
|
set: inside-set
|
|
@ -0,0 +1,13 @@
|
||||||
|
diff --git syntaxes/02_Extra/TodoTxt/TodoTxt.sublime-syntax syntaxes/02_Extra/TodoTxt/TodoTxt.sublime-syntax
|
||||||
|
index 6c75dbb..0115978 100644
|
||||||
|
--- syntaxes/02_Extra/TodoTxt/TodoTxt.sublime-syntax
|
||||||
|
+++ syntaxes/02_Extra/TodoTxt/TodoTxt.sublime-syntax
|
||||||
|
@@ -68,7 +68,7 @@ contexts:
|
||||||
|
|
||||||
|
- match: (\s+[^\s:]+:[^\s:]+)+\s*$
|
||||||
|
comment: Custom attributes
|
||||||
|
- scope: variable.annotation.todotxt.attribute
|
||||||
|
+ scope: variable.other.todotxt.attribute
|
||||||
|
|
||||||
|
comments:
|
||||||
|
# Comments begin with a '//' and finish at the end of the line.
|
|
@ -0,0 +1,20 @@
|
||||||
|
diff --git themes/TwoDark/TwoDark.tmTheme themes/TwoDark/TwoDark.tmTheme
|
||||||
|
index 87fd358..56376d3 100644
|
||||||
|
--- themes/TwoDark/TwoDark.tmTheme
|
||||||
|
+++ themes/TwoDark/TwoDark.tmTheme
|
||||||
|
@@ -533,7 +533,7 @@
|
||||||
|
<key>name</key>
|
||||||
|
<string>Json key</string>
|
||||||
|
<key>scope</key>
|
||||||
|
- <string>source.json meta.structure.dictionary.json string.quoted.double.json</string>
|
||||||
|
+ <string>source.json meta.mapping.key.json string.quoted.double.json</string>
|
||||||
|
<key>settings</key>
|
||||||
|
<dict>
|
||||||
|
<key>foreground</key>
|
||||||
|
@@ -875,4 +875,4 @@
|
||||||
|
<key>comment</key>
|
||||||
|
<string>Work in progress</string>
|
||||||
|
</dict>
|
||||||
|
-</plist>
|
||||||
|
\ No newline at end of file
|
||||||
|
+</plist>
|
Binary file not shown.
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit e2b8fd51756e0cc42172c1c3405832ce9c19b6b6
|
|
@ -1 +1 @@
|
||||||
Subproject commit ab6ef4ef9f9b974806ea0788430a8c087ebe3761
|
Subproject commit eb40ede56c2d4d5a4a129b2a5bc7095a2df46bb1
|
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit 54f1fa7ff0c9d18aea3790555dba6e533ce3749b
|
|
@ -1 +1 @@
|
||||||
Subproject commit d891fb36c98ca0b111a35cba109b05a16b6c4b83
|
Subproject commit 2734901b014191f5a7f71c3f48678adf31239098
|
|
@ -1,6 +1,6 @@
|
||||||
%YAML 1.2
|
%YAML 1.2
|
||||||
---
|
---
|
||||||
# http://www.sublimetext.com/docs/3/syntax.html
|
# http://www.sublimetext.com/docs/syntax.html
|
||||||
name: Dart
|
name: Dart
|
||||||
file_extensions:
|
file_extensions:
|
||||||
- dart
|
- dart
|
||||||
|
@ -9,7 +9,7 @@ contexts:
|
||||||
main:
|
main:
|
||||||
- match: ^(#!.*)$
|
- match: ^(#!.*)$
|
||||||
scope: meta.preprocessor.script.dart
|
scope: meta.preprocessor.script.dart
|
||||||
- match: ^\s*\b(library|import|export|part of|part)\b
|
- match: ^\w*\b(library|import|part of|part|export)\b
|
||||||
captures:
|
captures:
|
||||||
0: keyword.other.import.dart
|
0: keyword.other.import.dart
|
||||||
push:
|
push:
|
||||||
|
@ -19,242 +19,114 @@ contexts:
|
||||||
0: punctuation.terminator.dart
|
0: punctuation.terminator.dart
|
||||||
pop: true
|
pop: true
|
||||||
- include: strings
|
- include: strings
|
||||||
- match: \b(as|show|hide|deferred)\b
|
- include: comments
|
||||||
|
- match: \b(as|show|hide)\b
|
||||||
scope: keyword.other.import.dart
|
scope: keyword.other.import.dart
|
||||||
- include: comments
|
- include: comments
|
||||||
- include: constants-and-special-vars
|
- include: punctuation
|
||||||
- include: annotations
|
- include: annotations
|
||||||
- include: decl-typedef
|
|
||||||
- include: decl-class
|
|
||||||
- include: decl-enum
|
|
||||||
- include: decl-function
|
|
||||||
- include: keywords
|
- include: keywords
|
||||||
|
- include: constants-and-special-vars
|
||||||
- include: strings
|
- include: strings
|
||||||
annotations:
|
annotations:
|
||||||
- match: '^(?:\s*)((@)([a-zA-Z0-9_]+))'
|
- match: '@[a-zA-Z]+'
|
||||||
captures:
|
scope: storage.type.annotation.dart
|
||||||
1: annotation.dart
|
|
||||||
2: entity.name.function.annotation.dart
|
|
||||||
3: support.type.dart
|
|
||||||
comments:
|
comments:
|
||||||
- match: /\*\*/
|
- match: /\*\*/
|
||||||
scope: comment.block.empty.dart
|
scope: comment.block.empty.dart
|
||||||
captures:
|
captures:
|
||||||
0: punctuation.definition.comment.dart
|
0: punctuation.definition.comment.dart
|
||||||
|
- include: comments-doc-oldschool
|
||||||
|
- include: comments-doc
|
||||||
- include: comments-inline
|
- include: comments-inline
|
||||||
comments-inline:
|
comments-block:
|
||||||
- match: /\*
|
- match: /\*
|
||||||
push:
|
push:
|
||||||
- meta_scope: comment.block.dart
|
- meta_scope: comment.block.dart
|
||||||
- match: \*/
|
- match: \*/
|
||||||
pop: true
|
pop: true
|
||||||
- include: scope:text.dart-doccomments
|
- include: comments-block
|
||||||
- match: (///)
|
comments-doc:
|
||||||
captures:
|
- match: ///
|
||||||
1: marker.dart
|
|
||||||
push:
|
push:
|
||||||
- meta_scope: comment.line.triple-slash.dart
|
- meta_scope: comment.block.documentation.dart
|
||||||
- match: $
|
- match: .*
|
||||||
pop: true
|
pop: true
|
||||||
- include: scope:text.dart-doccomments
|
- include: dartdoc
|
||||||
- match: (//)
|
comments-doc-oldschool:
|
||||||
captures:
|
- match: /\*\*
|
||||||
1: marker.dart
|
|
||||||
push:
|
push:
|
||||||
- meta_scope: comment.line.double-slash.dart
|
- meta_scope: comment.block.documentation.dart
|
||||||
- match: $
|
- match: \*/
|
||||||
pop: true
|
pop: true
|
||||||
- include: scope:text.dart-doccomments
|
- include: comments-doc-oldschool
|
||||||
|
- include: comments-block
|
||||||
|
- include: dartdoc
|
||||||
|
comments-inline:
|
||||||
|
- include: comments-block
|
||||||
|
- match: ((//).*)$
|
||||||
|
captures:
|
||||||
|
1: comment.line.double-slash.dart
|
||||||
constants-and-special-vars:
|
constants-and-special-vars:
|
||||||
- match: \b(true|false|null)\b
|
- match: (?<!\$)\b(true|false|null)\b(?!\$)
|
||||||
scope: constant.language.dart
|
scope: constant.language.dart
|
||||||
- match: \b(this|super)\b
|
- match: (?<!\$)\b(this|super)\b(?!\$)
|
||||||
scope: variable.language.dart
|
scope: variable.language.dart
|
||||||
- match: '\b((0(x|X)[0-9a-fA-F]*)|(([0-9]+\.?[0-9]*)|(\.[0-9]+))((e|E)(\+|-)?[0-9]+)?)\b'
|
- match: '(?<!\$)\b((0(x|X)[0-9a-fA-F]*)|(([0-9]+\.?[0-9]*)|(\.[0-9]+))((e|E)(\+|-)?[0-9]+)?)\b(?!\$)'
|
||||||
scope: constant.numeric.dart
|
scope: constant.numeric.dart
|
||||||
decl-class:
|
- match: '(?<![a-zA-Z0-9_$])([_$]*[A-Z][a-zA-Z0-9_$]*|bool\b|num\b|int\b|double\b|dynamic\b)'
|
||||||
- match: \bclass\b
|
scope: support.class.dart
|
||||||
|
- match: '([_$]*[a-z][a-zA-Z0-9_$]*)(<|\(|\s+=>)'
|
||||||
captures:
|
captures:
|
||||||
0: keyword.control.new.dart
|
1: entity.name.function.dart
|
||||||
|
dartdoc:
|
||||||
|
- match: '(\[.*?\])'
|
||||||
|
captures:
|
||||||
|
0: variable.name.source.dart
|
||||||
|
- match: '^ {4,}(?![ \*]).*'
|
||||||
|
captures:
|
||||||
|
0: variable.name.source.dart
|
||||||
|
- match: '```.*?$'
|
||||||
push:
|
push:
|
||||||
- meta_scope: meta.declaration.class.dart
|
- meta_content_scope: variable.other.source.dart
|
||||||
- match: "(?={)"
|
- match: '```'
|
||||||
pop: true
|
pop: true
|
||||||
- include: keywords
|
- match: (`.*?`)
|
||||||
- match: "[A-Za-z_][A-Za-z0-9_]*"
|
|
||||||
scope: class.name.dart
|
|
||||||
decl-enum:
|
|
||||||
- match: \benum\b
|
|
||||||
captures:
|
captures:
|
||||||
0: keyword.declaration.dart
|
0: variable.other.source.dart
|
||||||
push:
|
- match: (`.*?`)
|
||||||
- meta_scope: meta.declaration.enum.dart
|
|
||||||
- match: "(?={)"
|
|
||||||
pop: true
|
|
||||||
- include: keywords
|
|
||||||
- match: "[A-Za-z_][A-Za-z0-9_]*"
|
|
||||||
scope: enum.name.dart
|
|
||||||
decl-function:
|
|
||||||
- match: ^\s*(?:\b(void|bool|num|int|double|dynamic|var|String|List|Map)\b)\s+(get)\s+(\w+)\s+(?==>)
|
|
||||||
comment: A getter with a primitive return type.
|
|
||||||
scope: meta.declaration.function.dart
|
|
||||||
captures:
|
captures:
|
||||||
1: storage.type.primitive.dart
|
0: variable.other.source.dart
|
||||||
2: keyword.declaration.dart
|
- match: (\* (( ).*))$
|
||||||
3: function.name.dart
|
|
||||||
- match: ^\s*(?:\b(\w+)\b\s+)?(get)\s+(\w+)\s+(?==>)
|
|
||||||
comment: A getter with a user-defined return type or no return type.
|
|
||||||
scope: meta.declaration.function.dart
|
|
||||||
captures:
|
captures:
|
||||||
1: type.user-defined.dart
|
2: variable.other.source.dart
|
||||||
2: keyword.declaration.dart
|
- match: (\* .*)$
|
||||||
3: function.name.dart
|
|
||||||
- match: ^\s*(set)\s+(\w+)(?=\()
|
|
||||||
comment: A setter.
|
|
||||||
captures:
|
|
||||||
1: keyword.declaration.dart
|
|
||||||
2: function.name.dart
|
|
||||||
push:
|
|
||||||
- meta_scope: meta.declaration.function.dart
|
|
||||||
- match: \)
|
|
||||||
pop: true
|
|
||||||
- include: comments-inline
|
|
||||||
- include: decl-function-parameter
|
|
||||||
- include: strings
|
|
||||||
- include: keywords
|
|
||||||
- match: ^\s*(?:\b(void|bool|num|int|double|dynamic|var|String|List|Map)\b)\s+(\w+)(?=\()
|
|
||||||
comment: A function with a primitive return type.
|
|
||||||
captures:
|
|
||||||
1: storage.type.primitive.dart
|
|
||||||
2: function.name.dart
|
|
||||||
push:
|
|
||||||
- meta_scope: meta.declaration.function.dart
|
|
||||||
- match: \)
|
|
||||||
pop: true
|
|
||||||
- include: comments-inline
|
|
||||||
- include: decl-function-parameter
|
|
||||||
- include: strings
|
|
||||||
- include: keywords
|
|
||||||
- match: ^\s*(?:\b(return)\b)\s+(\w+)(?=\()
|
|
||||||
comment: A function invocation after 'return'
|
|
||||||
captures:
|
|
||||||
1: keyword.control.dart
|
|
||||||
2: function.name.dart
|
|
||||||
push:
|
|
||||||
- meta_scope: meta.invocation.function.dart
|
|
||||||
- match: \)
|
|
||||||
pop: true
|
|
||||||
- include: comments-inline
|
|
||||||
- include: decl-function-parameter
|
|
||||||
- include: strings
|
|
||||||
- include: keywords
|
|
||||||
- match: ^\s*\b(new)\b\s+(\w+)(?=\()
|
|
||||||
comment: A class instantiation after 'new'
|
|
||||||
captures:
|
|
||||||
1: keyword.declaration.dart
|
|
||||||
2: function.name.dart
|
|
||||||
push:
|
|
||||||
- meta_scope: meta.invocation.function.dart
|
|
||||||
- match: \)
|
|
||||||
pop: true
|
|
||||||
- include: comments-inline
|
|
||||||
- include: decl-function-parameter
|
|
||||||
- include: strings
|
|
||||||
- include: keywords
|
|
||||||
decl-function-parameter:
|
|
||||||
- include: constants-and-special-vars
|
|
||||||
- match: (?:\b(void|bool|num|int|double|dynamic|var|String|List|Map)\b)\s+(\w+)(?=\()
|
|
||||||
comment: A function with a primitive return type.
|
|
||||||
captures:
|
|
||||||
1: storage.type.primitive.dart
|
|
||||||
2: function.name.dart
|
|
||||||
push:
|
|
||||||
- meta_scope: meta.parameter.function.dart
|
|
||||||
- match: \)
|
|
||||||
pop: true
|
|
||||||
- include: decl-function-parameter
|
|
||||||
- include: strings
|
|
||||||
- include: keywords
|
|
||||||
- match: \b(new)\b\s+(\w+)(?=\()
|
|
||||||
comment: A class instantiation after 'new'
|
|
||||||
captures:
|
|
||||||
1: keyword.declaration.dart
|
|
||||||
2: function.name.dart
|
|
||||||
push:
|
|
||||||
- meta_scope: meta.invocation.function.dart
|
|
||||||
- match: \)
|
|
||||||
pop: true
|
|
||||||
- include: decl-function-parameter
|
|
||||||
- include: strings
|
|
||||||
- include: keywords
|
|
||||||
- match: (?:\b(\w+)\b)\s+(\w+)(?=\()
|
|
||||||
comment: A function with a user-defined return type.
|
|
||||||
captures:
|
|
||||||
1: type.user-defined.dart
|
|
||||||
2: function.name.dart
|
|
||||||
push:
|
|
||||||
- meta_scope: meta.parameter.function.dart
|
|
||||||
- match: \)
|
|
||||||
pop: true
|
|
||||||
- include: decl-function-parameter
|
|
||||||
- include: strings
|
|
||||||
- include: keywords
|
|
||||||
- match: (\w+)(?=\()
|
|
||||||
comment: A function with no return type.
|
|
||||||
captures:
|
|
||||||
1: function.name.dart
|
|
||||||
push:
|
|
||||||
- meta_scope: meta.parameter.function.dart
|
|
||||||
- match: \)
|
|
||||||
pop: true
|
|
||||||
- include: decl-function-parameter
|
|
||||||
- include: strings
|
|
||||||
- include: keywords
|
|
||||||
decl-typedef:
|
|
||||||
- match: typedef
|
|
||||||
captures:
|
|
||||||
0: keyword.control.new.dart
|
|
||||||
push:
|
|
||||||
- meta_scope: meta.declaration.typedef.dart
|
|
||||||
- match: ;
|
|
||||||
captures:
|
|
||||||
0: punctuation.terminator.dart
|
|
||||||
pop: true
|
|
||||||
- match: '(?:\b(void|bool|num|int|double|dynamic|var|String|List|Map)\b|([a-zA-Z_][a-zA-Z0-9_]*))\s+([a-zA-Z_][a-zA-Z0-9_]+)'
|
|
||||||
captures:
|
|
||||||
1: storage.type.primitive.dart
|
|
||||||
2: typedef.return.dart
|
|
||||||
3: typedef.name.dart
|
|
||||||
- match: \(
|
|
||||||
push:
|
|
||||||
- meta_scope: typedef.params.dart
|
|
||||||
- match: \)
|
|
||||||
pop: true
|
|
||||||
- include: keywords
|
|
||||||
keywords:
|
keywords:
|
||||||
- match: \bassert\b
|
- match: (?<!\$)\bas\b(?!\$)
|
||||||
scope: keyword.control.assert.dart
|
|
||||||
- match: \bas\b
|
|
||||||
scope: keyword.cast.dart
|
scope: keyword.cast.dart
|
||||||
- match: \b(try|catch|finally|throw|on|rethrow)\b
|
- match: (?<!\$)\b(try|on|catch|finally|throw|rethrow)\b(?!\$)
|
||||||
scope: keyword.control.catch-exception.dart
|
scope: keyword.control.catch-exception.dart
|
||||||
- match: \s+\?\s+|\s+:\s+
|
- match: (?<!\$)\b(break|case|continue|default|do|else|for|if|in|return|switch|while)\b(?!\$)
|
||||||
scope: keyword.control.ternary.dart
|
|
||||||
- match: \b(break|case|continue|default|do|else|for|if|in|return|switch|while)\b
|
|
||||||
scope: keyword.control.dart
|
scope: keyword.control.dart
|
||||||
- match: \b(async\*|async|await\*|await|yield)\b
|
- match: (?<!\$)\b(sync(\*)?|async(\*)?|await|yield(\*)?)\b(?!\$)
|
||||||
scope: keyword.control.async.dart
|
scope: keyword.control.dart
|
||||||
- match: \b(new)\b
|
- match: (?<!\$)\bassert\b(?!\$)
|
||||||
|
scope: keyword.control.dart
|
||||||
|
- match: (?<!\$)\b(new)\b(?!\$)
|
||||||
scope: keyword.control.new.dart
|
scope: keyword.control.new.dart
|
||||||
- match: \b(abstract|extends|external|factory|implements|with|interface|get|native|operator|set|typedef)\b
|
- match: (?<!\$)\b(abstract|class|enum|extends|external|factory|implements|get|mixin|native|operator|set|typedef|with|covariant)\b(?!\$)
|
||||||
scope: keyword.declaration.dart
|
scope: keyword.declaration.dart
|
||||||
- match: \b(is\!?)\b
|
- match: (?<!\$)\b(is\!?)\b(?!\$)
|
||||||
scope: keyword.operator.dart
|
scope: keyword.operator.dart
|
||||||
|
- match: '\?|:'
|
||||||
|
scope: keyword.operator.ternary.dart
|
||||||
- match: (<<|>>>?|~|\^|\||&)
|
- match: (<<|>>>?|~|\^|\||&)
|
||||||
scope: keyword.operator.bitwise.dart
|
scope: keyword.operator.bitwise.dart
|
||||||
- match: ((&|\^|\||<<|>>>?)=)
|
- match: ((&|\^|\||<<|>>>?)=)
|
||||||
scope: keyword.operator.assignment.bitwise.dart
|
scope: keyword.operator.assignment.bitwise.dart
|
||||||
- match: (===?|!==?|<=?|>=?)
|
- match: (=>)
|
||||||
|
scope: keyword.operator.closure.dart
|
||||||
|
- match: (==|!=|<=?|>=?)
|
||||||
scope: keyword.operator.comparison.dart
|
scope: keyword.operator.comparison.dart
|
||||||
- match: '(([+*/%-]|\~)=)'
|
- match: '(([+*/%-]|\~)=)'
|
||||||
scope: keyword.operator.assignment.arithmetic.dart
|
scope: keyword.operator.assignment.arithmetic.dart
|
||||||
|
@ -266,56 +138,22 @@ contexts:
|
||||||
scope: keyword.operator.arithmetic.dart
|
scope: keyword.operator.arithmetic.dart
|
||||||
- match: (!|&&|\|\|)
|
- match: (!|&&|\|\|)
|
||||||
scope: keyword.operator.logical.dart
|
scope: keyword.operator.logical.dart
|
||||||
|
- match: (?<!\$)\b(static|final|const)\b(?!\$)
|
||||||
|
scope: storage.modifier.dart
|
||||||
|
- match: (?<!\$)\b(?:void|var)\b(?!\$)
|
||||||
|
scope: storage.type.primitive.dart
|
||||||
|
punctuation:
|
||||||
|
- match: ','
|
||||||
|
scope: punctuation.comma.dart
|
||||||
- match: ;
|
- match: ;
|
||||||
scope: punctuation.terminator.dart
|
scope: punctuation.terminator.dart
|
||||||
- match: \b(static|final|const)\b
|
|
||||||
scope: storage.modifier.dart
|
|
||||||
- match: \b(?:void|bool|num|int|double|dynamic|var|String|List|Map)\b
|
|
||||||
scope: storage.type.primitive.dart
|
|
||||||
regexp:
|
|
||||||
- match: '\\[^''"]'
|
|
||||||
scope: constant.character.escaped.regex.dart
|
|
||||||
- match: \(
|
|
||||||
push:
|
|
||||||
- meta_content_scope: meta.capture.regex.dart
|
|
||||||
- match: \)
|
|
||||||
pop: true
|
|
||||||
- match: \?(:|=|!)
|
|
||||||
scope: ignore.capture.regex.dart
|
|
||||||
- match: \*|\+|\?|\.|\|
|
|
||||||
scope: keyword.other.regex.dart
|
|
||||||
- match: \^|\$
|
|
||||||
scope: keyword.other.regex.dart
|
|
||||||
- match: \.
|
- match: \.
|
||||||
scope: constant.other.regex.dart
|
scope: punctuation.dot.dart
|
||||||
- match: '\[(\^)?'
|
|
||||||
captures:
|
|
||||||
1: keyword.other.negation.regex.dart
|
|
||||||
push:
|
|
||||||
- meta_scope: constant.character.range.regex.dart
|
|
||||||
- match: '\]'
|
|
||||||
pop: true
|
|
||||||
- match: '\\[^"'']'
|
|
||||||
scope: constant.character.escaped.regex.dart
|
|
||||||
- match: '\{(?:\d+)?,(?:\d+)?\}'
|
|
||||||
scope: keyword.other.regex.dart
|
|
||||||
string-interp:
|
string-interp:
|
||||||
- match: '(\$)(\{)'
|
- match: '\$((\w+)|\{([^{}]+)\})'
|
||||||
captures:
|
captures:
|
||||||
1: keyword.other.dart
|
|
||||||
2: keyword.other.dart
|
|
||||||
push:
|
|
||||||
- meta_scope: interpolation.dart
|
|
||||||
- meta_content_scope: source.dart
|
|
||||||
- match: '(\})'
|
|
||||||
captures:
|
|
||||||
1: keyword.other.dart
|
|
||||||
pop: true
|
|
||||||
- include: main
|
|
||||||
- match: (\$)(\w+)
|
|
||||||
captures:
|
|
||||||
1: keyword.other.dart
|
|
||||||
2: variable.parameter.dart
|
2: variable.parameter.dart
|
||||||
|
3: variable.parameter.dart
|
||||||
- match: \\.
|
- match: \\.
|
||||||
scope: constant.character.escape.dart
|
scope: constant.character.escape.dart
|
||||||
strings:
|
strings:
|
||||||
|
@ -328,7 +166,7 @@ contexts:
|
||||||
- match: (?<!r)'''
|
- match: (?<!r)'''
|
||||||
push:
|
push:
|
||||||
- meta_scope: string.interpolated.triple.single.dart
|
- meta_scope: string.interpolated.triple.single.dart
|
||||||
- match: "'''(?!')"
|
- match: '''''''(?!'')'
|
||||||
pop: true
|
pop: true
|
||||||
- include: string-interp
|
- include: string-interp
|
||||||
- match: r"""
|
- match: r"""
|
||||||
|
@ -339,9 +177,9 @@ contexts:
|
||||||
- match: r'''
|
- match: r'''
|
||||||
push:
|
push:
|
||||||
- meta_scope: string.quoted.triple.single.dart
|
- meta_scope: string.quoted.triple.single.dart
|
||||||
- match: "'''(?!')"
|
- match: '''''''(?!'')'
|
||||||
pop: true
|
pop: true
|
||||||
- match: (?<!\\|r)"
|
- match: (?<!\|r)"
|
||||||
push:
|
push:
|
||||||
- meta_scope: string.interpolated.double.dart
|
- meta_scope: string.interpolated.double.dart
|
||||||
- match: '"'
|
- match: '"'
|
||||||
|
@ -354,16 +192,20 @@ contexts:
|
||||||
- meta_scope: string.quoted.double.dart
|
- meta_scope: string.quoted.double.dart
|
||||||
- match: '"'
|
- match: '"'
|
||||||
pop: true
|
pop: true
|
||||||
- include: regexp
|
- match: \n
|
||||||
|
scope: invalid.string.newline
|
||||||
- match: (?<!\|r)'
|
- match: (?<!\|r)'
|
||||||
push:
|
push:
|
||||||
- meta_scope: string.interpolated.single.dart
|
- meta_scope: string.interpolated.single.dart
|
||||||
- match: "'"
|
- match: "'"
|
||||||
pop: true
|
pop: true
|
||||||
|
- match: \n
|
||||||
|
scope: invalid.string.newline
|
||||||
- include: string-interp
|
- include: string-interp
|
||||||
- match: r'
|
- match: r'
|
||||||
push:
|
push:
|
||||||
- meta_scope: string.quoted.single.dart
|
- meta_scope: string.quoted.single.dart
|
||||||
- match: "'"
|
- match: "'"
|
||||||
pop: true
|
pop: true
|
||||||
- include: regexp
|
- match: \n
|
||||||
|
scope: invalid.string.newline
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Subproject commit 9e9a518aed93031042c54710f8f02c839301de26
|
Subproject commit 0f6b7bc87acf684f7b0790fd480731ffb4615b87
|
|
@ -8,6 +8,7 @@ file_extensions:
|
||||||
- .env.local
|
- .env.local
|
||||||
- .env.sample
|
- .env.sample
|
||||||
- .env.example
|
- .env.example
|
||||||
|
- .env.template
|
||||||
- .env.test
|
- .env.test
|
||||||
- .env.test.local
|
- .env.test.local
|
||||||
- .env.testing
|
- .env.testing
|
||||||
|
@ -23,6 +24,10 @@ file_extensions:
|
||||||
- .env.defaults
|
- .env.defaults
|
||||||
- .envrc
|
- .envrc
|
||||||
- .flaskenv
|
- .flaskenv
|
||||||
|
- env
|
||||||
|
- env.example
|
||||||
|
- env.sample
|
||||||
|
- env.template
|
||||||
scope: source.env
|
scope: source.env
|
||||||
contexts:
|
contexts:
|
||||||
main:
|
main:
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Subproject commit 2c254cc8512d53b7af306e4379fc9744ee5b4aee
|
Subproject commit 98316d4332936f74babb51cb56161410ae9d6e2c
|
|
@ -95,7 +95,7 @@ contexts:
|
||||||
|
|
||||||
fstab_dump:
|
fstab_dump:
|
||||||
- include: comment
|
- include: comment
|
||||||
- match: '\s*[01]\s*'
|
- match: '\s*[012]\s*'
|
||||||
comment: dump field
|
comment: dump field
|
||||||
scope: constant.numeric
|
scope: constant.numeric
|
||||||
set: fstab_pass
|
set: fstab_pass
|
||||||
|
@ -107,7 +107,7 @@ contexts:
|
||||||
|
|
||||||
fstab_pass:
|
fstab_pass:
|
||||||
- include: comment
|
- include: comment
|
||||||
- match: '\s*[01]\s*'
|
- match: '\s*[012]\s*'
|
||||||
comment: pass field
|
comment: pass field
|
||||||
scope: constant.numeric
|
scope: constant.numeric
|
||||||
set: expected_eol
|
set: expected_eol
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Subproject commit 4cd4acfffc7f2ab4f154b6ebfbbe0bb71825eb89
|
Subproject commit 59a5f8a3120358657cefdc4b830b4a883ebfbf77
|
|
@ -1 +1 @@
|
||||||
Subproject commit 59304d6c7b5019091b532a3197251e393e1db7b2
|
Subproject commit 9b6f6d0a86d7e7ef1d44490b107472af7fb4ffaf
|
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit 651091c7e266e05c0a529b137b6efd43d717894c
|
|
@ -1 +1 @@
|
||||||
Subproject commit 77def406d70b90dff33d006478198b729e23d22c
|
Subproject commit aedf955eba9753554815b2cbef5e072415e42068
|
|
@ -5,8 +5,8 @@ name: INI
|
||||||
file_extensions:
|
file_extensions:
|
||||||
- ini
|
- ini
|
||||||
- INI
|
- INI
|
||||||
- inf
|
- "inf"
|
||||||
- INF
|
- "INF"
|
||||||
- reg
|
- reg
|
||||||
- REG
|
- REG
|
||||||
- lng
|
- lng
|
||||||
|
@ -16,6 +16,9 @@ file_extensions:
|
||||||
- url
|
- url
|
||||||
- URL
|
- URL
|
||||||
- .editorconfig
|
- .editorconfig
|
||||||
|
- .coveragerc
|
||||||
|
- .pylintrc
|
||||||
|
- .gitlint
|
||||||
- .hgrc
|
- .hgrc
|
||||||
- hgrc
|
- hgrc
|
||||||
scope: source.ini
|
scope: source.ini
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Subproject commit 48639e1dbf5bd22fce14beef7ed7f45050de2027
|
Subproject commit 3366b10be91aaab7a61ae0bc0a5af5cc375e58d1
|
|
@ -1 +1 @@
|
||||||
Subproject commit a2eae0453ed062dd499e30f561bc33bbeb5804b4
|
Subproject commit 836b47ec61a9c6a6445b4007e8353337fe63e2c9
|
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit 274126faa9febfb649981cc97ecd499fcd7f5b90
|
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit d82aeb737d4883d1a74aba7a07053f90211d427b
|
|
@ -0,0 +1,400 @@
|
||||||
|
%YAML 1.2
|
||||||
|
---
|
||||||
|
# http://www.sublimetext.com/docs/3/syntax.html
|
||||||
|
name: LiveScript
|
||||||
|
comment: "LiveScript Syntax: version 1"
|
||||||
|
file_extensions:
|
||||||
|
- ls
|
||||||
|
- Slakefile
|
||||||
|
- ls.erb
|
||||||
|
first_line_match: ^#!.*\bls
|
||||||
|
scope: source.livescript
|
||||||
|
contexts:
|
||||||
|
main:
|
||||||
|
- match: |-
|
||||||
|
(?x)
|
||||||
|
!?[~-]{1,2}>\*?
|
||||||
|
|<[~-]{1,2}!?
|
||||||
|
|\(\s* (?= instanceof[\s)]|and[\s)]|or[\s)]|is[\s)]|isnt[\s)]|in[\s)]|import[\s)]|import\ all[\s)] |\.|[-+/*%^&<>=|][\b\s)\w$]|\*\*|\%\%)
|
||||||
|
| (?<=[\s(]instanceof|[\s(]and|[\s(]or|[\s(]is|[\s(]isnt|[\s(]in|[\s(]import|[\s(]import\ all|[\s(]do|\.|\*\*|\%\%|[\b\s(\w$][-+/*%^&<>=|]) \s*\)
|
||||||
|
scope: storage.type.function.livescript
|
||||||
|
- match: \/\*
|
||||||
|
captures:
|
||||||
|
0: punctuation.definition.comment.livescript
|
||||||
|
push:
|
||||||
|
- meta_scope: comment.block.livescript
|
||||||
|
- match: \*\/
|
||||||
|
captures:
|
||||||
|
0: punctuation.definition.comment.livescript
|
||||||
|
pop: true
|
||||||
|
- match: '@\w*'
|
||||||
|
scope: storage.type.annotation.livescriptscript
|
||||||
|
- match: '(#)(?!\{).*$\n?'
|
||||||
|
scope: comment.line.number-sign.livescript
|
||||||
|
captures:
|
||||||
|
1: punctuation.definition.comment.livescript
|
||||||
|
- match: '((?:!|~|!~|~!)?function\*?)\s+([$\w\-]*[$\w]+)'
|
||||||
|
captures:
|
||||||
|
1: storage.type.function.livescript
|
||||||
|
2: entity.name.function.livescript
|
||||||
|
- match: (new)\s+(\w+(?:\.\w*)*)
|
||||||
|
captures:
|
||||||
|
1: keyword.operator.new.livescript
|
||||||
|
2: entity.name.type.instance.livescript
|
||||||
|
- match: \b(package|private|protected|public|interface|enum|static)(?!-)\b
|
||||||
|
scope: keyword.illegal.livescript
|
||||||
|
- match: "'''"
|
||||||
|
captures:
|
||||||
|
0: punctuation.definition.string.begin.livescript
|
||||||
|
push:
|
||||||
|
- meta_scope: string.quoted.heredoc.livescript
|
||||||
|
- match: "'''"
|
||||||
|
captures:
|
||||||
|
0: punctuation.definition.string.end.livescript
|
||||||
|
pop: true
|
||||||
|
- match: '"""'
|
||||||
|
captures:
|
||||||
|
0: punctuation.definition.string.begin.livescript
|
||||||
|
push:
|
||||||
|
- meta_scope: string.quoted.double.heredoc.livescript
|
||||||
|
- match: '"""'
|
||||||
|
captures:
|
||||||
|
0: punctuation.definition.string.end.livescript
|
||||||
|
pop: true
|
||||||
|
- match: \\.
|
||||||
|
scope: constant.character.escape.livescript
|
||||||
|
- include: interpolated_livescript
|
||||||
|
- match: "``"
|
||||||
|
captures:
|
||||||
|
0: punctuation.definition.string.begin.livescript
|
||||||
|
push:
|
||||||
|
- meta_scope: string.quoted.script.livescript
|
||||||
|
- match: "``"
|
||||||
|
captures:
|
||||||
|
0: punctuation.definition.string.end.livescript
|
||||||
|
pop: true
|
||||||
|
- match: '\\(x[0-9A-Fa-f]{2}|[0-2][0-7]{0,2}|3[0-6][0-7]|37[0-7]?|[4-7][0-7]?|.)'
|
||||||
|
scope: constant.character.escape.livescript
|
||||||
|
- match: '<\['
|
||||||
|
push:
|
||||||
|
- meta_scope: string.array-literal.livescript
|
||||||
|
- match: '\]>'
|
||||||
|
pop: true
|
||||||
|
- match: '/{2}(?![\s=/*+{}?]).*?[^\\]/[igmy]{0,4}(?![a-zA-Z0-9])/{2}'
|
||||||
|
scope: string.regexp.livescript
|
||||||
|
- match: '/{2}\n'
|
||||||
|
push:
|
||||||
|
- meta_scope: string.regexp.livescript
|
||||||
|
- match: "/{2}[imgy]{0,4}"
|
||||||
|
pop: true
|
||||||
|
- include: embedded_spaced_comment
|
||||||
|
- include: interpolated_livescript
|
||||||
|
- match: "/{2}"
|
||||||
|
push:
|
||||||
|
- meta_scope: string.regexp.livescript
|
||||||
|
- match: "/{2}[imgy]{0,4}"
|
||||||
|
pop: true
|
||||||
|
- match: '\\(x[0-9A-Fa-f]{2}|[0-2][0-7]{0,2}|3[0-6][0-7]|37[0-7]?|[4-7][0-7]?|.)'
|
||||||
|
scope: constant.character.escape.livescript
|
||||||
|
- include: interpolated_livescript
|
||||||
|
- match: '/(?![\s=/*+{}?]).*?[^\\]/[igmy]{0,4}(?![a-zA-Z0-9])'
|
||||||
|
scope: string.regexp.livescript
|
||||||
|
- match: |-
|
||||||
|
(?x)
|
||||||
|
\b(?<![\.\$\-@])(
|
||||||
|
instanceof|new|delete|typeof|and|or|is|isnt|not
|
||||||
|
)(?!\-|\s*:)\b
|
||||||
|
scope: keyword.operator.livescript
|
||||||
|
- match: <\||\|>
|
||||||
|
scope: keyword.operator.livescript
|
||||||
|
- match: "=>"
|
||||||
|
scope: keyword.control.livescript
|
||||||
|
- match: |-
|
||||||
|
(?x)
|
||||||
|
\b(?<![\.\$\-@])(?:
|
||||||
|
return|break|continue|throw
|
||||||
|
|try|if|while|for|for\s+own|switch|unless|until
|
||||||
|
|catch|finally|else|nobreak|case|default|fallthrough|when|otherwise|then
|
||||||
|
|yield
|
||||||
|
)(?!\-|\s*:)\b
|
||||||
|
scope: keyword.control.livescript
|
||||||
|
- match: |-
|
||||||
|
(?x)
|
||||||
|
and=|or=|%|&|\^|\*|\/|(?<![a-zA-Z$_])(\-)?\-(?!\-?>)|\+\+|\+|
|
||||||
|
~(?!~?>)|==|=|!=|<=|>=|<<=|>>=|
|
||||||
|
>>>=|<>|<(?!\[)|(?<!\])>|(?<!\w)!(?!([~\-]+)?>)|&&|\.\.(\.)?|\s\.\s|\?|\|\||\:|\*=|(?<!\()/=|%=|\+=|\-=|\.=|&=
|
||||||
|
|\^=
|
||||||
|
scope: keyword.operator.livescript
|
||||||
|
- match: |-
|
||||||
|
(?x)
|
||||||
|
\b(?<![\.\$\-@])(?:
|
||||||
|
function
|
||||||
|
)(?!\-|\s*:)\b
|
||||||
|
scope: storage.type.function.livescript
|
||||||
|
- match: |-
|
||||||
|
(?x)
|
||||||
|
\b(?<![\.\$\-@])(?:
|
||||||
|
this|throw|then|try|typeof!?|til|to
|
||||||
|
|continue|const|case|catch|class
|
||||||
|
|in|instanceof|import|import\s+all|implements|if|is
|
||||||
|
|default|delete|debugger|do
|
||||||
|
|for|for\s+own|finally|function|from|fallthrough
|
||||||
|
|super|switch
|
||||||
|
|else|nobreak|extends|export|eval
|
||||||
|
|and|arguments
|
||||||
|
|new|not
|
||||||
|
|unless|until
|
||||||
|
|while|with|when
|
||||||
|
|of|or|otherwise
|
||||||
|
|let|var|loop
|
||||||
|
|match
|
||||||
|
|by|yield
|
||||||
|
)(?!\-|\s*:)\b
|
||||||
|
scope: keyword.other.livescript
|
||||||
|
- match: '([a-zA-Z\$_](?:[\w$.-])*)\s*(?!\::)((:)|(=(?!>)))\s*(?!(\s*!?\s*\(.*\))?\s*(!?[~-]{1,2}>\*?))'
|
||||||
|
captures:
|
||||||
|
1: variable.assignment.livescript
|
||||||
|
3: punctuation.separator.key-value, keyword.operator.livescript
|
||||||
|
4: keyword.operator.livescript
|
||||||
|
- match: '(?<=\s|^)([\[\{])(?=.*?[\]\}]\s+[:=])'
|
||||||
|
captures:
|
||||||
|
0: keyword.operator.livescript
|
||||||
|
push:
|
||||||
|
- meta_scope: meta.variable.assignment.destructured.livescript
|
||||||
|
- match: '([\]\}]\s*[:=])'
|
||||||
|
captures:
|
||||||
|
0: keyword.operator.livescript
|
||||||
|
pop: true
|
||||||
|
- include: variable_name
|
||||||
|
- include: instance_variable
|
||||||
|
- include: single_quoted_string
|
||||||
|
- include: double_quoted_string
|
||||||
|
- include: numeric
|
||||||
|
- match: |-
|
||||||
|
(?x)
|
||||||
|
(\s*)
|
||||||
|
(?=[a-zA-Z\$_])
|
||||||
|
([a-zA-Z\$_]([\w$.:-])*)\s*
|
||||||
|
(?=[:=](\s*!?\s*\(.*\))?\s*(!?[~-]{1,2}>\*?))
|
||||||
|
scope: meta.function.livescript
|
||||||
|
captures:
|
||||||
|
2: entity.name.function.livescript
|
||||||
|
3: entity.name.function.livescript
|
||||||
|
4: variable.parameter.function.livescript
|
||||||
|
5: storage.type.function.livescript
|
||||||
|
- match: \b(?<!\.)(true|on|yes)(?!\s*:)\b
|
||||||
|
scope: constant.language.boolean.true.livescript
|
||||||
|
- match: \b(?<!\.)(false|off|no)(?!\s*:)\b
|
||||||
|
scope: constant.language.boolean.false.livescript
|
||||||
|
- match: \b(?<!\.)(null|void)(?!\s*:)\b
|
||||||
|
scope: constant.language.null.livescript
|
||||||
|
- match: \b(?<!\.)(super|this|extends)(?!\s*:)\b
|
||||||
|
scope: variable.language.livescript
|
||||||
|
- match: '(class\b)\s+(@?[a-zA-Z$_][\w$.-]*)?(?:\s+(extends)\s+(@?[a-zA-Z$_][\w$.-]*))?'
|
||||||
|
scope: meta.class.livescript
|
||||||
|
captures:
|
||||||
|
1: storage.type.class.livescript
|
||||||
|
2: entity.name.type.class.livescript
|
||||||
|
3: keyword.control.inheritance.livescript
|
||||||
|
4: entity.other.inherited-class.livescript
|
||||||
|
- match: \b(debugger|\\)\b
|
||||||
|
scope: keyword.other.livescript
|
||||||
|
- match: |-
|
||||||
|
(?x)\b(
|
||||||
|
Array|ArrayBuffer|Blob|Boolean|Date|document|event|Function|
|
||||||
|
Int(8|16|32|64)Array|Math|Map|Number|
|
||||||
|
Object|Proxy|RegExp|Set|String|WeakMap|
|
||||||
|
window|Uint(8|16|32|64)Array|XMLHttpRequest
|
||||||
|
)\b
|
||||||
|
scope: support.class.livescript
|
||||||
|
- match: \b(console)\b
|
||||||
|
scope: entity.name.type.object.livescript
|
||||||
|
- match: \b(Infinity|NaN|undefined)\b
|
||||||
|
scope: constant.language.livescript
|
||||||
|
- match: \;
|
||||||
|
scope: punctuation.terminator.statement.livescript
|
||||||
|
- match: ',[ |\t]*'
|
||||||
|
scope: meta.delimiter.object.comma.livescript
|
||||||
|
- match: \.
|
||||||
|
scope: meta.delimiter.method.period.livescript
|
||||||
|
- match: '\{|\}'
|
||||||
|
scope: meta.brace.curly.livescript
|
||||||
|
- match: \(|\)
|
||||||
|
scope: meta.brace.round.livescript
|
||||||
|
- match: '\[|\]\s*'
|
||||||
|
scope: meta.brace.square.livescript
|
||||||
|
- include: instance_variable
|
||||||
|
- include: backslash_string
|
||||||
|
- include: single_quoted_string
|
||||||
|
- include: double_quoted_string
|
||||||
|
- include: numeric
|
||||||
|
- match: '()(@|@@|[$\w\-]*[$\w]+)\s*(`)'
|
||||||
|
captures:
|
||||||
|
1: keyword.operator.livescript
|
||||||
|
2: meta.function-call.livescript
|
||||||
|
3: keyword.operator.livescript
|
||||||
|
- match: "`"
|
||||||
|
scope: keyword.operator.livescript
|
||||||
|
- match: '()(@|@@|[$\w\-]*[$\w]+)(?:(\??\!)|[(])'
|
||||||
|
captures:
|
||||||
|
1: keyword.operator.livescript
|
||||||
|
2: meta.function-call.livescript
|
||||||
|
3: keyword.operator.livescript
|
||||||
|
- match: '(@|@@|[$\w\-]*[$\w]+)(\?)? (?!\s*(((by|of|and|or|with|when|unless|if|is|isnt|else|nobreak|for|from|not in|in|catch|til|to|then|import|extends|implements|instanceof)\b)|[=:.*\/+\-%\^<>][ =)]|[`}%*)]|/(?!.*?/)|&&|[.][^.]|=>|\/ +|\||\|\||\-\-|\+\+|\|>|<|\||$|\n|\#|/\*))'
|
||||||
|
captures:
|
||||||
|
1: meta.function-call.livescript
|
||||||
|
2: keyword.operator.livescript
|
||||||
|
- match: \| _
|
||||||
|
scope: keyword.control.livescript
|
||||||
|
- match: '\|(?![.])'
|
||||||
|
scope: keyword.control.livescript
|
||||||
|
- match: \|
|
||||||
|
scope: keyword.operator.livescript
|
||||||
|
- match: ((?<=console\.)(debug|warn|info|log|error|time(End|-end)|assert))\b
|
||||||
|
scope: support.function.console.livescript
|
||||||
|
- match: |-
|
||||||
|
(?x)\b(
|
||||||
|
decodeURI(Component)?|encodeURI(Component)?|eval|parse(Float|Int)|require
|
||||||
|
)\b
|
||||||
|
scope: support.function.livescript
|
||||||
|
- match: |-
|
||||||
|
(?x)(?<![.-])\b(
|
||||||
|
map|filter|reject|partition|find|each|head|tail|last|initial|empty|
|
||||||
|
values|keys|length|cons|append|join|reverse|fold(l|r)?1?|unfoldr|
|
||||||
|
and(List|-list)|or(List|-list)|any|all|unique|sum|product|mean|compact|
|
||||||
|
concat(Map|-map)?|maximum|minimum|scan(l|r)?1?|replicate|slice|apply|
|
||||||
|
split(At|-at)?|take(While|-while)?|drop(While|-while)?|span|first|
|
||||||
|
break(It|-it)|list(ToObj|-to-obj)|obj(ToFunc|-to-func)|
|
||||||
|
pairs(ToObj|-to-obj)|obj(ToPairs|-to-pairs|ToLists|-to-lists)|
|
||||||
|
zip(All|-all)?(With|-with)?|compose|curry|partial|flip|fix|
|
||||||
|
sort(With|-with|By|-by)?|group(By|-by)|break(List|-list|Str|-str)|
|
||||||
|
difference|intersection|union|average|flatten|chars|unchars|repeat|
|
||||||
|
lines|unlines|words|unwords|max|min|negate|abs|signum|quot|rem|div|mod|
|
||||||
|
recip|pi|tau|exp|sqrt|ln|pow|sin|cos|tan|asin|acos|atan|atan2|truncate|
|
||||||
|
round|ceiling|floor|is(It|-it)NaN|even|odd|gcd|lcm|disabled__id
|
||||||
|
)\b(?![.-])
|
||||||
|
comment: |
|
||||||
|
Generated by DOM query from http://gkz.github.com/prelude-ls/:
|
||||||
|
[].slice
|
||||||
|
.call(document.querySelectorAll(".nav-pills li a"))
|
||||||
|
.map(function(_) {return _.innerText})
|
||||||
|
.filter(function(_) {return _.trim() !== '})
|
||||||
|
.slice(2)
|
||||||
|
.join("|")
|
||||||
|
scope: support.function.prelude.livescript
|
||||||
|
- match: '(?x)(?<![.-])\b(that|it|e|_)\b'
|
||||||
|
scope: support.function.semireserved.livescript
|
||||||
|
- match: |-
|
||||||
|
(?x)((?<=(\.|\]|\)))(
|
||||||
|
apply|call|concat|every|filter|for(Each|-each)|
|
||||||
|
from|has(Own|-own)(Property|-property)|index(Of|-of)|
|
||||||
|
is(Prototype|-prototype)(Of|-of)|join|last(Index|-index)(Of|-of)|
|
||||||
|
map|of|pop|property(Is|-is)(Enumerable|-enumerable)|push|
|
||||||
|
reduce(Right|-right)?|reverse|shift|slice|some|sort|
|
||||||
|
splice|to(Locale|-locale)?(String|-string)|unshift|valueOf
|
||||||
|
))\b(?!-)
|
||||||
|
scope: support.function.method.array.livescript
|
||||||
|
- match: |-
|
||||||
|
(?x)((?<=Array\.)(
|
||||||
|
isArray
|
||||||
|
))\b
|
||||||
|
scope: support.function.static.array.livescript
|
||||||
|
- match: |-
|
||||||
|
(?x)((?<=Object\.)(
|
||||||
|
create|define(Propert|-propert)(ies|y)|freeze|
|
||||||
|
get(Own|-own)(Property|-property)(Descriptors?|Names)|
|
||||||
|
get(Property|-property)(Descriptor|Names)|getPrototypeOf|
|
||||||
|
is((Extensible|-extensible)|(Frozen|-frozen)|(Sealed|-sealed))?|
|
||||||
|
keys|prevent(Extensions|-extensions)|seal
|
||||||
|
))\b
|
||||||
|
scope: support.function.static.object.livescript
|
||||||
|
- match: |-
|
||||||
|
(?x)((?<=Math\.)(
|
||||||
|
abs|acos|acosh|asin|asinh|atan|atan2|atanh|ceil|cos|cosh|exp|expm1|floor|
|
||||||
|
hypot|log|log10|log1p|log2|max|min|pow|random|round|sign|sin|sinh|sqrt|
|
||||||
|
tan|tanh|trunc
|
||||||
|
))\b
|
||||||
|
scope: support.function.static.math.livescript
|
||||||
|
- match: |-
|
||||||
|
(?x)((?<=Number\.)(
|
||||||
|
is(Finite|Integer|NaN)|to(Integer|-integer)
|
||||||
|
))\b
|
||||||
|
scope: support.function.static.number.livescript
|
||||||
|
- match: '[\$\w][\w-]*'
|
||||||
|
scope: variable.other.livescript
|
||||||
|
backslash_string:
|
||||||
|
- match: '\\([\\)\s,\};\]])?'
|
||||||
|
captures:
|
||||||
|
0: string.quoted.single.livescript
|
||||||
|
push:
|
||||||
|
- meta_content_scope: string.quoted.single.livescript
|
||||||
|
- match: '([\\)\s,\};\]])'
|
||||||
|
captures:
|
||||||
|
0: punctuation.definition.string.end.livescript
|
||||||
|
pop: true
|
||||||
|
constructor_variable:
|
||||||
|
- match: '([a-zA-Z$_][\w$-]*)(@{2})([a-zA-Z$_][\w$-]*)?'
|
||||||
|
scope: variable.other.readwrite.constructor.livescript
|
||||||
|
double_quoted_string:
|
||||||
|
- match: '"'
|
||||||
|
captures:
|
||||||
|
0: punctuation.definition.string.begin.livescript
|
||||||
|
push:
|
||||||
|
- meta_scope: string.quoted.double.livescript
|
||||||
|
- match: '"'
|
||||||
|
captures:
|
||||||
|
0: punctuation.definition.string.end.livescript
|
||||||
|
pop: true
|
||||||
|
- match: '\\(x[0-9A-Fa-f]{2}|[0-2][0-7]{0,2}|3[0-6][0-7]|37[0-7]?|[4-7][0-7]?|.)'
|
||||||
|
scope: constant.character.escape.livescript
|
||||||
|
- include: interpolated_livescript
|
||||||
|
embedded_comment:
|
||||||
|
- match: (?<!\\)(#).*$\n
|
||||||
|
scope: comment.line.number-sign.livescript
|
||||||
|
captures:
|
||||||
|
1: punctuation.definition.comment.livescript
|
||||||
|
embedded_spaced_comment:
|
||||||
|
- match: (?<!\\)(#\s).*$\n
|
||||||
|
scope: comment.line.number-sign.livescript
|
||||||
|
captures:
|
||||||
|
1: punctuation.definition.comment.livescript
|
||||||
|
instance_variable:
|
||||||
|
- match: '(?<![$\w\-])(@)'
|
||||||
|
scope: variable.other.readwrite.instance.livescript
|
||||||
|
interpolated_livescript:
|
||||||
|
- match: '\#\{'
|
||||||
|
captures:
|
||||||
|
0: punctuation.section.embedded.livescript
|
||||||
|
push:
|
||||||
|
- meta_scope: source.livescript.embedded.source
|
||||||
|
- match: '\}'
|
||||||
|
captures:
|
||||||
|
0: punctuation.section.embedded.livescript
|
||||||
|
pop: true
|
||||||
|
- include: main
|
||||||
|
- match: '\#'
|
||||||
|
push:
|
||||||
|
- meta_scope: source.livescript.embedded.source.simple
|
||||||
|
- match: ""
|
||||||
|
pop: true
|
||||||
|
- include: main
|
||||||
|
numeric:
|
||||||
|
- match: '(?<![\$@a-zA-Z_])(([0-9]+r[0-9_]+)|((16r|0[xX])[0-9a-fA-F_]+)|([0-9]+(\.[0-9]+[0-9_]*)?(e[+\-]?[0-9_]+)?)[_a-zA-Z0-9]*)'
|
||||||
|
scope: constant.numeric.livescript
|
||||||
|
single_quoted_string:
|
||||||
|
- match: "'"
|
||||||
|
captures:
|
||||||
|
0: punctuation.definition.string.begin.livescript
|
||||||
|
push:
|
||||||
|
- meta_scope: string.quoted.single.livescript
|
||||||
|
- match: "'"
|
||||||
|
captures:
|
||||||
|
0: punctuation.definition.string.end.livescript
|
||||||
|
pop: true
|
||||||
|
- match: '\\(x[0-9A-Fa-f]{2}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)'
|
||||||
|
scope: constant.character.escape.livescript
|
||||||
|
variable_name:
|
||||||
|
- match: '([a-zA-Z\$_][\w$-]*(\.\w+)*)(?!\-)'
|
||||||
|
scope: variable.assignment.livescript
|
||||||
|
captures:
|
||||||
|
1: variable.assignment.livescript
|
|
@ -53,6 +53,16 @@ contexts:
|
||||||
embed: synopsis
|
embed: synopsis
|
||||||
escape: '(?={{section_heading}})'
|
escape: '(?={{section_heading}})'
|
||||||
|
|
||||||
|
- match: '^(?:COMMANDS)\b'
|
||||||
|
scope: markup.heading.commands.man
|
||||||
|
embed: commands-start
|
||||||
|
escape: '(?={{section_heading}})'
|
||||||
|
|
||||||
|
- match: '^(?:ENVIRONMENT\s+VARIABLES)'
|
||||||
|
scope: markup.heading.env.man
|
||||||
|
embed: environment-variables
|
||||||
|
escape: '(?={{section_heading}})'
|
||||||
|
|
||||||
- match: '{{section_heading}}'
|
- match: '{{section_heading}}'
|
||||||
scope: markup.heading.other.man
|
scope: markup.heading.other.man
|
||||||
embed: options # some man pages put command line options under the description heading
|
embed: options # some man pages put command line options under the description heading
|
||||||
|
@ -75,7 +85,7 @@ contexts:
|
||||||
|
|
||||||
options:
|
options:
|
||||||
# command-line options like --option=value, --some-flag, or -x
|
# command-line options like --option=value, --some-flag, or -x
|
||||||
- match: '^[ ]{7}(?=-)'
|
- match: '^[ ]{7}(?=-|\+)'
|
||||||
push: expect-command-line-option
|
push: expect-command-line-option
|
||||||
- match: '(?:[^a-zA-Z0-9_-]|^|\s){{command_line_option}}'
|
- match: '(?:[^a-zA-Z0-9_-]|^|\s){{command_line_option}}'
|
||||||
captures:
|
captures:
|
||||||
|
@ -96,7 +106,7 @@ contexts:
|
||||||
- include: env-var
|
- include: env-var
|
||||||
|
|
||||||
expect-command-line-option:
|
expect-command-line-option:
|
||||||
- match: '[A-Za-z0-9-]+'
|
- match: '[A-Za-z0-9-\.\?:#\$\+]+'
|
||||||
scope: entity.name.command-line-option.man
|
scope: entity.name.command-line-option.man
|
||||||
- match: '(\[)(=)'
|
- match: '(\[)(=)'
|
||||||
captures:
|
captures:
|
||||||
|
@ -122,7 +132,7 @@ contexts:
|
||||||
pop: true
|
pop: true
|
||||||
|
|
||||||
expect-parameter:
|
expect-parameter:
|
||||||
- match: '[A-Za-z0-9-]+'
|
- match: '[A-Za-z0-9-_]+'
|
||||||
scope: variable.parameter.man
|
scope: variable.parameter.man
|
||||||
- match: (?=\s+\|)
|
- match: (?=\s+\|)
|
||||||
pop: true
|
pop: true
|
||||||
|
@ -135,6 +145,10 @@ contexts:
|
||||||
scope: punctuation.section.brackets.end.man
|
scope: punctuation.section.brackets.end.man
|
||||||
pop: true
|
pop: true
|
||||||
- include: expect-parameter
|
- include: expect-parameter
|
||||||
|
- match: '<'
|
||||||
|
scope: punctuation.definition.generic.begin.man
|
||||||
|
- match: '>'
|
||||||
|
scope: punctuation.definition.generic.end.man
|
||||||
- match: '$|(?=[],]|{{command_line_option}})'
|
- match: '$|(?=[],]|{{command_line_option}})'
|
||||||
pop: true
|
pop: true
|
||||||
|
|
||||||
|
@ -169,3 +183,20 @@ contexts:
|
||||||
- match: \[
|
- match: \[
|
||||||
scope: punctuation.section.brackets.begin.man
|
scope: punctuation.section.brackets.begin.man
|
||||||
push: command-line-option-or-pipe
|
push: command-line-option-or-pipe
|
||||||
|
|
||||||
|
commands-start:
|
||||||
|
- match: (?=^[ ]{7}.*(?:[ ]<|[|]))
|
||||||
|
push: commands
|
||||||
|
|
||||||
|
commands:
|
||||||
|
- match: '^[ ]{7}([a-z_\-]+)(?=[ ]|$)'
|
||||||
|
captures:
|
||||||
|
1: entity.name.command.man
|
||||||
|
push: expect-parameter
|
||||||
|
- match: '^[ ]{7}(?=[\[<]|\w+[|\]])'
|
||||||
|
push: expect-parameter
|
||||||
|
|
||||||
|
environment-variables:
|
||||||
|
- match: '^[ ]{7}([A-Z_]+)\b'
|
||||||
|
captures:
|
||||||
|
1: support.constant.environment-variable.man
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit 5dceaa9dd9af0d2266f1c9e45966d8a610226213
|
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit 619a65a04efbf343bdfcde875700675b9b273368
|
|
@ -1 +1 @@
|
||||||
Subproject commit 15a1db15106fb668b3b1396a725ab002a8ef286c
|
Subproject commit 65f5a63c0d1760c5db2264e50e3b14a7a4567cc0
|
|
@ -5,6 +5,7 @@ name: Nim
|
||||||
file_extensions:
|
file_extensions:
|
||||||
- nim
|
- nim
|
||||||
- nims
|
- nims
|
||||||
|
- nimble
|
||||||
scope: source.nim
|
scope: source.nim
|
||||||
contexts:
|
contexts:
|
||||||
main:
|
main:
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Subproject commit 4a0a076661d26473cac71b9a17e6a759e9b1c643
|
Subproject commit c0372a1d2df136ca6b3d1a9f7b85031dedf117f9
|
|
@ -24,7 +24,7 @@ contexts:
|
||||||
- include: commands
|
- include: commands
|
||||||
- include: commentLine
|
- include: commentLine
|
||||||
- include: variable
|
- include: variable
|
||||||
- include: interpolatedStringContent
|
- include: subexpression
|
||||||
- include: function
|
- include: function
|
||||||
- include: attribute
|
- include: attribute
|
||||||
- include: UsingDirective
|
- include: UsingDirective
|
||||||
|
@ -33,32 +33,38 @@ contexts:
|
||||||
- include: doubleQuotedString
|
- include: doubleQuotedString
|
||||||
- include: scriptblock
|
- include: scriptblock
|
||||||
- include: doubleQuotedStringEscapes
|
- include: doubleQuotedStringEscapes
|
||||||
- match: (?<!')'
|
- match: '[''\x{2018}-\x{201B}]'
|
||||||
captures:
|
captures:
|
||||||
0: punctuation.definition.string.begin.powershell
|
0: punctuation.definition.string.begin.powershell
|
||||||
push:
|
push:
|
||||||
- meta_scope: string.quoted.single.powershell
|
- meta_scope: string.quoted.single.powershell
|
||||||
- match: "'(?!')"
|
- match: '[''\x{2018}-\x{201B}]{2}'
|
||||||
|
scope: constant.character.escape.powershell
|
||||||
|
- match: '[''\x{2018}-\x{201B}]'
|
||||||
captures:
|
captures:
|
||||||
0: punctuation.definition.string.end.powershell
|
0: punctuation.definition.string.end.powershell
|
||||||
pop: true
|
pop: true
|
||||||
- match: "''"
|
- match: '(@["\x{201C}-\x{201E}])\s*$'
|
||||||
scope: constant.character.escape.powershell
|
captures:
|
||||||
- match: \@"(?=$)
|
1: punctuation.definition.string.begin.powershell
|
||||||
push:
|
push:
|
||||||
- meta_scope: string.quoted.double.heredoc.powershell
|
- meta_scope: string.quoted.double.heredoc.powershell
|
||||||
- match: ^"@
|
- match: '^["\x{201C}-\x{201E}]@'
|
||||||
|
captures:
|
||||||
|
0: punctuation.definition.string.end.powershell
|
||||||
pop: true
|
pop: true
|
||||||
- include: variableNoProperty
|
- include: variableNoProperty
|
||||||
- include: doubleQuotedStringEscapes
|
- include: doubleQuotedStringEscapes
|
||||||
- include: interpolation
|
- include: interpolation
|
||||||
- match: \@'(?=$)
|
- match: '(@[''\x{2018}-\x{201B}])\s*$'
|
||||||
|
captures:
|
||||||
|
1: punctuation.definition.string.begin.powershell
|
||||||
push:
|
push:
|
||||||
- meta_scope: string.quoted.single.heredoc.powershell
|
- meta_scope: string.quoted.single.heredoc.powershell
|
||||||
- match: ^'@
|
- match: '^[''\x{2018}-\x{201B}]@'
|
||||||
|
captures:
|
||||||
|
0: punctuation.definition.string.end.powershell
|
||||||
pop: true
|
pop: true
|
||||||
- match: "''"
|
|
||||||
scope: constant.character.escape.powershell
|
|
||||||
- include: numericConstant
|
- include: numericConstant
|
||||||
- match: (@)(\()
|
- match: (@)(\()
|
||||||
captures:
|
captures:
|
||||||
|
@ -71,11 +77,12 @@ contexts:
|
||||||
0: punctuation.section.group.end.powershell
|
0: punctuation.section.group.end.powershell
|
||||||
pop: true
|
pop: true
|
||||||
- include: main
|
- include: main
|
||||||
- match: (\$)(\()
|
- match: ((\$))(\()
|
||||||
comment: "TODO: move to repo; make recursive."
|
comment: "TODO: move to repo; make recursive."
|
||||||
captures:
|
captures:
|
||||||
1: punctuation.definition.variable.powershell
|
1: keyword.other.substatement.powershell
|
||||||
2: punctuation.section.group.begin.powershell
|
2: punctuation.definition.subexpression.powershell
|
||||||
|
3: punctuation.section.group.begin.powershell
|
||||||
push:
|
push:
|
||||||
- meta_scope: meta.group.complex.subexpression.powershell
|
- meta_scope: meta.group.complex.subexpression.powershell
|
||||||
- match: \)
|
- match: \)
|
||||||
|
@ -85,7 +92,7 @@ contexts:
|
||||||
- include: main
|
- include: main
|
||||||
- match: '(\b(([A-Za-z0-9\-_\.]+)\.(?i:exe|com|cmd|bat))\b)'
|
- match: '(\b(([A-Za-z0-9\-_\.]+)\.(?i:exe|com|cmd|bat))\b)'
|
||||||
scope: support.function.powershell
|
scope: support.function.powershell
|
||||||
- match: (?<!\w|-|\.)((?i:begin|break|catch|continue|data|default|define|do|dynamicparam|else|elseif|end|exit|finally|for|from|if|in|inlinescript|parallel|param|process|return|sequence|switch|throw|trap|try|until|var|while)|%|\?)(?!\w)
|
- match: (?<!\w|-|\.)((?i:begin|break|catch|clean|continue|data|default|define|do|dynamicparam|else|elseif|end|exit|finally|for|from|if|in|inlinescript|parallel|param|process|return|sequence|switch|throw|trap|try|until|var|while)|%|\?)(?!\w)
|
||||||
scope: keyword.control.powershell
|
scope: keyword.control.powershell
|
||||||
- match: '(?<!\w|-|[^\)]\.)((?i:(foreach|where)(?!-object))|%|\?)(?!\w)'
|
- match: '(?<!\w|-|[^\)]\.)((?i:(foreach|where)(?!-object))|%|\?)(?!\w)'
|
||||||
scope: keyword.control.powershell
|
scope: keyword.control.powershell
|
||||||
|
@ -135,7 +142,7 @@ contexts:
|
||||||
- meta_scope: meta.requires.powershell
|
- meta_scope: meta.requires.powershell
|
||||||
- match: $
|
- match: $
|
||||||
pop: true
|
pop: true
|
||||||
- match: \-(?i:Modules|PSSnapin|RunAsAdministrator|ShellId|Version)
|
- match: \-(?i:Modules|PSSnapin|RunAsAdministrator|ShellId|Version|Assembly|PSEdition)
|
||||||
scope: keyword.other.powershell
|
scope: keyword.other.powershell
|
||||||
- match: '(?<!-)\b\p{L}+|\d+(?:\.\d+)*'
|
- match: '(?<!-)\b\p{L}+|\d+(?:\.\d+)*'
|
||||||
scope: variable.parameter.powershell
|
scope: variable.parameter.powershell
|
||||||
|
@ -187,51 +194,53 @@ contexts:
|
||||||
comment: Builtin cmdlets with reserved verbs
|
comment: Builtin cmdlets with reserved verbs
|
||||||
scope: support.function.powershell
|
scope: support.function.powershell
|
||||||
commentEmbeddedDocs:
|
commentEmbeddedDocs:
|
||||||
- match: ^(?i:(?:\s?|#)+(\.)(COMPONENT|DESCRIPTION|EXAMPLE|EXTERNALHELP|FORWARDHELPCATEGORY|FORWARDHELPTARGETNAME|FUNCTIONALITY|INPUTS|LINK|NOTES|OUTPUTS|REMOTEHELPRUNSPACE|ROLE|SYNOPSIS))
|
- match: (?:^|\G)(?i:\s*(\.)(COMPONENT|DESCRIPTION|EXAMPLE|FUNCTIONALITY|INPUTS|LINK|NOTES|OUTPUTS|ROLE|SYNOPSIS))\s*$
|
||||||
|
comment: these embedded doc keywords do not support arguments, must be the only thing on the line
|
||||||
scope: comment.documentation.embedded.powershell
|
scope: comment.documentation.embedded.powershell
|
||||||
captures:
|
captures:
|
||||||
1: constant.string.documentation.powershell
|
1: constant.string.documentation.powershell
|
||||||
2: keyword.operator.documentation.powershell
|
2: keyword.operator.documentation.powershell
|
||||||
- match: '(?i:\s?(\.)(PARAMETER|FORWARDHELPTARGETNAME|FORWARDHELPCATEGORY|REMOTEHELPRUNSPACE|EXTERNALHELP)\s+([a-z0-9-_]+))'
|
- match: (?:^|\G)(?i:\s*(\.)(EXTERNALHELP|FORWARDHELP(?:CATEGORY|TARGETNAME)|PARAMETER|REMOTEHELPRUNSPACE))\s+(.+?)\s*$
|
||||||
|
comment: these embedded doc keywords require arguments though the type required may be inconsistent, they may not all be able to use the same argument match
|
||||||
scope: comment.documentation.embedded.powershell
|
scope: comment.documentation.embedded.powershell
|
||||||
captures:
|
captures:
|
||||||
1: constant.string.documentation.powershell
|
1: constant.string.documentation.powershell
|
||||||
2: keyword.operator.documentation.powershell
|
2: keyword.operator.documentation.powershell
|
||||||
3: keyword.operator.documentation.powershell
|
3: keyword.operator.documentation.powershell
|
||||||
commentLine:
|
commentLine:
|
||||||
- match: '(?<![`\\-])#'
|
- match: '(?<![`\\-])(#)#*'
|
||||||
captures:
|
captures:
|
||||||
0: punctuation.definition.comment.powershell
|
1: punctuation.definition.comment.powershell
|
||||||
push:
|
push:
|
||||||
- meta_scope: comment.line.powershell
|
- meta_scope: comment.line.powershell
|
||||||
- match: $\n?
|
- match: $\n?
|
||||||
captures:
|
captures:
|
||||||
0: punctuation.definition.comment.powershell
|
1: punctuation.definition.comment.powershell
|
||||||
pop: true
|
pop: true
|
||||||
- include: commentEmbeddedDocs
|
- include: commentEmbeddedDocs
|
||||||
- include: RequiresDirective
|
- include: RequiresDirective
|
||||||
doubleQuotedString:
|
doubleQuotedString:
|
||||||
- match: (?<!(?<!`)")"
|
- match: '["\x{201C}-\x{201E}]'
|
||||||
captures:
|
captures:
|
||||||
0: punctuation.definition.string.begin.powershell
|
0: punctuation.definition.string.begin.powershell
|
||||||
push:
|
push:
|
||||||
- meta_scope: string.quoted.double.powershell
|
- meta_scope: string.quoted.double.powershell
|
||||||
- match: '"(?!")'
|
|
||||||
captures:
|
|
||||||
0: punctuation.definition.string.end.powershell
|
|
||||||
pop: true
|
|
||||||
- match: '(?i)\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,64}\b'
|
- match: '(?i)\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,64}\b'
|
||||||
- include: variableNoProperty
|
- include: variableNoProperty
|
||||||
- include: doubleQuotedStringEscapes
|
- include: doubleQuotedStringEscapes
|
||||||
|
- match: '["\x{201C}-\x{201E}]{2}'
|
||||||
|
scope: constant.character.escape.powershell
|
||||||
- include: interpolation
|
- include: interpolation
|
||||||
- match: '`\s*$'
|
- match: '`\s*$'
|
||||||
scope: keyword.other.powershell
|
scope: keyword.other.powershell
|
||||||
|
- match: '["\x{201C}-\x{201E}]'
|
||||||
|
captures:
|
||||||
|
0: punctuation.definition.string.end.powershell
|
||||||
|
pop: true
|
||||||
doubleQuotedStringEscapes:
|
doubleQuotedStringEscapes:
|
||||||
- match: '`[`0abefnrtv"''$]'
|
- match: '`[`0abefnrtv''"\x{2018}-\x{201E}$]'
|
||||||
scope: constant.character.escape.powershell
|
scope: constant.character.escape.powershell
|
||||||
- include: unicodeEscape
|
- include: unicodeEscape
|
||||||
- match: '""'
|
|
||||||
scope: constant.character.escape.powershell
|
|
||||||
function:
|
function:
|
||||||
- match: '^(?:\s*+)(?i)(function|filter|configuration|workflow)\s+(?:(global|local|script|private):)?((?:\p{L}|\d|_|-|\.)+)'
|
- match: '^(?:\s*+)(?i)(function|filter|configuration|workflow)\s+(?:(global|local|script|private):)?((?:\p{L}|\d|_|-|\.)+)'
|
||||||
captures:
|
captures:
|
||||||
|
@ -263,33 +272,23 @@ contexts:
|
||||||
4: keyword.operator.assignment.powershell
|
4: keyword.operator.assignment.powershell
|
||||||
- include: scriptblock
|
- include: scriptblock
|
||||||
- include: main
|
- include: main
|
||||||
interpolatedStringContent:
|
|
||||||
- match: \(
|
|
||||||
captures:
|
|
||||||
0: punctuation.section.group.begin.powershell
|
|
||||||
push:
|
|
||||||
- meta_content_scope: interpolated.simple.source.powershell
|
|
||||||
- match: \)
|
|
||||||
captures:
|
|
||||||
0: punctuation.section.group.end.powershell
|
|
||||||
pop: true
|
|
||||||
- include: main
|
|
||||||
- include: interpolation
|
|
||||||
- include: interpolatedStringContent
|
|
||||||
interpolation:
|
interpolation:
|
||||||
- match: (\$)(\()
|
- match: (((\$)))((\())
|
||||||
captures:
|
captures:
|
||||||
1: punctuation.definition.variable.powershell
|
1: keyword.other.substatement.powershell
|
||||||
2: punctuation.section.group.begin.powershell
|
2: punctuation.definition.substatement.powershell
|
||||||
|
3: punctuation.section.embedded.substatement.begin.powershell
|
||||||
|
4: punctuation.section.group.begin.powershell
|
||||||
|
5: punctuation.section.embedded.substatement.begin.powershell
|
||||||
push:
|
push:
|
||||||
|
- meta_scope: meta.embedded.substatement.powershell
|
||||||
- meta_content_scope: interpolated.complex.source.powershell
|
- meta_content_scope: interpolated.complex.source.powershell
|
||||||
- match: \)
|
- match: (\))
|
||||||
captures:
|
captures:
|
||||||
0: punctuation.section.group.end.powershell
|
0: punctuation.section.group.end.powershell
|
||||||
|
1: punctuation.section.embedded.substatement.end.powershell
|
||||||
pop: true
|
pop: true
|
||||||
- include: main
|
- include: main
|
||||||
- include: interpolation
|
|
||||||
- include: interpolatedStringContent
|
|
||||||
numericConstant:
|
numericConstant:
|
||||||
- match: '(?<!\w)([-+]?0(?:x|X)[0-9a-fA-F_]+(?:U|u|L|l|UL|Ul|uL|ul|LU|Lu|lU|lu)?)((?i:[kmgtp]b)?)\b'
|
- match: '(?<!\w)([-+]?0(?:x|X)[0-9a-fA-F_]+(?:U|u|L|l|UL|Ul|uL|ul|LU|Lu|lU|lu)?)((?i:[kmgtp]b)?)\b'
|
||||||
captures:
|
captures:
|
||||||
|
@ -330,6 +329,17 @@ contexts:
|
||||||
0: punctuation.section.braces.end.powershell
|
0: punctuation.section.braces.end.powershell
|
||||||
pop: true
|
pop: true
|
||||||
- include: main
|
- include: main
|
||||||
|
subexpression:
|
||||||
|
- match: \(
|
||||||
|
captures:
|
||||||
|
0: punctuation.section.group.begin.powershell
|
||||||
|
push:
|
||||||
|
- meta_scope: meta.group.simple.subexpression.powershell
|
||||||
|
- match: \)
|
||||||
|
captures:
|
||||||
|
0: punctuation.section.group.end.powershell
|
||||||
|
pop: true
|
||||||
|
- include: main
|
||||||
type:
|
type:
|
||||||
- match: '\['
|
- match: '\['
|
||||||
captures:
|
captures:
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit 7df4479c079768edd994b20052761152e277af21
|
|
@ -0,0 +1,52 @@
|
||||||
|
%YAML 1.2
|
||||||
|
---
|
||||||
|
# http://www.sublimetext.com/docs/3/syntax.html
|
||||||
|
name: Racket
|
||||||
|
file_extensions:
|
||||||
|
- rkt
|
||||||
|
scope: source.racket
|
||||||
|
contexts:
|
||||||
|
main:
|
||||||
|
- match: '[^\\](\"[^\"]*\")'
|
||||||
|
captures:
|
||||||
|
1: string.quoted.double.source.racket
|
||||||
|
- match: '\((define)\s+([a-zA-Z0-9_\-?\+^]+)\s*'
|
||||||
|
scope: meta.variable.source.racket
|
||||||
|
captures:
|
||||||
|
1: keyword.source.racket
|
||||||
|
2: entity.name.variable.source.racket
|
||||||
|
- match: '\((define)\s+\(([a-zA-Z0-9_\-?\+^]+)\s*'
|
||||||
|
scope: meta.function.source.racket
|
||||||
|
captures:
|
||||||
|
1: keyword.source.racket
|
||||||
|
2: entity.name.function
|
||||||
|
- match: '\((struct)\s+([a-zA-Z0-9_\-?\+^]+)\s+'
|
||||||
|
scope: meta.struct.source.racket
|
||||||
|
captures:
|
||||||
|
1: keyword.source.racket
|
||||||
|
2: entity.name.type
|
||||||
|
- match: '[\s\(](if|lambda|cond|define|type-case|let|letrec|let!|\#lang|require|test|else|first|rest|define-type|define-type-alias|define-struct|not|local|error|lang)[\s\)]'
|
||||||
|
scope: meta.keywords.source.racket
|
||||||
|
captures:
|
||||||
|
1: keyword.source.racket
|
||||||
|
- match: '[\s\(](true|false|empty|null)[\s\)]'
|
||||||
|
captures:
|
||||||
|
1: constant.language.source.racket
|
||||||
|
- match: '[\s\(\[\{](#t|#true|#f|#false)[\s\)\]\}]'
|
||||||
|
captures:
|
||||||
|
1: constant.language.source.racket
|
||||||
|
- match: '(#\\[a-zA-Z0-9_\-?\+\.\!\"]+)'
|
||||||
|
captures:
|
||||||
|
1: constant.language.source.racket
|
||||||
|
- match: '\b(0|([1-9][0-9_]*))\b'
|
||||||
|
scope: constant.numeric.integer.source.racket
|
||||||
|
- match: ;
|
||||||
|
push:
|
||||||
|
- meta_scope: comment.line.documentation.source.racket
|
||||||
|
- match: $\n
|
||||||
|
pop: true
|
||||||
|
- match: '#\|'
|
||||||
|
push:
|
||||||
|
- meta_scope: comment.block.source.racket
|
||||||
|
- match: '\|#'
|
||||||
|
pop: true
|
|
@ -0,0 +1,120 @@
|
||||||
|
%YAML 1.2
|
||||||
|
---
|
||||||
|
# http://www.sublimetext.com/docs/syntax.html
|
||||||
|
name: Requirements.txt
|
||||||
|
scope: source.requirements-txt
|
||||||
|
# https://pip.pypa.io/en/stable/reference/requirements-file-format/
|
||||||
|
# https://github.com/raimon49/requirements.txt.vim/blob/f246bd10155fbc3b1a9e2fff6c95b21521b09116/ftdetect/requirements.vim
|
||||||
|
file_extensions:
|
||||||
|
- requirements.txt
|
||||||
|
- requirements.in
|
||||||
|
- pip
|
||||||
|
# https://github.com/sublimehq/Packages/pull/2760/files
|
||||||
|
first_line_match: |-
|
||||||
|
(?xi:
|
||||||
|
^ \#! .* \bpip # shebang
|
||||||
|
| ^ \s* \# .*? -\*- .*? \bpip-requirements\b .*? -\*- # editorconfig
|
||||||
|
| ^ \s* \# (vim?|ex): .*? \brequirements\b # modeline
|
||||||
|
)
|
||||||
|
# pip install -r
|
||||||
|
# pip-compile
|
||||||
|
|
||||||
|
variables:
|
||||||
|
operator: '===?|<=?|>=?|~=|!='
|
||||||
|
|
||||||
|
contexts:
|
||||||
|
main:
|
||||||
|
- match: '(?i)\d+[\da-z\-_\.\*]*'
|
||||||
|
scope: constant.other.version-control.requirements-txt
|
||||||
|
- match: '(?i)^\[?--?[\da-z\-]*\]?'
|
||||||
|
scope: entity.name.function.option.requirements-txt
|
||||||
|
- match: '{{operator}}'
|
||||||
|
scope: keyword.operator.logical.requirements-txt
|
||||||
|
- match: '(\[)'
|
||||||
|
captures:
|
||||||
|
1: punctuation.section.braces.begin.requirements-txt
|
||||||
|
push:
|
||||||
|
- meta_scope: variable.function.extra.requirements-txt
|
||||||
|
- match: ','
|
||||||
|
scope: punctuation.separator.requirements-txt
|
||||||
|
- match: '(\])'
|
||||||
|
captures:
|
||||||
|
1: punctuation.section.braces.end.requirements-txt
|
||||||
|
pop: true
|
||||||
|
- match: '(git\+?|hg\+|svn\+|bzr\+).*://.\S+'
|
||||||
|
scope: markup.underline.link.versioncontrols.requirements-txt
|
||||||
|
- match: '(@\s)?(https?|ftp|gopher)://?[^\s/$.?#].\S*'
|
||||||
|
scope: markup.underline.link.url.requirements-txt
|
||||||
|
captures:
|
||||||
|
1: punctuation.definition.keyword.requirements-txt
|
||||||
|
- match: '(?i)^[a-z\d_\-\.]*[a-z\d]'
|
||||||
|
scope: variable.parameter.package-name.requirements-txt
|
||||||
|
- match: '(;)'
|
||||||
|
captures:
|
||||||
|
1: punctuation.definition.annotation.requirements-txt
|
||||||
|
push:
|
||||||
|
- meta_scope: meta.annotation.requirements-txt
|
||||||
|
# https://pip.pypa.io/en/stable/reference/inspect-report/#example
|
||||||
|
- match: |-
|
||||||
|
(?x:
|
||||||
|
implementation_name
|
||||||
|
| implementation_version
|
||||||
|
| os_name
|
||||||
|
| platform_machine
|
||||||
|
| platform_release
|
||||||
|
| platform_system
|
||||||
|
| platform_version
|
||||||
|
| python_full_version
|
||||||
|
| platform_python_implementation
|
||||||
|
| python_version
|
||||||
|
| sys_platform
|
||||||
|
)
|
||||||
|
scope: variable.language.requirements-txt
|
||||||
|
- match: '{{operator}}'
|
||||||
|
scope: keyword.operator.logical.requirements-txt
|
||||||
|
# https://pip.pypa.io/en/stable/reference/requirement-specifiers/#examples
|
||||||
|
- match: '(")'
|
||||||
|
captures:
|
||||||
|
1: punctuation.definition.string.begin.double.requirements-txt
|
||||||
|
push:
|
||||||
|
- meta_scope: string.quoted.double.requirements-txt
|
||||||
|
- match: '\\"'
|
||||||
|
scope: constant.character.escape.double.requirements-txt
|
||||||
|
- match: '(")'
|
||||||
|
captures:
|
||||||
|
1: punctuation.definition.string.end.double.requirements-txt
|
||||||
|
pop: true
|
||||||
|
- match: "(')"
|
||||||
|
captures:
|
||||||
|
1: punctuation.definition.string.begin.single.requirements-txt
|
||||||
|
push:
|
||||||
|
- meta_scope: string.quoted.single.requirements-txt
|
||||||
|
- match: '\\'''
|
||||||
|
scope: constant.character.escape.single.requirements-txt
|
||||||
|
- match: "(')"
|
||||||
|
captures:
|
||||||
|
1: punctuation.definition.string.end.single.requirements-txt
|
||||||
|
pop: true
|
||||||
|
- match: '(.(?=#)|$)'
|
||||||
|
pop: true
|
||||||
|
- match: '(\$)(\{)'
|
||||||
|
captures:
|
||||||
|
1: punctuation.definition.keyword.requirements-txt
|
||||||
|
2: punctuation.definition.begin.parameter.requirements-txt
|
||||||
|
push:
|
||||||
|
- meta_scope: variable.parameter.requirements-txt
|
||||||
|
- match: '(\})'
|
||||||
|
captures:
|
||||||
|
1: punctuation.definition.end.parameter.requirements-txt
|
||||||
|
pop: true
|
||||||
|
- match: '(#)'
|
||||||
|
captures:
|
||||||
|
1: punctuation.definition.comment.requirements-txt
|
||||||
|
push:
|
||||||
|
- meta_scope: comment.line.requirements-txt
|
||||||
|
- match: '(-*-) coding: .* (-*-)'
|
||||||
|
captures:
|
||||||
|
1: punctuation.definition.begin.pep263.requirements-txt
|
||||||
|
2: punctuation.definition.end.pep263.requirements-txt
|
||||||
|
- match: '$'
|
||||||
|
pop: true
|
|
@ -1 +1 @@
|
||||||
Subproject commit 63819a1ab6b2075360933b2cfe41b416de0e3c26
|
Subproject commit d3d94046409db6fbbc9d51dea52b589ecc9d3d48
|
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit 3b1441f89fde40678c3c0ada6d75ce46417a35b6
|
|
@ -0,0 +1,306 @@
|
||||||
|
%YAML 1.2
|
||||||
|
---
|
||||||
|
# http://www.sublimetext.com/docs/syntax.html
|
||||||
|
name: Ruby Slim
|
||||||
|
file_extensions:
|
||||||
|
- slim
|
||||||
|
- skim
|
||||||
|
scope: text.slim
|
||||||
|
contexts:
|
||||||
|
main:
|
||||||
|
- match: ^(\s*)(ruby):$
|
||||||
|
captures:
|
||||||
|
2: constant.language.name.ruby.filter.slim
|
||||||
|
push:
|
||||||
|
- meta_scope: text.ruby.filter.slim
|
||||||
|
- match: ^(?!(\1\s)|\s*$)
|
||||||
|
pop: true
|
||||||
|
- include: scope:source.ruby
|
||||||
|
- match: ^(\s*)(javascript):$
|
||||||
|
captures:
|
||||||
|
2: constant.language.name.javascript.filter.slim
|
||||||
|
push:
|
||||||
|
- meta_scope: source.js.filter.slim
|
||||||
|
- match: ^(?!(\1\s)|\s*$)
|
||||||
|
pop: true
|
||||||
|
- include: scope:source.js
|
||||||
|
- match: ^(---)\s*\n
|
||||||
|
captures:
|
||||||
|
1: storage.frontmatter.slim
|
||||||
|
push:
|
||||||
|
- meta_scope: source.yaml.meta.slim
|
||||||
|
- match: ^(---)\s*\n
|
||||||
|
captures:
|
||||||
|
1: storage.frontmatter.slim
|
||||||
|
pop: true
|
||||||
|
- include: scope:source.yaml
|
||||||
|
- match: ^(\s*)(coffee):$
|
||||||
|
captures:
|
||||||
|
2: constant.language.name.coffeescript.filter.slim
|
||||||
|
push:
|
||||||
|
- meta_scope: text.coffeescript.filter.slim
|
||||||
|
- match: ^(?!(\1\s)|\s*$)
|
||||||
|
pop: true
|
||||||
|
- include: scope:source.coffee
|
||||||
|
- match: ^(\s*)(markdown):$
|
||||||
|
captures:
|
||||||
|
2: constant.language.name.markdown.filter.slim
|
||||||
|
push:
|
||||||
|
- meta_scope: text.markdown.filter.slim
|
||||||
|
- match: ^(?!(\1\s)|\s*$)
|
||||||
|
pop: true
|
||||||
|
- include: scope:text.html.markdown
|
||||||
|
- match: ^(\s*)(css):$
|
||||||
|
captures:
|
||||||
|
2: constant.language.name.css.filter.slim
|
||||||
|
push:
|
||||||
|
- meta_scope: text.css.filter.slim
|
||||||
|
- match: ^(?!(\1\s)|\s*$)
|
||||||
|
pop: true
|
||||||
|
- include: scope:source.css
|
||||||
|
- match: ^(\s*)(sass):$
|
||||||
|
captures:
|
||||||
|
2: constant.language.name.sass.filter.slim
|
||||||
|
push:
|
||||||
|
- meta_scope: text.sass.filter.slim
|
||||||
|
- match: ^(?!(\1\s)|\s*$)
|
||||||
|
pop: true
|
||||||
|
- include: scope:source.sass
|
||||||
|
- match: ^(\s*)(scss):$
|
||||||
|
captures:
|
||||||
|
2: constant.language.name.scss.filter.slim
|
||||||
|
push:
|
||||||
|
- meta_scope: text.scss.filter.slim
|
||||||
|
- match: ^(?!(\1\s)|\s*$)
|
||||||
|
pop: true
|
||||||
|
- include: scope:source.scss
|
||||||
|
- match: ^(\s*)(less):$
|
||||||
|
captures:
|
||||||
|
2: constant.language.name.less.filter.slim
|
||||||
|
push:
|
||||||
|
- meta_scope: text.less.filter.slim
|
||||||
|
- match: ^(?!(\1\s)|\s*$)
|
||||||
|
pop: true
|
||||||
|
- include: scope:source.less
|
||||||
|
- match: ^(\s*)(erb):$
|
||||||
|
captures:
|
||||||
|
2: constant.language.name.erb.filter.slim
|
||||||
|
push:
|
||||||
|
- meta_scope: text.erb.filter.slim
|
||||||
|
- match: ^(?!(\1\s)|\s*$)
|
||||||
|
pop: true
|
||||||
|
- include: scope:source.erb
|
||||||
|
- match: ^(! )($|\s.*)
|
||||||
|
scope: meta.prolog.slim
|
||||||
|
captures:
|
||||||
|
1: punctuation.definition.prolog.slim
|
||||||
|
- match: ^(\s*)(/)\s*.*$
|
||||||
|
captures:
|
||||||
|
2: comment.line.slash.slim
|
||||||
|
push:
|
||||||
|
- meta_scope: comment.block.slim
|
||||||
|
- match: ^(?!(\1\s)|\s*$)
|
||||||
|
pop: true
|
||||||
|
- match: ^\s*(?=-)
|
||||||
|
push:
|
||||||
|
- match: $
|
||||||
|
pop: true
|
||||||
|
- include: rubyline
|
||||||
|
- match: (?==+|~)
|
||||||
|
push:
|
||||||
|
- match: $
|
||||||
|
pop: true
|
||||||
|
- include: rubyline
|
||||||
|
- include: tag-attribute
|
||||||
|
- include: embedded-ruby
|
||||||
|
- match: ^(\s*)(\||')\s*
|
||||||
|
comment: Verbatim text (can include HTML tags and copied lines)
|
||||||
|
push:
|
||||||
|
- match: ^(?!(\1\s)|\s*$)
|
||||||
|
pop: true
|
||||||
|
- include: scope:text.html.basic
|
||||||
|
- include: embedded-ruby
|
||||||
|
- match: '^\s*(\.|#|[-a-zA-Z0-9]+)([\w-]+)?'
|
||||||
|
comment: '1 - dot OR hash OR any combination of word, number; 2 - OPTIONAL any combination of word, number, dash or underscore (following a . or'
|
||||||
|
captures:
|
||||||
|
1: entity.name.tag.slim
|
||||||
|
2: entity.other.attribute-name.event.slim
|
||||||
|
push:
|
||||||
|
- meta_scope: meta.tag
|
||||||
|
- match: '$|(?!\.|#|:|-|~|/|\}|\]|\*|\s?[\*\{])'
|
||||||
|
captures:
|
||||||
|
1: entity.name.tag.slim
|
||||||
|
2: entity.other.attribute-name.event.slim
|
||||||
|
pop: true
|
||||||
|
- match: '(:[\w\d]+)+'
|
||||||
|
comment: XML
|
||||||
|
push:
|
||||||
|
- meta_scope: entity.name.tag.slim
|
||||||
|
- match: $|\s
|
||||||
|
pop: true
|
||||||
|
- match: '(:\s)(\.|#|[a-zA-Z0-9]+)([\w-]+)?'
|
||||||
|
comment: Inline HTML / 1 - colon; 2 - dot OR hash OR any combination of word, number; 3 - OPTIONAL any combination of word, number, dash or underscore (following a . or
|
||||||
|
captures:
|
||||||
|
1: punctuation.definition.tag.end.slim
|
||||||
|
2: entity.name.tag.slim
|
||||||
|
3: entity.other.attribute-name.event.slim
|
||||||
|
push:
|
||||||
|
- match: '$|(?!\.|#|=|-|~|/|\}|\]|\*|\s?[\*\{])'
|
||||||
|
captures:
|
||||||
|
1: punctuation.definition.tag.end.slim
|
||||||
|
2: entity.name.tag.slim
|
||||||
|
3: entity.other.attribute-name.event.slim
|
||||||
|
pop: true
|
||||||
|
- include: root-class-id-tag
|
||||||
|
- include: tag-attribute
|
||||||
|
- match: '(\*\{)(?=.*\}|.*\|\s*$)'
|
||||||
|
comment: Splat attributes
|
||||||
|
captures:
|
||||||
|
1: punctuation.section.embedded.ruby
|
||||||
|
push:
|
||||||
|
- meta_scope: source.ruby.embedded.slim
|
||||||
|
- match: '(\})|$|^(?!.*\|\s*$)'
|
||||||
|
captures:
|
||||||
|
1: punctuation.section.embedded.ruby
|
||||||
|
pop: true
|
||||||
|
- include: embedded-ruby
|
||||||
|
- include: root-class-id-tag
|
||||||
|
- include: rubyline
|
||||||
|
- match: /
|
||||||
|
scope: punctuation.terminator.tag.slim
|
||||||
|
- match: ^\s*(\\.)
|
||||||
|
captures:
|
||||||
|
1: meta.escape.slim
|
||||||
|
- match: ^\s*(?=\||')
|
||||||
|
push:
|
||||||
|
- match: $
|
||||||
|
pop: true
|
||||||
|
- include: embedded-ruby
|
||||||
|
- include: scope:text.html.basic
|
||||||
|
- match: '(?=<[\w\d\:]+)'
|
||||||
|
comment: Inline and root-level HTML tags
|
||||||
|
push:
|
||||||
|
- match: $|\/\>
|
||||||
|
pop: true
|
||||||
|
- include: scope:text.html.basic
|
||||||
|
continuation:
|
||||||
|
- match: '([\\,])\s*\n'
|
||||||
|
captures:
|
||||||
|
1: punctuation.separator.continuation.slim
|
||||||
|
delimited-ruby-a:
|
||||||
|
- match: '=\('
|
||||||
|
push:
|
||||||
|
- meta_scope: source.ruby.embedded.slim
|
||||||
|
- match: \)(?=( \w|$))
|
||||||
|
pop: true
|
||||||
|
- include: scope:source.ruby.rails
|
||||||
|
delimited-ruby-b:
|
||||||
|
- match: '=\['
|
||||||
|
push:
|
||||||
|
- meta_scope: source.ruby.embedded.slim
|
||||||
|
- match: '\](?=( \w|$))'
|
||||||
|
pop: true
|
||||||
|
- include: scope:source.ruby.rails
|
||||||
|
delimited-ruby-c:
|
||||||
|
- match: '=\{'
|
||||||
|
push:
|
||||||
|
- meta_scope: source.ruby.embedded.slim
|
||||||
|
- match: '\}(?=( \w|$))'
|
||||||
|
pop: true
|
||||||
|
- include: scope:source.ruby.rails
|
||||||
|
embedded-ruby:
|
||||||
|
- match: '(?<!\\)#\{{1,2}'
|
||||||
|
captures:
|
||||||
|
0: punctuation.section.embedded.ruby
|
||||||
|
push:
|
||||||
|
- meta_scope: source.ruby.embedded.html
|
||||||
|
- match: '\}{1,2}'
|
||||||
|
captures:
|
||||||
|
0: punctuation.section.embedded.ruby
|
||||||
|
pop: true
|
||||||
|
- include: scope:source.ruby.rails
|
||||||
|
entities:
|
||||||
|
- match: '(&)([a-zA-Z0-9]+|#[0-9]+|#x[0-9a-fA-F]+)(;)'
|
||||||
|
scope: constant.character.entity.html
|
||||||
|
captures:
|
||||||
|
1: punctuation.definition.entity.html
|
||||||
|
3: punctuation.definition.entity.html
|
||||||
|
- match: '&'
|
||||||
|
scope: invalid.illegal.bad-ampersand.html
|
||||||
|
interpolated-ruby:
|
||||||
|
- match: '=(?=\b)'
|
||||||
|
push:
|
||||||
|
- meta_scope: source.ruby.embedded.html
|
||||||
|
- match: \s|\w$
|
||||||
|
pop: true
|
||||||
|
root-class-id-tag:
|
||||||
|
- match: '(\.|#)([\w\d\-]+)'
|
||||||
|
captures:
|
||||||
|
1: punctuation.separator.key-value.html
|
||||||
|
2: entity.other.attribute-name.html
|
||||||
|
rubyline:
|
||||||
|
- match: (==|=)(<>|><|<'|'<|<|>)?|-
|
||||||
|
comment: Hack to thwart Sublime's Ruby highlighter. It thinks do without a variable continues the next line (this can be muted with a / at the end of the line). For things like yields, do is unnecessary without an argument, so this hack will suffice
|
||||||
|
push:
|
||||||
|
- meta_scope: meta.line.ruby.slim
|
||||||
|
- meta_content_scope: source.ruby.embedded.slim
|
||||||
|
- match: (do\s*\n$)|(?<!\\|,|,\n|\\\n)$
|
||||||
|
captures:
|
||||||
|
1: keyword.control.start-block.ruby
|
||||||
|
pop: true
|
||||||
|
- match: '#.*$'
|
||||||
|
comment: Hack to let ruby comments work in this context properly
|
||||||
|
scope: comment.line.number-sign.ruby
|
||||||
|
- include: continuation
|
||||||
|
- include: scope:source.ruby.rails
|
||||||
|
string-double-quoted:
|
||||||
|
- match: (")(?=.*")
|
||||||
|
captures:
|
||||||
|
0: punctuation.definition.string.begin.html
|
||||||
|
push:
|
||||||
|
- meta_scope: string.quoted.double.html
|
||||||
|
- meta_content_scope: meta.toc-list.id.html
|
||||||
|
- match: '"'
|
||||||
|
captures:
|
||||||
|
0: punctuation.definition.string.end.html
|
||||||
|
pop: true
|
||||||
|
- include: embedded-ruby
|
||||||
|
- include: entities
|
||||||
|
string-single-quoted:
|
||||||
|
- match: (')(?=.*')
|
||||||
|
captures:
|
||||||
|
0: punctuation.definition.string.begin.html
|
||||||
|
push:
|
||||||
|
- meta_scope: string.quoted.single.html
|
||||||
|
- meta_content_scope: meta.toc-list.id.html
|
||||||
|
- match: "'"
|
||||||
|
captures:
|
||||||
|
0: punctuation.definition.string.end.html
|
||||||
|
pop: true
|
||||||
|
- include: embedded-ruby
|
||||||
|
- include: entities
|
||||||
|
tag-attribute:
|
||||||
|
- match: '([\w.#_-]+)(=)(?!\s)(true|false|nil)?(\s*\(|\{)?'
|
||||||
|
captures:
|
||||||
|
1: entity.other.attribute-name.event.slim
|
||||||
|
2: punctuation.separator.key-value.html
|
||||||
|
3: constant.language.slim
|
||||||
|
push:
|
||||||
|
- meta_scope: meta.attribute-with-value.slim
|
||||||
|
- match: '\}|\)|$'
|
||||||
|
captures:
|
||||||
|
1: entity.other.attribute-name.event.slim
|
||||||
|
2: punctuation.separator.key-value.html
|
||||||
|
3: constant.language.slim
|
||||||
|
pop: true
|
||||||
|
- include: tag-stuff
|
||||||
|
- include: string-double-quoted
|
||||||
|
- include: string-single-quoted
|
||||||
|
tag-stuff:
|
||||||
|
- include: tag-attribute
|
||||||
|
- include: interpolated-ruby
|
||||||
|
- include: delimited-ruby-a
|
||||||
|
- include: delimited-ruby-b
|
||||||
|
- include: delimited-ruby-c
|
||||||
|
- include: rubyline
|
||||||
|
- include: embedded-ruby
|
|
@ -197,7 +197,7 @@ contexts:
|
||||||
scope: entity.other.attribute-name.stylus
|
scope: entity.other.attribute-name.stylus
|
||||||
- match: |-
|
- match: |-
|
||||||
(?x) # multi-line regex definition mode
|
(?x) # multi-line regex definition mode
|
||||||
(?<=^|;|{)\s* # starts after begining of line, '{' or ';''
|
(?<=^|;|{)\s* # starts after beginning of line, '{' or ';''
|
||||||
(?= # lookahead for
|
(?= # lookahead for
|
||||||
(
|
(
|
||||||
[a-zA-Z0-9_-] # then a letter
|
[a-zA-Z0-9_-] # then a letter
|
||||||
|
@ -207,7 +207,7 @@ contexts:
|
||||||
(/\*.*?\*/) # comment
|
(/\*.*?\*/) # comment
|
||||||
)+
|
)+
|
||||||
|
|
||||||
\s*[:\s]\s* # value is separted by colon or space
|
\s*[:\s]\s* # value is separated by colon or space
|
||||||
|
|
||||||
(?!(\s*\{)) # if there are only spaces afterwards
|
(?!(\s*\{)) # if there are only spaces afterwards
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit b7e53e5d86814f04a48d2e441bcf5f9fdf07e9c1
|
|
@ -1 +1 @@
|
||||||
Subproject commit 0f14b7caf3c775a5d18551a9563a9debdb10c9a9
|
Subproject commit fd0bf3e5d6c9e6397c0dc9639a0514d9bf55b800
|
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit 071a004217f981152c78dc7a530536374a753d98
|
|
@ -1 +1 @@
|
||||||
Subproject commit a607ddfec90648c1c2f33f8306733f6aec5d2b78
|
Subproject commit ba45efd058df5111837e30fb9598cfc8cbd51095
|
|
@ -4,6 +4,8 @@
|
||||||
name: TypeScript
|
name: TypeScript
|
||||||
file_extensions:
|
file_extensions:
|
||||||
- ts
|
- ts
|
||||||
|
- mts
|
||||||
|
- cts
|
||||||
scope: source.ts
|
scope: source.ts
|
||||||
contexts:
|
contexts:
|
||||||
main:
|
main:
|
||||||
|
@ -44,7 +46,7 @@ contexts:
|
||||||
- match: (?=$)
|
- match: (?=$)
|
||||||
pop: true
|
pop: true
|
||||||
access-modifier:
|
access-modifier:
|
||||||
- match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(abstract|public|protected|private|readonly|static|declare)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
|
- match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(abstract|declare|override|public|protected|private|readonly|static)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
|
||||||
scope: storage.modifier.ts
|
scope: storage.modifier.ts
|
||||||
after-operator-block-as-object-literal:
|
after-operator-block-as-object-literal:
|
||||||
- match: '(?<!\+\+|--)(?<=[:=(,\[?+!>]|^await|[^\._$[:alnum:]]await|^return|[^\._$[:alnum:]]return|^yield|[^\._$[:alnum:]]yield|^throw|[^\._$[:alnum:]]throw|^in|[^\._$[:alnum:]]in|^of|[^\._$[:alnum:]]of|^typeof|[^\._$[:alnum:]]typeof|&&|\|\||\*)\s*(\{)'
|
- match: '(?<!\+\+|--)(?<=[:=(,\[?+!>]|^await|[^\._$[:alnum:]]await|^return|[^\._$[:alnum:]]return|^yield|[^\._$[:alnum:]]yield|^throw|[^\._$[:alnum:]]throw|^in|[^\._$[:alnum:]]in|^of|[^\._$[:alnum:]]of|^typeof|[^\._$[:alnum:]]typeof|&&|\|\||\*)\s*(\{)'
|
||||||
|
@ -106,7 +108,7 @@ contexts:
|
||||||
(?=
|
(?=
|
||||||
# sure shot arrow functions even if => is on new line
|
# sure shot arrow functions even if => is on new line
|
||||||
(
|
(
|
||||||
(<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?
|
(<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?
|
||||||
[(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
|
[(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
|
||||||
(
|
(
|
||||||
([)]\s*:) | # ():
|
([)]\s*:) | # ():
|
||||||
|
@ -116,9 +118,9 @@ contexts:
|
||||||
|
|
||||||
# arrow function possible to detect only with => on same line
|
# arrow function possible to detect only with => on same line
|
||||||
(
|
(
|
||||||
(<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters
|
(<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters
|
||||||
\(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
|
\(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
|
||||||
(\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
|
(\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
|
||||||
\s*=> # arrow operator
|
\s*=> # arrow operator
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
@ -268,7 +270,7 @@ contexts:
|
||||||
- include: decorator
|
- include: decorator
|
||||||
- match: (?<=:)\s*
|
- match: (?<=:)\s*
|
||||||
push:
|
push:
|
||||||
- match: '(?=\s|[;),}\]:\-\+]|;|(?:^\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\b))'
|
- match: '(?=\s|[;),}\]:\-\+]|;|^\s*$|(?:^\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\b))'
|
||||||
pop: true
|
pop: true
|
||||||
- include: expression
|
- include: expression
|
||||||
- include: method-declaration
|
- include: method-declaration
|
||||||
|
@ -317,7 +319,12 @@ contexts:
|
||||||
- match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(break|continue|do|goto|while)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
|
- match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(break|continue|do|goto|while)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
|
||||||
scope: keyword.control.loop.ts
|
scope: keyword.control.loop.ts
|
||||||
- match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(return)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
|
- match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(return)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
|
||||||
scope: keyword.control.flow.ts
|
captures:
|
||||||
|
0: keyword.control.flow.ts
|
||||||
|
push:
|
||||||
|
- match: '(?=[;}]|$|;|^\s*$|(?:^\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\b))'
|
||||||
|
pop: true
|
||||||
|
- include: expression
|
||||||
- match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(case|default|switch)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
|
- match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(case|default|switch)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
|
||||||
scope: keyword.control.switch.ts
|
scope: keyword.control.switch.ts
|
||||||
- include: if-statement
|
- include: if-statement
|
||||||
|
@ -762,7 +769,7 @@ contexts:
|
||||||
4: keyword.control.default.ts
|
4: keyword.control.default.ts
|
||||||
push:
|
push:
|
||||||
- meta_scope: meta.export.default.ts
|
- meta_scope: meta.export.default.ts
|
||||||
- match: (?=$|;|(?:^\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\b))
|
- match: (?=$|;|^\s*$|(?:^\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\b))
|
||||||
pop: true
|
pop: true
|
||||||
- include: interface-declaration
|
- include: interface-declaration
|
||||||
- include: expression
|
- include: expression
|
||||||
|
@ -772,7 +779,7 @@ contexts:
|
||||||
2: keyword.control.type.ts
|
2: keyword.control.type.ts
|
||||||
push:
|
push:
|
||||||
- meta_scope: meta.export.ts
|
- meta_scope: meta.export.ts
|
||||||
- match: (?=$|;|(?:^\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\b))
|
- match: (?=$|;|^\s*$|(?:^\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\b))
|
||||||
pop: true
|
pop: true
|
||||||
- include: import-export-declaration
|
- include: import-export-declaration
|
||||||
expression:
|
expression:
|
||||||
|
@ -785,11 +792,11 @@ contexts:
|
||||||
- include: string
|
- include: string
|
||||||
- include: decorator
|
- include: decorator
|
||||||
- include: destructuring-parameter
|
- include: destructuring-parameter
|
||||||
- match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(public|protected|private|readonly)\s+(?=(public|protected|private|readonly)\s+)'
|
- match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(override|public|protected|private|readonly)\s+(?=(override|public|protected|private|readonly)\s+)'
|
||||||
captures:
|
captures:
|
||||||
1: storage.modifier.ts
|
1: storage.modifier.ts
|
||||||
- match: |-
|
- match: |-
|
||||||
(?x)(?:(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(public|private|protected|readonly)\s+)?(?:(\.\.\.)\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s*(\??)(?=\s*
|
(?x)(?:(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(override|public|private|protected|readonly)\s+)?(?:(\.\.\.)\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s*(\??)(?=\s*
|
||||||
# function assignment |
|
# function assignment |
|
||||||
(=\s*(
|
(=\s*(
|
||||||
((async\s+)?(
|
((async\s+)?(
|
||||||
|
@ -798,10 +805,10 @@ contexts:
|
||||||
([_$[:alpha:]][_$[:alnum:]]*\s*=>)
|
([_$[:alpha:]][_$[:alnum:]]*\s*=>)
|
||||||
)) |
|
)) |
|
||||||
((async\s*)?(
|
((async\s*)?(
|
||||||
((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{[^\{\}]*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[[^\[\]]*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
|
((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
|
||||||
# sure shot arrow functions even if => is on new line
|
# sure shot arrow functions even if => is on new line
|
||||||
(
|
(
|
||||||
(<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?
|
(<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?
|
||||||
[(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
|
[(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
|
||||||
(
|
(
|
||||||
([)]\s*:) | # ():
|
([)]\s*:) | # ():
|
||||||
|
@ -811,9 +818,9 @@ contexts:
|
||||||
|
|
||||||
# arrow function possible to detect only with => on same line
|
# arrow function possible to detect only with => on same line
|
||||||
(
|
(
|
||||||
(<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters
|
(<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters
|
||||||
\(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
|
\(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
|
||||||
(\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
|
(\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
|
||||||
\s*=> # arrow operator
|
\s*=> # arrow operator
|
||||||
)
|
)
|
||||||
))
|
))
|
||||||
|
@ -831,18 +838,18 @@ contexts:
|
||||||
))
|
))
|
||||||
)) |
|
)) |
|
||||||
(:\s*(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))Function(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))) |
|
(:\s*(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))Function(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))) |
|
||||||
(:\s*((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{[^\{\}]*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[[^\[\]]*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))))) |
|
(:\s*((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))))) |
|
||||||
(:\s*(=>|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(<[^<>]*>)|[^<>(),=])+=\s*(
|
(:\s*(=>|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(<[^<>]*>)|[^<>(),=])+=\s*(
|
||||||
((async\s+)?(
|
((async\s+)?(
|
||||||
(function\s*[(<*]) |
|
(function\s*[(<*]) |
|
||||||
(function\s+) |
|
(function\s+) |
|
||||||
([_$[:alpha:]][_$[:alnum:]]*\s*=>)
|
([_$[:alpha:]][_$[:alnum:]]*\s*=>)
|
||||||
)) |
|
)) |
|
||||||
((async\s*)?(
|
((async\s*)?(
|
||||||
((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{[^\{\}]*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[[^\[\]]*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
|
((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
|
||||||
# sure shot arrow functions even if => is on new line
|
# sure shot arrow functions even if => is on new line
|
||||||
(
|
(
|
||||||
(<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?
|
(<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?
|
||||||
[(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
|
[(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
|
||||||
(
|
(
|
||||||
([)]\s*:) | # ():
|
([)]\s*:) | # ():
|
||||||
|
@ -852,9 +859,9 @@ contexts:
|
||||||
|
|
||||||
# arrow function possible to detect only with => on same line
|
# arrow function possible to detect only with => on same line
|
||||||
(
|
(
|
||||||
(<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters
|
(<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters
|
||||||
\(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
|
\(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
|
||||||
(\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
|
(\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
|
||||||
\s*=> # arrow operator
|
\s*=> # arrow operator
|
||||||
)
|
)
|
||||||
))
|
))
|
||||||
|
@ -865,7 +872,7 @@ contexts:
|
||||||
3: entity.name.function.ts variable.language.this.ts
|
3: entity.name.function.ts variable.language.this.ts
|
||||||
4: entity.name.function.ts
|
4: entity.name.function.ts
|
||||||
5: keyword.operator.optional.ts
|
5: keyword.operator.optional.ts
|
||||||
- match: '(?x)(?:(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(public|private|protected|readonly)\s+)?(?:(\.\.\.)\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s*(\??)(?=\s*[:,]|$)'
|
- match: '(?x)(?:(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(override|public|private|protected|readonly)\s+)?(?:(\.\.\.)\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s*(\??)(?=\s*[:,]|$)'
|
||||||
captures:
|
captures:
|
||||||
1: storage.modifier.ts
|
1: storage.modifier.ts
|
||||||
2: keyword.operator.rest.ts
|
2: keyword.operator.rest.ts
|
||||||
|
@ -930,10 +937,11 @@ contexts:
|
||||||
scope: keyword.operator.comparison.ts
|
scope: keyword.operator.comparison.ts
|
||||||
- match: <=|>=|<>|<|>
|
- match: <=|>=|<>|<|>
|
||||||
scope: keyword.operator.relational.ts
|
scope: keyword.operator.relational.ts
|
||||||
- match: '(?<=[_$[:alnum:]])(\!)\s*(/)(?![/*])'
|
- match: '(?<=[_$[:alnum:]])(\!)\s*(?:(/=)|(?:(/)(?![/*])))'
|
||||||
captures:
|
captures:
|
||||||
1: keyword.operator.logical.ts
|
1: keyword.operator.logical.ts
|
||||||
2: keyword.operator.arithmetic.ts
|
2: keyword.operator.assignment.compound.ts
|
||||||
|
3: keyword.operator.arithmetic.ts
|
||||||
- match: \!|&&|\|\||\?\?
|
- match: \!|&&|\|\||\?\?
|
||||||
scope: keyword.operator.logical.ts
|
scope: keyword.operator.logical.ts
|
||||||
- match: \&|~|\^|\|
|
- match: \&|~|\^|\|
|
||||||
|
@ -946,16 +954,18 @@ contexts:
|
||||||
scope: keyword.operator.increment.ts
|
scope: keyword.operator.increment.ts
|
||||||
- match: '%|\*|/|-|\+'
|
- match: '%|\*|/|-|\+'
|
||||||
scope: keyword.operator.arithmetic.ts
|
scope: keyword.operator.arithmetic.ts
|
||||||
- match: '(?<=[_$[:alnum:])\]])\s*(?=(\/\*([^\*]|(\*[^\/]))*\*\/\s*)+(/)(?![/*]))'
|
- match: '(?<=[_$[:alnum:])\]])\s*(?=(\/\*([^\*]|(\*[^\/]))*\*\/\s*)+(?:(/=)|(?:(/)(?![/*]))))'
|
||||||
push:
|
push:
|
||||||
- match: '(/)(?!\*([^\*]|(\*[^\/]))*\*\/)'
|
- match: '(?:(/=)|(?:(/)(?!\*([^\*]|(\*[^\/]))*\*\/)))'
|
||||||
captures:
|
captures:
|
||||||
1: keyword.operator.arithmetic.ts
|
1: keyword.operator.assignment.compound.ts
|
||||||
|
2: keyword.operator.arithmetic.ts
|
||||||
pop: true
|
pop: true
|
||||||
- include: comment
|
- include: comment
|
||||||
- match: '(?<=[_$[:alnum:])\]])\s*(/)(?![/*])'
|
- match: '(?<=[_$[:alnum:])\]])\s*(?:(/=)|(?:(/)(?![/*])))'
|
||||||
captures:
|
captures:
|
||||||
1: keyword.operator.arithmetic.ts
|
1: keyword.operator.assignment.compound.ts
|
||||||
|
2: keyword.operator.arithmetic.ts
|
||||||
expressionPunctuations:
|
expressionPunctuations:
|
||||||
- include: punctuation-comma
|
- include: punctuation-comma
|
||||||
- include: punctuation-accessor
|
- include: punctuation-accessor
|
||||||
|
@ -1021,10 +1031,10 @@ contexts:
|
||||||
([_$[:alpha:]][_$[:alnum:]]*\s*=>)
|
([_$[:alpha:]][_$[:alnum:]]*\s*=>)
|
||||||
)) |
|
)) |
|
||||||
((async\s*)?(
|
((async\s*)?(
|
||||||
((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{[^\{\}]*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[[^\[\]]*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
|
((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
|
||||||
# sure shot arrow functions even if => is on new line
|
# sure shot arrow functions even if => is on new line
|
||||||
(
|
(
|
||||||
(<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?
|
(<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?
|
||||||
[(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
|
[(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
|
||||||
(
|
(
|
||||||
([)]\s*:) | # ():
|
([)]\s*:) | # ():
|
||||||
|
@ -1034,9 +1044,9 @@ contexts:
|
||||||
|
|
||||||
# arrow function possible to detect only with => on same line
|
# arrow function possible to detect only with => on same line
|
||||||
(
|
(
|
||||||
(<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters
|
(<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters
|
||||||
\(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
|
\(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
|
||||||
(\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
|
(\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
|
||||||
\s*=> # arrow operator
|
\s*=> # arrow operator
|
||||||
)
|
)
|
||||||
))
|
))
|
||||||
|
@ -1054,18 +1064,18 @@ contexts:
|
||||||
))
|
))
|
||||||
)) |
|
)) |
|
||||||
(:\s*(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))Function(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))) |
|
(:\s*(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))Function(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))) |
|
||||||
(:\s*((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{[^\{\}]*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[[^\[\]]*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))))) |
|
(:\s*((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))))) |
|
||||||
(:\s*(=>|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(<[^<>]*>)|[^<>(),=])+=\s*(
|
(:\s*(=>|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(<[^<>]*>)|[^<>(),=])+=\s*(
|
||||||
((async\s+)?(
|
((async\s+)?(
|
||||||
(function\s*[(<*]) |
|
(function\s*[(<*]) |
|
||||||
(function\s+) |
|
(function\s+) |
|
||||||
([_$[:alpha:]][_$[:alnum:]]*\s*=>)
|
([_$[:alpha:]][_$[:alnum:]]*\s*=>)
|
||||||
)) |
|
)) |
|
||||||
((async\s*)?(
|
((async\s*)?(
|
||||||
((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{[^\{\}]*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[[^\[\]]*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
|
((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
|
||||||
# sure shot arrow functions even if => is on new line
|
# sure shot arrow functions even if => is on new line
|
||||||
(
|
(
|
||||||
(<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?
|
(<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?
|
||||||
[(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
|
[(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
|
||||||
(
|
(
|
||||||
([)]\s*:) | # ():
|
([)]\s*:) | # ():
|
||||||
|
@ -1075,9 +1085,9 @@ contexts:
|
||||||
|
|
||||||
# arrow function possible to detect only with => on same line
|
# arrow function possible to detect only with => on same line
|
||||||
(
|
(
|
||||||
(<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters
|
(<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters
|
||||||
\(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
|
\(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
|
||||||
(\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
|
(\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
|
||||||
\s*=> # arrow operator
|
\s*=> # arrow operator
|
||||||
)
|
)
|
||||||
))
|
))
|
||||||
|
@ -1118,18 +1128,19 @@ contexts:
|
||||||
- include: type-parameters
|
- include: type-parameters
|
||||||
- include: function-parameters
|
- include: function-parameters
|
||||||
- include: return-type
|
- include: return-type
|
||||||
|
- include: type-function-return-type
|
||||||
- include: decl-block
|
- include: decl-block
|
||||||
- match: \*
|
- match: \*
|
||||||
scope: keyword.generator.asterisk.ts
|
scope: keyword.generator.asterisk.ts
|
||||||
function-call:
|
function-call:
|
||||||
- match: '(?=(((([_$[:alpha:]][_$[:alnum:]]*)(\s*\??\.\s*(\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\??\.\s*\#?[_$[:alpha:]][_$[:alnum:]]*))|(?<=[\)]))\s*(?:(\?\.\s*)|(\!))?((<\s*(((keyof|infer|awaited|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|awaited|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))(([^<>\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|awaited|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?<==)\>)*(?<!=)\>))*(?<!=)\>)*(?<!=)>\s*)?\())'
|
- match: '(?=(((([_$[:alpha:]][_$[:alnum:]]*)(\s*\??\.\s*(\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\??\.\s*\#?[_$[:alpha:]][_$[:alnum:]]*))|(?<=[\)]))\s*(?:(\?\.\s*)|(\!))?((<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))(([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>)*(?<!=)\>))*(?<!=)\>)*(?<!=)>\s*)?\())'
|
||||||
push:
|
push:
|
||||||
- match: '(?<=\))(?!(((([_$[:alpha:]][_$[:alnum:]]*)(\s*\??\.\s*(\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\??\.\s*\#?[_$[:alpha:]][_$[:alnum:]]*))|(?<=[\)]))\s*(?:(\?\.\s*)|(\!))?((<\s*(((keyof|infer|awaited|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|awaited|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))(([^<>\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|awaited|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?<==)\>)*(?<!=)\>))*(?<!=)\>)*(?<!=)>\s*)?\())'
|
- match: '(?<=\))(?!(((([_$[:alpha:]][_$[:alnum:]]*)(\s*\??\.\s*(\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\??\.\s*\#?[_$[:alpha:]][_$[:alnum:]]*))|(?<=[\)]))\s*(?:(\?\.\s*)|(\!))?((<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))(([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>)*(?<!=)\>))*(?<!=)\>)*(?<!=)>\s*)?\())'
|
||||||
pop: true
|
pop: true
|
||||||
- match: '(?=(([_$[:alpha:]][_$[:alnum:]]*)(\s*\??\.\s*(\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\??\.\s*\#?[_$[:alpha:]][_$[:alnum:]]*))'
|
- match: '(?=(([_$[:alpha:]][_$[:alnum:]]*)(\s*\??\.\s*(\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\??\.\s*\#?[_$[:alpha:]][_$[:alnum:]]*))'
|
||||||
push:
|
push:
|
||||||
- meta_scope: meta.function-call.ts
|
- meta_scope: meta.function-call.ts
|
||||||
- match: '(?=\s*(?:(\?\.\s*)|(\!))?((<\s*(((keyof|infer|awaited|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|awaited|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))(([^<>\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|awaited|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?<==)\>)*(?<!=)\>))*(?<!=)\>)*(?<!=)>\s*)?\())'
|
- match: '(?=\s*(?:(\?\.\s*)|(\!))?((<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))(([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>)*(?<!=)\>))*(?<!=)\>)*(?<!=)>\s*)?\())'
|
||||||
pop: true
|
pop: true
|
||||||
- include: function-call-target
|
- include: function-call-target
|
||||||
- include: comment
|
- include: comment
|
||||||
|
@ -1169,7 +1180,7 @@ contexts:
|
||||||
6: meta.definition.function.ts entity.name.function.ts
|
6: meta.definition.function.ts entity.name.function.ts
|
||||||
push:
|
push:
|
||||||
- meta_scope: meta.function.ts
|
- meta_scope: meta.function.ts
|
||||||
- match: '(?=;|(?:^\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\b))|(?<=\})'
|
- match: '(?=;|^\s*$|(?:^\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\b))|(?<=\})'
|
||||||
pop: true
|
pop: true
|
||||||
- include: function-name
|
- include: function-name
|
||||||
- include: function-body
|
- include: function-body
|
||||||
|
@ -1221,10 +1232,10 @@ contexts:
|
||||||
([_$[:alpha:]][_$[:alnum:]]*\s*=>)
|
([_$[:alpha:]][_$[:alnum:]]*\s*=>)
|
||||||
)) |
|
)) |
|
||||||
((async\s*)?(
|
((async\s*)?(
|
||||||
((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{[^\{\}]*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[[^\[\]]*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
|
((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
|
||||||
# sure shot arrow functions even if => is on new line
|
# sure shot arrow functions even if => is on new line
|
||||||
(
|
(
|
||||||
(<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?
|
(<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?
|
||||||
[(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
|
[(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
|
||||||
(
|
(
|
||||||
([)]\s*:) | # ():
|
([)]\s*:) | # ():
|
||||||
|
@ -1234,9 +1245,9 @@ contexts:
|
||||||
|
|
||||||
# arrow function possible to detect only with => on same line
|
# arrow function possible to detect only with => on same line
|
||||||
(
|
(
|
||||||
(<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters
|
(<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters
|
||||||
\(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
|
\(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
|
||||||
(\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
|
(\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
|
||||||
\s*=> # arrow operator
|
\s*=> # arrow operator
|
||||||
)
|
)
|
||||||
))
|
))
|
||||||
|
@ -1260,7 +1271,7 @@ contexts:
|
||||||
- match: "[_$[:alpha:]][_$[:alnum:]]*"
|
- match: "[_$[:alpha:]][_$[:alnum:]]*"
|
||||||
scope: variable.other.readwrite.ts
|
scope: variable.other.readwrite.ts
|
||||||
if-statement:
|
if-statement:
|
||||||
- match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?=\bif\s*(\(([^\(\)]|(\([^\(\)]*\)))*\))\s*(?!\{))'
|
- match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?=\bif\s*(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))\s*(?!\{))'
|
||||||
push:
|
push:
|
||||||
- match: '(?=;|$|\})'
|
- match: '(?=;|$|\})'
|
||||||
pop: true
|
pop: true
|
||||||
|
@ -1275,12 +1286,12 @@ contexts:
|
||||||
0: meta.brace.round.ts
|
0: meta.brace.round.ts
|
||||||
pop: true
|
pop: true
|
||||||
- include: expression
|
- include: expression
|
||||||
- match: '(?<=\))\s*\/(?![\/*])(?=(?:[^\/\\\[]|\\.|\[([^\]\\]|\\.)+\])+\/([gimsuy]+|(?![\/\*])|(?=\/\*))(?!\s*[a-zA-Z0-9_$]))'
|
- match: '(?<=\))\s*\/(?![\/*])(?=(?:[^\/\\\[]|\\.|\[([^\]\\]|\\.)*\])+\/([dgimsuy]+|(?![\/\*])|(?=\/\*))(?!\s*[a-zA-Z0-9_$]))'
|
||||||
captures:
|
captures:
|
||||||
0: punctuation.definition.string.begin.ts
|
0: punctuation.definition.string.begin.ts
|
||||||
push:
|
push:
|
||||||
- meta_scope: string.regexp.ts
|
- meta_scope: string.regexp.ts
|
||||||
- match: "(/)([gimsuy]*)"
|
- match: "(/)([dgimsuy]*)"
|
||||||
captures:
|
captures:
|
||||||
1: punctuation.definition.string.end.ts
|
1: punctuation.definition.string.end.ts
|
||||||
2: keyword.other.ts
|
2: keyword.other.ts
|
||||||
|
@ -1414,6 +1425,9 @@ contexts:
|
||||||
2: keyword.operator.type.modifier.ts
|
2: keyword.operator.type.modifier.ts
|
||||||
3: keyword.operator.optional.ts
|
3: keyword.operator.optional.ts
|
||||||
pop: true
|
pop: true
|
||||||
|
- match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(as)\s+'
|
||||||
|
captures:
|
||||||
|
1: keyword.control.as.ts
|
||||||
- include: type
|
- include: type
|
||||||
inline-tags:
|
inline-tags:
|
||||||
- match: '(\[)[^\]]+(\])(?={@(?:link|linkcode|linkplain|tutorial))'
|
- match: '(\[)[^\]]+(\])(?={@(?:link|linkcode|linkplain|tutorial))'
|
||||||
|
@ -1504,25 +1518,27 @@ contexts:
|
||||||
- include: this-literal
|
- include: this-literal
|
||||||
- include: super-literal
|
- include: super-literal
|
||||||
method-declaration:
|
method-declaration:
|
||||||
- match: '(?x)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:\b(public|private|protected)\s+)?(?:\b(abstract)\s+)?(?:\b(async)\s+)?\s*\b(constructor)\b(?!:)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
|
- match: '(?x)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:\b(override)\s+)?(?:\b(public|private|protected)\s+)?(?:\b(abstract)\s+)?(?:\b(async)\s+)?\s*\b(constructor)\b(?!:)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
|
||||||
captures:
|
captures:
|
||||||
1: storage.modifier.ts
|
1: storage.modifier.ts
|
||||||
2: storage.modifier.ts
|
2: storage.modifier.ts
|
||||||
3: storage.modifier.async.ts
|
3: storage.modifier.ts
|
||||||
4: storage.type.ts
|
4: storage.modifier.async.ts
|
||||||
|
5: storage.type.ts
|
||||||
push:
|
push:
|
||||||
- meta_scope: meta.method.declaration.ts
|
- meta_scope: meta.method.declaration.ts
|
||||||
- match: '(?=\}|;|,|$)|(?<=\})'
|
- match: '(?=\}|;|,|$)|(?<=\})'
|
||||||
pop: true
|
pop: true
|
||||||
- include: method-declaration-name
|
- include: method-declaration-name
|
||||||
- include: function-body
|
- include: function-body
|
||||||
- match: '(?x)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:\b(public|private|protected)\s+)?(?:\b(abstract)\s+)?(?:\b(async)\s+)?(?:(?:\s*\b(new)\b(?!:)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))|(?:(\*)\s*)?)(?=\s*((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*))?[\(])'
|
- match: '(?x)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:\b(override)\s+)?(?:\b(public|private|protected)\s+)?(?:\b(abstract)\s+)?(?:\b(async)\s+)?(?:(?:\s*\b(new)\b(?!:)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))|(?:(\*)\s*)?)(?=\s*((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*))?[\(])'
|
||||||
captures:
|
captures:
|
||||||
1: storage.modifier.ts
|
1: storage.modifier.ts
|
||||||
2: storage.modifier.ts
|
2: storage.modifier.ts
|
||||||
3: storage.modifier.async.ts
|
3: storage.modifier.ts
|
||||||
4: keyword.operator.new.ts
|
4: storage.modifier.async.ts
|
||||||
5: keyword.generator.asterisk.ts
|
5: keyword.operator.new.ts
|
||||||
|
6: keyword.generator.asterisk.ts
|
||||||
push:
|
push:
|
||||||
- meta_scope: meta.method.declaration.ts
|
- meta_scope: meta.method.declaration.ts
|
||||||
- match: '(?=\}|;|,|$)|(?<=\})'
|
- match: '(?=\}|;|,|$)|(?<=\})'
|
||||||
|
@ -1530,7 +1546,7 @@ contexts:
|
||||||
- include: method-declaration-name
|
- include: method-declaration-name
|
||||||
- include: function-body
|
- include: function-body
|
||||||
- match: |-
|
- match: |-
|
||||||
(?x)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:\b(public|private|protected)\s+)?(?:\b(abstract)\s+)?(?:\b(async)\s+)?(?:\b(get|set)\s+)?(?:(\*)\s*)?(?=\s*(((\b(?<!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?<!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?<!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?<!\$)(?:
|
(?x)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:\b(override)\s+)?(?:\b(public|private|protected)\s+)?(?:\b(abstract)\s+)?(?:\b(async)\s+)?(?:\b(get|set)\s+)?(?:(\*)\s*)?(?=\s*(((\b(?<!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?<!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?<!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?<!\$)(?:
|
||||||
(?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3
|
(?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3
|
||||||
(?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3
|
(?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3
|
||||||
(?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3
|
(?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3
|
||||||
|
@ -1539,13 +1555,14 @@ contexts:
|
||||||
(?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1.
|
(?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1.
|
||||||
(?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1
|
(?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1
|
||||||
(?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1
|
(?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1
|
||||||
)(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(\??))\s*((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*))?[\(])
|
)(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(\??))\s*((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*))?[\(])
|
||||||
captures:
|
captures:
|
||||||
1: storage.modifier.ts
|
1: storage.modifier.ts
|
||||||
2: storage.modifier.ts
|
2: storage.modifier.ts
|
||||||
3: storage.modifier.async.ts
|
3: storage.modifier.ts
|
||||||
4: storage.type.property.ts
|
4: storage.modifier.async.ts
|
||||||
5: keyword.generator.asterisk.ts
|
5: storage.type.property.ts
|
||||||
|
6: keyword.generator.asterisk.ts
|
||||||
push:
|
push:
|
||||||
- meta_scope: meta.method.declaration.ts
|
- meta_scope: meta.method.declaration.ts
|
||||||
- match: '(?=\}|;|,|$)|(?<=\})'
|
- match: '(?=\}|;|,|$)|(?<=\})'
|
||||||
|
@ -1582,7 +1599,7 @@ contexts:
|
||||||
3: storage.type.namespace.ts
|
3: storage.type.namespace.ts
|
||||||
push:
|
push:
|
||||||
- meta_scope: meta.namespace.declaration.ts
|
- meta_scope: meta.namespace.declaration.ts
|
||||||
- match: '(?<=\})|(?=;|(?:^\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\b))'
|
- match: '(?<=\})|(?=;|^\s*$|(?:^\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\b))'
|
||||||
pop: true
|
pop: true
|
||||||
- include: comment
|
- include: comment
|
||||||
- include: string
|
- include: string
|
||||||
|
@ -1598,9 +1615,7 @@ contexts:
|
||||||
- meta_scope: new.expr.ts
|
- meta_scope: new.expr.ts
|
||||||
- match: '(?<=\))|(?=[;),}\]:?\-\+\>]|\|\||\&\&|\!\=\=|$|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))new(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))function((\s+[_$[:alpha:]][_$[:alnum:]]*)|(\s*[\(]))))'
|
- match: '(?<=\))|(?=[;),}\]:?\-\+\>]|\|\||\&\&|\!\=\=|$|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))new(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))function((\s+[_$[:alpha:]][_$[:alnum:]]*)|(\s*[\(]))))'
|
||||||
pop: true
|
pop: true
|
||||||
- include: paren-expression
|
- include: expression
|
||||||
- include: class-declaration
|
|
||||||
- include: type
|
|
||||||
null-literal:
|
null-literal:
|
||||||
- match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))null(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
|
- match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))null(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
|
||||||
scope: constant.language.null.ts
|
scope: constant.language.null.ts
|
||||||
|
@ -1781,7 +1796,7 @@ contexts:
|
||||||
(?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1.
|
(?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1.
|
||||||
(?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1
|
(?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1
|
||||||
(?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1
|
(?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1
|
||||||
)(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(\??))\s*((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*))?[\(])
|
)(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(\??))\s*((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*))?[\(])
|
||||||
captures:
|
captures:
|
||||||
1: storage.modifier.async.ts
|
1: storage.modifier.async.ts
|
||||||
2: storage.type.property.ts
|
2: storage.type.property.ts
|
||||||
|
@ -1802,7 +1817,7 @@ contexts:
|
||||||
(?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1.
|
(?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1.
|
||||||
(?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1
|
(?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1
|
||||||
(?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1
|
(?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1
|
||||||
)(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(\??))\s*((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*))?[\(])
|
)(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(\??))\s*((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*))?[\(])
|
||||||
captures:
|
captures:
|
||||||
1: storage.modifier.async.ts
|
1: storage.modifier.async.ts
|
||||||
2: storage.type.property.ts
|
2: storage.type.property.ts
|
||||||
|
@ -1864,10 +1879,10 @@ contexts:
|
||||||
([_$[:alpha:]][_$[:alnum:]]*\s*=>)
|
([_$[:alpha:]][_$[:alnum:]]*\s*=>)
|
||||||
)) |
|
)) |
|
||||||
((async\s*)?(
|
((async\s*)?(
|
||||||
((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{[^\{\}]*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[[^\[\]]*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
|
((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
|
||||||
# sure shot arrow functions even if => is on new line
|
# sure shot arrow functions even if => is on new line
|
||||||
(
|
(
|
||||||
(<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?
|
(<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?
|
||||||
[(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
|
[(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
|
||||||
(
|
(
|
||||||
([)]\s*:) | # ():
|
([)]\s*:) | # ():
|
||||||
|
@ -1877,9 +1892,9 @@ contexts:
|
||||||
|
|
||||||
# arrow function possible to detect only with => on same line
|
# arrow function possible to detect only with => on same line
|
||||||
(
|
(
|
||||||
(<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters
|
(<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters
|
||||||
\(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
|
\(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
|
||||||
(\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
|
(\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
|
||||||
\s*=> # arrow operator
|
\s*=> # arrow operator
|
||||||
)
|
)
|
||||||
))
|
))
|
||||||
|
@ -1930,7 +1945,7 @@ contexts:
|
||||||
- meta_scope: meta.object.member.ts
|
- meta_scope: meta.object.member.ts
|
||||||
- match: '(?=,|\})'
|
- match: '(?=,|\})'
|
||||||
pop: true
|
pop: true
|
||||||
- match: '(?<=:)\s*(async)?(?=\s*(<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)\(\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{[^\{\}]*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[[^\[\]]*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))'
|
- match: '(?<=:)\s*(async)?(?=\s*(<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)\(\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))'
|
||||||
captures:
|
captures:
|
||||||
1: storage.modifier.async.ts
|
1: storage.modifier.async.ts
|
||||||
push:
|
push:
|
||||||
|
@ -1946,7 +1961,7 @@ contexts:
|
||||||
0: meta.brace.round.ts
|
0: meta.brace.round.ts
|
||||||
pop: true
|
pop: true
|
||||||
- include: expression-inside-possibly-arrow-parens
|
- include: expression-inside-possibly-arrow-parens
|
||||||
- match: '(?<=:)\s*(async)?\s*(\()(?=\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{[^\{\}]*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[[^\[\]]*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))'
|
- match: '(?<=:)\s*(async)?\s*(\()(?=\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))'
|
||||||
captures:
|
captures:
|
||||||
1: storage.modifier.async.ts
|
1: storage.modifier.async.ts
|
||||||
2: meta.brace.round.ts
|
2: meta.brace.round.ts
|
||||||
|
@ -1963,7 +1978,7 @@ contexts:
|
||||||
- match: (?<=\>)
|
- match: (?<=\>)
|
||||||
pop: true
|
pop: true
|
||||||
- include: type-parameters
|
- include: type-parameters
|
||||||
- match: '(?<=\>)\s*(\()(?=\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{[^\{\}]*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[[^\[\]]*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))'
|
- match: '(?<=\>)\s*(\()(?=\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))'
|
||||||
captures:
|
captures:
|
||||||
1: meta.brace.round.ts
|
1: meta.brace.round.ts
|
||||||
push:
|
push:
|
||||||
|
@ -1997,11 +2012,11 @@ contexts:
|
||||||
- include: destructuring-parameter-rest
|
- include: destructuring-parameter-rest
|
||||||
- include: variable-initializer
|
- include: variable-initializer
|
||||||
parameter-name:
|
parameter-name:
|
||||||
- match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(public|protected|private|readonly)\s+(?=(public|protected|private|readonly)\s+)'
|
- match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(override|public|protected|private|readonly)\s+(?=(override|public|protected|private|readonly)\s+)'
|
||||||
captures:
|
captures:
|
||||||
1: storage.modifier.ts
|
1: storage.modifier.ts
|
||||||
- match: |-
|
- match: |-
|
||||||
(?x)(?:(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(public|private|protected|readonly)\s+)?(?:(\.\.\.)\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s*(\??)(?=\s*
|
(?x)(?:(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(override|public|private|protected|readonly)\s+)?(?:(\.\.\.)\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s*(\??)(?=\s*
|
||||||
# function assignment |
|
# function assignment |
|
||||||
(=\s*(
|
(=\s*(
|
||||||
((async\s+)?(
|
((async\s+)?(
|
||||||
|
@ -2010,10 +2025,10 @@ contexts:
|
||||||
([_$[:alpha:]][_$[:alnum:]]*\s*=>)
|
([_$[:alpha:]][_$[:alnum:]]*\s*=>)
|
||||||
)) |
|
)) |
|
||||||
((async\s*)?(
|
((async\s*)?(
|
||||||
((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{[^\{\}]*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[[^\[\]]*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
|
((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
|
||||||
# sure shot arrow functions even if => is on new line
|
# sure shot arrow functions even if => is on new line
|
||||||
(
|
(
|
||||||
(<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?
|
(<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?
|
||||||
[(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
|
[(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
|
||||||
(
|
(
|
||||||
([)]\s*:) | # ():
|
([)]\s*:) | # ():
|
||||||
|
@ -2023,9 +2038,9 @@ contexts:
|
||||||
|
|
||||||
# arrow function possible to detect only with => on same line
|
# arrow function possible to detect only with => on same line
|
||||||
(
|
(
|
||||||
(<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters
|
(<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters
|
||||||
\(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
|
\(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
|
||||||
(\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
|
(\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
|
||||||
\s*=> # arrow operator
|
\s*=> # arrow operator
|
||||||
)
|
)
|
||||||
))
|
))
|
||||||
|
@ -2043,18 +2058,18 @@ contexts:
|
||||||
))
|
))
|
||||||
)) |
|
)) |
|
||||||
(:\s*(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))Function(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))) |
|
(:\s*(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))Function(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))) |
|
||||||
(:\s*((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{[^\{\}]*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[[^\[\]]*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))))) |
|
(:\s*((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))))) |
|
||||||
(:\s*(=>|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(<[^<>]*>)|[^<>(),=])+=\s*(
|
(:\s*(=>|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(<[^<>]*>)|[^<>(),=])+=\s*(
|
||||||
((async\s+)?(
|
((async\s+)?(
|
||||||
(function\s*[(<*]) |
|
(function\s*[(<*]) |
|
||||||
(function\s+) |
|
(function\s+) |
|
||||||
([_$[:alpha:]][_$[:alnum:]]*\s*=>)
|
([_$[:alpha:]][_$[:alnum:]]*\s*=>)
|
||||||
)) |
|
)) |
|
||||||
((async\s*)?(
|
((async\s*)?(
|
||||||
((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{[^\{\}]*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[[^\[\]]*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
|
((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
|
||||||
# sure shot arrow functions even if => is on new line
|
# sure shot arrow functions even if => is on new line
|
||||||
(
|
(
|
||||||
(<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?
|
(<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?
|
||||||
[(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
|
[(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
|
||||||
(
|
(
|
||||||
([)]\s*:) | # ():
|
([)]\s*:) | # ():
|
||||||
|
@ -2064,9 +2079,9 @@ contexts:
|
||||||
|
|
||||||
# arrow function possible to detect only with => on same line
|
# arrow function possible to detect only with => on same line
|
||||||
(
|
(
|
||||||
(<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters
|
(<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters
|
||||||
\(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
|
\(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
|
||||||
(\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
|
(\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
|
||||||
\s*=> # arrow operator
|
\s*=> # arrow operator
|
||||||
)
|
)
|
||||||
))
|
))
|
||||||
|
@ -2077,7 +2092,7 @@ contexts:
|
||||||
3: entity.name.function.ts variable.language.this.ts
|
3: entity.name.function.ts variable.language.this.ts
|
||||||
4: entity.name.function.ts
|
4: entity.name.function.ts
|
||||||
5: keyword.operator.optional.ts
|
5: keyword.operator.optional.ts
|
||||||
- match: '(?x)(?:(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(public|private|protected|readonly)\s+)?(?:(\.\.\.)\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s*(\??)'
|
- match: '(?x)(?:(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(override|public|private|protected|readonly)\s+)?(?:(\.\.\.)\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s*(\??)'
|
||||||
captures:
|
captures:
|
||||||
1: storage.modifier.ts
|
1: storage.modifier.ts
|
||||||
2: keyword.operator.rest.ts
|
2: keyword.operator.rest.ts
|
||||||
|
@ -2137,14 +2152,14 @@ contexts:
|
||||||
pop: true
|
pop: true
|
||||||
- include: expression
|
- include: expression
|
||||||
paren-expression-possibly-arrow:
|
paren-expression-possibly-arrow:
|
||||||
- match: '(?<=[(=,])\s*(async)?(?=\s*((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*))?\(\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{[^\{\}]*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[[^\[\]]*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))'
|
- match: '(?<=[(=,])\s*(async)?(?=\s*((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*))?\(\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))'
|
||||||
captures:
|
captures:
|
||||||
1: storage.modifier.async.ts
|
1: storage.modifier.async.ts
|
||||||
push:
|
push:
|
||||||
- match: (?<=\))
|
- match: (?<=\))
|
||||||
pop: true
|
pop: true
|
||||||
- include: paren-expression-possibly-arrow-with-typeparameters
|
- include: paren-expression-possibly-arrow-with-typeparameters
|
||||||
- match: '(?<=[(=,]|=>|^return|[^\._$[:alnum:]]return)\s*(async)?(?=\s*((((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*))?\()|(<))\s*$)'
|
- match: '(?<=[(=,]|=>|^return|[^\._$[:alnum:]]return)\s*(async)?(?=\s*((((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*))?\()|(<))\s*$)'
|
||||||
captures:
|
captures:
|
||||||
1: storage.modifier.async.ts
|
1: storage.modifier.async.ts
|
||||||
push:
|
push:
|
||||||
|
@ -2164,7 +2179,7 @@ contexts:
|
||||||
pop: true
|
pop: true
|
||||||
- include: expression-inside-possibly-arrow-parens
|
- include: expression-inside-possibly-arrow-parens
|
||||||
possibly-arrow-return-type:
|
possibly-arrow-return-type:
|
||||||
- match: '(?<=\)|^)\s*(:)(?=\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*=>)'
|
- match: '(?<=\)|^)\s*(:)(?=\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*=>)'
|
||||||
captures:
|
captures:
|
||||||
1: meta.arrow.ts meta.return.type.arrow.ts keyword.operator.type.annotation.ts
|
1: meta.arrow.ts meta.return.type.arrow.ts keyword.operator.type.annotation.ts
|
||||||
push:
|
push:
|
||||||
|
@ -2211,23 +2226,23 @@ contexts:
|
||||||
pop: true
|
pop: true
|
||||||
- include: string-character-escape
|
- include: string-character-escape
|
||||||
regex:
|
regex:
|
||||||
- match: '(?<!\+\+|--|})(?<=[=(:,\[?+!]|^return|[^\._$[:alnum:]]return|^case|[^\._$[:alnum:]]case|=>|&&|\|\||\*\/)\s*(\/)(?![\/*])(?=(?:[^\/\\\[\()]|\\.|\[([^\]\\]|\\.)+\]|\(([^\)\\]|\\.)+\))+\/([gimsuy]+|(?![\/\*])|(?=\/\*))(?!\s*[a-zA-Z0-9_$]))'
|
- match: '(?<!\+\+|--|})(?<=[=(:,\[?+!]|^return|[^\._$[:alnum:]]return|^case|[^\._$[:alnum:]]case|=>|&&|\|\||\*\/)\s*(\/)(?![\/*])(?=(?:[^\/\\\[\()]|\\.|\[([^\]\\]|\\.)+\]|\(([^\)\\]|\\.)+\))+\/([dgimsuy]+|(?![\/\*])|(?=\/\*))(?!\s*[a-zA-Z0-9_$]))'
|
||||||
captures:
|
captures:
|
||||||
1: punctuation.definition.string.begin.ts
|
1: punctuation.definition.string.begin.ts
|
||||||
push:
|
push:
|
||||||
- meta_scope: string.regexp.ts
|
- meta_scope: string.regexp.ts
|
||||||
- match: "(/)([gimsuy]*)"
|
- match: "(/)([dgimsuy]*)"
|
||||||
captures:
|
captures:
|
||||||
1: punctuation.definition.string.end.ts
|
1: punctuation.definition.string.end.ts
|
||||||
2: keyword.other.ts
|
2: keyword.other.ts
|
||||||
pop: true
|
pop: true
|
||||||
- include: regexp
|
- include: regexp
|
||||||
- match: '((?<![_$[:alnum:])\]]|\+\+|--|}|\*\/)|((?<=^return|[^\._$[:alnum:]]return|^case|[^\._$[:alnum:]]case))\s*)\/(?![\/*])(?=(?:[^\/\\\[]|\\.|\[([^\]\\]|\\.)+\])+\/([gimsuy]+|(?![\/\*])|(?=\/\*))(?!\s*[a-zA-Z0-9_$]))'
|
- match: '((?<![_$[:alnum:])\]]|\+\+|--|}|\*\/)|((?<=^return|[^\._$[:alnum:]]return|^case|[^\._$[:alnum:]]case))\s*)\/(?![\/*])(?=(?:[^\/\\\[]|\\.|\[([^\]\\]|\\.)*\])+\/([dgimsuy]+|(?![\/\*])|(?=\/\*))(?!\s*[a-zA-Z0-9_$]))'
|
||||||
captures:
|
captures:
|
||||||
0: punctuation.definition.string.begin.ts
|
0: punctuation.definition.string.begin.ts
|
||||||
push:
|
push:
|
||||||
- meta_scope: string.regexp.ts
|
- meta_scope: string.regexp.ts
|
||||||
- match: "(/)([gimsuy]*)"
|
- match: "(/)([dgimsuy]*)"
|
||||||
captures:
|
captures:
|
||||||
1: punctuation.definition.string.end.ts
|
1: punctuation.definition.string.end.ts
|
||||||
2: keyword.other.ts
|
2: keyword.other.ts
|
||||||
|
@ -2430,7 +2445,7 @@ contexts:
|
||||||
4: support.variable.property.target.ts
|
4: support.variable.property.target.ts
|
||||||
- match: |-
|
- match: |-
|
||||||
(?x) (?:(\.)|(\?\.(?!\s*[[:digit:]]))) \s* (?:
|
(?x) (?:(\.)|(\?\.(?!\s*[[:digit:]]))) \s* (?:
|
||||||
(?:(constructor|length|prototype|__proto__)\b(?!\$|\s*(<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?\())
|
(?:(constructor|length|prototype|__proto__)\b(?!\$|\s*(<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?\())
|
||||||
|
|
|
|
||||||
(?:(EPSILON|MAX_SAFE_INTEGER|MAX_VALUE|MIN_SAFE_INTEGER|MIN_VALUE|NEGATIVE_INFINITY|POSITIVE_INFINITY)\b(?!\$)))
|
(?:(EPSILON|MAX_SAFE_INTEGER|MAX_VALUE|MIN_SAFE_INTEGER|MIN_VALUE|NEGATIVE_INFINITY|POSITIVE_INFINITY)\b(?!\$)))
|
||||||
captures:
|
captures:
|
||||||
|
@ -2536,7 +2551,7 @@ contexts:
|
||||||
|siblingBelow|size|source|specified|standby|start|status|statusbar|statusText|style|styleSheets|suffixes|summary
|
|siblingBelow|size|source|specified|standby|start|status|statusbar|statusText|style|styleSheets|suffixes|summary
|
||||||
|systemId|systemLanguage|tagName|tags|target|tBodies|text|textAlign|textDecoration|textIndent|textTransform|tFoot|tHead
|
|systemId|systemLanguage|tagName|tags|target|tBodies|text|textAlign|textDecoration|textIndent|textTransform|tFoot|tHead
|
||||||
|title|toolbar|top|type|undefined|uniqueID|updateInterval|URL|URLUnencoded|useMap|userAgent|userLanguage|userProfile
|
|title|toolbar|top|type|undefined|uniqueID|updateInterval|URL|URLUnencoded|useMap|userAgent|userLanguage|userProfile
|
||||||
|vAlign|value|valueType|vendor|vendorSub|version|visibility|vspace|whiteSpace|width|X[MS]LDocument|zIndex))\b(?!\$|\s*(<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?\()
|
|vAlign|value|valueType|vendor|vendorSub|version|visibility|vspace|whiteSpace|width|X[MS]LDocument|zIndex))\b(?!\$|\s*(<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?\()
|
||||||
captures:
|
captures:
|
||||||
1: punctuation.accessor.ts
|
1: punctuation.accessor.ts
|
||||||
2: punctuation.accessor.optional.ts
|
2: punctuation.accessor.optional.ts
|
||||||
|
@ -2703,27 +2718,7 @@ contexts:
|
||||||
0: case-clause.expr.ts punctuation.definition.section.case-statement.ts
|
0: case-clause.expr.ts punctuation.definition.section.case-statement.ts
|
||||||
- include: statements
|
- include: statements
|
||||||
template:
|
template:
|
||||||
- match: '(?=(([_$[:alpha:]][_$[:alnum:]]*\s*\??\.\s*)*|(\??\.\s*)?)([_$[:alpha:]][_$[:alnum:]]*)(<\s*(((keyof|infer|awaited|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|awaited|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))(([^<>\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|awaited|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?<==)\>)*(?<!=)\>))*(?<!=)\>)*(?<!=)>\s*)?`)'
|
- include: template-call
|
||||||
push:
|
|
||||||
- meta_scope: string.template.ts
|
|
||||||
- match: (?=`)
|
|
||||||
pop: true
|
|
||||||
- match: '(?=(([_$[:alpha:]][_$[:alnum:]]*\s*\??\.\s*)*|(\??\.\s*)?)([_$[:alpha:]][_$[:alnum:]]*))'
|
|
||||||
push:
|
|
||||||
- match: '(?=(<\s*(((keyof|infer|awaited|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|awaited|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))(([^<>\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|awaited|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?<==)\>)*(?<!=)\>))*(?<!=)\>)*(?<!=)>\s*)?`)'
|
|
||||||
pop: true
|
|
||||||
- include: support-function-call-identifiers
|
|
||||||
- match: "([_$[:alpha:]][_$[:alnum:]]*)"
|
|
||||||
scope: entity.name.function.tagged-template.ts
|
|
||||||
- include: type-arguments
|
|
||||||
- match: '([_$[:alpha:]][_$[:alnum:]]*)\s*(?=(<\s*(((keyof|infer|awaited|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|awaited|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))(([^<>\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|awaited|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(?<==)\>)*(?<!=)\>))*(?<!=)\>)*(?<!=)>\s*)`)'
|
|
||||||
captures:
|
|
||||||
1: entity.name.function.tagged-template.ts
|
|
||||||
push:
|
|
||||||
- meta_scope: string.template.ts
|
|
||||||
- match: (?=`)
|
|
||||||
pop: true
|
|
||||||
- include: type-arguments
|
|
||||||
- match: "([_$[:alpha:]][_$[:alnum:]]*)?(`)"
|
- match: "([_$[:alpha:]][_$[:alnum:]]*)?(`)"
|
||||||
captures:
|
captures:
|
||||||
1: entity.name.function.tagged-template.ts
|
1: entity.name.function.tagged-template.ts
|
||||||
|
@ -2736,6 +2731,28 @@ contexts:
|
||||||
pop: true
|
pop: true
|
||||||
- include: template-substitution-element
|
- include: template-substitution-element
|
||||||
- include: string-character-escape
|
- include: string-character-escape
|
||||||
|
template-call:
|
||||||
|
- match: '(?=(([_$[:alpha:]][_$[:alnum:]]*\s*\??\.\s*)*|(\??\.\s*)?)([_$[:alpha:]][_$[:alnum:]]*)(<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))(([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>)*(?<!=)\>))*(?<!=)\>)*(?<!=)>\s*)?`)'
|
||||||
|
push:
|
||||||
|
- meta_scope: string.template.ts
|
||||||
|
- match: (?=`)
|
||||||
|
pop: true
|
||||||
|
- match: '(?=(([_$[:alpha:]][_$[:alnum:]]*\s*\??\.\s*)*|(\??\.\s*)?)([_$[:alpha:]][_$[:alnum:]]*))'
|
||||||
|
push:
|
||||||
|
- match: '(?=(<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))(([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>)*(?<!=)\>))*(?<!=)\>)*(?<!=)>\s*)?`)'
|
||||||
|
pop: true
|
||||||
|
- include: support-function-call-identifiers
|
||||||
|
- match: "([_$[:alpha:]][_$[:alnum:]]*)"
|
||||||
|
scope: entity.name.function.tagged-template.ts
|
||||||
|
- include: type-arguments
|
||||||
|
- match: '([_$[:alpha:]][_$[:alnum:]]*)?\s*(?=(<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))(([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\''([^\''\\]|\\.)*\'')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>)*(?<!=)\>))*(?<!=)\>)*(?<!=)>\s*)`)'
|
||||||
|
captures:
|
||||||
|
1: entity.name.function.tagged-template.ts
|
||||||
|
push:
|
||||||
|
- meta_scope: string.template.ts
|
||||||
|
- match: (?=`)
|
||||||
|
pop: true
|
||||||
|
- include: type-arguments
|
||||||
template-substitution-element:
|
template-substitution-element:
|
||||||
- match: '\$\{'
|
- match: '\$\{'
|
||||||
captures:
|
captures:
|
||||||
|
@ -2748,6 +2765,32 @@ contexts:
|
||||||
0: punctuation.definition.template-expression.end.ts
|
0: punctuation.definition.template-expression.end.ts
|
||||||
pop: true
|
pop: true
|
||||||
- include: expression
|
- include: expression
|
||||||
|
template-type:
|
||||||
|
- include: template-call
|
||||||
|
- match: "([_$[:alpha:]][_$[:alnum:]]*)?(`)"
|
||||||
|
captures:
|
||||||
|
1: entity.name.function.tagged-template.ts
|
||||||
|
2: punctuation.definition.string.template.begin.ts
|
||||||
|
push:
|
||||||
|
- meta_scope: string.template.ts
|
||||||
|
- match: "`"
|
||||||
|
captures:
|
||||||
|
0: punctuation.definition.string.template.end.ts
|
||||||
|
pop: true
|
||||||
|
- include: template-type-substitution-element
|
||||||
|
- include: string-character-escape
|
||||||
|
template-type-substitution-element:
|
||||||
|
- match: '\$\{'
|
||||||
|
captures:
|
||||||
|
0: punctuation.definition.template-expression.begin.ts
|
||||||
|
push:
|
||||||
|
- meta_scope: meta.template.expression.ts
|
||||||
|
- meta_content_scope: meta.embedded.line.ts
|
||||||
|
- match: '\}'
|
||||||
|
captures:
|
||||||
|
0: punctuation.definition.template-expression.end.ts
|
||||||
|
pop: true
|
||||||
|
- include: type
|
||||||
ternary-expression:
|
ternary-expression:
|
||||||
- match: '(?!\?\.\s*[^[:digit:]])(\?)(?!\?)'
|
- match: '(?!\?\.\s*[^[:digit:]])(\?)(?!\?)'
|
||||||
captures:
|
captures:
|
||||||
|
@ -2763,7 +2806,7 @@ contexts:
|
||||||
scope: variable.language.this.ts
|
scope: variable.language.this.ts
|
||||||
type:
|
type:
|
||||||
- include: comment
|
- include: comment
|
||||||
- include: string
|
- include: type-string
|
||||||
- include: numeric-literal
|
- include: numeric-literal
|
||||||
- include: type-primitive
|
- include: type-primitive
|
||||||
- include: type-builtin-literals
|
- include: type-builtin-literals
|
||||||
|
@ -2788,15 +2831,23 @@ contexts:
|
||||||
4: entity.name.type.alias.ts
|
4: entity.name.type.alias.ts
|
||||||
push:
|
push:
|
||||||
- meta_scope: meta.type.declaration.ts
|
- meta_scope: meta.type.declaration.ts
|
||||||
- match: '(?=\}|;|(?:^\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\b))'
|
- match: '(?=\}|;|^\s*$|(?:^\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\b))'
|
||||||
pop: true
|
pop: true
|
||||||
- include: comment
|
- include: comment
|
||||||
- include: type-parameters
|
- include: type-parameters
|
||||||
|
- match: '(=)\s*(intrinsic)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
|
||||||
|
captures:
|
||||||
|
1: keyword.operator.assignment.ts
|
||||||
|
2: keyword.control.intrinsic.ts
|
||||||
|
push:
|
||||||
|
- match: '(?=\}|;|^\s*$|(?:^\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\b))'
|
||||||
|
pop: true
|
||||||
|
- include: type
|
||||||
- match: (=)\s*
|
- match: (=)\s*
|
||||||
captures:
|
captures:
|
||||||
1: keyword.operator.assignment.ts
|
1: keyword.operator.assignment.ts
|
||||||
push:
|
push:
|
||||||
- match: '(?=\}|;|(?:^\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\b))'
|
- match: '(?=\}|;|^\s*$|(?:^\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\b))'
|
||||||
pop: true
|
pop: true
|
||||||
- include: type
|
- include: type
|
||||||
type-annotation:
|
type-annotation:
|
||||||
|
@ -2854,17 +2905,19 @@ contexts:
|
||||||
- include: type
|
- include: type
|
||||||
- include: type
|
- include: type
|
||||||
type-fn-type-parameters:
|
type-fn-type-parameters:
|
||||||
- match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(new)\b(?=\s*\<)'
|
- match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(abstract)\s+)?(new)\b(?=\s*\<)'
|
||||||
captures:
|
captures:
|
||||||
1: meta.type.constructor.ts keyword.control.new.ts
|
1: meta.type.constructor.ts storage.modifier.ts
|
||||||
|
2: meta.type.constructor.ts keyword.control.new.ts
|
||||||
push:
|
push:
|
||||||
- match: (?<=>)
|
- match: (?<=>)
|
||||||
pop: true
|
pop: true
|
||||||
- include: comment
|
- include: comment
|
||||||
- include: type-parameters
|
- include: type-parameters
|
||||||
- match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(new)\b\s*(?=\()'
|
- match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(abstract)\s+)?(new)\b\s*(?=\()'
|
||||||
captures:
|
captures:
|
||||||
1: keyword.control.new.ts
|
1: storage.modifier.ts
|
||||||
|
2: keyword.control.new.ts
|
||||||
push:
|
push:
|
||||||
- meta_scope: meta.type.constructor.ts
|
- meta_scope: meta.type.constructor.ts
|
||||||
- match: (?<=\))
|
- match: (?<=\))
|
||||||
|
@ -2993,8 +3046,6 @@ contexts:
|
||||||
scope: keyword.operator.ternary.ts
|
scope: keyword.operator.ternary.ts
|
||||||
- match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))infer(?=\s+[_$[:alpha:]])'
|
- match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))infer(?=\s+[_$[:alpha:]])'
|
||||||
scope: keyword.operator.expression.infer.ts
|
scope: keyword.operator.expression.infer.ts
|
||||||
- match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))awaited(?=\s+[_$[:alpha:]])'
|
|
||||||
scope: keyword.operator.expression.awaited.ts
|
|
||||||
- match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))import(?=\s*\()'
|
- match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))import(?=\s*\()'
|
||||||
scope: keyword.operator.expression.import.ts
|
scope: keyword.operator.expression.import.ts
|
||||||
type-parameters:
|
type-parameters:
|
||||||
|
@ -3037,7 +3088,7 @@ contexts:
|
||||||
))
|
))
|
||||||
)) |
|
)) |
|
||||||
(:\s*(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))Function(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))) |
|
(:\s*(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))Function(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))) |
|
||||||
(:\s*((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{[^\{\}]*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[[^\[\]]*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))))))
|
(:\s*((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))))))
|
||||||
captures:
|
captures:
|
||||||
1: storage.modifier.ts
|
1: storage.modifier.ts
|
||||||
2: keyword.operator.rest.ts
|
2: keyword.operator.rest.ts
|
||||||
|
@ -3074,6 +3125,10 @@ contexts:
|
||||||
type-primitive:
|
type-primitive:
|
||||||
- match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(string|number|bigint|boolean|symbol|any|void|never|unknown)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
|
- match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(string|number|bigint|boolean|symbol|any|void|never|unknown)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
|
||||||
scope: support.type.primitive.ts
|
scope: support.type.primitive.ts
|
||||||
|
type-string:
|
||||||
|
- include: qstring-single
|
||||||
|
- include: qstring-double
|
||||||
|
- include: template-type
|
||||||
type-tuple:
|
type-tuple:
|
||||||
- match: '\['
|
- match: '\['
|
||||||
captures:
|
captures:
|
||||||
|
@ -3095,7 +3150,12 @@ contexts:
|
||||||
- include: punctuation-comma
|
- include: punctuation-comma
|
||||||
typeof-operator:
|
typeof-operator:
|
||||||
- match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))typeof(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
|
- match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))typeof(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
|
||||||
scope: keyword.operator.expression.typeof.ts
|
captures:
|
||||||
|
0: keyword.operator.expression.typeof.ts
|
||||||
|
push:
|
||||||
|
- match: '(?=[,);}\]=>:&|{\?]|$|;|^\s*$|(?:^\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\b))'
|
||||||
|
pop: true
|
||||||
|
- include: expression
|
||||||
undefined-literal:
|
undefined-literal:
|
||||||
- match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))undefined(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
|
- match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))undefined(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))'
|
||||||
scope: constant.language.undefined.ts
|
scope: constant.language.undefined.ts
|
||||||
|
@ -3103,7 +3163,7 @@ contexts:
|
||||||
- match: '(?=(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(var|let)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))'
|
- match: '(?=(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(var|let)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))'
|
||||||
push:
|
push:
|
||||||
- meta_scope: meta.var.expr.ts
|
- meta_scope: meta.var.expr.ts
|
||||||
- match: '(?!(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(var|let)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))((?=;|}|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(of|in)\s+)|^\s*$|;|(?:^\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\b))|((?<!^let|[^\._$[:alnum:]]let|^var|[^\._$[:alnum:]]var)(?=\s*$)))'
|
- match: '(?!(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(var|let)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))((?=;|}|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(of|in)\s+)|;|^\s*$|(?:^\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\b))|((?<!^let|[^\._$[:alnum:]]let|^var|[^\._$[:alnum:]]var)(?=\s*$)))'
|
||||||
pop: true
|
pop: true
|
||||||
- match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(var|let)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s*'
|
- match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(var|let)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s*'
|
||||||
captures:
|
captures:
|
||||||
|
@ -3136,7 +3196,7 @@ contexts:
|
||||||
3: storage.type.ts
|
3: storage.type.ts
|
||||||
push:
|
push:
|
||||||
- meta_scope: meta.var.expr.ts
|
- meta_scope: meta.var.expr.ts
|
||||||
- match: '(?!(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(const(?!\s+enum\b))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))((?=;|}|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(of|in)\s+)|^\s*$|;|(?:^\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\b))|((?<!^const|[^\._$[:alnum:]]const)(?=\s*$)))'
|
- match: '(?!(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(const(?!\s+enum\b))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))((?=;|}|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(of|in)\s+)|;|^\s*$|(?:^\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\b))|((?<!^const|[^\._$[:alnum:]]const)(?=\s*$)))'
|
||||||
pop: true
|
pop: true
|
||||||
- match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(const(?!\s+enum\b))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s*'
|
- match: '(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(const(?!\s+enum\b))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s*'
|
||||||
captures:
|
captures:
|
||||||
|
@ -3173,10 +3233,10 @@ contexts:
|
||||||
([_$[:alpha:]][_$[:alnum:]]*\s*=>)
|
([_$[:alpha:]][_$[:alnum:]]*\s*=>)
|
||||||
)) |
|
)) |
|
||||||
((async\s*)?(
|
((async\s*)?(
|
||||||
((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{[^\{\}]*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[[^\[\]]*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
|
((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
|
||||||
# sure shot arrow functions even if => is on new line
|
# sure shot arrow functions even if => is on new line
|
||||||
(
|
(
|
||||||
(<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?
|
(<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?
|
||||||
[(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
|
[(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
|
||||||
(
|
(
|
||||||
([)]\s*:) | # ():
|
([)]\s*:) | # ():
|
||||||
|
@ -3186,9 +3246,9 @@ contexts:
|
||||||
|
|
||||||
# arrow function possible to detect only with => on same line
|
# arrow function possible to detect only with => on same line
|
||||||
(
|
(
|
||||||
(<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters
|
(<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters
|
||||||
\(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
|
\(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
|
||||||
(\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
|
(\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
|
||||||
\s*=> # arrow operator
|
\s*=> # arrow operator
|
||||||
)
|
)
|
||||||
))
|
))
|
||||||
|
@ -3206,18 +3266,18 @@ contexts:
|
||||||
))
|
))
|
||||||
)) |
|
)) |
|
||||||
(:\s*(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))Function(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))) |
|
(:\s*(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))Function(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))) |
|
||||||
(:\s*((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{[^\{\}]*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[[^\[\]]*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))))) |
|
(:\s*((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))))) |
|
||||||
(:\s*(=>|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(<[^<>]*>)|[^<>(),=])+=\s*(
|
(:\s*(=>|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(<[^<>]*>)|[^<>(),=])+=\s*(
|
||||||
((async\s+)?(
|
((async\s+)?(
|
||||||
(function\s*[(<*]) |
|
(function\s*[(<*]) |
|
||||||
(function\s+) |
|
(function\s+) |
|
||||||
([_$[:alpha:]][_$[:alnum:]]*\s*=>)
|
([_$[:alpha:]][_$[:alnum:]]*\s*=>)
|
||||||
)) |
|
)) |
|
||||||
((async\s*)?(
|
((async\s*)?(
|
||||||
((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{[^\{\}]*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[[^\[\]]*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
|
((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
|
||||||
# sure shot arrow functions even if => is on new line
|
# sure shot arrow functions even if => is on new line
|
||||||
(
|
(
|
||||||
(<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?
|
(<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?
|
||||||
[(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
|
[(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
|
||||||
(
|
(
|
||||||
([)]\s*:) | # ():
|
([)]\s*:) | # ():
|
||||||
|
@ -3227,9 +3287,9 @@ contexts:
|
||||||
|
|
||||||
# arrow function possible to detect only with => on same line
|
# arrow function possible to detect only with => on same line
|
||||||
(
|
(
|
||||||
(<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters
|
(<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters
|
||||||
\(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
|
\(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
|
||||||
(\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
|
(\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
|
||||||
\s*=> # arrow operator
|
\s*=> # arrow operator
|
||||||
)
|
)
|
||||||
))
|
))
|
||||||
|
@ -3260,10 +3320,10 @@ contexts:
|
||||||
([_$[:alpha:]][_$[:alnum:]]*\s*=>)
|
([_$[:alpha:]][_$[:alnum:]]*\s*=>)
|
||||||
)) |
|
)) |
|
||||||
((async\s*)?(
|
((async\s*)?(
|
||||||
((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{[^\{\}]*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[[^\[\]]*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
|
((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
|
||||||
# sure shot arrow functions even if => is on new line
|
# sure shot arrow functions even if => is on new line
|
||||||
(
|
(
|
||||||
(<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?
|
(<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?
|
||||||
[(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
|
[(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
|
||||||
(
|
(
|
||||||
([)]\s*:) | # ():
|
([)]\s*:) | # ():
|
||||||
|
@ -3273,9 +3333,9 @@ contexts:
|
||||||
|
|
||||||
# arrow function possible to detect only with => on same line
|
# arrow function possible to detect only with => on same line
|
||||||
(
|
(
|
||||||
(<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters
|
(<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters
|
||||||
\(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
|
\(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
|
||||||
(\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
|
(\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
|
||||||
\s*=> # arrow operator
|
\s*=> # arrow operator
|
||||||
)
|
)
|
||||||
))
|
))
|
||||||
|
@ -3293,18 +3353,18 @@ contexts:
|
||||||
))
|
))
|
||||||
)) |
|
)) |
|
||||||
(:\s*(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))Function(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))) |
|
(:\s*(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))Function(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))) |
|
||||||
(:\s*((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{[^\{\}]*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[[^\[\]]*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))))) |
|
(:\s*((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))))) |
|
||||||
(:\s*(=>|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(<[^<>]*>)|[^<>(),=])+=\s*(
|
(:\s*(=>|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(<[^<>]*>)|[^<>(),=])+=\s*(
|
||||||
((async\s+)?(
|
((async\s+)?(
|
||||||
(function\s*[(<*]) |
|
(function\s*[(<*]) |
|
||||||
(function\s+) |
|
(function\s+) |
|
||||||
([_$[:alpha:]][_$[:alnum:]]*\s*=>)
|
([_$[:alpha:]][_$[:alnum:]]*\s*=>)
|
||||||
)) |
|
)) |
|
||||||
((async\s*)?(
|
((async\s*)?(
|
||||||
((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{[^\{\}]*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[[^\[\]]*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
|
((<\s*$)|((<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
|
||||||
# sure shot arrow functions even if => is on new line
|
# sure shot arrow functions even if => is on new line
|
||||||
(
|
(
|
||||||
(<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?
|
(<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?
|
||||||
[(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
|
[(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
|
||||||
(
|
(
|
||||||
([)]\s*:) | # ():
|
([)]\s*:) | # ():
|
||||||
|
@ -3314,9 +3374,9 @@ contexts:
|
||||||
|
|
||||||
# arrow function possible to detect only with => on same line
|
# arrow function possible to detect only with => on same line
|
||||||
(
|
(
|
||||||
(<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters
|
(<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters
|
||||||
\(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\[([^\[\]]|(\[[^\[\]]*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
|
\(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
|
||||||
(\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<[^<>]+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
|
(\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
|
||||||
\s*=> # arrow operator
|
\s*=> # arrow operator
|
||||||
)
|
)
|
||||||
))
|
))
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,104 @@
|
||||||
|
%YAML 1.2
|
||||||
|
---
|
||||||
|
# http://www.sublimetext.com/docs/syntax.html
|
||||||
|
scope: source.vimhelp
|
||||||
|
file_extensions:
|
||||||
|
# shortname
|
||||||
|
- vimhelp
|
||||||
|
|
||||||
|
# $VIMRUNTIME/syntax/help.vim
|
||||||
|
contexts:
|
||||||
|
main:
|
||||||
|
- match: '(?<=^\s*)(vim?|ex):\s*([a-z]+(=[^\s:]+)?(\s+|:))+'
|
||||||
|
scope: comment.line.modeline.vimhelp
|
||||||
|
- match: '^[-A-Z .][-A-Z0-9 .()_]*(?=\s+\*|$)'
|
||||||
|
scope: markup.heading.headline.vimhelp
|
||||||
|
- match: '^(===.*===)$'
|
||||||
|
captures:
|
||||||
|
1: punctuation.definition.heading.1.setext.vimhelp
|
||||||
|
push:
|
||||||
|
- meta_scope: markup.heading.1.setext.vimhelp
|
||||||
|
- match: '\t| '
|
||||||
|
pop: true
|
||||||
|
- match: '^(---.*---)$'
|
||||||
|
captures:
|
||||||
|
1: punctuation.definition.heading.2.setext.vimhelp
|
||||||
|
push:
|
||||||
|
- meta_scope: markup.heading.2.setext.vimhelp
|
||||||
|
- match: '\t| '
|
||||||
|
pop: true
|
||||||
|
- match: '(?:^| )(>)$'
|
||||||
|
captures:
|
||||||
|
1: punctuation.definition.blockquote.begin.vimhelp
|
||||||
|
push:
|
||||||
|
- meta_scope: markup.quote.vimhelp
|
||||||
|
- match: '^(<)'
|
||||||
|
captures:
|
||||||
|
1: punctuation.definition.blockquote.end.vimhelp
|
||||||
|
pop: true
|
||||||
|
- match: '^(?=\S)'
|
||||||
|
pop: true
|
||||||
|
- match: '(?<!\\)(\|)([#-)!+-~]+)(\|)'
|
||||||
|
captures:
|
||||||
|
1: punctuation.definition.link.begin.vimhelp
|
||||||
|
2: markup.underline.link.vimhelp
|
||||||
|
3: punctuation.definition.link.end.vimhelp
|
||||||
|
- match: '(\*)([#-)!+-~]+)(\*)(?:\s|$)'
|
||||||
|
captures:
|
||||||
|
1: punctuation.definition.constant.begin.vimhelp
|
||||||
|
2: entity.name.reference.link.vimhelp
|
||||||
|
3: punctuation.definition.constant.end.vimhelp
|
||||||
|
- match: '\bVim version [0-9][0-9.a-z]*'
|
||||||
|
scope: variable.language.vimhelp
|
||||||
|
- match: 'N?VIM REFERENCE.*'
|
||||||
|
scope: variable.language.vimhelp
|
||||||
|
- match: '('')([a-z]{2,}|t_..)('')'
|
||||||
|
captures:
|
||||||
|
1: punctuation.definition.link.option.begin.vimhelp
|
||||||
|
2: markup.underline.link.option.vimhelp
|
||||||
|
3: punctuation.definition.link.option.end.vimhelp
|
||||||
|
- match: '(`)([^` \t]+)(`)'
|
||||||
|
captures:
|
||||||
|
1: punctuation.definition.link.command.begin.vimhelp
|
||||||
|
2: markup.underline.link.command.vimhelp
|
||||||
|
3: punctuation.definition.link.command.end.vimhelp
|
||||||
|
- match: '(?<=^|[^a-z"\[])(`)([^`]+)(`)(?=[^a-z\t."'']|$)'
|
||||||
|
captures:
|
||||||
|
1: punctuation.definition.link.command.begin.vimhelp
|
||||||
|
2: markup.underline.link.command.vimhelp
|
||||||
|
3: punctuation.definition.link.command.end.vimhelp
|
||||||
|
- match: '(?<=\s*)(.*?)(?=\s?)(~)$'
|
||||||
|
captures:
|
||||||
|
1: markup.heading.header.vimhelp
|
||||||
|
2: punctuation.definition.keyword.vimhelp
|
||||||
|
- match: '(.*) (?=`$)'
|
||||||
|
captures:
|
||||||
|
1: variable.other.graphic.vimhelp
|
||||||
|
2: punctuation.definition.keyword.vimhelp
|
||||||
|
- match: '\b(note:?|Note:?|NOTE:?|Notes:?)\b'
|
||||||
|
scope: constant.other.note.vimhelp
|
||||||
|
- match: '\b(WARNING:?|Warning:)\b'
|
||||||
|
scope: constant.other.warning.vimhelp
|
||||||
|
- match: '\b(DEPRECATED:?|Deprecated:)\b'
|
||||||
|
scope: constant.other.deprecated.vimhelp
|
||||||
|
- match: '(\{)([-_a-zA-Z0-9''"*+/:%#=\[\]<>.,]+)(\})'
|
||||||
|
captures:
|
||||||
|
1: punctuation.definition.constant.begin.vimhelp
|
||||||
|
2: constant.numeric.vimhelp
|
||||||
|
3: punctuation.definition.constant.end.vimhelp
|
||||||
|
- match: '\[(range|line|count|offset|\+?cmd|(\+|-|)num|\+\+opt)\]'
|
||||||
|
scope: constant.numeric.vimhelp
|
||||||
|
- match: '\[(arg(uments)?|ident|addr|group)\]'
|
||||||
|
scope: constant.numeric.vimhelp
|
||||||
|
- match: '\[(readonly|fifo|socket|converted|crypted)\]'
|
||||||
|
scope: constant.numeric.vimhelp
|
||||||
|
- match: '<[-a-zA-Z0-9_]+>'
|
||||||
|
scope: markup.underline.link.key.vimhelp
|
||||||
|
- match: '<[SCM]-.>'
|
||||||
|
scope: markup.underline.link.key.vimhelp
|
||||||
|
- match: 'CTRL-((SHIFT-)?.|Break|PageUp|PageDown|Insert|Del|\{char\})'
|
||||||
|
scope: markup.underline.link.key.vimhelp
|
||||||
|
- match: '(META|ALT)-.'
|
||||||
|
scope: markup.underline.link.key.vimhelp
|
||||||
|
- match: '\b(((https?|ftp|gopher)://|(mailto|file|news):)[^'' <>"]+|(www|web|w3)[a-z0-9_-]*\.[a-z0-9._-]+\.[^'' <>"]+)[a-zA-Z0-9/]'
|
||||||
|
scope: markup.underline.link.url.vimhelp
|
|
@ -1 +1 @@
|
||||||
Subproject commit 7ebcaa1d987be059213f06bfc0833dcaea9e0b91
|
Subproject commit ee85822cbed17858da1a556dec922b7da2a219bb
|
|
@ -1 +1 @@
|
||||||
Subproject commit 87ecbcae6fb5718369ce3bb3472ca0b2634e78e6
|
Subproject commit 1a4a38445fec495817625bafbeb01e79c44abcba
|
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit 209559b72f7e8848c988828088231b3a4d8b6838
|
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit 93b93261bcd8b4fbb38d7e92d3cf3734f0814e31
|
|
@ -6,8 +6,16 @@ file_extensions:
|
||||||
scope: text.log
|
scope: text.log
|
||||||
variables:
|
variables:
|
||||||
ipv4_part: (?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)
|
ipv4_part: (?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)
|
||||||
|
hours_minutes_seconds: (?:[01]\d|2[0-3]):(?:[0-5]\d):(?:[0-5]\d)
|
||||||
|
error: \b(?i:fail(?:ure|ed)?|error|exception|fatal|critical)\b
|
||||||
|
warning: \b(?i:warn(?:ing)?)\b
|
||||||
|
info: \b(?i:info)\b
|
||||||
|
debug: \b(?i:debug)\b
|
||||||
contexts:
|
contexts:
|
||||||
main:
|
main:
|
||||||
|
- include: log_level_lines
|
||||||
|
- include: main_without_log_level_line
|
||||||
|
main_without_log_level_line:
|
||||||
- match: (\w+)(=)
|
- match: (\w+)(=)
|
||||||
captures:
|
captures:
|
||||||
1: variable.parameter.log
|
1: variable.parameter.log
|
||||||
|
@ -17,31 +25,85 @@ contexts:
|
||||||
captures:
|
captures:
|
||||||
1: punctuation.definition.string.begin.log
|
1: punctuation.definition.string.begin.log
|
||||||
3: punctuation.definition.string.end.log
|
3: punctuation.definition.string.end.log
|
||||||
- match: (")([^"]*)(")
|
- match: \"
|
||||||
scope: string.quoted.double.log
|
|
||||||
captures:
|
captures:
|
||||||
1: punctuation.definition.string.begin.log
|
1: punctuation.definition.string.begin.log
|
||||||
3: punctuation.definition.string.end.log
|
push: double_quoted_string
|
||||||
- include: dates
|
- include: dates
|
||||||
- include: ip_addresses
|
- include: ip_addresses
|
||||||
- include: numbers
|
- include: numbers
|
||||||
- match: \b(?i:fail(?:ure|ed)?|error|exception)\b
|
- include: log_levels
|
||||||
scope: markup.error.log
|
|
||||||
- match: \b(?i:warn(?:ing)?)\b
|
|
||||||
scope: markup.warning.log
|
|
||||||
#- include: scope:text.html.markdown#autolink-inet
|
#- include: scope:text.html.markdown#autolink-inet
|
||||||
- match: \b\w+:/{2,3}
|
- match: \b\w+:/{2,3}
|
||||||
scope: markup.underline.link.scheme.log
|
scope: markup.underline.link.scheme.log
|
||||||
push: url-host
|
push: url-host
|
||||||
|
log_level_lines:
|
||||||
|
- match: ^(?=.*{{error}})
|
||||||
|
push:
|
||||||
|
- error_line
|
||||||
|
- main_pop_at_eol
|
||||||
|
- match: ^(?=.*{{warning}})
|
||||||
|
push:
|
||||||
|
- warning_line
|
||||||
|
- main_pop_at_eol
|
||||||
|
- match: ^(?=.*{{info}})
|
||||||
|
push:
|
||||||
|
- info_line
|
||||||
|
- main_pop_at_eol
|
||||||
|
- match: ^(?=.*{{debug}})
|
||||||
|
push:
|
||||||
|
- debug_line
|
||||||
|
- main_pop_at_eol
|
||||||
|
log_levels:
|
||||||
|
- match: '{{error}}'
|
||||||
|
scope: markup.error.log
|
||||||
|
- match: '{{warning}}'
|
||||||
|
scope: markup.warning.log
|
||||||
|
- match: '{{info}}'
|
||||||
|
scope: markup.info.log
|
||||||
|
- match: '{{debug}}'
|
||||||
|
scope: markup.info.log
|
||||||
|
error_line:
|
||||||
|
- meta_scope: meta.annotation.error-line.log
|
||||||
|
- include: immediately_pop
|
||||||
|
warning_line:
|
||||||
|
- meta_scope: meta.annotation.warning-line.log
|
||||||
|
- include: immediately_pop
|
||||||
|
info_line:
|
||||||
|
- meta_scope: meta.annotation.info-line.log
|
||||||
|
- include: immediately_pop
|
||||||
|
debug_line:
|
||||||
|
- meta_scope: meta.annotation.debug-line.log
|
||||||
|
- include: immediately_pop
|
||||||
|
immediately_pop:
|
||||||
|
- match: ''
|
||||||
|
pop: true
|
||||||
|
pop_at_eol:
|
||||||
|
- match: $
|
||||||
|
pop: true
|
||||||
|
main_pop_at_eol:
|
||||||
|
- include: main_without_log_level_line
|
||||||
|
- include: pop_at_eol
|
||||||
dates:
|
dates:
|
||||||
- match: \b\d{4}-\d{2}-\d{2}\b
|
- match: \b\d{4}-\d{2}-\d{2}(?=\b|T)
|
||||||
scope: meta.date.log meta.number.integer.decimal.log constant.numeric.value.log
|
scope: meta.date.log meta.number.integer.decimal.log constant.numeric.value.log
|
||||||
- match: \b\d{4}/\d{2}/\d{2}\b
|
push: maybe_date_time_separator
|
||||||
|
- match: \b\d{4}/\d{2}/\d{2}(?=\b|T)
|
||||||
scope: meta.date.log meta.number.integer.decimal.log constant.numeric.value.log
|
scope: meta.date.log meta.number.integer.decimal.log constant.numeric.value.log
|
||||||
- match: \b(?:[01]\d|2[0-3]):(?:[0-5]\d):(?:[0-5]\d)(?:(\.)\d{3})?\b
|
push: maybe_date_time_separator
|
||||||
|
- match: \b(?={{hours_minutes_seconds}})
|
||||||
|
push: time
|
||||||
|
time:
|
||||||
|
- match: (?:{{hours_minutes_seconds}})(?:(\.)\d{3})?\b
|
||||||
scope: meta.time.log meta.number.integer.decimal.log constant.numeric.value.log
|
scope: meta.time.log meta.number.integer.decimal.log constant.numeric.value.log
|
||||||
captures:
|
captures:
|
||||||
1: punctuation.separator.decimal.log
|
1: punctuation.separator.decimal.log
|
||||||
|
- include: immediately_pop
|
||||||
|
maybe_date_time_separator:
|
||||||
|
- match: T(?={{hours_minutes_seconds}})
|
||||||
|
scope: meta.date.log meta.time.log keyword.other.log
|
||||||
|
set: time
|
||||||
|
- include: immediately_pop
|
||||||
ip_addresses:
|
ip_addresses:
|
||||||
- match: \b(?=(?:{{ipv4_part}}\.){3}{{ipv4_part}}\b)
|
- match: \b(?=(?:{{ipv4_part}}\.){3}{{ipv4_part}}\b)
|
||||||
push:
|
push:
|
||||||
|
@ -50,8 +112,7 @@ contexts:
|
||||||
scope: constant.numeric.value.log
|
scope: constant.numeric.value.log
|
||||||
- match: \.
|
- match: \.
|
||||||
scope: punctuation.separator.sequence.log
|
scope: punctuation.separator.sequence.log
|
||||||
- match: ''
|
- include: immediately_pop
|
||||||
pop: true
|
|
||||||
- match: (?=(?:\h{0,4}:){2,6}\h{1,4}\b)
|
- match: (?=(?:\h{0,4}:){2,6}\h{1,4}\b)
|
||||||
push:
|
push:
|
||||||
- meta_scope: meta.ipaddress.v6.log meta.number.integer.hexadecimal.log
|
- meta_scope: meta.ipaddress.v6.log meta.number.integer.hexadecimal.log
|
||||||
|
@ -59,8 +120,7 @@ contexts:
|
||||||
scope: constant.numeric.value.log
|
scope: constant.numeric.value.log
|
||||||
- match: ':'
|
- match: ':'
|
||||||
scope: punctuation.separator.sequence.log
|
scope: punctuation.separator.sequence.log
|
||||||
- match: ''
|
- include: immediately_pop
|
||||||
pop: true
|
|
||||||
numbers:
|
numbers:
|
||||||
- match: \b(0x)(\h+)(?:(\.)(\h+))?\b
|
- match: \b(0x)(\h+)(?:(\.)(\h+))?\b
|
||||||
scope: meta.number.float.hexadecimal.log
|
scope: meta.number.float.hexadecimal.log
|
||||||
|
@ -112,5 +172,13 @@ contexts:
|
||||||
pop: true
|
pop: true
|
||||||
- match: '[^?!.,:*_~\s<&()%]+|\S'
|
- match: '[^?!.,:*_~\s<&()%]+|\S'
|
||||||
scope: markup.underline.link.path.log
|
scope: markup.underline.link.path.log
|
||||||
- match: ''
|
- include: immediately_pop
|
||||||
|
double_quoted_string:
|
||||||
|
- meta_scope: string.quoted.double.log
|
||||||
|
- match: \\"
|
||||||
|
scope: constant.character.escape.log
|
||||||
|
- match: \\n
|
||||||
|
scope: constant.character.escape.log
|
||||||
|
- match: \"
|
||||||
|
scope: punctuation.definition.string.end.log
|
||||||
pop: true
|
pop: true
|
||||||
|
|
|
@ -1 +0,0 @@
|
||||||
Subproject commit 775e6dd62aa16f7b28632a200882ff6ad0315b01
|
|
|
@ -1,19 +0,0 @@
|
||||||
%YAML 1.2
|
|
||||||
---
|
|
||||||
# http://www.sublimetext.com/docs/3/syntax.html
|
|
||||||
name: requirements.txt
|
|
||||||
file_extensions:
|
|
||||||
- requirements.txt
|
|
||||||
scope: source.requirementstxt
|
|
||||||
contexts:
|
|
||||||
main:
|
|
||||||
- match: (#).*$\n?
|
|
||||||
scope: comment.line.requirementstxt
|
|
||||||
captures:
|
|
||||||
1: punctuation.definition.comment.requirementstxt
|
|
||||||
- match: '(?i)^[a-z0-9_\-\.]+'
|
|
||||||
scope: string.package_name.requirementstxt
|
|
||||||
- match: (?i)==|<|<=|>=|>
|
|
||||||
scope: keyword.operator.logical.punctuation.requirementstxt
|
|
||||||
- match: '(?i)\d+\.[\da-z\-_\.]*'
|
|
||||||
scope: constant.numeric.verions.requirementstxt
|
|
|
@ -1 +1 @@
|
||||||
Subproject commit 201816b609abf7ccf583f7e888f6dc4121410d70
|
Subproject commit bf49e9181c6bf992a86beb133144d2651e826ddc
|
|
@ -0,0 +1,419 @@
|
||||||
|
# SYNTAX TEST "VimHelp.sublime-syntax"
|
||||||
|
*helphelp.txt* Nvim
|
||||||
|
# <- punctuation.definition.constant.begin
|
||||||
|
#^^^^^^^^^^^^ entity.name.reference.link
|
||||||
|
# ^ punctuation.definition.constant.end
|
||||||
|
|
||||||
|
|
||||||
|
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||||
|
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ variable.language
|
||||||
|
|
||||||
|
|
||||||
|
Help on help files *helphelp*
|
||||||
|
|
||||||
|
Type |gO| to see the table of contents.
|
||||||
|
# ^ punctuation.definition.link.begin
|
||||||
|
# ^^ markup.underline.link
|
||||||
|
# ^ punctuation.definition.link.end
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ punctuation.definition.heading.1.setext
|
||||||
|
1. Help commands *online-help*
|
||||||
|
#^^^^^^^^^^^^^^^ markup.heading.1.setext
|
||||||
|
|
||||||
|
*help* *<Help>* *:h* *:help* *<F1>* *i_<F1>* *i_<Help>*
|
||||||
|
<Help> or
|
||||||
|
#^^^^^ markup.underline.link.key
|
||||||
|
:h[elp] Open a window and display the help file in read-only
|
||||||
|
mode. If there is a help window open already, use
|
||||||
|
that one. Otherwise, if the current window uses the
|
||||||
|
full width of the screen or is at least 80 characters
|
||||||
|
wide, the help window will appear just above the
|
||||||
|
current window. Otherwise the new window is put at
|
||||||
|
the very top.
|
||||||
|
The 'helplang' option is used to select a language, if
|
||||||
|
# ^ punctuation.definition.link.option.begin
|
||||||
|
# ^^^^^^^^ markup.underline.link.option
|
||||||
|
# ^ punctuation.definition.link.option.end
|
||||||
|
the main help file is available in several languages.
|
||||||
|
|
||||||
|
Type |gO| to see the table of contents.
|
||||||
|
|
||||||
|
*{subject}* *E149* *E661*
|
||||||
|
:h[elp] {subject} Like ":help", additionally jump to the tag {subject}.
|
||||||
|
For example: >
|
||||||
|
:help options
|
||||||
|
|
||||||
|
< {subject} can include wildcards such as "*", "?" and
|
||||||
|
# ^ punctuation.definition.constant.begin
|
||||||
|
# ^^^^^^^ constant.numeric
|
||||||
|
# ^ punctuation.definition.constant.end
|
||||||
|
"[a-z]":
|
||||||
|
:help z? jump to help for any "z" command
|
||||||
|
:help z. jump to the help for "z."
|
||||||
|
But when a tag exists it is taken literally:
|
||||||
|
:help :? jump to help for ":?"
|
||||||
|
|
||||||
|
If there is no full match for the pattern, or there
|
||||||
|
are several matches, the "best" match will be used.
|
||||||
|
A sophisticated algorithm is used to decide which
|
||||||
|
match is better than another one. These items are
|
||||||
|
considered in the computation:
|
||||||
|
- A match with same case is much better than a match
|
||||||
|
with different case.
|
||||||
|
- A match that starts after a non-alphanumeric
|
||||||
|
character is better than a match in the middle of a
|
||||||
|
word.
|
||||||
|
- A match at or near the beginning of the tag is
|
||||||
|
better than a match further on.
|
||||||
|
- The more alphanumeric characters match, the better.
|
||||||
|
- The shorter the length of the match, the better.
|
||||||
|
|
||||||
|
The 'helplang' option is used to select a language, if
|
||||||
|
the {subject} is available in several languages.
|
||||||
|
To find a tag in a specific language, append "@ab",
|
||||||
|
where "ab" is the two-letter language code. See
|
||||||
|
|help-translated|.
|
||||||
|
|
||||||
|
Note that the longer the {subject} you give, the less
|
||||||
|
matches will be found. You can get an idea how this
|
||||||
|
all works by using commandline completion (type CTRL-D
|
||||||
|
# ^^^^^^ markup.underline.link.key
|
||||||
|
after ":help subject" |c_CTRL-D|).
|
||||||
|
If there are several matches, you can have them listed
|
||||||
|
by hitting CTRL-D. Example: >
|
||||||
|
:help cont<Ctrl-D>
|
||||||
|
|
||||||
|
< Instead of typing ":help CTRL-V" to search for help
|
||||||
|
for CTRL-V you can type: >
|
||||||
|
:help ^V
|
||||||
|
< This also works together with other characters, for
|
||||||
|
example to find help for CTRL-V in Insert mode: >
|
||||||
|
:help i^V
|
||||||
|
<
|
||||||
|
It is also possible to first do ":help" and then
|
||||||
|
use ":tag {pattern}" in the help window. The
|
||||||
|
":tnext" command can then be used to jump to other
|
||||||
|
matches, "tselect" to list matches and choose one. >
|
||||||
|
:help index
|
||||||
|
:tselect /.*mode
|
||||||
|
|
||||||
|
< When there is no argument you will see matches for
|
||||||
|
"help", to avoid listing all possible matches (that
|
||||||
|
would be very slow).
|
||||||
|
The number of matches displayed is limited to 300.
|
||||||
|
|
||||||
|
The `:help` command can be followed by '|' and another
|
||||||
|
command, but you don't need to escape the '|' inside a
|
||||||
|
help command. So these both work: >
|
||||||
|
:help |
|
||||||
|
:help k| only
|
||||||
|
< Note that a space before the '|' is seen as part of
|
||||||
|
# ^^^^ constant.other.note
|
||||||
|
the ":help" argument.
|
||||||
|
You can also use <NL> or <CR> to separate the help
|
||||||
|
command from a following command. You need to type
|
||||||
|
CTRL-V first to insert the <NL> or <CR>. Example: >
|
||||||
|
:help so<C-V><CR>only
|
||||||
|
<
|
||||||
|
|
||||||
|
:h[elp]! [subject] Like ":help", but in non-English help files prefer to
|
||||||
|
find a tag in a file with the same language as the
|
||||||
|
current file. See |help-translated|.
|
||||||
|
|
||||||
|
*:helpc* *:helpclose*
|
||||||
|
:helpc[lose] Close one help window, if there is one.
|
||||||
|
Vim will try to restore the window layout (including
|
||||||
|
cursor position) to the same layout it was before
|
||||||
|
opening the help window initially. This might cause
|
||||||
|
triggering several autocommands.
|
||||||
|
|
||||||
|
*:helpg* *:helpgrep*
|
||||||
|
:helpg[rep] {pattern}[@xx]
|
||||||
|
Search all help text files and make a list of lines
|
||||||
|
in which {pattern} matches. Jumps to the first match.
|
||||||
|
The optional [@xx] specifies that only matches in the
|
||||||
|
"xx" language are to be found.
|
||||||
|
You can navigate through the matches with the
|
||||||
|
|quickfix| commands, e.g., |:cnext| to jump to the
|
||||||
|
next one. Or use |:cwindow| to get the list of
|
||||||
|
matches in the quickfix window.
|
||||||
|
{pattern} is used as a Vim regexp |pattern|.
|
||||||
|
'ignorecase' is not used, add "\c" to ignore case.
|
||||||
|
Example for case sensitive search: >
|
||||||
|
:helpgrep Uganda
|
||||||
|
< Example for case ignoring search: >
|
||||||
|
:helpgrep uganda\c
|
||||||
|
< Example for searching in French help: >
|
||||||
|
:helpgrep backspace@fr
|
||||||
|
< The pattern does not support line breaks, it must
|
||||||
|
match within one line. You can use |:grep| instead,
|
||||||
|
but then you need to get the list of help files in a
|
||||||
|
complicated way.
|
||||||
|
Cannot be followed by another command, everything is
|
||||||
|
used as part of the pattern. But you can use
|
||||||
|
|:execute| when needed.
|
||||||
|
Compressed help files will not be searched (Fedora
|
||||||
|
compresses the help files).
|
||||||
|
|
||||||
|
*:lh* *:lhelpgrep*
|
||||||
|
:lh[elpgrep] {pattern}[@xx]
|
||||||
|
Same as ":helpgrep", except the location list is used
|
||||||
|
instead of the quickfix list. If the help window is
|
||||||
|
already opened, then the location list for that window
|
||||||
|
is used. Otherwise, a new help window is opened and
|
||||||
|
the location list for that window is set. The
|
||||||
|
location list for the current window is not changed
|
||||||
|
then.
|
||||||
|
|
||||||
|
*:exu* *:exusage*
|
||||||
|
:exu[sage] Show help on Ex commands. Added to simulate the Nvi
|
||||||
|
command.
|
||||||
|
|
||||||
|
*:viu* *:viusage*
|
||||||
|
:viu[sage] Show help on Normal mode commands. Added to simulate
|
||||||
|
the Nvi command.
|
||||||
|
|
||||||
|
When no argument is given to |:help| the file given with the 'helpfile' option
|
||||||
|
will be opened. Otherwise the specified tag is searched for in all "doc/tags"
|
||||||
|
files in the directories specified in the 'runtimepath' option.
|
||||||
|
|
||||||
|
If you would like to open the help in the current window, see this tip:
|
||||||
|
|help-curwin|.
|
||||||
|
|
||||||
|
The initial height of the help window can be set with the 'helpheight' option
|
||||||
|
(default 20).
|
||||||
|
*help-buffer-options*
|
||||||
|
When the help buffer is created, several local options are set to make sure
|
||||||
|
the help text is displayed as it was intended:
|
||||||
|
'iskeyword' nearly all ASCII chars except ' ', '*', '"' and '|'
|
||||||
|
'foldmethod' "manual"
|
||||||
|
'tabstop' 8
|
||||||
|
'arabic' off
|
||||||
|
'binary' off
|
||||||
|
'buflisted' off
|
||||||
|
'cursorbind' off
|
||||||
|
'diff' off
|
||||||
|
'foldenable' off
|
||||||
|
'list' off
|
||||||
|
'modifiable' off
|
||||||
|
'number' off
|
||||||
|
'relativenumber' off
|
||||||
|
'rightleft' off
|
||||||
|
'scrollbind' off
|
||||||
|
'spell' off
|
||||||
|
|
||||||
|
Jump to specific subjects by using tags. This can be done in two ways:
|
||||||
|
- Use the "CTRL-]" command while standing on the name of a command or option.
|
||||||
|
This only works when the tag is a keyword. "<C-Leftmouse>" and
|
||||||
|
"g<LeftMouse>" work just like "CTRL-]".
|
||||||
|
- use the ":ta {subject}" command. This also works with non-keyword
|
||||||
|
characters.
|
||||||
|
|
||||||
|
Use CTRL-T or CTRL-O to jump back.
|
||||||
|
Use ":q" to close the help window.
|
||||||
|
|
||||||
|
If there are several matches for an item you are looking for, this is how you
|
||||||
|
can jump to each one of them:
|
||||||
|
1. Open a help window
|
||||||
|
2. Use the ":tag" command with a slash prepended to the tag. E.g.: >
|
||||||
|
:tag /min
|
||||||
|
3. Use ":tnext" to jump to the next matching tag.
|
||||||
|
|
||||||
|
It is possible to add help files for plugins and other items. You don't need
|
||||||
|
to change the distributed help files for that. See |add-local-help|.
|
||||||
|
|
||||||
|
To write a local help file, see |write-local-help|.
|
||||||
|
|
||||||
|
Note that the title lines from the local help files are automagically added to
|
||||||
|
the "LOCAL ADDITIONS" section in the "help.txt" help file |local-additions|.
|
||||||
|
This is done when viewing the file in Vim, the file itself is not changed. It
|
||||||
|
is done by going through all help files and obtaining the first line of each
|
||||||
|
file. The files in $VIMRUNTIME/doc are skipped.
|
||||||
|
|
||||||
|
*help-xterm-window*
|
||||||
|
If you want to have the help in another xterm window, you could use this
|
||||||
|
command: >
|
||||||
|
:!xterm -e vim +help &
|
||||||
|
<
|
||||||
|
|
||||||
|
*:helpt* *:helptags*
|
||||||
|
*E150* *E151* *E152* *E153* *E154* *E670* *E856*
|
||||||
|
:helpt[ags] [++t] {dir}
|
||||||
|
Generate the help tags file(s) for directory {dir}.
|
||||||
|
When {dir} is ALL then all "doc" directories in
|
||||||
|
'runtimepath' will be used.
|
||||||
|
|
||||||
|
All "*.txt" and "*.??x" files in the directory and
|
||||||
|
sub-directories are scanned for a help tag definition
|
||||||
|
in between stars. The "*.??x" files are for
|
||||||
|
translated docs, they generate the "tags-??" file, see
|
||||||
|
|help-translated|. The generated tags files are
|
||||||
|
sorted.
|
||||||
|
When there are duplicates an error message is given.
|
||||||
|
An existing tags file is silently overwritten.
|
||||||
|
|
||||||
|
The optional "++t" argument forces adding the
|
||||||
|
"help-tags" tag. This is also done when the {dir} is
|
||||||
|
equal to $VIMRUNTIME/doc.
|
||||||
|
|
||||||
|
To rebuild the help tags in the runtime directory
|
||||||
|
(requires write permission there): >
|
||||||
|
:helptags $VIMRUNTIME/doc
|
||||||
|
<
|
||||||
|
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
2. Translated help files *help-translated*
|
||||||
|
|
||||||
|
It is possible to add translated help files, next to the original English help
|
||||||
|
files. Vim will search for all help in "doc" directories in 'runtimepath'.
|
||||||
|
|
||||||
|
At this moment translations are available for:
|
||||||
|
Chinese - multiple authors
|
||||||
|
French - translated by David Blanchet
|
||||||
|
Italian - translated by Antonio Colombo
|
||||||
|
Japanese - multiple authors
|
||||||
|
Polish - translated by Mikolaj Machowski
|
||||||
|
Russian - translated by Vassily Ragosin
|
||||||
|
See the Vim website to find them: http://www.vim.org/translations.php
|
||||||
|
|
||||||
|
A set of translated help files consists of these files:
|
||||||
|
|
||||||
|
help.abx
|
||||||
|
howto.abx
|
||||||
|
...
|
||||||
|
tags-ab
|
||||||
|
|
||||||
|
"ab" is the two-letter language code. Thus for Italian the names are:
|
||||||
|
|
||||||
|
help.itx
|
||||||
|
howto.itx
|
||||||
|
...
|
||||||
|
tags-it
|
||||||
|
|
||||||
|
The 'helplang' option can be set to the preferred language(s). The default is
|
||||||
|
set according to the environment. Vim will first try to find a matching tag
|
||||||
|
in the preferred language(s). English is used when it cannot be found.
|
||||||
|
|
||||||
|
To find a tag in a specific language, append "@ab" to a tag, where "ab" is the
|
||||||
|
two-letter language code. Example: >
|
||||||
|
:he user-manual@it
|
||||||
|
:he user-manual@en
|
||||||
|
The first one finds the Italian user manual, even when 'helplang' is empty.
|
||||||
|
The second one finds the English user manual, even when 'helplang' is set to
|
||||||
|
"it".
|
||||||
|
|
||||||
|
When using command-line completion for the ":help" command, the "@en"
|
||||||
|
extension is only shown when a tag exists for multiple languages. When the
|
||||||
|
tag only exists for English "@en" is omitted. When the first candidate has an
|
||||||
|
"@ab" extension and it matches the first language in 'helplang' "@ab" is also
|
||||||
|
omitted.
|
||||||
|
|
||||||
|
When using |CTRL-]| or ":help!" in a non-English help file Vim will try to
|
||||||
|
find the tag in the same language. If not found then 'helplang' will be used
|
||||||
|
to select a language.
|
||||||
|
|
||||||
|
Help files must use latin1 or utf-8 encoding. Vim assumes the encoding is
|
||||||
|
utf-8 when finding non-ASCII characters in the first line. Thus you must
|
||||||
|
translate the header with "For Vim version".
|
||||||
|
|
||||||
|
The same encoding must be used for the help files of one language in one
|
||||||
|
directory. You can use a different encoding for different languages and use
|
||||||
|
a different encoding for help files of the same language but in a different
|
||||||
|
directory.
|
||||||
|
|
||||||
|
Hints for translators:
|
||||||
|
- Do not translate the tags. This makes it possible to use 'helplang' to
|
||||||
|
specify the preferred language. You may add new tags in your language.
|
||||||
|
- When you do not translate a part of a file, add tags to the English version,
|
||||||
|
using the "tag@en" notation.
|
||||||
|
- Make a package with all the files and the tags file available for download.
|
||||||
|
Users can drop it in one of the "doc" directories and start use it.
|
||||||
|
Report this to Bram, so that he can add a link on www.vim.org.
|
||||||
|
- Use the |:helptags| command to generate the tags files. It will find all
|
||||||
|
languages in the specified directory.
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
3. Writing help files *help-writing*
|
||||||
|
|
||||||
|
For ease of use, a Vim help file for a plugin should follow the format of the
|
||||||
|
standard Vim help files, except for the first line. If you are writing a new
|
||||||
|
help file it's best to copy one of the existing files and use it as a
|
||||||
|
template.
|
||||||
|
|
||||||
|
The first line in a help file should have the following format:
|
||||||
|
|
||||||
|
*plugin_name.txt* {short description of the plugin}
|
||||||
|
|
||||||
|
The first field is a help tag where ":help plugin_name" will jump to. The
|
||||||
|
remainder of the line, after a Tab, describes the plugin purpose in a short
|
||||||
|
way. This will show up in the "LOCAL ADDITIONS" section of the main help
|
||||||
|
file. Check there that it shows up properly: |local-additions|.
|
||||||
|
|
||||||
|
If you want to add a version number or last modification date, put it in the
|
||||||
|
second line, right aligned.
|
||||||
|
|
||||||
|
At the bottom of the help file, place a Vim modeline to set the 'textwidth'
|
||||||
|
and 'tabstop' options and the 'filetype' to "help". Never set a global option
|
||||||
|
in such a modeline, that can have undesired consequences.
|
||||||
|
|
||||||
|
|
||||||
|
TAGS
|
||||||
|
|
||||||
|
To define a help tag, place the name between asterisks (*tag-name*). The
|
||||||
|
tag-name should be different from all the Vim help tag names and ideally
|
||||||
|
should begin with the name of the Vim plugin. The tag name is usually right
|
||||||
|
aligned on a line.
|
||||||
|
|
||||||
|
When referring to an existing help tag and to create a hot-link, place the
|
||||||
|
name between two bars (|) eg. |help-writing|.
|
||||||
|
|
||||||
|
When referring to a Vim command and to create a hot-link, place the
|
||||||
|
name between two backticks, eg. inside `:filetype`. You will see this is
|
||||||
|
highlighted as a command, like a code block (see below).
|
||||||
|
|
||||||
|
When referring to a Vim option in the help file, place the option name between
|
||||||
|
two single quotes, eg. 'statusline'
|
||||||
|
|
||||||
|
When referring to any other technical term, such as a filename or function
|
||||||
|
parameter, surround it in backticks, eg. `~/.path/to/init.vim`.
|
||||||
|
|
||||||
|
|
||||||
|
HIGHLIGHTING
|
||||||
|
|
||||||
|
To define a column heading, use a tilde character at the end of the line.
|
||||||
|
This will highlight the column heading in a different color. E.g.
|
||||||
|
|
||||||
|
Column heading~
|
||||||
|
#^^^^^^^^^^^^^ markup.heading.header
|
||||||
|
# ^ punctuation.definition.keyword
|
||||||
|
|
||||||
|
To separate sections in a help file, place a series of '=' characters in a
|
||||||
|
line starting from the first column. The section separator line is highlighted
|
||||||
|
differently.
|
||||||
|
|
||||||
|
To quote a block of ex-commands verbatim, place a greater than (>) character
|
||||||
|
at the end of the line before the block and a less than (<) character as the
|
||||||
|
first non-blank on a line following the block. Any line starting in column 1
|
||||||
|
also implicitly stops the block of ex-commands before it. E.g. >
|
||||||
|
function Example_Func()
|
||||||
|
echo "Example"
|
||||||
|
endfunction
|
||||||
|
<
|
||||||
|
|
||||||
|
The following are highlighted differently in a Vim help file:
|
||||||
|
- a special key name expressed either in <> notation as in <PageDown>, or
|
||||||
|
as a Ctrl character as in CTRL-X
|
||||||
|
- anything between {braces}, e.g. {lhs} and {rhs}
|
||||||
|
|
||||||
|
The word "Note", "Notes" and similar automagically receive distinctive
|
||||||
|
highlighting. So do these:
|
||||||
|
*Todo something to do
|
||||||
|
*Error something wrong
|
||||||
|
|
||||||
|
You can find the details in $VIMRUNTIME/syntax/help.vim
|
||||||
|
|
||||||
|
|
||||||
|
vim:tw=78:ts=8:noet:ft=help:norl:
|
||||||
|
#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ comment.line.modeline
|
|
@ -157,6 +157,108 @@ ENVIRONMENT
|
||||||
systemd reads the log level from this environment variable. This
|
systemd reads the log level from this environment variable. This
|
||||||
can be overridden with --log-level=.
|
can be overridden with --log-level=.
|
||||||
|
|
||||||
|
ENVIRONMENT VARIABLES
|
||||||
|
Various Git commands use the following environment variables:
|
||||||
|
|
||||||
|
The Git Repository
|
||||||
|
These environment variables apply to all core Git commands. Nb: it is
|
||||||
|
worth noting that they may be used/overridden by SCMS sitting above Git
|
||||||
|
so take care if using a foreign front-end.
|
||||||
|
|
||||||
|
GIT_INDEX_FILE
|
||||||
|
# ^^^^^^^^^^^^^^ support.constant.environment-variable
|
||||||
|
This environment allows the specification of an alternate index
|
||||||
|
file. If not specified, the default of $GIT_DIR/index is used.
|
||||||
|
|
||||||
|
GIT_INDEX_VERSION
|
||||||
|
# ^^^^^^^^^^^^^^^^^ support.constant.environment-variable
|
||||||
|
This environment variable allows the specification of an index
|
||||||
|
version for new repositories. It won’t affect existing index files.
|
||||||
|
By default index file version 2 or 3 is used. See git-update-
|
||||||
|
index(1) for more information.
|
||||||
|
|
||||||
|
COMMANDS
|
||||||
|
This section only lists general commands. For input and output com‐
|
||||||
|
mands, refer to sway-input(5) and sway-output(5).
|
||||||
|
|
||||||
|
The following commands may only be used in the configuration file.
|
||||||
|
|
||||||
|
bar [<bar-id>] <bar-subcommands...>
|
||||||
|
# ^^^ entity.name.command
|
||||||
|
# ^ punctuation.section.brackets.begin
|
||||||
|
# ^ punctuation.definition.generic.begin
|
||||||
|
# ^^^^^^ variable.parameter
|
||||||
|
# ^ punctuation.definition.generic.end
|
||||||
|
# ^ punctuation.section.brackets.end
|
||||||
|
# ^ punctuation.definition.generic.begin
|
||||||
|
# ^^^^^^^^^^^^^^^ variable.parameter
|
||||||
|
# ^ punctuation.definition.generic.end
|
||||||
|
For details on bar subcommands, see sway-bar(5).
|
||||||
|
|
||||||
|
default_orientation horizontal|vertical|auto
|
||||||
|
# ^^^^^^^^^^^^^^^^^^^ entity.name.command
|
||||||
|
# ^^^^^^^^^^ variable.parameter
|
||||||
|
# ^ keyword.operator.logical
|
||||||
|
# ^^^^^^^^ variable.parameter
|
||||||
|
# ^ keyword.operator.logical
|
||||||
|
# ^^^^ variable.parameter
|
||||||
|
Sets the default container layout for tiled containers.
|
||||||
|
|
||||||
|
include <path>
|
||||||
|
Includes another file from path. path can be either a full path or
|
||||||
|
a path relative to the parent config, and expands shell syntax (see
|
||||||
|
wordexp(3) for details). The same include file can only be included
|
||||||
|
once; subsequent attempts will be ignored.
|
||||||
|
|
||||||
|
The following commands cannot be used directly in the configuration
|
||||||
|
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - variable - entity
|
||||||
|
file. They are expected to be used with bindsym or at runtime through
|
||||||
|
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - variable - entity
|
||||||
|
swaymsg(1).
|
||||||
|
|
||||||
|
border none|normal|csd|pixel [<n>]
|
||||||
|
Set border style for focused window. normal includes a border of
|
||||||
|
thickness n and a title bar. pixel is a border without title bar n
|
||||||
|
pixels thick. Default is normal with border thickness 2. csd is
|
||||||
|
short for client-side-decorations, which allows the client to draw
|
||||||
|
its own decorations.
|
||||||
|
|
||||||
|
border toggle
|
||||||
|
# ^^^^^^ entity.name.command
|
||||||
|
Cycles through the available border styles.
|
||||||
|
|
||||||
|
exit
|
||||||
|
# ^^^^ entity.name.command
|
||||||
|
Exit sway and end your Wayland session.
|
||||||
|
|
||||||
|
floating enable|disable|toggle
|
||||||
|
Make focused view floating, non-floating, or the opposite of what
|
||||||
|
it is now.
|
||||||
|
|
||||||
|
<criteria> focus
|
||||||
|
# ^ punctuation.definition.generic.begin
|
||||||
|
# ^^^^^^^^ variable.parameter
|
||||||
|
# ^ punctuation.definition.generic.end
|
||||||
|
# ^^^^^ variable.parameter
|
||||||
|
Moves focus to the container that matches the specified criteria.
|
||||||
|
|
||||||
|
gaps inner|outer|horizontal|vertical|top|right|bottom|left all|current
|
||||||
|
set|plus|minus|toggle <amount>
|
||||||
|
# ^^^ variable.parameter
|
||||||
|
# ^ keyword.operator.logical
|
||||||
|
Changes the inner or outer gaps for either all workspaces or the
|
||||||
|
current workspace. outer gaps can be altered per side with top,
|
||||||
|
right, bottom, and left or per direction with horizontal and verti‐
|
||||||
|
cal.
|
||||||
|
|
||||||
|
layout toggle [split|tabbed|stacking|splitv|splith]
|
||||||
|
[split|tabbed|stacking|splitv|splith]...
|
||||||
|
# ^ punctuation.section.brackets.begin
|
||||||
|
# ^^^^^ variable.parameter
|
||||||
|
# ^ keyword.operator.logical
|
||||||
|
Cycles the layout mode of the focused container through a list of
|
||||||
|
layouts.
|
||||||
|
|
||||||
SEE ALSO
|
SEE ALSO
|
||||||
The systemd Homepage[11], systemd-system.conf(5), locale.conf(5)
|
The systemd Homepage[11], systemd-system.conf(5), locale.conf(5)
|
||||||
# ^^^^^^^^^^^^^^^^^^^ entity.name.function
|
# ^^^^^^^^^^^^^^^^^^^ entity.name.function
|
||||||
|
|
|
@ -0,0 +1,82 @@
|
||||||
|
# SYNTAX TEST "Requirementstxt.sublime-syntax"
|
||||||
|
# Options
|
||||||
|
# <- punctuation.definition.comment
|
||||||
|
# ^^^^^^^ comment.line
|
||||||
|
--allow-external
|
||||||
|
#^^^^^^^^^^^^^^^ entity.name.function.option
|
||||||
|
--allow-unverified
|
||||||
|
|
||||||
|
# Freeze packages
|
||||||
|
alabaster==0.7.6
|
||||||
|
Babel>=2.9.1
|
||||||
|
docutils==0.12
|
||||||
|
gevent_subprocess==0.1.2
|
||||||
|
gitpython==3.0.7
|
||||||
|
hg-diff==1.2.4
|
||||||
|
#^^^^^^ variable.parameter.package-name
|
||||||
|
# ^^ keyword.operator.logical
|
||||||
|
# ^^^^^ constant.other
|
||||||
|
Jinja2>=2.8.1
|
||||||
|
MarkupSafe==0.23
|
||||||
|
Pygments==2.7.4
|
||||||
|
pytz==2015.7
|
||||||
|
six==1.10.0
|
||||||
|
snowballstemmer==1.2.0
|
||||||
|
Sphinx==1.3.3
|
||||||
|
sphinx-rtd-theme==0.1.9
|
||||||
|
svn==1.0.1
|
||||||
|
zope.interface==4.2.0
|
||||||
|
|
||||||
|
# Examples from PEP508
|
||||||
|
# c.f. https://www.python.org/dev/peps/pep-0508/
|
||||||
|
requests [security,tests] >= 2.8.1, == 2.8.* ; python_version < "2.7" # Comment
|
||||||
|
#^^^^^^^ variable.parameter.package-name
|
||||||
|
# ^^^^^^^^^^^^^^^^ variable.function.extra
|
||||||
|
# ^ punctuation.section.braces.begin
|
||||||
|
# ^ punctuation.separator
|
||||||
|
# ^ punctuation.section.braces.end
|
||||||
|
# ^^ keyword.operator.logical
|
||||||
|
# ^^^^^ constant.other
|
||||||
|
# ^^ keyword.operator.logical
|
||||||
|
# ^^^^^ constant.other
|
||||||
|
# ^ punctuation.definition.annotation
|
||||||
|
# ^^^^^^^^^^^^^^^^^^^^^^^^ meta.annotation
|
||||||
|
# ^^^^^^^^^^^^^^ variable.language
|
||||||
|
# ^ keyword.operator.logical
|
||||||
|
# ^ punctuation.definition.string.begin.double
|
||||||
|
# ^^^^^ string.quoted.double.requirements-txt
|
||||||
|
# ^ punctuation.definition.string.end.double
|
||||||
|
# ^^^^^^^^^ comment.line
|
||||||
|
pip @ https://github.com/pypa/pip/archive/1.3.1.zip#sha1=da9234ee9982d4bbb3c72346a6de940a148ea686
|
||||||
|
# ^ punctuation.definition.keyword
|
||||||
|
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ markup.underline.link.url
|
||||||
|
name @ gopher:/foo/com"
|
||||||
|
foobar[quux]<2,>=3; os_name=='a'
|
||||||
|
|
||||||
|
# VCS repositories
|
||||||
|
-e git+git://git.myproject.org/MyProject#egg=MyProject # Git
|
||||||
|
# <- entity.name.function.option
|
||||||
|
#^ entity.name.function.option
|
||||||
|
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ markup.underline.link.versioncontrols
|
||||||
|
# ^^^^^^^^^^^^^^^ - comment.line
|
||||||
|
# ^^^^^ comment.line
|
||||||
|
-e git://git.myproject.org/MyProject.git@v1.0#egg=MyProject
|
||||||
|
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ markup.underline.link.versioncontrols
|
||||||
|
-e hg+https://hg.myproject.org/MyProject#egg=MyProject # Mercurial
|
||||||
|
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ markup.underline.link.versioncontrols
|
||||||
|
# ^^^^^^^^^^^ comment.line
|
||||||
|
-e hg+http://hg.myproject.org/MyProject@da39a3ee5e6b#egg=MyProject
|
||||||
|
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ markup.underline.link.versioncontrols
|
||||||
|
-e svn+http://svn.myproject.org/svn/MyProject/trunk@2019#egg=MyProject # Subversion
|
||||||
|
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ markup.underline.link.versioncontrols
|
||||||
|
# ^^^^^^^^^^^^ comment.line
|
||||||
|
-e bzr+ssh://user@myproject.org/MyProject/trunk#egg=MyProject # Bazaar
|
||||||
|
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ markup.underline.link.versioncontrols
|
||||||
|
# ^^^^^^^^ comment.line
|
||||||
|
-e bzr+https://bzr.myproject.org/MyProject/trunk@2019#egg=MyProject
|
||||||
|
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ markup.underline.link.versioncontrols
|
||||||
|
|
||||||
|
# Project or archive URL
|
||||||
|
https://github.com/pallets/click/archive/7.0.zip#egg=click
|
||||||
|
#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ markup.underline.link.url
|
||||||
|
# ^^^^^^^^^^ - comment.line
|
|
@ -16,11 +16,11 @@ contexts:
|
||||||
- match: ^
|
- match: ^
|
||||||
push: text
|
push: text
|
||||||
loghost:
|
loghost:
|
||||||
- match: '[\w-]+'
|
- match: '[\w:.-]+'
|
||||||
scope: entity.other.attribute-name.loghost.syslog
|
scope: entity.other.attribute-name.loghost.syslog
|
||||||
set: process
|
set: process
|
||||||
process:
|
process:
|
||||||
- match: ([\w-]+)(?:(\[)(\d+)(\]))?(:)
|
- match: ([\w.-]+)(?:(\[)(\d+)(\]))?([ :])
|
||||||
captures:
|
captures:
|
||||||
1: support.function.process.syslog
|
1: support.function.process.syslog
|
||||||
2: punctuation.separator.pid.begin.syslog
|
2: punctuation.separator.pid.begin.syslog
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit acf26718d7a327377641e31d8f9a9dab376efa84
|
|
@ -0,0 +1,198 @@
|
||||||
|
%YAML 1.2
|
||||||
|
---
|
||||||
|
# http://www.sublimetext.com/docs/syntax.html
|
||||||
|
name: WGSL
|
||||||
|
file_extensions:
|
||||||
|
- wgsl
|
||||||
|
scope: source.wgsl
|
||||||
|
contexts:
|
||||||
|
main:
|
||||||
|
- include: line_comments
|
||||||
|
- include: block_comments
|
||||||
|
- include: keywords
|
||||||
|
- include: attributes
|
||||||
|
- include: functions
|
||||||
|
- include: function_calls
|
||||||
|
- include: constants
|
||||||
|
- include: types
|
||||||
|
- include: variables
|
||||||
|
- include: punctuation
|
||||||
|
attributes:
|
||||||
|
- match: '(@)([A-Za-z_]+)'
|
||||||
|
comment: attribute declaration
|
||||||
|
scope: meta.attribute.wgsl
|
||||||
|
captures:
|
||||||
|
1: keyword.operator.attribute.at
|
||||||
|
2: entity.name.attribute.wgsl
|
||||||
|
block_comments:
|
||||||
|
- match: /\*\*/
|
||||||
|
comment: empty block comments
|
||||||
|
scope: comment.block.wgsl
|
||||||
|
- match: /\*\*
|
||||||
|
comment: block documentation comments
|
||||||
|
push:
|
||||||
|
- meta_scope: comment.block.documentation.wgsl
|
||||||
|
- match: \*/
|
||||||
|
pop: true
|
||||||
|
- include: block_comments
|
||||||
|
- match: /\*(?!\*)
|
||||||
|
comment: block comments
|
||||||
|
push:
|
||||||
|
- meta_scope: comment.block.wgsl
|
||||||
|
- match: \*/
|
||||||
|
pop: true
|
||||||
|
- include: block_comments
|
||||||
|
constants:
|
||||||
|
- match: '(-?\b[0-9][0-9]*\.[0-9][0-9]*)([eE][+-]?[0-9]+)?\b'
|
||||||
|
comment: decimal float literal
|
||||||
|
scope: constant.numeric.float.wgsl
|
||||||
|
- match: '-?\b0x[0-9a-fA-F]+\b|\b0\b|-?\b[1-9][0-9]*\b'
|
||||||
|
comment: int literal
|
||||||
|
scope: constant.numeric.decimal.wgsl
|
||||||
|
- match: '\b0x[0-9a-fA-F]+u\b|\b0u\b|\b[1-9][0-9]*u\b'
|
||||||
|
comment: uint literal
|
||||||
|
scope: constant.numeric.decimal.wgsl
|
||||||
|
- match: \b(true|false)\b
|
||||||
|
comment: boolean constant
|
||||||
|
scope: constant.language.boolean.wgsl
|
||||||
|
function_calls:
|
||||||
|
- match: '([A-Za-z0-9_]+)(\()'
|
||||||
|
comment: function/method calls
|
||||||
|
captures:
|
||||||
|
1: entity.name.function.wgsl
|
||||||
|
2: punctuation.brackets.round.wgsl
|
||||||
|
push:
|
||||||
|
- meta_scope: meta.function.call.wgsl
|
||||||
|
- match: \)
|
||||||
|
captures:
|
||||||
|
0: punctuation.brackets.round.wgsl
|
||||||
|
pop: true
|
||||||
|
- include: line_comments
|
||||||
|
- include: block_comments
|
||||||
|
- include: keywords
|
||||||
|
- include: attributes
|
||||||
|
- include: function_calls
|
||||||
|
- include: constants
|
||||||
|
- include: types
|
||||||
|
- include: variables
|
||||||
|
- include: punctuation
|
||||||
|
functions:
|
||||||
|
- match: '\b(fn)\s+([A-Za-z0-9_]+)((\()|(<))'
|
||||||
|
comment: function definition
|
||||||
|
captures:
|
||||||
|
1: keyword.other.fn.wgsl
|
||||||
|
2: entity.name.function.wgsl
|
||||||
|
4: punctuation.brackets.round.wgsl
|
||||||
|
push:
|
||||||
|
- meta_scope: meta.function.definition.wgsl
|
||||||
|
- match: '\{'
|
||||||
|
captures:
|
||||||
|
0: punctuation.brackets.curly.wgsl
|
||||||
|
pop: true
|
||||||
|
- include: line_comments
|
||||||
|
- include: block_comments
|
||||||
|
- include: keywords
|
||||||
|
- include: attributes
|
||||||
|
- include: function_calls
|
||||||
|
- include: constants
|
||||||
|
- include: types
|
||||||
|
- include: variables
|
||||||
|
- include: punctuation
|
||||||
|
keywords:
|
||||||
|
- match: \b(bitcast|block|break|case|continue|continuing|default|discard|else|elseif|enable|fallthrough|for|function|if|loop|private|read|read_write|return|storage|switch|uniform|while|workgroup|write)\b
|
||||||
|
comment: other keywords
|
||||||
|
scope: keyword.control.wgsl
|
||||||
|
- match: \b(asm|const|do|enum|handle|mat|premerge|regardless|typedef|unless|using|vec|void)\b
|
||||||
|
comment: reserved keywords
|
||||||
|
scope: keyword.control.wgsl
|
||||||
|
- match: \b(let|var)\b
|
||||||
|
comment: storage keywords
|
||||||
|
scope: keyword.other.wgsl storage.type.wgsl
|
||||||
|
- match: \b(type)\b
|
||||||
|
comment: type keyword
|
||||||
|
scope: keyword.declaration.type.wgsl storage.type.wgsl
|
||||||
|
- match: \b(enum)\b
|
||||||
|
comment: enum keyword
|
||||||
|
scope: keyword.declaration.enum.wgsl storage.type.wgsl
|
||||||
|
- match: \b(struct)\b
|
||||||
|
comment: struct keyword
|
||||||
|
scope: keyword.declaration.struct.wgsl storage.type.wgsl
|
||||||
|
- match: \bfn\b
|
||||||
|
comment: fn
|
||||||
|
scope: keyword.other.fn.wgsl
|
||||||
|
- match: (\^|\||\|\||&&|<<|>>|!)(?!=)
|
||||||
|
comment: logical operators
|
||||||
|
scope: keyword.operator.logical.wgsl
|
||||||
|
- match: '&(?![&=])'
|
||||||
|
comment: logical AND, borrow references
|
||||||
|
scope: keyword.operator.borrow.and.wgsl
|
||||||
|
- match: (\+=|-=|\*=|/=|%=|\^=|&=|\|=|<<=|>>=)
|
||||||
|
comment: assignment operators
|
||||||
|
scope: keyword.operator.assignment.wgsl
|
||||||
|
- match: '(?<![<>])=(?!=|>)'
|
||||||
|
comment: single equal
|
||||||
|
scope: keyword.operator.assignment.equal.wgsl
|
||||||
|
- match: (=(=)?(?!>)|!=|<=|(?<!=)>=)
|
||||||
|
comment: comparison operators
|
||||||
|
scope: keyword.operator.comparison.wgsl
|
||||||
|
- match: '(([+%]|(\*(?!\w)))(?!=))|(-(?!>))|(/(?!/))'
|
||||||
|
comment: math operators
|
||||||
|
scope: keyword.operator.math.wgsl
|
||||||
|
- match: \.(?!\.)
|
||||||
|
comment: dot access
|
||||||
|
scope: keyword.operator.access.dot.wgsl
|
||||||
|
- match: '->'
|
||||||
|
comment: dashrocket, skinny arrow
|
||||||
|
scope: keyword.operator.arrow.skinny.wgsl
|
||||||
|
line_comments:
|
||||||
|
- match: \s*//.*
|
||||||
|
comment: single line comment
|
||||||
|
scope: comment.line.double-slash.wgsl
|
||||||
|
punctuation:
|
||||||
|
- match: ','
|
||||||
|
comment: comma
|
||||||
|
scope: punctuation.comma.wgsl
|
||||||
|
- match: '[{}]'
|
||||||
|
comment: curly braces
|
||||||
|
scope: punctuation.brackets.curly.wgsl
|
||||||
|
- match: '[()]'
|
||||||
|
comment: parentheses, round brackets
|
||||||
|
scope: punctuation.brackets.round.wgsl
|
||||||
|
- match: ;
|
||||||
|
comment: semicolon
|
||||||
|
scope: punctuation.semi.wgsl
|
||||||
|
- match: '[\[\]]'
|
||||||
|
comment: square brackets
|
||||||
|
scope: punctuation.brackets.square.wgsl
|
||||||
|
- match: '(?<![=-])[<>]'
|
||||||
|
comment: angle brackets
|
||||||
|
scope: punctuation.brackets.angle.wgsl
|
||||||
|
types:
|
||||||
|
- match: \b(bool|i32|u32|f32)\b
|
||||||
|
comment: scalar Types
|
||||||
|
scope: storage.type.wgsl
|
||||||
|
- match: \b(i64|u64|f64)\b
|
||||||
|
comment: reserved scalar Types
|
||||||
|
scope: storage.type.wgsl
|
||||||
|
- match: \b(vec2i|vec3i|vec4i|vec2u|vec3u|vec4u|vec2f|vec3f|vec4f|vec2h|vec3h|vec4h)\b
|
||||||
|
comment: vector type aliasses
|
||||||
|
scope: storage.type.wgsl
|
||||||
|
- match: \b(mat2x2f|mat2x3f|mat2x4f|mat3x2f|mat3x3f|mat3x4f|mat4x2f|mat4x3f|mat4x4f|mat2x2h|mat2x3h|mat2x4h|mat3x2h|mat3x3h|mat3x4h|mat4x2h|mat4x3h|mat4x4h)\b
|
||||||
|
comment: matrix type aliasses
|
||||||
|
scope: storage.type.wgsl
|
||||||
|
- match: '\b(vec[2-4]|mat[2-4]x[2-4])\b'
|
||||||
|
comment: vector/matrix types
|
||||||
|
scope: storage.type.wgsl
|
||||||
|
- match: \b(atomic)\b
|
||||||
|
comment: atomic types
|
||||||
|
scope: storage.type.wgsl
|
||||||
|
- match: \b(array)\b
|
||||||
|
comment: array types
|
||||||
|
scope: storage.type.wgsl
|
||||||
|
- match: '\b([A-Z][A-Za-z0-9]*)\b'
|
||||||
|
comment: Custom type
|
||||||
|
scope: entity.name.type.wgsl
|
||||||
|
variables:
|
||||||
|
- match: '\b(?<!(?<!\.)\.)(?:r#(?!(crate|[Ss]elf|super)))?[a-z0-9_]+\b'
|
||||||
|
comment: variables
|
||||||
|
scope: variable.other.wgsl
|
Binary file not shown.
|
@ -1 +1 @@
|
||||||
Subproject commit 702023d80d9f845a5847eefc4c81c2d4dbbdac59
|
Subproject commit 86d4ee7a1f884851a1d21d66249687f527fced32
|
101
build.rs
101
build.rs
|
@ -1,101 +0,0 @@
|
||||||
// TODO: Re-enable generation of shell completion files (below) when clap 3 is out.
|
|
||||||
// For more details, see https://github.com/sharkdp/bat/issues/372
|
|
||||||
|
|
||||||
// For bat-as-a-library, no build script is required. The build script is for
|
|
||||||
// the manpage and completions, which are only relevant to the bat application.
|
|
||||||
#[cfg(not(feature = "application"))]
|
|
||||||
fn main() {}
|
|
||||||
|
|
||||||
#[cfg(feature = "application")]
|
|
||||||
fn main() -> Result<(), Box<dyn std::error::Error>> {
|
|
||||||
use std::collections::HashMap;
|
|
||||||
use std::error::Error;
|
|
||||||
use std::fs;
|
|
||||||
use std::path::Path;
|
|
||||||
|
|
||||||
// Read environment variables.
|
|
||||||
let project_name = option_env!("PROJECT_NAME").unwrap_or("bat");
|
|
||||||
let executable_name = option_env!("PROJECT_EXECUTABLE").unwrap_or(project_name);
|
|
||||||
let executable_name_uppercase = executable_name.to_uppercase();
|
|
||||||
static PROJECT_VERSION: &str = env!("CARGO_PKG_VERSION");
|
|
||||||
|
|
||||||
/// Generates a file from a template.
|
|
||||||
fn template(
|
|
||||||
variables: &HashMap<&str, &str>,
|
|
||||||
in_file: &str,
|
|
||||||
out_file: impl AsRef<Path>,
|
|
||||||
) -> Result<(), Box<dyn Error>> {
|
|
||||||
let mut content = fs::read_to_string(in_file)?;
|
|
||||||
|
|
||||||
for (variable_name, value) in variables {
|
|
||||||
// Replace {{variable_name}} by the value
|
|
||||||
let pattern = format!("{{{{{variable_name}}}}}", variable_name = variable_name);
|
|
||||||
content = content.replace(&pattern, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
fs::write(out_file, content)?;
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
|
|
||||||
let mut variables = HashMap::new();
|
|
||||||
variables.insert("PROJECT_NAME", project_name);
|
|
||||||
variables.insert("PROJECT_EXECUTABLE", executable_name);
|
|
||||||
variables.insert("PROJECT_EXECUTABLE_UPPERCASE", &executable_name_uppercase);
|
|
||||||
variables.insert("PROJECT_VERSION", PROJECT_VERSION);
|
|
||||||
|
|
||||||
let out_dir_env = std::env::var_os("OUT_DIR").expect("OUT_DIR to be set in build.rs");
|
|
||||||
let out_dir = Path::new(&out_dir_env);
|
|
||||||
|
|
||||||
fs::create_dir_all(out_dir.join("assets/manual")).unwrap();
|
|
||||||
fs::create_dir_all(out_dir.join("assets/completions")).unwrap();
|
|
||||||
|
|
||||||
template(
|
|
||||||
&variables,
|
|
||||||
"assets/manual/bat.1.in",
|
|
||||||
out_dir.join("assets/manual/bat.1"),
|
|
||||||
)?;
|
|
||||||
template(
|
|
||||||
&variables,
|
|
||||||
"assets/completions/bat.bash.in",
|
|
||||||
out_dir.join("assets/completions/bat.bash"),
|
|
||||||
)?;
|
|
||||||
template(
|
|
||||||
&variables,
|
|
||||||
"assets/completions/bat.fish.in",
|
|
||||||
out_dir.join("assets/completions/bat.fish"),
|
|
||||||
)?;
|
|
||||||
template(
|
|
||||||
&variables,
|
|
||||||
"assets/completions/bat.zsh.in",
|
|
||||||
out_dir.join("assets/completions/bat.zsh"),
|
|
||||||
)?;
|
|
||||||
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
|
|
||||||
// #[macro_use]
|
|
||||||
// extern crate clap;
|
|
||||||
|
|
||||||
// use clap::Shell;
|
|
||||||
// use std::fs;
|
|
||||||
|
|
||||||
// include!("src/clap_app.rs");
|
|
||||||
|
|
||||||
// const BIN_NAME: &str = "bat";
|
|
||||||
|
|
||||||
// fn main() {
|
|
||||||
// let outdir = std::env::var_os("SHELL_COMPLETIONS_DIR").or(std::env::var_os("OUT_DIR"));
|
|
||||||
|
|
||||||
// let outdir = match outdir {
|
|
||||||
// None => return,
|
|
||||||
// Some(outdir) => outdir,
|
|
||||||
// };
|
|
||||||
|
|
||||||
// fs::create_dir_all(&outdir).unwrap();
|
|
||||||
|
|
||||||
// let mut app = build_app(true);
|
|
||||||
// app.gen_completions(BIN_NAME, Shell::Bash, &outdir);
|
|
||||||
// app.gen_completions(BIN_NAME, Shell::Fish, &outdir);
|
|
||||||
// app.gen_completions(BIN_NAME, Shell::Zsh, &outdir);
|
|
||||||
// app.gen_completions(BIN_NAME, Shell::PowerShell, &outdir);
|
|
||||||
// }
|
|
|
@ -0,0 +1,67 @@
|
||||||
|
use std::{env, fs, path::PathBuf};
|
||||||
|
|
||||||
|
use crate::util::render_template;
|
||||||
|
|
||||||
|
/// Generate manpage and shell completions for the bat application.
|
||||||
|
pub fn gen_man_and_comp() -> anyhow::Result<()> {
|
||||||
|
println!("cargo:rerun-if-changed=assets/manual/");
|
||||||
|
println!("cargo:rerun-if-changed=assets/completions/");
|
||||||
|
|
||||||
|
println!("cargo:rerun-if-env-changed=PROJECT_NAME");
|
||||||
|
println!("cargo:rerun-if-env-changed=PROJECT_EXECUTABLE");
|
||||||
|
println!("cargo:rerun-if-env-changed=CARGO_PKG_VERSION");
|
||||||
|
println!("cargo:rerun-if-env-changed=BAT_ASSETS_GEN_DIR");
|
||||||
|
|
||||||
|
// Read environment variables.
|
||||||
|
let project_name = env::var("PROJECT_NAME").unwrap_or("bat".into());
|
||||||
|
let executable_name = env::var("PROJECT_EXECUTABLE").unwrap_or(project_name.clone());
|
||||||
|
let executable_name_uppercase = executable_name.to_uppercase();
|
||||||
|
let project_version = env::var("CARGO_PKG_VERSION")?;
|
||||||
|
|
||||||
|
let variables = [
|
||||||
|
("PROJECT_NAME", project_name),
|
||||||
|
("PROJECT_EXECUTABLE", executable_name),
|
||||||
|
("PROJECT_EXECUTABLE_UPPERCASE", executable_name_uppercase),
|
||||||
|
("PROJECT_VERSION", project_version),
|
||||||
|
]
|
||||||
|
.into_iter()
|
||||||
|
.collect();
|
||||||
|
|
||||||
|
let Some(out_dir) = env::var_os("BAT_ASSETS_GEN_DIR")
|
||||||
|
.or_else(|| env::var_os("OUT_DIR"))
|
||||||
|
.map(PathBuf::from)
|
||||||
|
else {
|
||||||
|
anyhow::bail!("BAT_ASSETS_GEN_DIR or OUT_DIR should be set for build.rs");
|
||||||
|
};
|
||||||
|
|
||||||
|
fs::create_dir_all(out_dir.join("assets/manual")).unwrap();
|
||||||
|
fs::create_dir_all(out_dir.join("assets/completions")).unwrap();
|
||||||
|
|
||||||
|
render_template(
|
||||||
|
&variables,
|
||||||
|
"assets/manual/bat.1.in",
|
||||||
|
out_dir.join("assets/manual/bat.1"),
|
||||||
|
)?;
|
||||||
|
render_template(
|
||||||
|
&variables,
|
||||||
|
"assets/completions/bat.bash.in",
|
||||||
|
out_dir.join("assets/completions/bat.bash"),
|
||||||
|
)?;
|
||||||
|
render_template(
|
||||||
|
&variables,
|
||||||
|
"assets/completions/bat.fish.in",
|
||||||
|
out_dir.join("assets/completions/bat.fish"),
|
||||||
|
)?;
|
||||||
|
render_template(
|
||||||
|
&variables,
|
||||||
|
"assets/completions/_bat.ps1.in",
|
||||||
|
out_dir.join("assets/completions/_bat.ps1"),
|
||||||
|
)?;
|
||||||
|
render_template(
|
||||||
|
&variables,
|
||||||
|
"assets/completions/bat.zsh.in",
|
||||||
|
out_dir.join("assets/completions/bat.zsh"),
|
||||||
|
)?;
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
|
@ -0,0 +1,17 @@
|
||||||
|
#[cfg(feature = "application")]
|
||||||
|
mod application;
|
||||||
|
mod syntax_mapping;
|
||||||
|
mod util;
|
||||||
|
|
||||||
|
fn main() -> anyhow::Result<()> {
|
||||||
|
// only watch manually-designated files
|
||||||
|
// see: https://doc.rust-lang.org/cargo/reference/build-scripts.html#rerun-if-changed
|
||||||
|
println!("cargo:rerun-if-changed=build/");
|
||||||
|
|
||||||
|
syntax_mapping::build_static_mappings()?;
|
||||||
|
|
||||||
|
#[cfg(feature = "application")]
|
||||||
|
application::gen_man_and_comp()?;
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
|
@ -0,0 +1,294 @@
|
||||||
|
use std::{
|
||||||
|
convert::Infallible,
|
||||||
|
env, fs,
|
||||||
|
path::{Path, PathBuf},
|
||||||
|
str::FromStr,
|
||||||
|
};
|
||||||
|
|
||||||
|
use anyhow::{anyhow, bail};
|
||||||
|
use indexmap::IndexMap;
|
||||||
|
use itertools::Itertools;
|
||||||
|
use once_cell::sync::Lazy;
|
||||||
|
use regex::Regex;
|
||||||
|
use serde_derive::Deserialize;
|
||||||
|
use serde_with::DeserializeFromStr;
|
||||||
|
use walkdir::WalkDir;
|
||||||
|
|
||||||
|
/// Known mapping targets.
|
||||||
|
///
|
||||||
|
/// Corresponds to `syntax_mapping::MappingTarget`.
|
||||||
|
#[allow(clippy::enum_variant_names)]
|
||||||
|
#[derive(Clone, Debug, Eq, PartialEq, Hash, DeserializeFromStr)]
|
||||||
|
pub enum MappingTarget {
|
||||||
|
MapTo(String),
|
||||||
|
MapToUnknown,
|
||||||
|
MapExtensionToUnknown,
|
||||||
|
}
|
||||||
|
impl FromStr for MappingTarget {
|
||||||
|
type Err = Infallible;
|
||||||
|
fn from_str(s: &str) -> Result<Self, Self::Err> {
|
||||||
|
match s {
|
||||||
|
"MappingTarget::MapToUnknown" => Ok(Self::MapToUnknown),
|
||||||
|
"MappingTarget::MapExtensionToUnknown" => Ok(Self::MapExtensionToUnknown),
|
||||||
|
syntax => Ok(Self::MapTo(syntax.into())),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
impl MappingTarget {
|
||||||
|
fn codegen(&self) -> String {
|
||||||
|
match self {
|
||||||
|
Self::MapTo(syntax) => format!(r###"MappingTarget::MapTo(r#"{syntax}"#)"###),
|
||||||
|
Self::MapToUnknown => "MappingTarget::MapToUnknown".into(),
|
||||||
|
Self::MapExtensionToUnknown => "MappingTarget::MapExtensionToUnknown".into(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Clone, Debug, PartialEq, Eq, Hash, DeserializeFromStr)]
|
||||||
|
/// A single matcher.
|
||||||
|
///
|
||||||
|
/// Codegen converts this into a `Lazy<Option<GlobMatcher>>`.
|
||||||
|
struct Matcher(Vec<MatcherSegment>);
|
||||||
|
/// Parse a matcher.
|
||||||
|
///
|
||||||
|
/// Note that this implementation is rather strict: it will greedily interpret
|
||||||
|
/// every valid environment variable replacement as such, then immediately
|
||||||
|
/// hard-error if it finds a '$' anywhere in the remaining text segments.
|
||||||
|
///
|
||||||
|
/// The reason for this strictness is I currently cannot think of a valid reason
|
||||||
|
/// why you would ever need '$' as plaintext in a glob pattern. Therefore any
|
||||||
|
/// such occurrences are likely human errors.
|
||||||
|
///
|
||||||
|
/// If we later discover some edge cases, it's okay to make it more permissive.
|
||||||
|
///
|
||||||
|
/// Revision history:
|
||||||
|
/// - 2024-02-20: allow `{` and `}` (glob brace expansion)
|
||||||
|
impl FromStr for Matcher {
|
||||||
|
type Err = anyhow::Error;
|
||||||
|
fn from_str(s: &str) -> Result<Self, Self::Err> {
|
||||||
|
use MatcherSegment as Seg;
|
||||||
|
static VAR_REGEX: Lazy<Regex> = Lazy::new(|| Regex::new(r"\$\{([\w\d_]+)\}").unwrap());
|
||||||
|
|
||||||
|
let mut segments = vec![];
|
||||||
|
let mut text_start = 0;
|
||||||
|
for capture in VAR_REGEX.captures_iter(s) {
|
||||||
|
let match_0 = capture.get(0).unwrap();
|
||||||
|
|
||||||
|
// text before this var
|
||||||
|
let text_end = match_0.start();
|
||||||
|
segments.push(Seg::Text(s[text_start..text_end].into()));
|
||||||
|
text_start = match_0.end();
|
||||||
|
|
||||||
|
// this var
|
||||||
|
segments.push(Seg::Env(capture.get(1).unwrap().as_str().into()));
|
||||||
|
}
|
||||||
|
// possible trailing text
|
||||||
|
segments.push(Seg::Text(s[text_start..].into()));
|
||||||
|
|
||||||
|
// cleanup empty text segments
|
||||||
|
let non_empty_segments = segments
|
||||||
|
.into_iter()
|
||||||
|
.filter(|seg| seg.text().map(|t| !t.is_empty()).unwrap_or(true))
|
||||||
|
.collect_vec();
|
||||||
|
|
||||||
|
// sanity check
|
||||||
|
if non_empty_segments
|
||||||
|
.windows(2)
|
||||||
|
.any(|segs| segs[0].is_text() && segs[1].is_text())
|
||||||
|
{
|
||||||
|
unreachable!("Parsed into consecutive text segments: {non_empty_segments:?}");
|
||||||
|
}
|
||||||
|
|
||||||
|
// guard empty case
|
||||||
|
if non_empty_segments.is_empty() {
|
||||||
|
bail!(r#"Parsed an empty matcher: "{s}""#);
|
||||||
|
}
|
||||||
|
|
||||||
|
// guard variable syntax leftover fragments
|
||||||
|
if non_empty_segments
|
||||||
|
.iter()
|
||||||
|
.filter_map(Seg::text)
|
||||||
|
.any(|t| t.contains('$'))
|
||||||
|
{
|
||||||
|
bail!(r#"Invalid matcher: "{s}""#);
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(Self(non_empty_segments))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
impl Matcher {
|
||||||
|
fn codegen(&self) -> String {
|
||||||
|
match self.0.len() {
|
||||||
|
0 => unreachable!("0-length matcher should never be created"),
|
||||||
|
// if-let guard would be ideal here
|
||||||
|
// see: https://github.com/rust-lang/rust/issues/51114
|
||||||
|
1 if self.0[0].is_text() => {
|
||||||
|
let s = self.0[0].text().unwrap();
|
||||||
|
format!(r###"Lazy::new(|| Some(build_matcher_fixed(r#"{s}"#)))"###)
|
||||||
|
}
|
||||||
|
// parser logic ensures that this case can only happen when there are dynamic segments
|
||||||
|
_ => {
|
||||||
|
let segs = self.0.iter().map(MatcherSegment::codegen).join(", ");
|
||||||
|
format!(r###"Lazy::new(|| build_matcher_dynamic(&[{segs}]))"###)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// A segment in a matcher.
|
||||||
|
///
|
||||||
|
/// Corresponds to `syntax_mapping::MatcherSegment`.
|
||||||
|
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
|
||||||
|
enum MatcherSegment {
|
||||||
|
Text(String),
|
||||||
|
Env(String),
|
||||||
|
}
|
||||||
|
#[allow(dead_code)]
|
||||||
|
impl MatcherSegment {
|
||||||
|
fn is_text(&self) -> bool {
|
||||||
|
matches!(self, Self::Text(_))
|
||||||
|
}
|
||||||
|
fn is_env(&self) -> bool {
|
||||||
|
matches!(self, Self::Env(_))
|
||||||
|
}
|
||||||
|
fn text(&self) -> Option<&str> {
|
||||||
|
match self {
|
||||||
|
Self::Text(t) => Some(t),
|
||||||
|
Self::Env(_) => None,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fn env(&self) -> Option<&str> {
|
||||||
|
match self {
|
||||||
|
Self::Text(_) => None,
|
||||||
|
Self::Env(t) => Some(t),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fn codegen(&self) -> String {
|
||||||
|
match self {
|
||||||
|
Self::Text(s) => format!(r###"MatcherSegment::Text(r#"{s}"#)"###),
|
||||||
|
Self::Env(s) => format!(r###"MatcherSegment::Env(r#"{s}"#)"###),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// A struct that models a single .toml file in /src/syntax_mapping/builtins/.
|
||||||
|
#[derive(Clone, Debug, Deserialize)]
|
||||||
|
struct MappingDefModel {
|
||||||
|
mappings: IndexMap<MappingTarget, Vec<Matcher>>,
|
||||||
|
}
|
||||||
|
impl MappingDefModel {
|
||||||
|
fn into_mapping_list(self) -> MappingList {
|
||||||
|
let list = self
|
||||||
|
.mappings
|
||||||
|
.into_iter()
|
||||||
|
.flat_map(|(target, matchers)| {
|
||||||
|
matchers
|
||||||
|
.into_iter()
|
||||||
|
.map(|matcher| (matcher, target.clone()))
|
||||||
|
.collect::<Vec<_>>()
|
||||||
|
})
|
||||||
|
.collect();
|
||||||
|
MappingList(list)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Clone, Debug)]
|
||||||
|
struct MappingList(Vec<(Matcher, MappingTarget)>);
|
||||||
|
impl MappingList {
|
||||||
|
fn codegen(&self) -> String {
|
||||||
|
let array_items: Vec<_> = self
|
||||||
|
.0
|
||||||
|
.iter()
|
||||||
|
.map(|(matcher, target)| {
|
||||||
|
format!("({m}, {t})", m = matcher.codegen(), t = target.codegen())
|
||||||
|
})
|
||||||
|
.collect();
|
||||||
|
let len = array_items.len();
|
||||||
|
|
||||||
|
format!(
|
||||||
|
"/// Generated by build script from /src/syntax_mapping/builtins/.\n\
|
||||||
|
pub(crate) static BUILTIN_MAPPINGS: [(Lazy<Option<GlobMatcher>>, MappingTarget); {len}] = [\n{items}\n];",
|
||||||
|
items = array_items.join(",\n")
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Get the list of paths to all mapping definition files that should be
|
||||||
|
/// included for the current target platform.
|
||||||
|
fn get_def_paths() -> anyhow::Result<Vec<PathBuf>> {
|
||||||
|
let source_subdirs = [
|
||||||
|
"common",
|
||||||
|
#[cfg(target_family = "unix")]
|
||||||
|
"unix-family",
|
||||||
|
#[cfg(any(
|
||||||
|
target_os = "freebsd",
|
||||||
|
target_os = "netbsd",
|
||||||
|
target_os = "openbsd",
|
||||||
|
target_os = "macos"
|
||||||
|
))]
|
||||||
|
"bsd-family",
|
||||||
|
#[cfg(target_os = "linux")]
|
||||||
|
"linux",
|
||||||
|
#[cfg(target_os = "macos")]
|
||||||
|
"macos",
|
||||||
|
#[cfg(target_os = "windows")]
|
||||||
|
"windows",
|
||||||
|
];
|
||||||
|
|
||||||
|
let mut toml_paths = vec![];
|
||||||
|
for subdir in source_subdirs {
|
||||||
|
let wd = WalkDir::new(Path::new("src/syntax_mapping/builtins").join(subdir));
|
||||||
|
let paths = wd
|
||||||
|
.into_iter()
|
||||||
|
.filter_map_ok(|entry| {
|
||||||
|
let path = entry.path();
|
||||||
|
(path.is_file() && path.extension().map(|ext| ext == "toml").unwrap_or(false))
|
||||||
|
.then(|| path.to_owned())
|
||||||
|
})
|
||||||
|
.collect::<Result<Vec<_>, _>>()?;
|
||||||
|
toml_paths.extend(paths);
|
||||||
|
}
|
||||||
|
|
||||||
|
toml_paths.sort_by_key(|path| {
|
||||||
|
path.file_name()
|
||||||
|
.expect("file name should not terminate in ..")
|
||||||
|
.to_owned()
|
||||||
|
});
|
||||||
|
|
||||||
|
Ok(toml_paths)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn read_all_mappings() -> anyhow::Result<MappingList> {
|
||||||
|
let mut all_mappings = vec![];
|
||||||
|
|
||||||
|
for path in get_def_paths()? {
|
||||||
|
let toml_string = fs::read_to_string(path)?;
|
||||||
|
let mappings = toml::from_str::<MappingDefModel>(&toml_string)?.into_mapping_list();
|
||||||
|
all_mappings.extend(mappings.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
let duplicates = all_mappings
|
||||||
|
.iter()
|
||||||
|
.duplicates_by(|(matcher, _)| matcher)
|
||||||
|
.collect_vec();
|
||||||
|
if !duplicates.is_empty() {
|
||||||
|
bail!("Rules with duplicate matchers found: {duplicates:?}");
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(MappingList(all_mappings))
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Build the static syntax mappings defined in /src/syntax_mapping/builtins/
|
||||||
|
/// into a .rs source file, which is to be inserted with `include!`.
|
||||||
|
pub fn build_static_mappings() -> anyhow::Result<()> {
|
||||||
|
println!("cargo:rerun-if-changed=src/syntax_mapping/builtins/");
|
||||||
|
|
||||||
|
let mappings = read_all_mappings()?;
|
||||||
|
|
||||||
|
let codegen_path = Path::new(&env::var_os("OUT_DIR").ok_or(anyhow!("OUT_DIR is unset"))?)
|
||||||
|
.join("codegen_static_syntax_mappings.rs");
|
||||||
|
|
||||||
|
fs::write(codegen_path, mappings.codegen())?;
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
|
@ -0,0 +1,21 @@
|
||||||
|
#![allow(dead_code)]
|
||||||
|
|
||||||
|
use std::{collections::HashMap, fs, path::Path};
|
||||||
|
|
||||||
|
/// Generates a file from a template.
|
||||||
|
pub fn render_template(
|
||||||
|
variables: &HashMap<&str, String>,
|
||||||
|
in_file: &str,
|
||||||
|
out_file: impl AsRef<Path>,
|
||||||
|
) -> anyhow::Result<()> {
|
||||||
|
let mut content = fs::read_to_string(in_file)?;
|
||||||
|
|
||||||
|
for (variable_name, value) in variables {
|
||||||
|
// Replace {{variable_name}} by the value
|
||||||
|
let pattern = format!("{{{{{variable_name}}}}}");
|
||||||
|
content = content.replace(&pattern, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
fs::write(out_file, content)?;
|
||||||
|
Ok(())
|
||||||
|
}
|
|
@ -1,7 +1,6 @@
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="logo-header.svg" alt="bat - a cat clone with wings"><br>
|
<img src="logo-header.svg" alt="bat - a cat clone with wings"><br>
|
||||||
<a href="https://travis-ci.org/sharkdp/bat"><img src="https://travis-ci.org/sharkdp/bat.svg?branch=master" alt="Build Status"></a>
|
<a href="https://github.com/sharkdp/bat/actions?query=workflow%3ACICD"><img src="https://github.com/sharkdp/bat/workflows/CICD/badge.svg" alt="Build Status"></a>
|
||||||
<a href="https://ci.appveyor.com/project/sharkdp/bat"><img src="https://ci.appveyor.com/api/projects/status/cptsmtbiwbnr2vhf?svg=true"></a>
|
|
||||||
<img src="https://img.shields.io/crates/l/bat.svg" alt="license">
|
<img src="https://img.shields.io/crates/l/bat.svg" alt="license">
|
||||||
<a href="https://crates.io/crates/bat"><img src="https://img.shields.io/crates/v/bat.svg?colorB=319e8c" alt="Version info"></a><br>
|
<a href="https://crates.io/crates/bat"><img src="https://img.shields.io/crates/v/bat.svg?colorB=319e8c" alt="Version info"></a><br>
|
||||||
シンタックスハイライトとGitとの連携機能付きの <i>cat(1)</i> クローン。
|
シンタックスハイライトとGitとの連携機能付きの <i>cat(1)</i> クローン。
|
||||||
|
@ -12,8 +11,12 @@
|
||||||
<a href="#使い方">使い方</a> •
|
<a href="#使い方">使い方</a> •
|
||||||
<a href="#インストール">インストール</a> •
|
<a href="#インストール">インストール</a> •
|
||||||
<a href="#カスタマイズ">カスタマイズ</a> •
|
<a href="#カスタマイズ">カスタマイズ</a> •
|
||||||
<a href="#プロジェクトの目標と既存の類似したOSS">プロジェクトの目標と既存の類似したOSS</a> •
|
<a href="#プロジェクトの目標と既存の類似したOSS">プロジェクトの目標と既存の類似したOSS</a><br>
|
||||||
翻訳 [<a href="https://github.com/chinanf-boy/bat-zh">中文</a>][<a href="README-ja.md">日本語</a>][<a href="README-ko.md">한국어</a>]
|
[<a href="../README.md">English</a>]
|
||||||
|
[<a href="README-zh.md">中文</a>]
|
||||||
|
[日本語]
|
||||||
|
[<a href="README-ko.md">한국어</a>]
|
||||||
|
[<a href="README-ru.md">Русский</a>]
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
### シンタックスハイライト
|
### シンタックスハイライト
|
||||||
|
@ -178,12 +181,12 @@ man 2 select
|
||||||
|
|
||||||
## インストール
|
## インストール
|
||||||
|
|
||||||
[![Packaging status](https://repology.org/badge/vertical-allrepos/bat.svg)](https://repology.org/project/bat/versions)
|
[![Packaging status](https://repology.org/badge/vertical-allrepos/bat-cat.svg?columns=3&exclude_unsupported=1)](https://repology.org/project/bat-cat/versions)
|
||||||
|
|
||||||
### On Ubuntu (`apt` を使用)
|
### On Ubuntu (`apt` を使用)
|
||||||
*... や他のDebianベースのLinuxディストリビューション*
|
*... や他のDebianベースのLinuxディストリビューション*
|
||||||
|
|
||||||
Ubuntu Eoan 19.10 または Debian 不安定版 sid 以降の [the Ubuntu `bat` package](https://packages.ubuntu.com/eoan/bat) または [the Debian `bat` package](https://packages.debian.org/sid/bat) からインストールできます:
|
[20.04 ("Focal") 以降の Ubuntu](https://packages.ubuntu.com/search?keywords=bat&exact=1) または [2021 年 8 月以降の Debian (Debian 11 - "Bullseye")](https://packages.debian.org/bullseye/bat) では `bat` パッケージが利用できます。
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
apt install bat
|
apt install bat
|
||||||
|
@ -216,7 +219,7 @@ apk add bat
|
||||||
|
|
||||||
### On Arch Linux
|
### On Arch Linux
|
||||||
|
|
||||||
[Arch Linuxの公式リソース](https://www.archlinux.org/packages/community/x86_64/bat/)
|
[Arch Linuxの公式リソース](https://www.archlinux.org/packages/extra/x86_64/bat/)
|
||||||
からインストールできます。
|
からインストールできます。
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
@ -363,7 +366,7 @@ ansible-galaxy install aeimer.install_bat
|
||||||
### From source
|
### From source
|
||||||
|
|
||||||
|
|
||||||
`bat` をソースからビルドしたいならば、Rust 1.36 以上の環境が必要です。
|
`bat` をソースからビルドしたいならば、Rust 1.70.0 以上の環境が必要です。
|
||||||
`cargo` を使用してビルドすることができます:
|
`cargo` を使用してビルドすることができます:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
@ -522,7 +525,7 @@ export BAT_CONFIG_PATH="/path/to/bat.conf"
|
||||||
# Use italic text on the terminal (not supported on all terminals)
|
# Use italic text on the terminal (not supported on all terminals)
|
||||||
--italic-text=always
|
--italic-text=always
|
||||||
|
|
||||||
# Use C++ syntax for .ino files
|
# Use C++ syntax for Arduino .ino files
|
||||||
--map-syntax "*.ino:C++"
|
--map-syntax "*.ino:C++"
|
||||||
|
|
||||||
# Use ".gitignore"-style highlighting for ".ignore" files
|
# Use ".gitignore"-style highlighting for ".ignore" files
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="../doc/logo-header.svg" alt="bat - a cat clone with wings"><br>
|
<img src="logo-header.svg" alt="bat - a cat clone with wings"><br>
|
||||||
<a href="https://github.com/sharkdp/bat/actions?query=workflow%3ACICD"><img src="https://github.com/sharkdp/bat/workflows/CICD/badge.svg" alt="Build Status"></a>
|
<a href="https://github.com/sharkdp/bat/actions?query=workflow%3ACICD"><img src="https://github.com/sharkdp/bat/workflows/CICD/badge.svg" alt="Build Status"></a>
|
||||||
<img src="https://img.shields.io/crates/l/bat.svg" alt="license">
|
<img src="https://img.shields.io/crates/l/bat.svg" alt="license">
|
||||||
<a href="https://crates.io/crates/bat"><img src="https://img.shields.io/crates/v/bat.svg?colorB=319e8c" alt="Version info"></a><br>
|
<a href="https://crates.io/crates/bat"><img src="https://img.shields.io/crates/v/bat.svg?colorB=319e8c" alt="Version info"></a><br>
|
||||||
|
@ -11,8 +11,12 @@
|
||||||
<a href="#사용법">사용법</a> •
|
<a href="#사용법">사용법</a> •
|
||||||
<a href="#설치">설치</a> •
|
<a href="#설치">설치</a> •
|
||||||
<a href="#사용자화">사용자화</a> •
|
<a href="#사용자화">사용자화</a> •
|
||||||
<a href="#프로젝트-목표와-대안들">프로젝트 목표와 대안들</a> •
|
<a href="#프로젝트-목표와-대안들">프로젝트 목표와 대안들</a><br>
|
||||||
[<a href="https://github.com/chinanf-boy/bat-zh">中文</a>] [<a href="../doc/README-ja.md">日本語</a>] [<a href="../doc/README-ko.md">한국어</a>] [<a href="../doc/README-ru.md">Русский</a>]
|
[<a href="../README.md">English</a>]
|
||||||
|
[<a href="README-zh.md">中文</a>]
|
||||||
|
[<a href="README-ja.md">日本語</a>]
|
||||||
|
[한국어]
|
||||||
|
[<a href="README-ru.md">Русский</a>]
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
### 문법 강조
|
### 문법 강조
|
||||||
|
@ -210,7 +214,7 @@ man 2 select
|
||||||
|
|
||||||
## 설치
|
## 설치
|
||||||
|
|
||||||
[![Packaging status](https://repology.org/badge/vertical-allrepos/bat-cat.svg)](https://repology.org/project/bat-cat/versions)
|
[![Packaging status](https://repology.org/badge/vertical-allrepos/bat-cat.svg?columns=3&exclude_unsupported=1)](https://repology.org/project/bat-cat/versions)
|
||||||
|
|
||||||
### Ubuntu에서 (`apt` 사용)
|
### Ubuntu에서 (`apt` 사용)
|
||||||
*... 그리고 다른 Debian 기반의 Linux 배포판들에서.*
|
*... 그리고 다른 Debian 기반의 Linux 배포판들에서.*
|
||||||
|
@ -218,7 +222,7 @@ man 2 select
|
||||||
`bat`은 [Ubuntu](https://packages.ubuntu.com/eoan/bat)와
|
`bat`은 [Ubuntu](https://packages.ubuntu.com/eoan/bat)와
|
||||||
[Debian](https://packages.debian.org/sid/bat) 패키지 배포 과정에 도입되는 중이며,
|
[Debian](https://packages.debian.org/sid/bat) 패키지 배포 과정에 도입되는 중이며,
|
||||||
Eoan 19.10 버전의 Ubuntu에서부터 제공됩니다.
|
Eoan 19.10 버전의 Ubuntu에서부터 제공됩니다.
|
||||||
현재 Debain에서는 불안정한 "Sid" 브랜치에서만 `bat`이 제공됩니다.
|
현재 Debian에서는 불안정한 "Sid" 브랜치에서만 `bat`이 제공됩니다.
|
||||||
|
|
||||||
만약 충분히 최신 버전의 Ubuntu/Debian이 설치되어 있다면 간단히 다음을 실행하세요:
|
만약 충분히 최신 버전의 Ubuntu/Debian이 설치되어 있다면 간단히 다음을 실행하세요:
|
||||||
|
|
||||||
|
@ -260,7 +264,7 @@ apk add bat
|
||||||
### Arch Linux에서
|
### Arch Linux에서
|
||||||
|
|
||||||
공식 소스를 통해
|
공식 소스를 통해
|
||||||
[`bat` 패키지](https://www.archlinux.org/packages/community/x86_64/bat/)를
|
[`bat` 패키지](https://www.archlinux.org/packages/extra/x86_64/bat/)를
|
||||||
설치할 수 있습니다:
|
설치할 수 있습니다:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
@ -279,6 +283,14 @@ pacman -S bat
|
||||||
dnf install bat
|
dnf install bat
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Funtoo Linux에서
|
||||||
|
|
||||||
|
dev-kit을 통해 [`bat` 패키지](https://github.com/funtoo/dev-kit/tree/1.4-release/sys-apps/bat)를 설치할 수 있습니다:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
emerge sys-apps/bat
|
||||||
|
```
|
||||||
|
|
||||||
### Gentoo Linux에서
|
### Gentoo Linux에서
|
||||||
|
|
||||||
공식 소스를 통해
|
공식 소스를 통해
|
||||||
|
@ -404,7 +416,7 @@ scoop install bat
|
||||||
|
|
||||||
### 소스에서
|
### 소스에서
|
||||||
|
|
||||||
`bat`의 소스를 빌드하기 위해서는, Rust 1.45 이상이 필요합니다.
|
`bat`의 소스를 빌드하기 위해서는, Rust 1.70.0 이상이 필요합니다.
|
||||||
`cargo`를 이용해 전부 빌드할 수 있습니다:
|
`cargo`를 이용해 전부 빌드할 수 있습니다:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
@ -663,7 +675,7 @@ bat --generate-config-file
|
||||||
# 터미널에서 이탤릭체 쓰기 (일부 터미널에서 미지원)
|
# 터미널에서 이탤릭체 쓰기 (일부 터미널에서 미지원)
|
||||||
--italic-text=always
|
--italic-text=always
|
||||||
|
|
||||||
# .ino 파일에 C++ 문법 쓰기
|
# Arduino .ino 파일에 C++ 문법 쓰기
|
||||||
--map-syntax "*.ino:C++"
|
--map-syntax "*.ino:C++"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -797,6 +809,10 @@ cargo install --locked --force
|
||||||
- [keith-hall](https://github.com/keith-hall)
|
- [keith-hall](https://github.com/keith-hall)
|
||||||
- [Enselic](https://github.com/Enselic)
|
- [Enselic](https://github.com/Enselic)
|
||||||
|
|
||||||
|
## 보안 취약점
|
||||||
|
|
||||||
|
만약 `bat`의 취약점을 발견하였다면, [David Peter](https://david-peter.de/)에게 메일로 연락주시기 바랍니다.
|
||||||
|
|
||||||
## 프로젝트 목표와 대안들
|
## 프로젝트 목표와 대안들
|
||||||
|
|
||||||
`bat`은 다음과 같은 목표를 달성하려고 합니다:
|
`bat`은 다음과 같은 목표를 달성하려고 합니다:
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="doc/logo-header.svg" alt="bat - a cat clone with wings"><br>
|
<img src="logo-header.svg" alt="bat - a cat clone with wings"><br>
|
||||||
<a href="https://travis-ci.org/sharkdp/bat"><img src="https://travis-ci.org/sharkdp/bat.svg?branch=master" alt="Build Status"></a>
|
<a href="https://github.com/sharkdp/bat/actions?query=workflow%3ACICD"><img src="https://github.com/sharkdp/bat/workflows/CICD/badge.svg" alt="Build Status"></a>
|
||||||
<a href="https://ci.appveyor.com/project/sharkdp/bat"><img src="https://ci.appveyor.com/api/projects/status/cptsmtbiwbnr2vhf/branch/master?svg=true"></a>
|
|
||||||
<img src="https://img.shields.io/crates/l/bat.svg" alt="license">
|
<img src="https://img.shields.io/crates/l/bat.svg" alt="license">
|
||||||
<a href="https://crates.io/crates/bat"><img src="https://img.shields.io/crates/v/bat.svg?colorB=319e8c" alt="Version info"></a><br>
|
<a href="https://crates.io/crates/bat"><img src="https://img.shields.io/crates/v/bat.svg?colorB=319e8c" alt="Version info"></a><br>
|
||||||
Клон утилиты <i>cat(1)</i> с поддержкой выделения синтаксиса и Git
|
Клон утилиты <i>cat(1)</i> с поддержкой выделения синтаксиса и Git
|
||||||
|
@ -12,8 +11,12 @@
|
||||||
<a href="#как-использовать">Использование</a> •
|
<a href="#как-использовать">Использование</a> •
|
||||||
<a href="#установка">Установка</a> •
|
<a href="#установка">Установка</a> •
|
||||||
<a href="#кастомизация">Кастомизация</a> •
|
<a href="#кастомизация">Кастомизация</a> •
|
||||||
<a href="#цели-и-альтернативы">Цели и альтернативы </a> •
|
<a href="#цели-и-альтернативы">Цели и альтернативы </a><br>
|
||||||
Перевод [<a href="https://github.com/chinanf-boy/bat-zh">中文</a>][<a href="doc/README-ja.md">日本語</a>][<a href="doc/README-ko.md">한국어</a>][<a href="doc/README-ru.md">Русский</a>]
|
[<a href="../README.md">English</a>]
|
||||||
|
[<a href="README-zh.md">中文</a>]
|
||||||
|
[<a href="README-ja.md">日本語</a>]
|
||||||
|
[<a href="README-ko.md">한국어</a>]
|
||||||
|
[Русский]
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
### Выделение синтаксиса
|
### Выделение синтаксиса
|
||||||
|
@ -127,8 +130,8 @@ git show v0.6.0:src/main.rs | bat -l rs
|
||||||
|
|
||||||
#### `xclip`
|
#### `xclip`
|
||||||
|
|
||||||
Нумерация стро и отображение изменений затрудняет копирование содержимого файлов в буфер обмена.
|
Нумерация строк и отображение изменений затрудняет копирование содержимого файлов в буфер обмена.
|
||||||
Чтобы спроваиться с этим, используйте флаг `-p`/`--plain` или просто перенаправьте стандартный вывод в `xclip`:
|
Чтобы справиться с этим, используйте флаг `-p`/`--plain` или просто перенаправьте стандартный вывод в `xclip`:
|
||||||
```bash
|
```bash
|
||||||
bat main.cpp | xclip
|
bat main.cpp | xclip
|
||||||
```
|
```
|
||||||
|
@ -157,7 +160,7 @@ man 2 select
|
||||||
|
|
||||||
## Установка
|
## Установка
|
||||||
|
|
||||||
[![Packaging status](https://repology.org/badge/vertical-allrepos/bat.svg)](https://repology.org/project/bat/versions)
|
[![Packaging status](https://repology.org/badge/vertical-allrepos/bat-cat.svg?columns=3&exclude_unsupported=1)](https://repology.org/project/bat-cat/versions)
|
||||||
|
|
||||||
### Ubuntu (с помощью `apt`)
|
### Ubuntu (с помощью `apt`)
|
||||||
*... и другие дистрибутивы основанные на Debian.*
|
*... и другие дистрибутивы основанные на Debian.*
|
||||||
|
@ -198,7 +201,7 @@ apk add bat
|
||||||
|
|
||||||
### Arch Linux
|
### Arch Linux
|
||||||
|
|
||||||
Вы можете установить [`bat`](https://www.archlinux.org/packages/community/x86_64/bat/) из официального источника:
|
Вы можете установить [`bat`](https://www.archlinux.org/packages/extra/x86_64/bat/) из официального источника:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pacman -S bat
|
pacman -S bat
|
||||||
|
@ -341,7 +344,7 @@ ansible-galaxy install aeimer.install_bat
|
||||||
|
|
||||||
### Из исходников
|
### Из исходников
|
||||||
|
|
||||||
Если вы желаете установить `bat` из исходников, вам понадобится Rust 1.45 или выше. После этого используйте `cargo`, чтобы все скомпилировать:
|
Если вы желаете установить `bat` из исходников, вам понадобится Rust 1.70.0 или выше. После этого используйте `cargo`, чтобы все скомпилировать:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cargo install --locked bat
|
cargo install --locked bat
|
||||||
|
@ -481,10 +484,10 @@ bat --generate-config-file
|
||||||
# Использовать курсив (поддерживается не всеми терминалами)
|
# Использовать курсив (поддерживается не всеми терминалами)
|
||||||
--italic-text=always
|
--italic-text=always
|
||||||
|
|
||||||
# Использовать синтаксис C++ для всех .ino файлов
|
# Использовать синтаксис C++ для всех Arduino .ino файлов
|
||||||
--map-syntax "*.ino:C++"
|
--map-syntax "*.ino:C++"
|
||||||
|
|
||||||
# Использовать синтаксик Git Ignore для всех файлов .ignore
|
# Использовать синтаксис Git Ignore для всех файлов .ignore
|
||||||
--map-syntax ".ignore:Git Ignore"
|
--map-syntax ".ignore:Git Ignore"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -532,7 +535,7 @@ bat() {
|
||||||
`bat` поддерживает терминалы *с* и *без* поддержки truecolor. Однако подсветка синтаксиса не оптимизирована для терминалов с 8-битными цветами, и рекомендуется использовать терминалы с поддержкой 24-битных цветов (`terminator`, `konsole`, `iTerm2`, ...).
|
`bat` поддерживает терминалы *с* и *без* поддержки truecolor. Однако подсветка синтаксиса не оптимизирована для терминалов с 8-битными цветами, и рекомендуется использовать терминалы с поддержкой 24-битных цветов (`terminator`, `konsole`, `iTerm2`, ...).
|
||||||
Смотрите [эту статью](https://gist.github.com/XVilka/8346728) для полного списка терминалов.
|
Смотрите [эту статью](https://gist.github.com/XVilka/8346728) для полного списка терминалов.
|
||||||
|
|
||||||
Удостовертесь, что переменная `COLORTERM` равна `truecolor` или
|
Удостоверьтесь, что переменная `COLORTERM` равна `truecolor` или
|
||||||
`24bit`. Иначе `bat` не сможет определить поддержку 24-битных цветов (и будет использовать 8-битные).
|
`24bit`. Иначе `bat` не сможет определить поддержку 24-битных цветов (и будет использовать 8-битные).
|
||||||
|
|
||||||
### Текст и номера строк плохо видны
|
### Текст и номера строк плохо видны
|
||||||
|
@ -547,7 +550,7 @@ bat() {
|
||||||
``` bash
|
``` bash
|
||||||
iconv -f ISO-8859-1 -t UTF-8 my-file.php | bat
|
iconv -f ISO-8859-1 -t UTF-8 my-file.php | bat
|
||||||
```
|
```
|
||||||
Внимание: вам может понадобится флаг `-l`/`--language`, если `bat` не сможет автоматически определить синтаксис.
|
Внимание: вам может понадобиться флаг `-l`/`--language`, если `bat` не сможет автоматически определить синтаксис.
|
||||||
|
|
||||||
## Разработка
|
## Разработка
|
||||||
|
|
||||||
|
@ -565,7 +568,7 @@ cargo test
|
||||||
# Установка (релизная версия)
|
# Установка (релизная версия)
|
||||||
cargo install --locked
|
cargo install --locked
|
||||||
|
|
||||||
# Компилирование исполняего файла bat с другим синтаксисом и темами
|
# Компилирование исполняемого файла bat с другим синтаксисом и темами
|
||||||
bash assets/create.sh
|
bash assets/create.sh
|
||||||
cargo install --locked --force
|
cargo install --locked --force
|
||||||
```
|
```
|
||||||
|
@ -589,6 +592,6 @@ cargo install --locked --force
|
||||||
## Лицензия
|
## Лицензия
|
||||||
Copyright (c) 2018-2021 [Разработчики bat](https://github.com/sharkdp/bat).
|
Copyright (c) 2018-2021 [Разработчики bat](https://github.com/sharkdp/bat).
|
||||||
|
|
||||||
`bat` распостраняется под лицензями MIT License и Apache License 2.0 (на выбор пользователя).
|
`bat` распространяется под лицензиями MIT License и Apache License 2.0 (на выбор пользователя).
|
||||||
|
|
||||||
Смотрите [LICENSE-APACHE](LICENSE-APACHE) и [LICENSE-MIT](LICENSE-MIT) для более подробного ознакомления.
|
Смотрите [LICENSE-APACHE](LICENSE-APACHE) и [LICENSE-MIT](LICENSE-MIT) для более подробного ознакомления.
|
||||||
|
|
|
@ -0,0 +1,678 @@
|
||||||
|
<p align="center">
|
||||||
|
<img src="logo-header.svg" alt="bat - a cat clone with wings"><br>
|
||||||
|
<a href="https://github.com/sharkdp/bat/actions?query=workflow%3ACICD"><img src="https://github.com/sharkdp/bat/workflows/CICD/badge.svg" alt="Build Status"></a>
|
||||||
|
<img src="https://img.shields.io/crates/l/bat.svg" alt="license">
|
||||||
|
<a href="https://crates.io/crates/bat"><img src="https://img.shields.io/crates/v/bat.svg?colorB=319e8c" alt="Version info"></a><br>
|
||||||
|
类似 <i>cat(1)</i>,但带有 git 集成和语法高亮.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p align="center">
|
||||||
|
<a href="#语法高亮">主要功能</a> •
|
||||||
|
<a href="#如何使用">使用方法</a> •
|
||||||
|
<a href="#安装">安装</a> •
|
||||||
|
<a href="#自定义">自定义</a> •
|
||||||
|
<a href="#project-goals-and-alternatives">项目目标和替代方案</a><br>
|
||||||
|
[<a href="../README.md">English</a>]
|
||||||
|
[中文]
|
||||||
|
[<a href="README-ja.md">日本語</a>]
|
||||||
|
[<a href="README-ko.md">한국어</a>]
|
||||||
|
[<a href="README-ru.md">Русский</a>]
|
||||||
|
</p>
|
||||||
|
|
||||||
|
### 语法高亮
|
||||||
|
|
||||||
|
`bat` 对大部分编程语言和标记语言提供语法高亮:
|
||||||
|
|
||||||
|
![Syntax highlighting example](https://imgur.com/rGsdnDe.png)
|
||||||
|
|
||||||
|
### Git 集成
|
||||||
|
|
||||||
|
`bat` 能从 git 中获取文件的修改并展示在边栏(见下图):
|
||||||
|
|
||||||
|
![Git integration example](https://i.imgur.com/2lSW4RE.png)
|
||||||
|
|
||||||
|
### 不可打印(non-printable)字符可视化
|
||||||
|
|
||||||
|
添加`-A`/`--show-all`参数可以文件文件中的不可打印字符:
|
||||||
|
|
||||||
|
![Non-printable character example](https://i.imgur.com/WndGp9H.png)
|
||||||
|
|
||||||
|
### 自动分页
|
||||||
|
|
||||||
|
`bat`会在一般情况下将大于屏幕可显示范围的内容输出到分页器(pager, e.g. `less`)。
|
||||||
|
|
||||||
|
你可以在调用时添加`--paging=never`参数来使`bat`不使用分页器(就像`cat`一样)。如果你想要用为`cat`使用`bat`别名,可以在 shell 配置文件(shell configuration)中添加`alias cat='bat --paging=never'`。
|
||||||
|
|
||||||
|
#### 智能输出
|
||||||
|
|
||||||
|
`bat`能够在设置了分页器选项的同时进行管道:wink:。
|
||||||
|
当`bat`检测到当前环境为非可交互终端或管道时(例如使用`bat`并将内容用管道输出到文件),`bat`会像`cat`一样,一次输出文件内容为纯文本且无视`--paging`参数。
|
||||||
|
|
||||||
|
## 如何使用
|
||||||
|
|
||||||
|
在终端中查看一个文件
|
||||||
|
|
||||||
|
```bash
|
||||||
|
> bat README.md
|
||||||
|
```
|
||||||
|
|
||||||
|
一次性展示多个文件
|
||||||
|
|
||||||
|
```bash
|
||||||
|
> bat src/*.rs
|
||||||
|
```
|
||||||
|
|
||||||
|
从`stdin`读入流,自动为内容添加语法高亮(前提是输入内容的语言可以被正确识别,通常根据内容第一行的 shebang 标记,形如`#!bin/sh`)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
> curl -s https://sh.rustup.rs | bat
|
||||||
|
```
|
||||||
|
|
||||||
|
显式指定`stdin`输入的语言
|
||||||
|
|
||||||
|
```bash
|
||||||
|
> yaml2json .travis.yml | json_pp | bat -l json
|
||||||
|
```
|
||||||
|
|
||||||
|
显示不可打印字符
|
||||||
|
|
||||||
|
```bash
|
||||||
|
> bat -A /etc/hosts
|
||||||
|
```
|
||||||
|
|
||||||
|
与`cat`的兼容性
|
||||||
|
|
||||||
|
```bash
|
||||||
|
bat > note.md # 创建一个空文件
|
||||||
|
|
||||||
|
bat header.md content.md footer.md > document.md
|
||||||
|
|
||||||
|
bat -n main.rs # 只显示行号
|
||||||
|
|
||||||
|
bat f - g # 输出 f,接着是标准输入流,最后 g
|
||||||
|
```
|
||||||
|
|
||||||
|
### 第三方工具交互
|
||||||
|
|
||||||
|
#### `fzf`
|
||||||
|
|
||||||
|
你可以使用`bat`作为`fzf`的预览器。这需要在`bat`后添加`--color=always`选项,以及`--line-range` 选项来限制大文件的加载次数。
|
||||||
|
|
||||||
|
```bash
|
||||||
|
fzf --preview 'bat --color=always --style=numbers --line-range=:500 {}'
|
||||||
|
```
|
||||||
|
|
||||||
|
更多信息请参阅[`fzf`的说明](https://github.com/junegunn/fzf#preview-window)。
|
||||||
|
|
||||||
|
#### `find` 或 `fd`
|
||||||
|
|
||||||
|
你可以使用`find`的`-exec`选项来用`bat`预览搜索结果:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
find … -exec bat {} +
|
||||||
|
```
|
||||||
|
|
||||||
|
亦或者在用`fd`时添加`-X`/`--exec-batch`选项:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
fd … -X bat
|
||||||
|
```
|
||||||
|
|
||||||
|
#### `ripgrep`
|
||||||
|
|
||||||
|
`bat`也能用`batgrep`来显示`ripgrep`的搜索结果。
|
||||||
|
|
||||||
|
```bash
|
||||||
|
batgrep needle src/
|
||||||
|
```
|
||||||
|
|
||||||
|
#### `tail -f`
|
||||||
|
|
||||||
|
当与`tail -f`一起使用,`bat`可以持续监视文件内容并为其添加语法高亮。
|
||||||
|
|
||||||
|
```bash
|
||||||
|
tail -f /var/log/pacman.log | bat --paging=never -l log
|
||||||
|
```
|
||||||
|
|
||||||
|
注意:这项功能需要在关闭分页时使用,同时要手动指定输入的内容语法(通过`-l log`)。
|
||||||
|
|
||||||
|
#### `git`
|
||||||
|
|
||||||
|
`bat`也能直接接受来自`git show`的输出并为其添加语法高亮(当然也需要手动指定语法):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git show v0.6.0:src/main.rs | bat -l rs
|
||||||
|
```
|
||||||
|
|
||||||
|
#### `git diff`
|
||||||
|
|
||||||
|
`bat`也可以和`git diff`一起使用:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
batdiff() {
|
||||||
|
git diff --name-only --diff-filter=d | xargs bat --diff
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
该功能也作为一个独立工具提供,你可以在[`bat-extras`](https://github.com/eth-p/bat-extras)中找到`batdiff`。
|
||||||
|
|
||||||
|
如果你想了解更多 git 和 diff 的信息,参阅[`delta`](https://github.com/dandavison/delta)。
|
||||||
|
|
||||||
|
#### `xclip`
|
||||||
|
|
||||||
|
当需要拷贝文件内容时,行号以及 git 标记会影响输出,此时可以使用`-p`/`--plain`参数来把纯文本传递给`xclip`。
|
||||||
|
|
||||||
|
```bash
|
||||||
|
bat main.cpp | xclip
|
||||||
|
```
|
||||||
|
|
||||||
|
`bat`会检测输出是否是管道重定向来决定是否使用纯文本输出。
|
||||||
|
|
||||||
|
#### `man`
|
||||||
|
|
||||||
|
`bat`也能给`man`的输出上色。这需要设置`MANPAGER`环境变量:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
export MANPAGER="sh -c 'col -bx | bat -l man -p'"
|
||||||
|
man 2 select
|
||||||
|
```
|
||||||
|
|
||||||
|
(如果你使用的是 Debian 或者 Ubuntu,使用`batcat`替换`bat`)
|
||||||
|
|
||||||
|
如果你遇到格式化问题,设置`MANROFFOPT="-c"`也许会有帮助。
|
||||||
|
|
||||||
|
`batman`能提供类似功能——作为一个独立的命令。
|
||||||
|
|
||||||
|
注意:[man page 语法](assets/syntaxes/02_Extra/Manpage.sublime-syntax) 还需要完善。在使用特定的`man`实现时该功能[无法正常工作](https://github.com/sharkdp/bat/issues/1145)。
|
||||||
|
|
||||||
|
#### `prettier` / `shfmt` / `rustfmt`
|
||||||
|
|
||||||
|
`prettybat`脚本能够格式化代码并用`bat`输出。
|
||||||
|
|
||||||
|
## 安装
|
||||||
|
|
||||||
|
[![Packaging status](https://repology.org/badge/vertical-allrepos/bat-cat.svg?columns=3&exclude_unsupported=1)](https://repology.org/project/bat-cat/versions)
|
||||||
|
|
||||||
|
### Ubuntu (使用 `apt`)
|
||||||
|
|
||||||
|
*... 以及其他基于 Debian的发行版.*
|
||||||
|
|
||||||
|
`bat` 要求的版本: [Ubuntu 高于 20.04 ("Focal")](https://packages.ubuntu.com/search?keywords=bat&exact=1) 和 [Debian 高于 August 2021 (Debian 11 - "Bullseye")](https://packages.debian.org/bullseye/bat).
|
||||||
|
|
||||||
|
当你的发行版满足条件那么直接在终端运执行:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo apt install bat
|
||||||
|
```
|
||||||
|
|
||||||
|
重要:如果你通过这种方法安装`bat`,请留意你所安装的可执行文件是否为`batcat`(由[其他包的可执行文件名冲突](https://github.com/sharkdp/bat/issues/982)造成)。你可以创建一个`bat -> batcat`的符号链接(symlink)或别名来避免因为可执行文件不同带来的问题并与其他发行版保持一致性。
|
||||||
|
|
||||||
|
```bash
|
||||||
|
mkdir -p ~/.local/bin
|
||||||
|
ln -s /usr/bin/batcat ~/.local/bin/bat
|
||||||
|
```
|
||||||
|
|
||||||
|
### Ubuntu (使用`.deb`包)
|
||||||
|
|
||||||
|
*... 以及其他基于 Debian的发行版.*
|
||||||
|
|
||||||
|
如果你无法使用上一种方法安装,或需要用最新版的`bat`,你可以从[release 页面](https://github.com/sharkdp/bat/releases)下载最新的`.deb`包并通过下述方法安装:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo dpkg -i bat_0.18.3_amd64.deb # adapt version number and architecture
|
||||||
|
```
|
||||||
|
|
||||||
|
### Alpine Linux
|
||||||
|
|
||||||
|
你可以用下面下列命令从官方源中安装[`bat 包`](https://pkgs.alpinelinux.org/packages?name=bat):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
apk add bat
|
||||||
|
```
|
||||||
|
|
||||||
|
### Arch Linux
|
||||||
|
|
||||||
|
你可以用下面下列命令从官方源中安装[`bat`包](https://www.archlinux.org/packages/extra/x86_64/bat/):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pacman -S bat
|
||||||
|
```
|
||||||
|
|
||||||
|
### Fedora
|
||||||
|
|
||||||
|
你可以使用下列命令从官方[Fedora Modular](https://docs.fedoraproject.org/en-US/modularity/using-modules/)仓库安装[`bat` 包](https://koji.fedoraproject.org/koji/packageinfo?packageID=27506):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
dnf install bat
|
||||||
|
```
|
||||||
|
|
||||||
|
### Funtoo Linux
|
||||||
|
|
||||||
|
你可以从 dev-kit 中安装[`bat` 包](https://github.com/funtoo/dev-kit/tree/1.4-release/sys-apps/bat):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
emerge sys-apps/bat
|
||||||
|
```
|
||||||
|
|
||||||
|
### Gentoo Linux
|
||||||
|
|
||||||
|
你可以使用下列命令从官方源中安装 [`bat` 包](https://packages.gentoo.org/packages/sys-apps/bat):
|
||||||
|
|
||||||
|
|
||||||
|
```bash
|
||||||
|
emerge sys-apps/bat
|
||||||
|
```
|
||||||
|
|
||||||
|
### Void Linux
|
||||||
|
|
||||||
|
你可以用 xbps-install 安装`bat`:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
xbps-install -S bat
|
||||||
|
```
|
||||||
|
|
||||||
|
### Termux:
|
||||||
|
|
||||||
|
你可以用 pkg 安装`bat:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pkg install bat
|
||||||
|
```
|
||||||
|
|
||||||
|
### FreeBSD
|
||||||
|
|
||||||
|
你可以用 pkg 来安装一份预编译的[`bat` 包](https://www.freshports.org/textproc/bat):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pkg install bat
|
||||||
|
```
|
||||||
|
|
||||||
|
或从 FreeBSD ports 自己编译一份:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd /usr/ports/textproc/bat
|
||||||
|
make install
|
||||||
|
```
|
||||||
|
|
||||||
|
### OpenBSD
|
||||||
|
|
||||||
|
你可以用`pkg——add`安装`bat`包
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pkg_add bat
|
||||||
|
```
|
||||||
|
|
||||||
|
### 通过 nix
|
||||||
|
|
||||||
|
你可以用[nix 包管理器](https://nixos.org/nix)安装`bat`:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
nix-env -i bat
|
||||||
|
```
|
||||||
|
|
||||||
|
### openSUSE
|
||||||
|
|
||||||
|
你可以用 zypper 安装`bat`:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
zypper install bat
|
||||||
|
```
|
||||||
|
|
||||||
|
### 通过 snap
|
||||||
|
|
||||||
|
目前还没有推荐的 snap 包可用。可以使用其他现存的包但不会受到官方支持且可能会遇到[问题](https://github.com/sharkdp/bat/issues/1519)。
|
||||||
|
|
||||||
|
### macOS (或 Linux) 通过 Homebrew
|
||||||
|
|
||||||
|
你可以用 [Homebrew on MacOS](https://formulae.brew.sh/formula/bat) 或者 [Homebrew on Linux](https://formulae.brew.sh/formula-linux/bat) 安装`bat`:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
brew install bat
|
||||||
|
```
|
||||||
|
|
||||||
|
### macOS 通过 MacPorts
|
||||||
|
|
||||||
|
或用 [MacPorts](https://ports.macports.org/port/bat/summary) 安装`bat`:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
port install bat
|
||||||
|
```
|
||||||
|
|
||||||
|
### Windows
|
||||||
|
|
||||||
|
在 Windows 上具有多种安装`bat`的方法。若你已完成安装,记得看看 ["在 Windows 上使用`bat`"](#在-Windows-中使用-bat) 。
|
||||||
|
|
||||||
|
#### 前置条件
|
||||||
|
|
||||||
|
你必须已安装 [Visual C++ Redistributable](https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads) 包。
|
||||||
|
|
||||||
|
#### 使用 Chocolatey
|
||||||
|
|
||||||
|
你可以用[Chocolatey](https://chocolatey.org/packages/Bat) 安装`bat`:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
choco install bat
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 使用 Scoop
|
||||||
|
|
||||||
|
你可以用 [scoop](https://scoop.sh/) 安装`bat`:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
scoop install bat
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 使用预编译二进制版本
|
||||||
|
|
||||||
|
直接从 [Release 发布页](https://github.com/sharkdp/bat/releases) 下载已经编译好的二进制包,前提是你安装了 [Visual C++ Redistributable](https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads) 包。
|
||||||
|
|
||||||
|
### 使用二进制版本
|
||||||
|
|
||||||
|
在 [Release 发布页](https://github.com/sharkdp/bat/releases) 中可以找到为多种架构构建的`bat`版本和静态编译的二进制文件(文件名带有`musl`)。
|
||||||
|
|
||||||
|
### 从源码编译
|
||||||
|
|
||||||
|
如果你想要自己构建`bat`,那么你需要安装有高于1.70.0版本的 Rust。
|
||||||
|
|
||||||
|
使用以下命令编译。
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cargo install --locked bat
|
||||||
|
```
|
||||||
|
|
||||||
|
注意:man page或 shell 自动补全所需要的额外文件无法通过该方法安装。但你可以在`cargo`的生成目录找到这些文件(`build`目录下)。
|
||||||
|
|
||||||
|
## 自定义
|
||||||
|
|
||||||
|
### 语法高亮主题
|
||||||
|
|
||||||
|
使用 `bat --list-themes` 一份语法高亮主题的清单,然后用`--theme=TwoDark`来指定主题为`TwoDark`,也可以通过设置`BAT_THEME`环境变量来选定主题。把`export BAT_THEME="TwoDark"`添加到 shell 的启动脚本(shell startup file)来取得永久效果。或者使用`bat`的[配置文件](#c配置文件)
|
||||||
|
|
||||||
|
若想要查看所有主题在一个文件上的显示效果可以用一下命令(需要安装`fzf`):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
bat --list-themes | fzf --preview="bat --theme={} --color=always /path/to/file"
|
||||||
|
```
|
||||||
|
|
||||||
|
`bat`在默认情况下能够在黑色主题背景下获得较好的效果,如果你的终端使用亮色背景,可以试试`GitHub`或`OneHalfLight`。想要添加自定义主题可以参考[添加主题](#添加主题)。
|
||||||
|
|
||||||
|
### 8-bit 主题
|
||||||
|
|
||||||
|
`bat` 自带三个 [8-bit 色彩](https://en.wikipedia.org/wiki/ANSI_escape_code#Colors) 主题:
|
||||||
|
|
||||||
|
- `ansi` 适应于大部分终端。它使用 3-bit 色彩:黑红绿黄蓝洋红靛青白。
|
||||||
|
- `base16`专为 [base16](https://github.com/chriskempson/base16) 终端设计。它使用 4-bit 色彩(带有亮度的 3-bit 色彩)。根据 [base16 styling guidelines](https://github.com/chriskempson/base16/blob/master/styling.md) 制作。
|
||||||
|
- `base16-25`专为 [base16-shell](https://github.com/chriskempson/base16-shell) 设计。它把部分亮色替换为 8-bit 色彩。请不要直接使用该主题,除非你清楚你的256色终端是否使用 base16-shell。
|
||||||
|
|
||||||
|
尽管这些主题具有诸多限制,但具有一些 truecolor 主题不具有的三个优点:
|
||||||
|
|
||||||
|
- 享有最佳兼容性。并不是所有终端工具都支持高于 3-bit 的色彩。
|
||||||
|
- 适应终端主题。
|
||||||
|
- 视觉上和其他的终端工具更协调。
|
||||||
|
|
||||||
|
### 输出样式
|
||||||
|
|
||||||
|
你可以用`--style`参数来控制`bat`输出的样式。使用`--style=numbers,changes`可以只开启 Git 修改和行号显示而不添加其他内容。`BAT_STYLE`环境变量具有相同功能。
|
||||||
|
|
||||||
|
### 添加新的语言和语法
|
||||||
|
|
||||||
|
当现有的`bat`不支持某个语言或语法时你可以自己添加。
|
||||||
|
|
||||||
|
`bat`使用`syntect`库来支持语法高亮,该库使用 [Sublime Text `.sublime-syntax` 语法文件](https://www.sublimetext.com/docs/3/syntax.html)和主题。而后者中的大部分可以在 [Package Control](https://packagecontrol.io/) 找到。
|
||||||
|
|
||||||
|
当你找到一份语法文件,按照下列方法:
|
||||||
|
|
||||||
|
1. 创建包含语法描述文件的目录:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
mkdir -p "$(bat --config-dir)/syntaxes"
|
||||||
|
cd "$(bat --config-dir)/syntaxes"
|
||||||
|
|
||||||
|
# Put new '.sublime-syntax' language definition files
|
||||||
|
# in this folder (or its subdirectories), for example:
|
||||||
|
git clone https://github.com/tellnobody1/sublime-purescript-syntax
|
||||||
|
```
|
||||||
|
|
||||||
|
2. 调用下面指令把文件转换为二进制缓存:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
bat cache --build
|
||||||
|
```
|
||||||
|
|
||||||
|
3. 最后用`bat --list-languages`来检查新的语法是否被成功导入。如果想要回滚到最初状态,执行:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
bat cache --clear
|
||||||
|
```
|
||||||
|
|
||||||
|
4. 如果你觉得`bat`有必要自带该语法支持,请在阅读[指导](doc/assets.md)后向仓库提交 [Syntax Request](https://github.com/sharkdp/bat/issues/new?labels=syntax-request&template=syntax_request.md)。
|
||||||
|
|
||||||
|
### 添加主题
|
||||||
|
|
||||||
|
类似添加语法支持,第一步也是创建一个带有语法高亮的目录
|
||||||
|
|
||||||
|
```bash
|
||||||
|
mkdir -p "$(bat --config-dir)/themes"
|
||||||
|
cd "$(bat --config-dir)/themes"
|
||||||
|
|
||||||
|
# 下载一个主题
|
||||||
|
git clone https://github.com/greggb/sublime-snazzy
|
||||||
|
|
||||||
|
# 更新二进制缓存
|
||||||
|
bat cache --build
|
||||||
|
```
|
||||||
|
|
||||||
|
然后用`bat --list-themes`检查添加是否成功。
|
||||||
|
|
||||||
|
### 添加或修改文件关联
|
||||||
|
|
||||||
|
你可以用`--map-syntax`参数添加或修改文件名模板。它需要一个类似`pattern:syntax`的参数来指定,其中`pattern`是 glob 文件匹配模板,`syntax`则是支持的语法的完整名(使用`bat --list-languages`来查看获取一份清单)。
|
||||||
|
|
||||||
|
注意:方便起见,你可能需要把参数添加到配置文件,而不是每次都在命令行中传递该参数。
|
||||||
|
|
||||||
|
以下展示了把“INI”关联到具有`.conf`扩展名的文件
|
||||||
|
|
||||||
|
```bash
|
||||||
|
--map-syntax='*.conf:INI'
|
||||||
|
```
|
||||||
|
|
||||||
|
把`.ignore`文件与“Git Ignore”关联
|
||||||
|
|
||||||
|
```bash
|
||||||
|
--map-syntax='.ignore:Git Ignore'
|
||||||
|
```
|
||||||
|
|
||||||
|
把`/etc/apache2`内的`.conf`文件关联到“Apache Conf”语法(`bat`已默认绑定)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
--map-syntax='/etc/apache2/**/*.conf:Apache Conf'
|
||||||
|
```
|
||||||
|
|
||||||
|
### 使用自定义分页器
|
||||||
|
|
||||||
|
`bat`默认使用`PAGER`环境变量定义的分页器,如果没有定义则使用`less`。`bat`提供了`BAT_PAGER`环境变量来专为`bat`选择分页器(优先级高于`PAGER`)。
|
||||||
|
|
||||||
|
注意:当`PAGER`设置为`more`或`most`时,`bat`会使用`less`来代替以确保能提供色彩支持。
|
||||||
|
|
||||||
|
```bash
|
||||||
|
export BAT_PAGER="less -RF"
|
||||||
|
```
|
||||||
|
|
||||||
|
除了使用环境变量来改变`bat`使用的的分页器,也可以在配置文件中提供`--pager`参数。
|
||||||
|
|
||||||
|
注意:`bat`会把部分命令行参数直接传递给分页器:`-R`/`--RAW-CONTROL-CHARS`,`-F`/`--quit-if-one-screen`以及`-X`/`--no-init`(该参数仅适用于高于530版本的`less`)。其中`-R` 参数需要在解释 ANSI 标准颜色时起作用。`-F`则指示`less`在输出内容的垂直尺寸小于终端尺寸时立即退出。当文件内容可以在一个屏幕里完全显示时,就不需要按`q`键退出阅读模式,很方便就是了。`-X`则能修复`-F`在`less`的老版本中的一些bug(代价是不支持鼠标滚轮,但可以用`-R`来取消`quit-if-one-screen`功能。)。
|
||||||
|
|
||||||
|
### 缩进
|
||||||
|
|
||||||
|
`bat` 使用四个空格宽的制表符,而不受分页器影响,同时也可以用`--tabs`参数来自定义。
|
||||||
|
|
||||||
|
注意:通过其他方法针对分页器的制表符设置不会生效(例如通过`bat`的`--pager`参数传递或`less`使用的`LESS`环境变量)。因为在输出提交给分页器之前,内容中的制表符就已经被`bat`替换为了特定长度的空格以避免由于边栏导致的缩进问题。你可以用给`bat`传递`--tabs=0`参数来取消该设定并让分页器自己处理制表符。
|
||||||
|
|
||||||
|
### 暗色模式
|
||||||
|
|
||||||
|
如果你用的 macOS 处于暗色模式,你可以为`bat`启用基于系统主题的主题。如下所示操作会让`bat`在系统处于亮色模式时加载`GitHub`主题和暗色模式时加载`default`主题。
|
||||||
|
|
||||||
|
```bash
|
||||||
|
alias cat="bat --theme=\$(defaults read -globalDomain AppleInterfaceStyle &> /dev/null && echo default || echo GitHub)"
|
||||||
|
```
|
||||||
|
|
||||||
|
## 配置文件
|
||||||
|
|
||||||
|
```bash
|
||||||
|
bat --config-file
|
||||||
|
```
|
||||||
|
|
||||||
|
你也可以用`BAT_CONFIG_PATH`来为`bat`指定自定义位置的配置文件:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
export BAT_CONFIG_PATH="/path/to/bat.conf"
|
||||||
|
```
|
||||||
|
|
||||||
|
使用`--generate-config-file`参数调用`bat`会在指定位置生成一份默认的`bat`配置文件:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
bat --generate-config-file
|
||||||
|
```
|
||||||
|
|
||||||
|
### 格式
|
||||||
|
|
||||||
|
配置文件其实是一份按行分割的命令行参数列表。你可以用`bat --help`来查看所有可用的参数和适用的值。配置文件中`#`打头的行会被视为注释而不生效。
|
||||||
|
|
||||||
|
以下是一份示例:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 设置主题为 TwoDark
|
||||||
|
--theme="TwoDark"
|
||||||
|
|
||||||
|
# 显示行号和 Git 修改信息, 但没有边框
|
||||||
|
--style="numbers,changes,header"
|
||||||
|
|
||||||
|
# 在终端中以斜体输出文本(不是所有终端都支持)
|
||||||
|
--italic-text=always
|
||||||
|
|
||||||
|
# 使用 C++ 语法来给 Arduino 的 .ino 文件提供高亮
|
||||||
|
--map-syntax "*.ino:C++"
|
||||||
|
```
|
||||||
|
|
||||||
|
## 在 Windows 中使用 `bat`
|
||||||
|
|
||||||
|
`bat` 在 Windows 上开箱即用,除了部分功能需要额外配置。
|
||||||
|
|
||||||
|
### 前置条件
|
||||||
|
|
||||||
|
你需要先安装 [Visual C++ Redistributable](https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads) 包。
|
||||||
|
|
||||||
|
### 分页
|
||||||
|
|
||||||
|
Windows 只有一个提供有限功能的分页器,你可以从[这里下载](http://www.greenwoodsoftware.com/less/download.html)或用 [Chocolatey 安装](https://chocolatey.org/packages/Less) Windows 版本的`less`。第一种方法需要你把它所在目录加入`PATH`环境变量或[定义分页器变量](#使用自定义分页器)
|
||||||
|
|
||||||
|
### 色彩
|
||||||
|
|
||||||
|
Windows 10 从 [v1511](https://en.wikipedia.org/wiki/Windows_10_version_history#Version_1511_(November_Update)) 开始 shell(`conhost.exe`,命令提示符或 Powershell)原生支持色彩。在早些版本的 Windows 中你可以用第三方终端如 [Cmder](http://cmder.net/) (使用[ConEmu](https://conemu.github.io/))。
|
||||||
|
|
||||||
|
注意:Git 和 MSYS 版本的 `less` 没法正确在 Windows 表达色彩。如果你没有安装其他分页器,你可以直接用`--paging=never`或设置`BAT_PAGER`为空字符串来关闭分页功能。
|
||||||
|
|
||||||
|
### Cygwin
|
||||||
|
|
||||||
|
Windows 上的`bat`原生不支持 Cygwin' unix-style 路径(`/cygdrive/*`)。当传递一个绝对 cygwin 路径作为参数值时,`bat`会产生`The system cannot find the path specified. (os error 3)`的错误。你可以`.bash_profile`文件中添加以下函数来解决这个问题。
|
||||||
|
|
||||||
|
```bash
|
||||||
|
bat() {
|
||||||
|
local index
|
||||||
|
local args=("$@")
|
||||||
|
for index in $(seq 0 ${#args[@]}) ; do
|
||||||
|
case "${args[index]}" in
|
||||||
|
-*) continue;;
|
||||||
|
*) [ -e "${args[index]}" ] && args[index]="$(cygpath --windows "${args[index]}")";;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
command bat "${args[@]}"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## 疑难解答
|
||||||
|
|
||||||
|
### 输出内容含糊不清
|
||||||
|
|
||||||
|
当输入文件包含颜色代码和其他 ANSI 转义符号时,`bat`会产生错误的语法高亮和文本,导致输出看起来令人无法理解。当你需要输出该文件时,请使用`--color=never --wrap=never`参数来关闭上色和文字包裹。
|
||||||
|
|
||||||
|
### 终端与色彩
|
||||||
|
|
||||||
|
`bat`会区分支持 truecolor 和不支持 truecolor 的终端。但是大部分语法高亮主题都是用了没有为 8-bit 色彩支持的颜色,因此强烈推荐使用一个支持 24-bit 色彩的终端(`terminator`,`konsole`,`iTerm2`...),或使用一个 [8-bit 主题](#8-bit-主题)来限制一些颜色。查看[这篇文章使用自定义分页器](https://gist.github.com/XVilka/8346728)了解更多支持 truecolor 的终端。你需要定义`COLORTERM`变量为`truecolor`或`24bit`来确保`bat`能够识别终端的对颜色的支持,否则会使用 8 bit 模式。
|
||||||
|
|
||||||
|
### 行号和边框很难看清
|
||||||
|
|
||||||
|
试试其他主题,说不定能有所改善(用`bat --list-themes`查看主题列表)。
|
||||||
|
|
||||||
|
### 文件编码
|
||||||
|
|
||||||
|
`bat`原生支持 UTF-8 和 UTF-16。至于其他文件你可能需要在使用`bat`之前先把编码转换到UTF-8。
|
||||||
|
|
||||||
|
这里展示了使用`iconv`来把 Latin-1(ISO-8859-1) 编码的 PHP 文件转换到 UTF-8:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
iconv -f ISO-8859-1 -t UTF-8 my-file.php | bat
|
||||||
|
```
|
||||||
|
|
||||||
|
注意: 当`bat`无法识别语言时你可能会需要`-l`/`--language`参数。
|
||||||
|
|
||||||
|
## Development
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Recursive clone to retrieve all submodules
|
||||||
|
git clone --recursive https://github.com/sharkdp/bat
|
||||||
|
|
||||||
|
# Build (debug version)
|
||||||
|
cd bat
|
||||||
|
cargo build --bins
|
||||||
|
|
||||||
|
# Run unit tests and integration tests
|
||||||
|
cargo test
|
||||||
|
|
||||||
|
# Install (release version)
|
||||||
|
cargo install --path . --locked
|
||||||
|
|
||||||
|
# Build a bat binary with modified syntaxes and themes
|
||||||
|
bash assets/create.sh
|
||||||
|
cargo install --path . --locked --force
|
||||||
|
```
|
||||||
|
|
||||||
|
If you want to build an application that uses `bat`s pretty-printing
|
||||||
|
features as a library, check out the [the API documentation](https://docs.rs/bat/).
|
||||||
|
Note that you have to use either `regex-onig` or `regex-fancy` as a feature
|
||||||
|
when you depend on `bat` as a library.
|
||||||
|
|
||||||
|
## Contributing
|
||||||
|
|
||||||
|
Take a look at the [`CONTRIBUTING.md`](CONTRIBUTING.md) guide.
|
||||||
|
|
||||||
|
## Maintainers
|
||||||
|
|
||||||
|
- [sharkdp](https://github.com/sharkdp)
|
||||||
|
- [eth-p](https://github.com/eth-p)
|
||||||
|
- [keith-hall](https://github.com/keith-hall)
|
||||||
|
- [Enselic](https://github.com/Enselic)
|
||||||
|
|
||||||
|
## Security vulnerabilities
|
||||||
|
|
||||||
|
Please contact [David Peter](https://david-peter.de/) via email if you want to report a vulnerability in `bat`.
|
||||||
|
|
||||||
|
## Project goals and alternatives
|
||||||
|
|
||||||
|
`bat` tries to achieve the following goals:
|
||||||
|
|
||||||
|
- Provide beautiful, advanced syntax highlighting
|
||||||
|
- Integrate with Git to show file modifications
|
||||||
|
- Be a drop-in replacement for (POSIX) `cat`
|
||||||
|
- Offer a user-friendly command-line interface
|
||||||
|
|
||||||
|
There are a lot of alternatives, if you are looking for similar programs. See
|
||||||
|
[this document](doc/alternatives.md) for a comparison.
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
Copyright (c) 2018-2021 [bat-developers](https://github.com/sharkdp/bat).
|
||||||
|
|
||||||
|
`bat` is made available under the terms of either the MIT License or the Apache License 2.0, at your option.
|
||||||
|
|
||||||
|
See the [LICENSE-APACHE](LICENSE-APACHE) and [LICENSE-MIT](LICENSE-MIT) files for license details.
|
|
@ -4,17 +4,17 @@ The following table tries to give an overview *from `bat`s perspective*, i.e. we
|
||||||
categories which are relevant for `bat`. Some of these projects have completely different goals and
|
categories which are relevant for `bat`. Some of these projects have completely different goals and
|
||||||
if you are not looking for a program like `bat`, this comparison might not be for you.
|
if you are not looking for a program like `bat`, this comparison might not be for you.
|
||||||
|
|
||||||
| | bat | [pygments](http://pygments.org/) | [highlight](http://www.andre-simon.de/doku/highlight/highlight.php) | [ccat](https://github.com/jingweno/ccat) | [source-highlight](https://www.gnu.org/software/src-highlite/) | [hicat](https://github.com/rstacruz/hicat) | [coderay](https://github.com/rubychan/coderay) | [rouge](https://github.com/jneen/rouge) |
|
| | bat | [pygments](http://pygments.org/) | [highlight](http://www.andre-simon.de/doku/highlight/highlight.php) | [ccat](https://github.com/jingweno/ccat) | [source-highlight](https://www.gnu.org/software/src-highlite/) | [hicat](https://github.com/rstacruz/hicat) | [coderay](https://github.com/rubychan/coderay) | [rouge](https://github.com/jneen/rouge) | [clp](https://github.com/jpe90/clp) |
|
||||||
|----------------------------------------------|---------------------------------------------------------------------|----------------------------------|---------------------------------------------------------------------|------------------------------------------|----------------------------------------------------------------|-----------------------------------------------------|-----------------------------------------------------|-----------------------------------------------------|
|
|----------------------------------------------|---------------------------------------------------------------------|----------------------------------|---------------------------------------------------------------------|------------------------------------------|----------------------------------------------------------------|-----------------------------------------------------|-----------------------------------------------------|-----------------------------------------------------|-----------------------------------------------------|
|
||||||
| Drop-in `cat` replacement | :heavy_check_mark: [*](https://github.com/sharkdp/bat/issues/134) | :x: | :x: | (:heavy_check_mark:) | :x: | :x: [*](https://github.com/rstacruz/hicat/issues/6) | :x: | :x: |
|
| Drop-in `cat` replacement | :heavy_check_mark: [*](https://github.com/sharkdp/bat/issues/134) | :x: | :x: | (:heavy_check_mark:) | :x: | :x: [*](https://github.com/rstacruz/hicat/issues/6) | :x: | :x: | :x: |
|
||||||
| Git integration | :heavy_check_mark: | :x: | :x: | :x: | :x: | :x: | :x: | :x: |
|
| Git integration | :heavy_check_mark: | :x: | :x: | :x: | :x: | :x: | :x: | :x: | :x: |
|
||||||
| Automatic paging | :heavy_check_mark: | :x: | :x: | :x: | :x: | :heavy_check_mark: | :x: | :x: |
|
| Automatic paging | :heavy_check_mark: | :x: | :x: | :x: | :x: | :heavy_check_mark: | :x: | :x: | :x: |
|
||||||
| Languages (circa) | 150 | 300 | 200 | 7 | 80 | 130 | 30 | 130 |
|
| Languages (circa) | 150 | 300 | 200 | 7 | 80 | 130 | 30 | 130 | 150 |
|
||||||
| Extensible (languages, themes) | :heavy_check_mark: | (:heavy_check_mark:) | (:heavy_check_mark:) | :x: | (:heavy_check_mark:) | :x: | :x: | :x: |
|
| Extensible (languages, themes) | :heavy_check_mark: | (:heavy_check_mark:) | (:heavy_check_mark:) | :x: | (:heavy_check_mark:) | :x: | :x: | :x: | :heavy_check_mark: |
|
||||||
| Advanced highlighting (e.g. nested syntaxes) | :heavy_check_mark: | :heavy_check_mark: | (:heavy_check_mark:) ? | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
|
| Advanced highlighting (e.g. nested syntaxes) | :heavy_check_mark: | :heavy_check_mark: | (:heavy_check_mark:) ? | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
|
||||||
| Execution time [ms] (`jquery-3.3.1.js`) | 624 | 789 | 400 | 80 | 300 | 316 | 157 | 695 |
|
| Execution time [ms] (`jquery-3.3.1.js`) | 422 | 455 | 299 | 39 | 208 | 287 | 128 | 740 | 22 |
|
||||||
| Execution time [ms] (`miniz.c`) | 66 | 656 | 26 | 8 | 53 | 141 | 75 | 254 |
|
| Execution time [ms] (`miniz.c`) | 27 | 169 | 19 | 4 | 36 | 131 | 58 | 231 | 4 |
|
||||||
| Execution time [ms] (370 kB XML file) | 238 | 487 | 129 | 111 | 110 | 339 | 147 | 359 |
|
| Execution time [ms] (957 kB XML file) | 215 | 296 | 236 | 165 | 83 | 412 | 135 | 386 | 127 |
|
||||||
|
|
||||||
If you think that some entries in this table are outdated or wrong, please open a ticket or pull
|
If you think that some entries in this table are outdated or wrong, please open a ticket or pull
|
||||||
request.
|
request.
|
||||||
|
@ -22,3 +22,44 @@ request.
|
||||||
Some other alternatives that are also related, but not yet included in the table:
|
Some other alternatives that are also related, but not yet included in the table:
|
||||||
- [lesspipe](https://github.com/wofr06/lesspipe)
|
- [lesspipe](https://github.com/wofr06/lesspipe)
|
||||||
- [vimpager](https://github.com/rkitover/vimpager)
|
- [vimpager](https://github.com/rkitover/vimpager)
|
||||||
|
|
||||||
|
## Benchmarks
|
||||||
|
|
||||||
|
The benchmarks above have been created with this script:
|
||||||
|
```bash
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
cd "$(dirname "${BASH_SOURCE[0]}")" || exit
|
||||||
|
|
||||||
|
if ! command -v hyperfine > /dev/null 2>&1; then
|
||||||
|
echo "'hyperfine' does not seem to be installed."
|
||||||
|
echo "You can get it here: https://github.com/sharkdp/hyperfine"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
SRC="test-src/jquery-3.3.1.js"
|
||||||
|
|
||||||
|
|
||||||
|
cmd_bat="bat --style=full --color=always --paging=never '$SRC'"
|
||||||
|
cmd_bat_simple="bat --plain --wrap=never --tabs=0 --color=always --paging=never '$SRC'"
|
||||||
|
cmd_pygmentize="pygmentize -g '$SRC'"
|
||||||
|
cmd_highlight="highlight -O truecolor '$SRC'"
|
||||||
|
cmd_ccat="ccat --color=always '$SRC'"
|
||||||
|
cmd_source_highlight="source-highlight --failsafe --infer-lang -f esc -i '$SRC'"
|
||||||
|
cmd_hicat="hicat '$SRC'"
|
||||||
|
cmd_coderay="coderay '$SRC'"
|
||||||
|
cmd_rouge="rougify '$SRC'"
|
||||||
|
cmd_clp="clp '$SRC'"
|
||||||
|
|
||||||
|
hyperfine --warmup 3 \
|
||||||
|
"$cmd_bat" \
|
||||||
|
"$cmd_bat_simple" \
|
||||||
|
"$cmd_pygmentize" \
|
||||||
|
"$cmd_highlight" \
|
||||||
|
"$cmd_ccat" \
|
||||||
|
"$cmd_source_highlight" \
|
||||||
|
"$cmd_hicat" \
|
||||||
|
"$cmd_coderay" \
|
||||||
|
"$cmd_rouge" \
|
||||||
|
"$cmd_clp" \
|
||||||
|
```
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue