forks/sorcery
git clone https://git.gae.moe/forks/sorcery
0c80b85
grace-patches
1use std:: collections:: HashMap ; 2use std:: sync:: LazyLock ; 3 4use serde:: Deserialize ; 5 6pub const VERSION : & str ="2.18.2" ; 7 8pub fn artifact ( language : & str ) ->Option <( usize , &' static str )> { 9match language{ 10"ada" =>Some (( 111180565 , 12"04ddb795cfbc68d549ee897bfa18617f13dbbfaf46829843ea9e35e80bdab8c1" , 13)), 14"agda" =>Some (( 153022238 , 16"b0b4243734d2c65a6531fa5960831bf3f0ecd03b562479c77eeaf2ea216d328b" , 17)), 18"asciidoc" =>Some (( 191196286 , 20"e5d0416c6c762f1249c19a26b61244aa9eea3e81c0b43d385deb6dca21d3a32e" , 21)), 22"asm" =>Some (( 23955782 , 24"62efa779c6e4477c509d43a3847d6ef8bd9739923b3d25462d3e711f32ac9d9f" , 25)), 26"awk" =>Some (( 271423948 , 28"1e9212052ab29b0f162ebaf24476e003c48a71c8b82797b67538ec657bed5c21" , 29)), 30"bash" =>Some (( 312189951 , 32"9ffeeaaae2246e7f7bea8bdaf22120f93effac4a8f3acc2e2190382647b2e7ca" , 33)), 34"batch" =>Some (( 351073511 , 36"428fcb7259baa5db3f961f903096c04f06017ef38a01009d7cb882b41897e206" , 37)), 38"c" =>Some (( 391369239 , 40"113cb4581b76b48da2ba5fbc566fb551dab195ec256ddd540094b3eb29042c4a" , 41)), 42"c-sharp" =>Some (( 433780203 , 44"6a4066148bc107b962e8ca532230dcd77a555c6893fe035acacd68e2f3daa91e" , 45)), 46"caddy" =>Some (( 471386228 , 48"0e141a81d9a7855d96c11d8cc9fbd49c6deb1fe2a45f8b4f7d447074bcd84e66" , 49)), 50"capnp" =>Some (( 51993759 , 52"dadd045f06e227309b67ad8f50aeb883c12d9379ab8ac1caaa64832cd5fa023b" , 53)), 54"cedar" =>Some (( 551012243 , 56"5261c7ae0515751cc438bd05a1eed200de702fcea31b6886f54f7ee515bda23e" , 57)), 58"cedarschema" =>Some (( 59957615 , 60"4852d2dbffe54807d291074c8e519bfa0c35a93406cb6dd446b53979d41550b8" , 61)), 62"clojure" =>Some (( 631008753 , 64"1a8178f6d4a0d8dff9dfbb55b0fb2e6a347efc6ea993d310a3edfa87f3d68953" , 65)), 66"cmake" =>Some (( 671014233 , 68"f52cc071c98e30d23dfa62949288f93dd12be381cc904873e21daa3bf6a00a25" , 69)), 70"cobol" =>Some (( 716298591 , 72"4f2b712e812461daa1e8fa82749cdd25bf51f4b91b09cf4ad6400cdc416feb8b" , 73)), 74"commonlisp" =>Some (( 751629046 , 76"138cce06c364ccc39f70dd2011b3d4d6a12945506374a26d9b547c84b0f5d65d" , 77)), 78"cpp" =>Some (( 793526186 , 80"2a535ea41d23257c5cc8a44ad1a51186bd445870d4013147a56b8769cf89503f" , 81)), 82"css" =>Some (( 831055728 , 84"5a97ef7f682db6ea988d2b614928f0d0349e07ffc3866e250a08f031ee12c2a7" , 85)), 86"d" =>Some (( 874044353 , 88"6ff8de8b8997eb145820ac2a7fcb04b74b80546340d53821074694615d3aca67" , 89)), 90"dart" =>Some (( 911620290 , 92"76856586b4eec2af702981f2bf3602e85fe16be78229eff9021b49221f9fe279" , 93)), 94"devicetree" =>Some (( 951085320 , 96"9f3be12d071bd3110c5a590e27dcb20db6675b248d44f13935c62033b165459d" , 97)), 98"diff" =>Some (( 99949154 , 100"1c9930f2b96cf4143537332b2363ad72672f0b8b37830d00920c99272d3dddbc" , 101)), 102"dockerfile" =>Some (( 103975987 , 104"30209187949681b96ad0c761bf369d0bf6ddba25c2a928869432bf255bc4c60f" , 105)), 106"dot" =>Some (( 107953907 , 108"7819e2e18c716df2f7c1ea4739c4acffc04522da86e716b86285d8501ad9bb41" , 109)), 110"elisp" =>Some (( 111961934 , 112"54372e28e5cb656fff43f2f991e662abac4731c476b73c4f740a939d85c87d38" , 113)), 114"elixir" =>Some (( 1152342431 , 116"3ebdac31c0e06ed056c2cdb68461267c3aa38780bdb8ae472230f4ee75564259" , 117)), 118"elm" =>Some (( 1191101651 , 120"7e940515a771eb9628eeca901198806abc9dd6e3680f8d19a30ae53d73ad4726" , 121)), 122"erlang" =>Some (( 1231215382 , 124"0483b4cb87878c80982dc98ccdda33800a2830ca3c738095c6ddf7ba161f2d34" , 125)), 126"fish" =>Some (( 127993837 , 128"4b91b7f192b262a04cf332537a2880cfd8eb99bce9fb170c662149cbe58ce18c" , 129)), 130"fsharp" =>Some (( 1314149576 , 132"40b457abad845651b1b2a6e2261f4f2b0dcd83a817018ee5a00514905adc4b1b" , 133)), 134"gitattributes" =>Some (( 135948786 , 136"e49f25b0a5c5b5b99a28df2d6bca35965cafeec660d8098949c5878cbad0c99d" , 137)), 138"gleam" =>Some (( 1391329356 , 140"8d6f33add8239f20cd01922265aed58d00edd1c451d6e99aa3f8a4b346357ae9" , 141)), 142"glsl" =>Some (( 1431499154 , 144"556124745763b101d6019b882a1cde0644c0be8dc29e90031dcf7f095ff2f85f" , 145)), 146"go" =>Some (( 1471135258 , 148"463a15deb2edf3b9f3856a6cd677ea4e27d4ed1f427c1e28ef0e5a25c925b613" , 149)), 150"graphql" =>Some (( 151984858 , 152"2485aef46e0e88d6bbc2f75d753a9ace01edd0b87fd07802420d37be9828348f" , 153)), 154"groovy" =>Some (( 1551542109 , 156"0f5e610f2188e56f68b34ddfd5058990bee9cc33be61ee86606350ae0cf4ac07" , 157)), 158"haskell" =>Some (( 1593081220 , 160"09d853c618d6b261bd3ec68b517c325063daf082871d4e2f93cfa3176819df90" , 161)), 162"hcl" =>Some (( 1631019375 , 164"cd7847e24bdbb7b8c6b1c54ec32516d04d476fd6420d3a6588393a94f418c31e" , 165)), 166"hlsl" =>Some (( 1673771606 , 168"c51492ff7aabc15bcb4790d4ba065ad8f27122cca3b31df0fc75eba6359f981b" , 169)), 170"html" =>Some (( 171946396 , 172"26188f4e56215bc02129b31dae091f968e817b5bc383548e18d5428544ecb06f" , 173)), 174"idris" =>Some (( 1752354626 , 176"28cc23922bfad68efdf8d77fc3a7977c56e8d2c041ef567097227b8fd813d78c" , 177)), 178"ini" =>Some (( 179933499 , 180"adbef8297d0838bd48146051e1a3119d6240c4bdbf87f3390ae11fc4d2f3ff81" , 181)), 182"java" =>Some (( 1831208378 , 184"c110f752747013ec2604bab1532a86591f2d2b939aad5d8af61d2bb61d46ed14" , 185)), 186"javascript" =>Some (( 1871262729 , 188"63850e59d4c059edac638f8b9d339ac568944593b2e76b151b7955590f3e74db" , 189)), 190"jinja2" =>Some (( 191941545 , 192"e5fbb8a7eedecbe6345122545d375ec10c8c5bb90af0ee18c201487e356ccfc3" , 193)), 194"jq" =>Some (( 1951023788 , 196"a917ee166b3f0893d2b0b4fc48b12f9ddc75c179f5cac2cef1748af0851fa578" , 197)), 198"jsdoc" =>Some (( 199958427 , 200"743b7b37cd1dbd7241eb1352884450f5a167f529d79c59747865d6f26cbc0095" , 201)), 202"json" =>Some (( 203934592 , 204"3c2172f176687106db77f04dc5ade071e8f6e5c42066e7200b317dd45ff2a375" , 205)), 206"julia" =>Some (( 2072873312 , 208"dd11c813ce733b034678219acf6c997233898b7fbea1cf6ce115d55a14150a61" , 209)), 210"just" =>Some (( 211979125 , 212"7fbbb688db5a05d4dc025837d466c7624f88b244c6ca1d50f941c6ee13de16a9" , 213)), 214"kconfig" =>Some (( 215983005 , 216"02030e846565bfe1687a93034c41901f183d4818b3792138956f163b01b674e6" , 217)), 218"kdl" =>Some (( 219994781 , 220"18601d1ea0b4f96d6f4a360f308e2d731eade43f654aa37bc4c76f535d0de611" , 221)), 222"kotlin" =>Some (( 2234065274 , 224"6beb95f876b947bcad1cf5c01c0b11c15d2c4421bcba04ce2d53387fabf2086c" , 225)), 226"lean" =>Some (( 22715179599 , 228"3ba04ec2626fadc5cc3778ecdfab2054f02f3dd758dd782689f4389ca23c805f" , 229)), 230"lua" =>Some (( 231977747 , 232"4553556759358b5f8ac34cdfed6f82da855f004d1b06e9cb63eaebf3f8d58ac2" , 233)), 234"make" =>Some (( 2351069502 , 236"3cb8479db980596ea229dc7e1a50219e79e5e54517a3688561bdb36ba826f5a2" , 237)), 238"markdown" =>Some (( 2391233242 , 240"952a979343d0144fbdac518d5d0d6404312d0f7ad74e25a197be9cf3bd334ee4" , 241)), 242"matlab" =>Some (( 2431279236 , 244"050f8aa2a4462631ec8dcae2504086270190d32bae741f2b35d91336e18b8702" , 245)), 246"meson" =>Some (( 2471040115 , 248"cf7c7c5c07968a30f84bfd005630b1315a45220b1ed37ea08a4434a5886eed62" , 249)), 250"nginx" =>Some (( 251966328 , 252"7562b504b0213f631d5ac6b9bbf847a7d0938b514e516b336d148374ac2c223a" , 253)), 254"ninja" =>Some (( 255960432 , 256"4a86eafeda4963f73b01f181523170ce334ca50c29782a121a9cd741df9e6500" , 257)), 258"nix" =>Some (( 2591011972 , 260"5e34d178342232c082b492798cec6a94a41f7fea869e96ab6f895aca4879967e" , 261)), 262"objc" =>Some (( 2633179021 , 264"49681944578a9e36f955da6a8648b00c5e7e38dcd065b1ee7318c1fd339d9a7f" , 265)), 266"ocaml" =>Some (( 2672457345 , 268"d7ce429bb88b530f1aa8ddbbe504ec715b23218afb96b69d5f388515d96280a8" , 269)), 270"odin" =>Some (( 2712509054 , 272"4ac682f9b12c0a560b993f36e0015bb207a9ea4ead4df8361815067c80e5fdb4" , 273)), 274"perl" =>Some (( 2752479922 , 276"71354540d41528eabd3e27de750193cee26199de8e93601aac502b6c50ea3dbd" , 277)), 278"php" =>Some (( 2791611597 , 280"6ce9c56401aa8b30f713d897991210ca7d455858c49c8276ff6973fc14ce44aa" , 281)), 282"postscript" =>Some (( 283938523 , 284"99f95c94d88e7fe38e4578dc0bdbd3b2008f2ca4ac28bf4cd623967d9dd28bac" , 285)), 286"powershell" =>Some (( 2871657956 , 288"074574d5791b956b32b0a5073a491a2d0e7cd5cd2d365a3d0e1de679fc889f25" , 289)), 290"prolog" =>Some (( 291944395 , 292"d76316fe4a327032d48587f37b6b459d6cfccc1cb23367ecbaa2a9a2b5524c8c" , 293)), 294"proto" =>Some (( 2951006657 , 296"e5ec2be4a253b10c21f1c631f5733e07c44a6b951da30845b6fdf70d174c6bec" , 297)), 298"python" =>Some (( 2991345718 , 300"a952e9f349fb441fd70f58fae01a1f543d1b07bc85a05f96233e00c0c35f7263" , 301)), 302"query" =>Some (( 303947478 , 304"87e77c33e2f443c1e371aded82d557e20f76ef8506bfc62a266d9408ea26b24c" , 305)), 306"r" =>Some (( 3071375758 , 308"baa5c32963ff40fa0e5e39bbcedba1a2cf928302b61191ca4e3d08559760ad4e" , 309)), 310"regex" =>Some (( 311949532 , 312"266bdc59e69d87f2aff2267d4398546c46a14eff26b964c5eb665ee3d46416e2" , 313)), 314"rego" =>Some (( 3151050559 , 316"5182fa15e18fcc16f65f22ab79f91b75d11c724f0dc5b7d0ac7e2fe4e1cf3a51" , 317)), 318"rescript" =>Some (( 3191614855 , 320"672b2a29aa120c15f71ad3b45832837b13dc33012916650235f1273bec155db6" , 321)), 322"ron" =>Some (( 323953729 , 324"b3636f00a4c28969a1813b789d3729d59944b7c8676a2f8bc6c4fe38ccccf8c4" , 325)), 326"ruby" =>Some (( 3272524595 , 328"a6d2d755dd5538f8398c71e254c0a22578382d69cdeb72026380663ca914fe04" , 329)), 330"rust" =>Some (( 3312174209 , 332"23082cdeeab932eadd084c8df49098dc9142d26da9791b981243f1d511326546" , 333)), 334"scala" =>Some (( 3354115142 , 336"738933c1fc34f4bf0a5cff6b76494104e246144d26a2eda238135e9dfb36618a" , 337)), 338"scheme" =>Some (( 3391033643 , 340"e3b024007ba0f051bf2eefa8bb405a042edfef55abcb6917c1f8be6c5fd8f9e7" , 341)), 342"scss" =>Some (( 3431107833 , 344"39390b75a8f174231891a27bfa0844f7bfd81e048a9479faafcb382200cbc627" , 345)), 346"solidity" =>Some (( 3471180330 , 348"cf844894e2c410b4467454304932edb15cb7c38bff1d51ed3cbbe519436931f6" , 349)), 350"sparql" =>Some (( 3511113026 , 352"d26cb22b6ae7f980cffb32261e554efcc881ebd685a557b41715cd8a967db09d" , 353)), 354"sql" =>Some (( 3555382122 , 356"f85f66a653afe1bd14cff8011f683887945a85847a0cc2bf148374702ca454ee" , 357)), 358"ssh-config" =>Some (( 3591131130 , 360"7827ccc835bb805c4a9b54f98afccb3cf12b27dc126e79fffd4d384156e5b486" , 361)), 362"starlark" =>Some (( 3631024220 , 364"e2178390e3c8e6a17d627ebc8e018399292c553671de05e5f9465fc2e54a4226" , 365)), 366"styx" =>Some (( 367964980 , 368"860e3f83c8874e0955f6ddbf9fafd0204c7265dbc6f59bbdad1879c7c343687b" , 369)), 370"svelte" =>Some (( 371974499 , 372"1a2cefaface9077af8c314f874dedaa15491fd80e69fc84f664eba667bc1d9ce" , 373)), 374"swift" =>Some (( 3752962439 , 376"f212e1a0dc161f7413da9028e1cfcfd4a9ebc74a6146230b229a06c015029cfd" , 377)), 378"textproto" =>Some (( 379945817 , 380"705980ae80cb3e3ae120d53512872908da0ef631dd817429f334a935a0e12537" , 381)), 382"thrift" =>Some (( 3831040206 , 384"50a01390fbb2d1982845140ccc96560b74d398084b603c14ab4654702ec596f5" , 385)), 386"tlaplus" =>Some (( 3873591672 , 388"d1b8eafd60bdd4ec6340cae45630378b09a54ed108f26c87b6c65293c57b1b46" , 389)), 390"toml" =>Some (( 391953185 , 392"e7af1a38febfd572e0ad89644165cef8bc7a996796ab244c2b7b1db09bb933eb" , 393)), 394"tsx" =>Some (( 3951937369 , 396"a5ec1393d88d958606295b7eebee60a945955c3aae643642f93fdf6abdf1a388" , 397)), 398"typescript" =>Some (( 3991904608 , 400"dafcf84529307416d5f743fb1569d08c3e104751c7c26e51ce61b4296cbe7131" , 401)), 402"typst" =>Some (( 4031560168 , 404"2d9a16d564d67e40865c45e61b467bac7032f9269f3744aee7ff340a11b1af05" , 405)), 406"uiua" =>Some (( 4071206592 , 408"5a07f06a7aafee3a4a6e94f8867ab074de0c80a633bc8df8bf3f5d598a458ab8" , 409)), 410"vb" =>Some (( 4112028890 , 412"bb8d688e1fd0f3f5e9e7813e8842393a26c3a2daf232cd0698addc3861ef917f" , 413)), 414"verilog" =>Some (( 41513471327 , 416"1a24834c14cda83b6db374c7d7a6ca2343f424191091c4029fb0cd3927a1dde2" , 417)), 418"vhdl" =>Some (( 4192015933 , 420"508ab1e9a75d7cf5c2c89b938e35ada2357dc456a97039a3625354c963723021" , 421)), 422"vim" =>Some (( 4231969694 , 424"5dc641ae623882695d866f94b61e0d46f5f66b9eaa5e6d74e517f2a818c76458" , 425)), 426"vue" =>Some (( 427958996 , 428"ad5b1f0a427ae6d9510390cd079bcc9113286db1b133a2c12b50a560ec1cda74" , 429)), 430"wit" =>Some (( 4311001355 , 432"a78aecbec43ad2c3f09d38256aedcbca4320e2f999444044052c159e2ca18759" , 433)), 434"x86asm" =>Some (( 435960388 , 436"3f8b3f11fd415f65b9d8f0b5328f100ef533a633869e2f35733b90bc5a453651" , 437)), 438"xml" =>Some (( 439975694 , 440"9bc4f9ddde44b47b082d9df6c1c7ffb5956872f82348fc60df1cc71efbe0ec7e" , 441)), 442"yaml" =>Some (( 4431086189 , 444"de537a8cc986bc4a0b96504498d79e6b745285afc25ddace54a2e32b68712e0b" , 445)), 446"yuri" =>Some (( 4471081656 , 448"f62b5559dfa745bb24b7fdc8d0495c20d745f926a768885f5c3fc62d7e6b827c" , 449)), 450"zig" =>Some (( 4511534700 , 452"07af247f8a06205d0e7c97e46a9854a91e806cce9e6d3d2ba537de523aa3b3cb" , 453)), 454"zsh" =>Some (( 4551031426 , 456"ee4bbc13cf97c2d1468cf0afcb4338c54e7e771e7fd5ceb9b80cafe54c02d8e8" , 457)), 458 _ =>None , 459} 460} 461 462# [ derive ( Deserialize )] 463struct Languages { 464filenames : HashMap < String , String >, 465aliases : HashMap < String , String >, 466} 467 468static LANGUAGES : LazyLock < Languages > =LazyLock :: new ( ||{ 469 serde_json:: from_str ( include_str! ( "../web/languages.json" )) 470. expect ( "invalid language classification data" ) 471}); 472 473pub fn detect ( path : & str ) ->Option < &' static str > { 474let name = path 475. rsplit ([ '/' , '\\' ]) 476. next () 477. unwrap_or ( path) 478. to_lowercase (); 479let extension = name. rsplit ( '.' ). next (). unwrap_or ( & name); 480LANGUAGES 481. filenames 482. get ( & name) 483. or_else ( ||LANGUAGES . aliases . get ( & name)) 484. or_else ( ||LANGUAGES . aliases . get ( extension)) 485. map ( String :: as_str) 486} 487 488/// Resolves a file name, extension, or code fence identifier to a grammar. 489pub fn canonical ( name : & str ) ->Option < &' static str > { 490LANGUAGES 491. aliases 492. get ( & name. to_lowercase ()) 493. map ( String :: as_str) 494} 495 496# [ cfg ( test )] 497mod tests{ 498use super ::{ LANGUAGES , artifact, canonical, detect}; 499 500# [ test ] 501fn resolves_fence_identifiers () { 502assert_eq! ( canonical ( "sh" ), Some ( "bash" )); 503assert_eq! ( canonical ( "C++" ), Some ( "cpp" )); 504assert_eq! ( canonical ( "Cargo.lock" ), None ); 505assert_eq! ( canonical ( "" ), None ); 506} 507 508# [ test ] 509fn all_classified_languages_have_grammars () { 510for languagein LANGUAGES 511. filenames 512. values () 513. chain ( LANGUAGES . aliases . values ()) 514{ 515assert! ( artifact ( language). is_some (), "missing grammar: {language}" ); 516} 517} 518}