pub const VERSION: &str = "2.18.2"; pub fn artifact(language: &str) -> Option<(usize, &'static str)> { match language { "ada" => Some(( 1180565, "04ddb795cfbc68d549ee897bfa18617f13dbbfaf46829843ea9e35e80bdab8c1", )), "agda" => Some(( 3022238, "b0b4243734d2c65a6531fa5960831bf3f0ecd03b562479c77eeaf2ea216d328b", )), "asciidoc" => Some(( 1196286, "e5d0416c6c762f1249c19a26b61244aa9eea3e81c0b43d385deb6dca21d3a32e", )), "asm" => Some(( 955782, "62efa779c6e4477c509d43a3847d6ef8bd9739923b3d25462d3e711f32ac9d9f", )), "awk" => Some(( 1423948, "1e9212052ab29b0f162ebaf24476e003c48a71c8b82797b67538ec657bed5c21", )), "bash" => Some(( 2189951, "9ffeeaaae2246e7f7bea8bdaf22120f93effac4a8f3acc2e2190382647b2e7ca", )), "batch" => Some(( 1073511, "428fcb7259baa5db3f961f903096c04f06017ef38a01009d7cb882b41897e206", )), "c" => Some(( 1369239, "113cb4581b76b48da2ba5fbc566fb551dab195ec256ddd540094b3eb29042c4a", )), "c-sharp" => Some(( 3780203, "6a4066148bc107b962e8ca532230dcd77a555c6893fe035acacd68e2f3daa91e", )), "caddy" => Some(( 1386228, "0e141a81d9a7855d96c11d8cc9fbd49c6deb1fe2a45f8b4f7d447074bcd84e66", )), "capnp" => Some(( 993759, "dadd045f06e227309b67ad8f50aeb883c12d9379ab8ac1caaa64832cd5fa023b", )), "cedar" => Some(( 1012243, "5261c7ae0515751cc438bd05a1eed200de702fcea31b6886f54f7ee515bda23e", )), "cedarschema" => Some(( 957615, "4852d2dbffe54807d291074c8e519bfa0c35a93406cb6dd446b53979d41550b8", )), "clojure" => Some(( 1008753, "1a8178f6d4a0d8dff9dfbb55b0fb2e6a347efc6ea993d310a3edfa87f3d68953", )), "cmake" => Some(( 1014233, "f52cc071c98e30d23dfa62949288f93dd12be381cc904873e21daa3bf6a00a25", )), "cobol" => Some(( 6298591, "4f2b712e812461daa1e8fa82749cdd25bf51f4b91b09cf4ad6400cdc416feb8b", )), "commonlisp" => Some(( 1629046, "138cce06c364ccc39f70dd2011b3d4d6a12945506374a26d9b547c84b0f5d65d", )), "cpp" => Some(( 3526186, "2a535ea41d23257c5cc8a44ad1a51186bd445870d4013147a56b8769cf89503f", )), "css" => Some(( 1055728, "5a97ef7f682db6ea988d2b614928f0d0349e07ffc3866e250a08f031ee12c2a7", )), "d" => Some(( 4044353, "6ff8de8b8997eb145820ac2a7fcb04b74b80546340d53821074694615d3aca67", )), "dart" => Some(( 1620290, "76856586b4eec2af702981f2bf3602e85fe16be78229eff9021b49221f9fe279", )), "devicetree" => Some(( 1085320, "9f3be12d071bd3110c5a590e27dcb20db6675b248d44f13935c62033b165459d", )), "diff" => Some(( 949154, "1c9930f2b96cf4143537332b2363ad72672f0b8b37830d00920c99272d3dddbc", )), "dockerfile" => Some(( 975987, "30209187949681b96ad0c761bf369d0bf6ddba25c2a928869432bf255bc4c60f", )), "dot" => Some(( 953907, "7819e2e18c716df2f7c1ea4739c4acffc04522da86e716b86285d8501ad9bb41", )), "elisp" => Some(( 961934, "54372e28e5cb656fff43f2f991e662abac4731c476b73c4f740a939d85c87d38", )), "elixir" => Some(( 2342431, "3ebdac31c0e06ed056c2cdb68461267c3aa38780bdb8ae472230f4ee75564259", )), "elm" => Some(( 1101651, "7e940515a771eb9628eeca901198806abc9dd6e3680f8d19a30ae53d73ad4726", )), "erlang" => Some(( 1215382, "0483b4cb87878c80982dc98ccdda33800a2830ca3c738095c6ddf7ba161f2d34", )), "fish" => Some(( 993837, "4b91b7f192b262a04cf332537a2880cfd8eb99bce9fb170c662149cbe58ce18c", )), "fsharp" => Some(( 4149576, "40b457abad845651b1b2a6e2261f4f2b0dcd83a817018ee5a00514905adc4b1b", )), "gitattributes" => Some(( 948786, "e49f25b0a5c5b5b99a28df2d6bca35965cafeec660d8098949c5878cbad0c99d", )), "gleam" => Some(( 1329356, "8d6f33add8239f20cd01922265aed58d00edd1c451d6e99aa3f8a4b346357ae9", )), "glsl" => Some(( 1499154, "556124745763b101d6019b882a1cde0644c0be8dc29e90031dcf7f095ff2f85f", )), "go" => Some(( 1135258, "463a15deb2edf3b9f3856a6cd677ea4e27d4ed1f427c1e28ef0e5a25c925b613", )), "graphql" => Some(( 984858, "2485aef46e0e88d6bbc2f75d753a9ace01edd0b87fd07802420d37be9828348f", )), "groovy" => Some(( 1542109, "0f5e610f2188e56f68b34ddfd5058990bee9cc33be61ee86606350ae0cf4ac07", )), "haskell" => Some(( 3081220, "09d853c618d6b261bd3ec68b517c325063daf082871d4e2f93cfa3176819df90", )), "hcl" => Some(( 1019375, "cd7847e24bdbb7b8c6b1c54ec32516d04d476fd6420d3a6588393a94f418c31e", )), "hlsl" => Some(( 3771606, "c51492ff7aabc15bcb4790d4ba065ad8f27122cca3b31df0fc75eba6359f981b", )), "html" => Some(( 946396, "26188f4e56215bc02129b31dae091f968e817b5bc383548e18d5428544ecb06f", )), "idris" => Some(( 2354626, "28cc23922bfad68efdf8d77fc3a7977c56e8d2c041ef567097227b8fd813d78c", )), "ini" => Some(( 933499, "adbef8297d0838bd48146051e1a3119d6240c4bdbf87f3390ae11fc4d2f3ff81", )), "java" => Some(( 1208378, "c110f752747013ec2604bab1532a86591f2d2b939aad5d8af61d2bb61d46ed14", )), "javascript" => Some(( 1262729, "63850e59d4c059edac638f8b9d339ac568944593b2e76b151b7955590f3e74db", )), "jinja2" => Some(( 941545, "e5fbb8a7eedecbe6345122545d375ec10c8c5bb90af0ee18c201487e356ccfc3", )), "jq" => Some(( 1023788, "a917ee166b3f0893d2b0b4fc48b12f9ddc75c179f5cac2cef1748af0851fa578", )), "jsdoc" => Some(( 958427, "743b7b37cd1dbd7241eb1352884450f5a167f529d79c59747865d6f26cbc0095", )), "json" => Some(( 934592, "3c2172f176687106db77f04dc5ade071e8f6e5c42066e7200b317dd45ff2a375", )), "julia" => Some(( 2873312, "dd11c813ce733b034678219acf6c997233898b7fbea1cf6ce115d55a14150a61", )), "just" => Some(( 979125, "7fbbb688db5a05d4dc025837d466c7624f88b244c6ca1d50f941c6ee13de16a9", )), "kconfig" => Some(( 983005, "02030e846565bfe1687a93034c41901f183d4818b3792138956f163b01b674e6", )), "kdl" => Some(( 994781, "18601d1ea0b4f96d6f4a360f308e2d731eade43f654aa37bc4c76f535d0de611", )), "kotlin" => Some(( 4065274, "6beb95f876b947bcad1cf5c01c0b11c15d2c4421bcba04ce2d53387fabf2086c", )), "lean" => Some(( 15179599, "3ba04ec2626fadc5cc3778ecdfab2054f02f3dd758dd782689f4389ca23c805f", )), "lua" => Some(( 977747, "4553556759358b5f8ac34cdfed6f82da855f004d1b06e9cb63eaebf3f8d58ac2", )), "make" => Some(( 1069502, "3cb8479db980596ea229dc7e1a50219e79e5e54517a3688561bdb36ba826f5a2", )), "markdown" => Some(( 1233242, "952a979343d0144fbdac518d5d0d6404312d0f7ad74e25a197be9cf3bd334ee4", )), "matlab" => Some(( 1279236, "050f8aa2a4462631ec8dcae2504086270190d32bae741f2b35d91336e18b8702", )), "meson" => Some(( 1040115, "cf7c7c5c07968a30f84bfd005630b1315a45220b1ed37ea08a4434a5886eed62", )), "nginx" => Some(( 966328, "7562b504b0213f631d5ac6b9bbf847a7d0938b514e516b336d148374ac2c223a", )), "ninja" => Some(( 960432, "4a86eafeda4963f73b01f181523170ce334ca50c29782a121a9cd741df9e6500", )), "nix" => Some(( 1011972, "5e34d178342232c082b492798cec6a94a41f7fea869e96ab6f895aca4879967e", )), "objc" => Some(( 3179021, "49681944578a9e36f955da6a8648b00c5e7e38dcd065b1ee7318c1fd339d9a7f", )), "ocaml" => Some(( 2457345, "d7ce429bb88b530f1aa8ddbbe504ec715b23218afb96b69d5f388515d96280a8", )), "odin" => Some(( 2509054, "4ac682f9b12c0a560b993f36e0015bb207a9ea4ead4df8361815067c80e5fdb4", )), "perl" => Some(( 2479922, "71354540d41528eabd3e27de750193cee26199de8e93601aac502b6c50ea3dbd", )), "php" => Some(( 1611597, "6ce9c56401aa8b30f713d897991210ca7d455858c49c8276ff6973fc14ce44aa", )), "postscript" => Some(( 938523, "99f95c94d88e7fe38e4578dc0bdbd3b2008f2ca4ac28bf4cd623967d9dd28bac", )), "powershell" => Some(( 1657956, "074574d5791b956b32b0a5073a491a2d0e7cd5cd2d365a3d0e1de679fc889f25", )), "prolog" => Some(( 944395, "d76316fe4a327032d48587f37b6b459d6cfccc1cb23367ecbaa2a9a2b5524c8c", )), "proto" => Some(( 1006657, "e5ec2be4a253b10c21f1c631f5733e07c44a6b951da30845b6fdf70d174c6bec", )), "python" => Some(( 1345718, "a952e9f349fb441fd70f58fae01a1f543d1b07bc85a05f96233e00c0c35f7263", )), "query" => Some(( 947478, "87e77c33e2f443c1e371aded82d557e20f76ef8506bfc62a266d9408ea26b24c", )), "r" => Some(( 1375758, "baa5c32963ff40fa0e5e39bbcedba1a2cf928302b61191ca4e3d08559760ad4e", )), "regex" => Some(( 949532, "266bdc59e69d87f2aff2267d4398546c46a14eff26b964c5eb665ee3d46416e2", )), "rego" => Some(( 1050559, "5182fa15e18fcc16f65f22ab79f91b75d11c724f0dc5b7d0ac7e2fe4e1cf3a51", )), "rescript" => Some(( 1614855, "672b2a29aa120c15f71ad3b45832837b13dc33012916650235f1273bec155db6", )), "ron" => Some(( 953729, "b3636f00a4c28969a1813b789d3729d59944b7c8676a2f8bc6c4fe38ccccf8c4", )), "ruby" => Some(( 2524595, "a6d2d755dd5538f8398c71e254c0a22578382d69cdeb72026380663ca914fe04", )), "rust" => Some(( 2174209, "23082cdeeab932eadd084c8df49098dc9142d26da9791b981243f1d511326546", )), "scala" => Some(( 4115142, "738933c1fc34f4bf0a5cff6b76494104e246144d26a2eda238135e9dfb36618a", )), "scheme" => Some(( 1033643, "e3b024007ba0f051bf2eefa8bb405a042edfef55abcb6917c1f8be6c5fd8f9e7", )), "scss" => Some(( 1107833, "39390b75a8f174231891a27bfa0844f7bfd81e048a9479faafcb382200cbc627", )), "solidity" => Some(( 1180330, "cf844894e2c410b4467454304932edb15cb7c38bff1d51ed3cbbe519436931f6", )), "sparql" => Some(( 1113026, "d26cb22b6ae7f980cffb32261e554efcc881ebd685a557b41715cd8a967db09d", )), "sql" => Some(( 5382122, "f85f66a653afe1bd14cff8011f683887945a85847a0cc2bf148374702ca454ee", )), "ssh-config" => Some(( 1131130, "7827ccc835bb805c4a9b54f98afccb3cf12b27dc126e79fffd4d384156e5b486", )), "starlark" => Some(( 1024220, "e2178390e3c8e6a17d627ebc8e018399292c553671de05e5f9465fc2e54a4226", )), "styx" => Some(( 964980, "860e3f83c8874e0955f6ddbf9fafd0204c7265dbc6f59bbdad1879c7c343687b", )), "svelte" => Some(( 974499, "1a2cefaface9077af8c314f874dedaa15491fd80e69fc84f664eba667bc1d9ce", )), "swift" => Some(( 2962439, "f212e1a0dc161f7413da9028e1cfcfd4a9ebc74a6146230b229a06c015029cfd", )), "textproto" => Some(( 945817, "705980ae80cb3e3ae120d53512872908da0ef631dd817429f334a935a0e12537", )), "thrift" => Some(( 1040206, "50a01390fbb2d1982845140ccc96560b74d398084b603c14ab4654702ec596f5", )), "tlaplus" => Some(( 3591672, "d1b8eafd60bdd4ec6340cae45630378b09a54ed108f26c87b6c65293c57b1b46", )), "toml" => Some(( 953185, "e7af1a38febfd572e0ad89644165cef8bc7a996796ab244c2b7b1db09bb933eb", )), "tsx" => Some(( 1937369, "a5ec1393d88d958606295b7eebee60a945955c3aae643642f93fdf6abdf1a388", )), "typescript" => Some(( 1904608, "dafcf84529307416d5f743fb1569d08c3e104751c7c26e51ce61b4296cbe7131", )), "typst" => Some(( 1560168, "2d9a16d564d67e40865c45e61b467bac7032f9269f3744aee7ff340a11b1af05", )), "uiua" => Some(( 1206592, "5a07f06a7aafee3a4a6e94f8867ab074de0c80a633bc8df8bf3f5d598a458ab8", )), "vb" => Some(( 2028890, "bb8d688e1fd0f3f5e9e7813e8842393a26c3a2daf232cd0698addc3861ef917f", )), "verilog" => Some(( 13471327, "1a24834c14cda83b6db374c7d7a6ca2343f424191091c4029fb0cd3927a1dde2", )), "vhdl" => Some(( 2015933, "508ab1e9a75d7cf5c2c89b938e35ada2357dc456a97039a3625354c963723021", )), "vim" => Some(( 1969694, "5dc641ae623882695d866f94b61e0d46f5f66b9eaa5e6d74e517f2a818c76458", )), "vue" => Some(( 958996, "ad5b1f0a427ae6d9510390cd079bcc9113286db1b133a2c12b50a560ec1cda74", )), "wit" => Some(( 1001355, "a78aecbec43ad2c3f09d38256aedcbca4320e2f999444044052c159e2ca18759", )), "x86asm" => Some(( 960388, "3f8b3f11fd415f65b9d8f0b5328f100ef533a633869e2f35733b90bc5a453651", )), "xml" => Some(( 975694, "9bc4f9ddde44b47b082d9df6c1c7ffb5956872f82348fc60df1cc71efbe0ec7e", )), "yaml" => Some(( 1086189, "de537a8cc986bc4a0b96504498d79e6b745285afc25ddace54a2e32b68712e0b", )), "yuri" => Some(( 1081656, "f62b5559dfa745bb24b7fdc8d0495c20d745f926a768885f5c3fc62d7e6b827c", )), "zig" => Some(( 1534700, "07af247f8a06205d0e7c97e46a9854a91e806cce9e6d3d2ba537de523aa3b3cb", )), "zsh" => Some(( 1031426, "ee4bbc13cf97c2d1468cf0afcb4338c54e7e771e7fd5ceb9b80cafe54c02d8e8", )), _ => None, } } pub fn detect(path: &str) -> Option<&'static str> { let name = path.rsplit(['/', '\\']).next().unwrap_or(path); let extension = name.rsplit('.').next().unwrap_or(name); canonical(name).or_else(|| canonical(extension)) } /// Resolves a file name, extension, or code fence identifier to a grammar. pub fn canonical(name: &str) -> Option<&'static str> { Some(match name.to_lowercase().as_str() { "ada" => "ada", "adb" => "ada", "adoc" => "asciidoc", "ads" => "ada", "agda" => "agda", "asciidoc" => "asciidoc", "asm" => "asm", "assembly" => "asm", "awk" => "awk", "bash" => "bash", "bash_profile" => "bash", "bashrc" => "bash", "bat" => "batch", "batch" => "batch", "bazel" => "starlark", "bzl" => "starlark", "c" => "c", "c#" => "c-sharp", "c++" => "cpp", "c-sharp" => "c-sharp", "caddy" => "caddy", "caddyfile" => "caddy", "capnp" => "capnp", "cbl" => "cobol", "cc" => "cpp", "cedar" => "cedar", "cedarschema" => "cedarschema", "cfg" => "ini", "cjs" => "javascript", "cl" => "commonlisp", "clj" => "clojure", "cljc" => "clojure", "cljs" => "clojure", "clojure" => "clojure", "cmake" => "cmake", "cmakelists.txt" => "cmake", "cmd" => "batch", "cob" => "cobol", "cobol" => "cobol", "commonlisp" => "commonlisp", "conf" => "ini", "console" => "bash", "containerfile" => "dockerfile", "cpp" => "cpp", "cpy" => "cobol", "cs" => "c-sharp", "csharp" => "c-sharp", "csproj" => "xml", "css" => "css", "cts" => "typescript", "cxx" => "cpp", "d" => "d", "dart" => "dart", "devicetree" => "devicetree", "diff" => "diff", "dlang" => "d", "docker" => "dockerfile", "dockerfile" => "dockerfile", "dot" => "dot", "dts" => "devicetree", "dtsi" => "devicetree", "editorconfig" => "ini", "edn" => "clojure", "el" => "elisp", "elisp" => "elisp", "elixir" => "elixir", "elm" => "elm", "emacs-lisp" => "elisp", "erl" => "erlang", "erlang" => "erlang", "ex" => "elixir", "exs" => "elixir", "f#" => "fsharp", "fish" => "fish", "frag" => "glsl", "fs" => "fsharp", "fsharp" => "fsharp", "fsx" => "fsharp", "gemfile" => "ruby", "gemspec" => "ruby", "gitattributes" => "gitattributes", "gitconfig" => "ini", "gitmodules" => "ini", "gleam" => "gleam", "glsl" => "glsl", "gnumakefile" => "make", "go" => "go", "golang" => "go", "gql" => "graphql", "gradle" => "groovy", "graphql" => "graphql", "graphviz" => "dot", "groovy" => "groovy", "gsh" => "groovy", "gv" => "dot", "gvy" => "groovy", "gy" => "groovy", "h" => "c", "haskell" => "haskell", "hcl" => "hcl", "hh" => "cpp", "hlsl" => "hlsl", "hpp" => "cpp", "hrl" => "erlang", "hs" => "haskell", "htm" => "html", "html" => "html", "hxx" => "cpp", "idr" => "idris", "idris" => "idris", "ini" => "ini", "j2" => "jinja2", "java" => "java", "javascript" => "javascript", "jinja" => "jinja2", "jinja2" => "jinja2", "jl" => "julia", "jq" => "jq", "js" => "javascript", "jsdoc" => "jsdoc", "json" => "json", "json5" => "json", "jsonc" => "json", "jsx" => "javascript", "julia" => "julia", "just" => "just", "justfile" => "just", "kconfig" => "kconfig", "kdl" => "kdl", "kotlin" => "kotlin", "kt" => "kotlin", "kts" => "kotlin", "lean" => "lean", "lisp" => "commonlisp", "lua" => "lua", "m" => "matlab", "make" => "make", "makefile" => "make", "markdown" => "markdown", "matlab" => "matlab", "md" => "markdown", "mdx" => "markdown", "meson" => "meson", "meson.build" => "meson", "mjs" => "javascript", "mk" => "make", "ml" => "ocaml", "mli" => "ocaml", "mm" => "objc", "mts" => "typescript", "mysql" => "sql", "nasm" => "x86asm", "nginx" => "nginx", "nginx.conf" => "nginx", "ninja" => "ninja", "nix" => "nix", "objc" => "objc", "objective-c" => "objc", "objectivec" => "objc", "ocaml" => "ocaml", "odin" => "odin", "opa" => "rego", "patch" => "diff", "pbtxt" => "textproto", "perl" => "perl", "pgsql" => "sql", "php" => "php", "pl" => "perl", "plist" => "xml", "plsql" => "sql", "pm" => "perl", "postgres" => "sql", "postgresql" => "sql", "postscript" => "postscript", "powershell" => "powershell", "pro" => "prolog", "prolog" => "prolog", "proto" => "proto", "protobuf" => "proto", "ps" => "postscript", "ps1" => "powershell", "psm1" => "powershell", "pwsh" => "powershell", "py" => "python", "py3" => "python", "pyi" => "python", "python" => "python", "python3" => "python", "query" => "query", "r" => "r", "racket" => "scheme", "rakefile" => "ruby", "rb" => "ruby", "regex" => "regex", "regexp" => "regex", "rego" => "rego", "res" => "rescript", "rescript" => "rescript", "rkt" => "scheme", "rlang" => "r", "ron" => "ron", "rq" => "sparql", "rs" => "rust", "ruby" => "ruby", "rust" => "rust", "s" => "asm", "sass" => "scss", "sbt" => "scala", "scala" => "scala", "scheme" => "scheme", "scm" => "query", "scss" => "scss", "sh" => "bash", "shell" => "bash", "sol" => "solidity", "solidity" => "solidity", "sparql" => "sparql", "sql" => "sql", "sqlite" => "sql", "ss" => "scheme", "ssh-config" => "ssh-config", "ssh_config" => "ssh-config", "sshd_config" => "ssh-config", "starlark" => "starlark", "styx" => "styx", "sv" => "verilog", "svelte" => "svelte", "svg" => "xml", "swift" => "swift", "systemverilog" => "verilog", "terraform" => "hcl", "textpb" => "textproto", "textproto" => "textproto", "tf" => "hcl", "tfvars" => "hcl", "thrift" => "thrift", "tla" => "tlaplus", "tlaplus" => "tlaplus", "toml" => "toml", "ts" => "typescript", "tsql" => "sql", "tsx" => "tsx", "typ" => "typst", "typescript" => "typescript", "typst" => "typst", "ua" => "uiua", "uiua" => "uiua", "v" => "verilog", "vb" => "vb", "vbnet" => "vb", "verilog" => "verilog", "vert" => "glsl", "vhd" => "vhdl", "vhdl" => "vhdl", "vim" => "vim", "viml" => "vim", "vimrc" => "vim", "vimscript" => "vim", "visualbasic" => "vb", "vue" => "vue", "wasm-interface" => "wit", "wit" => "wit", "x86" => "x86asm", "x86asm" => "x86asm", "xhtml" => "html", "xml" => "xml", "xsd" => "xml", "xsl" => "xml", "xslt" => "xml", "yaml" => "yaml", "yml" => "yaml", "yuri" => "yuri", "zig" => "zig", "zon" => "zig", "zsh" => "zsh", "zshrc" => "zsh", _ => return None, }) } #[cfg(test)] mod tests { use super::{canonical, detect}; #[test] fn detects_language_from_path() { assert_eq!(detect("src/main.rs"), Some("rust")); assert_eq!(detect("Dockerfile"), Some("dockerfile")); assert_eq!(detect("src/Makefile"), Some("make")); assert_eq!(detect("CMakeLists.txt"), Some("cmake")); assert_eq!(detect("README"), None); } #[test] fn resolves_fence_identifiers() { assert_eq!(canonical("sh"), Some("bash")); assert_eq!(canonical("C++"), Some("cpp")); assert_eq!(canonical(""), None); } }