Skip to main content

rumdl_lib/
linguist_data.rs

1//! GitHub Linguist language data
2//!
3//! Auto-generated from GitHub Linguist languages.yml
4//! Linguist commit: e51c2270 (2026-01-14)
5//!
6//! To regenerate: `uv run --with pyyaml python /tmp/gen_linguist.py > src/linguist_data.rs`
7
8use std::collections::{HashMap, HashSet};
9use std::sync::LazyLock;
10
11/// Linguist commit hash this data was generated from
12pub const LINGUIST_VERSION: &str = "e51c2270";
13
14/// Linguist commit date
15pub const LINGUIST_DATE: &str = "2026-01-14";
16
17/// Maps lowercase alias -> canonical language name
18pub static ALIAS_TO_CANONICAL: LazyLock<HashMap<&'static str, &'static str>> = LazyLock::new(|| {
19    let mut m = HashMap::with_capacity(1208);
20    m.insert("1c enterprise", "1C Enterprise");
21    m.insert("2-dimensional array", "2-Dimensional Array");
22    m.insert("4d", "4D");
23    m.insert("abap", "ABAP");
24    m.insert("abap cds", "ABAP CDS");
25    m.insert("abl", "OpenEdge ABL");
26    m.insert("abnf", "ABNF");
27    m.insert("abuild", "Shell");
28    m.insert("acfm", "Adobe Font Metrics");
29    m.insert("ackrc", "Option List");
30    m.insert("aconf", "ApacheConf");
31    m.insert("actionscript", "ActionScript");
32    m.insert("actionscript 3", "ActionScript");
33    m.insert("actionscript3", "ActionScript");
34    m.insert("ad block", "Adblock Filter List");
35    m.insert("ad block filters", "Adblock Filter List");
36    m.insert("ada", "Ada");
37    m.insert("ada2005", "Ada");
38    m.insert("ada95", "Ada");
39    m.insert("adb", "Adblock Filter List");
40    m.insert("adblock", "Adblock Filter List");
41    m.insert("adblock filter list", "Adblock Filter List");
42    m.insert("adobe composite font metrics", "Adobe Font Metrics");
43    m.insert("adobe font metrics", "Adobe Font Metrics");
44    m.insert("adobe multiple font metrics", "Adobe Font Metrics");
45    m.insert("advpl", "xBase");
46    m.insert("afdko", "OpenType Feature File");
47    m.insert("agda", "Agda");
48    m.insert("ags", "AGS Script");
49    m.insert("ags script", "AGS Script");
50    m.insert("ahk", "AutoHotkey");
51    m.insert("aidl", "AIDL");
52    m.insert("aiken", "Aiken");
53    m.insert("al", "AL");
54    m.insert("algol", "ALGOL");
55    m.insert("alloy", "Alloy");
56    m.insert("alpine abuild", "Shell");
57    m.insert("altium", "Altium Designer");
58    m.insert("altium designer", "Altium Designer");
59    m.insert("amfm", "Adobe Font Metrics");
60    m.insert("ampl", "AMPL");
61    m.insert("amusewiki", "Muse");
62    m.insert("angelscript", "AngelScript");
63    m.insert("answer set programming", "Answer Set Programming");
64    m.insert("ant build system", "Ant Build System");
65    m.insert("antlers", "Antlers");
66    m.insert("antlr", "ANTLR");
67    m.insert("apache", "ApacheConf");
68    m.insert("apacheconf", "ApacheConf");
69    m.insert("apex", "Apex");
70    m.insert("api blueprint", "API Blueprint");
71    m.insert("apkbuild", "Shell");
72    m.insert("apl", "APL");
73    m.insert("apollo guidance computer", "Assembly");
74    m.insert("applescript", "AppleScript");
75    m.insert("arc", "Arc");
76    m.insert("arexx", "REXX");
77    m.insert("as3", "ActionScript");
78    m.insert("ascii stl", "STL");
79    m.insert("asciidoc", "AsciiDoc");
80    m.insert("asl", "ASL");
81    m.insert("asm", "Assembly");
82    m.insert("asn.1", "ASN.1");
83    m.insert("asp", "Classic ASP");
84    m.insert("asp.net", "ASP.NET");
85    m.insert("aspectj", "AspectJ");
86    m.insert("aspx", "ASP.NET");
87    m.insert("aspx-vb", "ASP.NET");
88    m.insert("assembly", "Assembly");
89    m.insert("astro", "Astro");
90    m.insert("asymptote", "Asymptote");
91    m.insert("ats", "ATS");
92    m.insert("ats2", "ATS");
93    m.insert("au3", "AutoIt");
94    m.insert("augeas", "Augeas");
95    m.insert("autoconf", "M4");
96    m.insert("autohotkey", "AutoHotkey");
97    m.insert("autoit", "AutoIt");
98    m.insert("autoit3", "AutoIt");
99    m.insert("autoitscript", "AutoIt");
100    m.insert("avro idl", "Avro IDL");
101    m.insert("awk", "Awk");
102    m.insert("b (formal method)", "B (Formal Method)");
103    m.insert("b3d", "BlitzBasic");
104    m.insert("b4x", "B4X");
105    m.insert("ballerina", "Ballerina");
106    m.insert("bash", "Shell");
107    m.insert("bash session", "ShellSession");
108    m.insert("basic", "BASIC");
109    m.insert("basic for android", "B4X");
110    m.insert("bat", "Batchfile");
111    m.insert("batch", "Batchfile");
112    m.insert("batchfile", "Batchfile");
113    m.insert("bazel", "Starlark");
114    m.insert("be", "Berry");
115    m.insert("beef", "Beef");
116    m.insert("befunge", "Befunge");
117    m.insert("berry", "Berry");
118    m.insert("bh", "Bluespec");
119    m.insert("bibtex", "TeX");
120    m.insert("bibtex style", "BibTeX Style");
121    m.insert("bicep", "Bicep");
122    m.insert("bikeshed", "Bikeshed");
123    m.insert("bison", "Yacc");
124    m.insert("bitbake", "BitBake");
125    m.insert("blade", "Blade");
126    m.insert("blitz3d", "BlitzBasic");
127    m.insert("blitzbasic", "BlitzBasic");
128    m.insert("blitzmax", "BlitzMax");
129    m.insert("blitzplus", "BlitzBasic");
130    m.insert("bluespec", "Bluespec");
131    m.insert("bluespec bh", "Bluespec");
132    m.insert("bluespec bsv", "Bluespec");
133    m.insert("bluespec classic", "Bluespec");
134    m.insert("bmax", "BlitzMax");
135    m.insert("boo", "Boo");
136    m.insert("boogie", "Boogie");
137    m.insert("bplus", "BlitzBasic");
138    m.insert("bqn", "BQN");
139    m.insert("brainfuck", "Brainfuck");
140    m.insert("brighterscript", "BrighterScript");
141    m.insert("brightscript", "Brightscript");
142    m.insert("bro", "Zeek");
143    m.insert("browserslist", "Browserslist");
144    m.insert("bru", "Bru");
145    m.insert("bsdmake", "Makefile");
146    m.insert("bsv", "Bluespec");
147    m.insert("buildstream", "BuildStream");
148    m.insert("byond", "DM");
149    m.insert("bzl", "Starlark");
150    m.insert("c", "C");
151    m.insert("c#", "C#");
152    m.insert("c++", "C++");
153    m.insert("c++-objdump", "Cpp-ObjDump");
154    m.insert("c-objdump", "C-ObjDump");
155    m.insert("c2hs", "Haskell");
156    m.insert("c2hs haskell", "Haskell");
157    m.insert("c3", "C3");
158    m.insert("cabal", "Cabal Config");
159    m.insert("cabal config", "Cabal Config");
160    m.insert("caddy", "Caddyfile");
161    m.insert("caddyfile", "Caddyfile");
162    m.insert("cadence", "Cadence");
163    m.insert("cairo", "Cairo");
164    m.insert("cairo zero", "Cairo");
165    m.insert("cake", "C#");
166    m.insert("cakescript", "C#");
167    m.insert("cameligo", "LigoLANG");
168    m.insert("cangjie", "Cangjie");
169    m.insert("cap cds", "CAP CDS");
170    m.insert("cap'n proto", "Cap'n Proto");
171    m.insert("carbon", "Carbon");
172    m.insert("carto", "CartoCSS");
173    m.insert("cartocss", "CartoCSS");
174    m.insert("cds", "CAP CDS");
175    m.insert("ceylon", "Ceylon");
176    m.insert("cfc", "ColdFusion");
177    m.insert("cfm", "ColdFusion");
178    m.insert("cfml", "ColdFusion");
179    m.insert("chapel", "Chapel");
180    m.insert("charity", "Charity");
181    m.insert("checksum", "Checksums");
182    m.insert("checksums", "Checksums");
183    m.insert("chpl", "Chapel");
184    m.insert("chuck", "ChucK");
185    m.insert("cil", "CIL");
186    m.insert("circom", "Circom");
187    m.insert("cirru", "Cirru");
188    m.insert("clarion", "Clarion");
189    m.insert("clarity", "Clarity");
190    m.insert("classic asp", "Classic ASP");
191    m.insert("classic qbasic", "QuickBASIC");
192    m.insert("classic quickbasic", "QuickBASIC");
193    m.insert("classic visual basic", "Visual Basic 6.0");
194    m.insert("clean", "Clean");
195    m.insert("click", "Click");
196    m.insert("clipper", "xBase");
197    m.insert("clips", "CLIPS");
198    m.insert("clojure", "Clojure");
199    m.insert("closure templates", "Closure Templates");
200    m.insert("cloud firestore security rules", "Cloud Firestore Security Rules");
201    m.insert("clue", "Clue");
202    m.insert("cmake", "CMake");
203    m.insert("cobol", "COBOL");
204    m.insert("coccinelle", "SmPL");
205    m.insert("codeowners", "CODEOWNERS");
206    m.insert("codeql", "CodeQL");
207    m.insert("coffee", "CoffeeScript");
208    m.insert("coffee-script", "CoffeeScript");
209    m.insert("coffeescript", "CoffeeScript");
210    m.insert("coldfusion", "ColdFusion");
211    m.insert("coldfusion cfc", "ColdFusion");
212    m.insert("coldfusion html", "ColdFusion");
213    m.insert("collada", "COLLADA");
214    m.insert("commit", "Git Commit");
215    m.insert("common lisp", "Common Lisp");
216    m.insert("common workflow language", "Common Workflow Language");
217    m.insert("component pascal", "Component Pascal");
218    m.insert("conll", "CoNLL-U");
219    m.insert("conll-u", "CoNLL-U");
220    m.insert("conll-x", "CoNLL-U");
221    m.insert("console", "ShellSession");
222    m.insert("containerfile", "Dockerfile");
223    m.insert("cooklang", "Cooklang");
224    m.insert("cool", "Cool");
225    m.insert("coq", "Rocq Prover");
226    m.insert("cperl", "Perl");
227    m.insert("cpp", "C++");
228    m.insert("cpp-objdump", "Cpp-ObjDump");
229    m.insert("cql", "CQL");
230    m.insert("creole", "Creole");
231    m.insert("cron", "crontab");
232    m.insert("cron table", "crontab");
233    m.insert("crontab", "crontab");
234    m.insert("crystal", "Crystal");
235    m.insert("csharp", "C#");
236    m.insert("cson", "CSON");
237    m.insert("csound", "Csound");
238    m.insert("csound document", "Csound Document");
239    m.insert("csound score", "Csound Score");
240    m.insert("csound-csd", "Csound Document");
241    m.insert("csound-orc", "Csound");
242    m.insert("csound-sco", "Csound Score");
243    m.insert("css", "CSS");
244    m.insert("csv", "CSV");
245    m.insert("cucumber", "Gherkin");
246    m.insert("cuda", "Cuda");
247    m.insert("cue", "CUE");
248    m.insert("cue sheet", "Cue Sheet");
249    m.insert("curl config", "INI");
250    m.insert("curlrc", "INI");
251    m.insert("curry", "Curry");
252    m.insert("cweb", "CWeb");
253    m.insert("cwl", "Common Workflow Language");
254    m.insert("cycript", "Cycript");
255    m.insert("cylc", "INI");
256    m.insert("cypher", "Cypher");
257    m.insert("cython", "Cython");
258    m.insert("d", "D");
259    m.insert("d-objdump", "D-ObjDump");
260    m.insert("d2", "D2");
261    m.insert("d2lang", "D2");
262    m.insert("dafny", "Dafny");
263    m.insert("darcs patch", "Darcs Patch");
264    m.insert("dart", "Dart");
265    m.insert("daslang", "Daslang");
266    m.insert("dataweave", "DataWeave");
267    m.insert("dcl", "DIGITAL Command Language");
268    m.insert("debian package control file", "Debian Package Control File");
269    m.insert("delphi", "Pascal");
270    m.insert("denizenscript", "DenizenScript");
271    m.insert("desktop", "desktop");
272    m.insert("dhall", "Dhall");
273    m.insert("diff", "Diff");
274    m.insert("digital command language", "DIGITAL Command Language");
275    m.insert("dircolors", "dircolors");
276    m.insert("directx 3d file", "DirectX 3D File");
277    m.insert("django", "Jinja");
278    m.insert("dlang", "D");
279    m.insert("dm", "DM");
280    m.insert("dns zone", "DNS Zone");
281    m.insert("dockerfile", "Dockerfile");
282    m.insert("dogescript", "Dogescript");
283    m.insert("dosbatch", "Batchfile");
284    m.insert("dosini", "INI");
285    m.insert("dotenv", "Dotenv");
286    m.insert("dpatch", "Darcs Patch");
287    m.insert("dtrace", "DTrace");
288    m.insert("dtrace-script", "DTrace");
289    m.insert("dune", "Dune");
290    m.insert("dylan", "Dylan");
291    m.insert("e", "E");
292    m.insert("e-mail", "E-mail");
293    m.insert("eagle", "Eagle");
294    m.insert("earthfile", "Earthly");
295    m.insert("earthly", "Earthly");
296    m.insert("easybuild", "Python");
297    m.insert("ebnf", "EBNF");
298    m.insert("ec", "eC");
299    m.insert("ecere projects", "JavaScript");
300    m.insert("ecl", "ECL");
301    m.insert("eclipse", "Prolog");
302    m.insert("ecmarkdown", "HTML");
303    m.insert("ecmarkup", "HTML");
304    m.insert("ecr", "HTML");
305    m.insert("edge", "Edge");
306    m.insert("edgeql", "EdgeQL");
307    m.insert("editor-config", "INI");
308    m.insert("editorconfig", "INI");
309    m.insert("edje data collection", "Edje Data Collection");
310    m.insert("edn", "edn");
311    m.insert("eeschema schematic", "KiCad Schematic");
312    m.insert("eex", "HTML");
313    m.insert("eiffel", "Eiffel");
314    m.insert("ejs", "EJS");
315    m.insert("electronic business card", "vCard");
316    m.insert("elisp", "Emacs Lisp");
317    m.insert("elixir", "Elixir");
318    m.insert("elm", "Elm");
319    m.insert("elvish", "Elvish");
320    m.insert("elvish transcript", "Elvish");
321    m.insert("emacs", "Emacs Lisp");
322    m.insert("emacs lisp", "Emacs Lisp");
323    m.insert("emacs muse", "Muse");
324    m.insert("email", "E-mail");
325    m.insert("emberscript", "EmberScript");
326    m.insert("eml", "E-mail");
327    m.insert("envrc", "Shell");
328    m.insert("eq", "EQ");
329    m.insert("erb", "HTML");
330    m.insert("erlang", "Erlang");
331    m.insert("esdl", "EdgeQL");
332    m.insert("euphoria", "Euphoria");
333    m.insert("f#", "F#");
334    m.insert("f*", "F*");
335    m.insert("factor", "Factor");
336    m.insert("fancy", "Fancy");
337    m.insert("fantom", "Fantom");
338    m.insert("faust", "Faust");
339    m.insert("fb", "FreeBASIC");
340    m.insert("fennel", "Fennel");
341    m.insert("figfont", "FIGlet Font");
342    m.insert("figlet font", "FIGlet Font");
343    m.insert("filebench wml", "Filebench WML");
344    m.insert("filterscript", "RenderScript");
345    m.insert("firrtl", "FIRRTL");
346    m.insert("fish", "Shell");
347    m.insert("flex", "Lex");
348    m.insert("flix", "Flix");
349    m.insert("fluent", "Fluent");
350    m.insert("flux", "FLUX");
351    m.insert("formatted", "Formatted");
352    m.insert("forth", "Forth");
353    m.insert("fortran", "Fortran");
354    m.insert("fortran free form", "Fortran");
355    m.insert("foxpro", "xBase");
356    m.insert("freebasic", "FreeBASIC");
357    m.insert("freemarker", "FreeMarker");
358    m.insert("frege", "Frege");
359    m.insert("fsharp", "F#");
360    m.insert("fstar", "F*");
361    m.insert("ftl", "FreeMarker");
362    m.insert("fundamental", "Text");
363    m.insert("futhark", "Futhark");
364    m.insert("g-code", "G-code");
365    m.insert("game maker language", "Game Maker Language");
366    m.insert("gaml", "GAML");
367    m.insert("gams", "GAMS");
368    m.insert("gap", "GAP");
369    m.insert("gas", "Assembly");
370    m.insert("gcc machine description", "GCC Machine Description");
371    m.insert("gdb", "GDB");
372    m.insert("gdscript", "GDScript");
373    m.insert("gdshader", "GDShader");
374    m.insert("gedcom", "GEDCOM");
375    m.insert("gemfile.lock", "Gemfile.lock");
376    m.insert("gemini", "Gemini");
377    m.insert("gemtext", "Gemini");
378    m.insert("genero 4gl", "Genero 4gl");
379    m.insert("genero per", "Genero per");
380    m.insert("genie", "Genie");
381    m.insert("genshi", "Genshi");
382    m.insert("gentoo ebuild", "Shell");
383    m.insert("gentoo eclass", "Shell");
384    m.insert("geojson", "JSON");
385    m.insert("gerber image", "Gerber Image");
386    m.insert("gettext catalog", "Gettext Catalog");
387    m.insert("gf", "Grammatical Framework");
388    m.insert("gherkin", "Gherkin");
389    m.insert("git attributes", "Git Attributes");
390    m.insert("git blame ignore revs", "Git Revision List");
391    m.insert("git commit", "Git Commit");
392    m.insert("git config", "INI");
393    m.insert("git revision list", "Git Revision List");
394    m.insert("git-ignore", "Ignore List");
395    m.insert("gitattributes", "Git Attributes");
396    m.insert("gitconfig", "INI");
397    m.insert("gitignore", "Ignore List");
398    m.insert("gitmodules", "INI");
399    m.insert("gjs", "JavaScript");
400    m.insert("gleam", "Gleam");
401    m.insert("glimmer js", "JavaScript");
402    m.insert("glimmer ts", "TypeScript");
403    m.insert("glsl", "GLSL");
404    m.insert("glyph", "Glyph");
405    m.insert("glyph bitmap distribution format", "Glyph Bitmap Distribution Format");
406    m.insert("gn", "GN");
407    m.insert("gnu asm", "Assembly");
408    m.insert("gnuplot", "Gnuplot");
409    m.insert("go", "Go");
410    m.insert("go checksums", "Go Checksums");
411    m.insert("go mod", "Go Module");
412    m.insert("go module", "Go Module");
413    m.insert("go sum", "Go Checksums");
414    m.insert("go template", "Go Template");
415    m.insert("go work", "Go Workspace");
416    m.insert("go work sum", "Go Checksums");
417    m.insert("go workspace", "Go Workspace");
418    m.insert("go.mod", "Go Module");
419    m.insert("go.sum", "Go Checksums");
420    m.insert("go.work", "Go Workspace");
421    m.insert("go.work.sum", "Go Checksums");
422    m.insert("godot resource", "Godot Resource");
423    m.insert("golang", "Go");
424    m.insert("golo", "Golo");
425    m.insert("gosu", "Gosu");
426    m.insert("gotmpl", "Go Template");
427    m.insert("grace", "Grace");
428    m.insert("gradle", "Gradle");
429    m.insert("gradle kotlin dsl", "Gradle");
430    m.insert("grammatical framework", "Grammatical Framework");
431    m.insert("graph modeling language", "Graph Modeling Language");
432    m.insert("graphql", "GraphQL");
433    m.insert("graphviz (dot)", "Graphviz (DOT)");
434    m.insert("groff", "Roff");
435    m.insert("groovy", "Groovy");
436    m.insert("groovy server pages", "Groovy");
437    m.insert("gsc", "GSC");
438    m.insert("gsp", "Groovy");
439    m.insert("gts", "TypeScript");
440    m.insert("hack", "Hack");
441    m.insert("haml", "Haml");
442    m.insert("handlebars", "Handlebars");
443    m.insert("haproxy", "HAProxy");
444    m.insert("harbour", "Harbour");
445    m.insert("hare", "Hare");
446    m.insert("hash", "Checksums");
447    m.insert("hashes", "Checksums");
448    m.insert("hashicorp configuration language", "HCL");
449    m.insert("haskell", "Haskell");
450    m.insert("haxe", "Haxe");
451    m.insert("hbs", "Handlebars");
452    m.insert("hcl", "HCL");
453    m.insert("heex", "HTML");
454    m.insert("help", "Vim Help File");
455    m.insert("hip", "HIP");
456    m.insert("hiveql", "HiveQL");
457    m.insert("hls playlist", "M3U");
458    m.insert("hlsl", "HLSL");
459    m.insert("hocon", "HOCON");
460    m.insert("holyc", "HolyC");
461    m.insert("hoon", "hoon");
462    m.insert("hosts", "Hosts File");
463    m.insert("hosts file", "Hosts File");
464    m.insert("html", "HTML");
465    m.insert("html+django", "Jinja");
466    m.insert("html+ecr", "HTML");
467    m.insert("html+eex", "HTML");
468    m.insert("html+erb", "HTML");
469    m.insert("html+jinja", "Jinja");
470    m.insert("html+php", "HTML");
471    m.insert("html+razor", "HTML");
472    m.insert("html+ruby", "HTML");
473    m.insert("htmlbars", "Handlebars");
474    m.insert("htmldjango", "Jinja");
475    m.insert("http", "HTTP");
476    m.insert("hurl", "Hurl");
477    m.insert("hxml", "HXML");
478    m.insert("hy", "Hy");
479    m.insert("hylang", "Hy");
480    m.insert("hyphy", "HyPhy");
481    m.insert("i7", "Inform 7");
482    m.insert("ical", "iCalendar");
483    m.insert("icalendar", "iCalendar");
484    m.insert("idl", "IDL");
485    m.insert("idris", "Idris");
486    m.insert("ignore", "Ignore List");
487    m.insert("ignore list", "Ignore List");
488    m.insert("igor", "IGOR Pro");
489    m.insert("igor pro", "IGOR Pro");
490    m.insert("igorpro", "IGOR Pro");
491    m.insert("ijm", "ImageJ Macro");
492    m.insert("ile rpg", "RPGLE");
493    m.insert("imagej macro", "ImageJ Macro");
494    m.insert("imba", "Imba");
495    m.insert("inc", "PHP");
496    m.insert("inform 7", "Inform 7");
497    m.insert("inform7", "Inform 7");
498    m.insert("ini", "INI");
499    m.insert("ink", "Ink");
500    m.insert("inno setup", "Inno Setup");
501    m.insert("inputrc", "INI");
502    m.insert("io", "Io");
503    m.insert("ioke", "Ioke");
504    m.insert("ipython notebook", "Jupyter Notebook");
505    m.insert("irc", "IRC log");
506    m.insert("irc log", "IRC log");
507    m.insert("irc logs", "IRC log");
508    m.insert("isabelle", "Isabelle");
509    m.insert("isabelle root", "Isabelle");
510    m.insert("ispc", "ISPC");
511    m.insert("j", "J");
512    m.insert("jac", "Jac");
513    m.insert("jai", "Jai");
514    m.insert("janet", "Janet");
515    m.insert("jar manifest", "JAR Manifest");
516    m.insert("jasmin", "Jasmin");
517    m.insert("java", "Java");
518    m.insert("java properties", "Java Properties");
519    m.insert("java server page", "Groovy");
520    m.insert("java server pages", "Java");
521    m.insert("java template engine", "Java");
522    m.insert("javascript", "JavaScript");
523    m.insert("javascript+erb", "JavaScript");
524    m.insert("jcl", "JCL");
525    m.insert("jest snapshot", "Jest Snapshot");
526    m.insert("jetbrains mps", "JetBrains MPS");
527    m.insert("jflex", "Lex");
528    m.insert("jinja", "Jinja");
529    m.insert("jison", "Yacc");
530    m.insert("jison lex", "Lex");
531    m.insert("jolie", "Jolie");
532    m.insert("jq", "jq");
533    m.insert("jruby", "Ruby");
534    m.insert("js", "JavaScript");
535    m.insert("json", "JSON");
536    m.insert("json with comments", "JSON");
537    m.insert("json5", "JSON5");
538    m.insert("jsonc", "JSON");
539    m.insert("jsoniq", "JSONiq");
540    m.insert("jsonl", "JSON");
541    m.insert("jsonld", "JSONLD");
542    m.insert("jsonnet", "Jsonnet");
543    m.insert("jsp", "Java");
544    m.insert("jte", "Java");
545    m.insert("julia", "Julia");
546    m.insert("julia repl", "Julia");
547    m.insert("jupyter notebook", "Jupyter Notebook");
548    m.insert("just", "Just");
549    m.insert("justfile", "Just");
550    m.insert("kaitai struct", "Kaitai Struct");
551    m.insert("kak", "KakouneScript");
552    m.insert("kakounescript", "KakouneScript");
553    m.insert("kakscript", "KakouneScript");
554    m.insert("kcl", "KCL");
555    m.insert("kdl", "KDL");
556    m.insert("kerboscript", "KerboScript");
557    m.insert("keyvalues", "Valve Data Format");
558    m.insert("kframework", "KFramework");
559    m.insert("kicad layout", "KiCad Layout");
560    m.insert("kicad legacy layout", "KiCad Legacy Layout");
561    m.insert("kicad schematic", "KiCad Schematic");
562    m.insert("kickstart", "Kickstart");
563    m.insert("kit", "Kit");
564    m.insert("koka", "Koka");
565    m.insert("kolmafia ash", "KoLmafia ASH");
566    m.insert("kotlin", "Kotlin");
567    m.insert("krl", "KRL");
568    m.insert("ksy", "Kaitai Struct");
569    m.insert("kusto", "Kusto");
570    m.insert("kvlang", "kvlang");
571    m.insert("labview", "LabVIEW");
572    m.insert("lambdapi", "Lambdapi");
573    m.insert("langium", "Langium");
574    m.insert("lark", "Lark");
575    m.insert("lasso", "Lasso");
576    m.insert("lassoscript", "Lasso");
577    m.insert("latex", "TeX");
578    m.insert("latte", "Latte");
579    m.insert("lean", "Lean");
580    m.insert("lean 4", "Lean");
581    m.insert("lean4", "Lean");
582    m.insert("leex", "HTML");
583    m.insert("leo", "Leo");
584    m.insert("less", "Less");
585    m.insert("less-css", "Less");
586    m.insert("lex", "Lex");
587    m.insert("lfe", "LFE");
588    m.insert("lhaskell", "Haskell");
589    m.insert("lhs", "Haskell");
590    m.insert("ligolang", "LigoLANG");
591    m.insert("lilypond", "LilyPond");
592    m.insert("limbo", "Limbo");
593    m.insert("linear programming", "Linear Programming");
594    m.insert("linker script", "Linker Script");
595    m.insert("linux kernel module", "Linux Kernel Module");
596    m.insert("liquid", "Liquid");
597    m.insert("lisp", "Common Lisp");
598    m.insert("litcoffee", "CoffeeScript");
599    m.insert("literate agda", "Agda");
600    m.insert("literate coffeescript", "CoffeeScript");
601    m.insert("literate haskell", "Haskell");
602    m.insert("live-script", "LiveScript");
603    m.insert("livecode script", "LiveCode Script");
604    m.insert("livescript", "LiveScript");
605    m.insert("llvm", "LLVM");
606    m.insert("logos", "Logos");
607    m.insert("logtalk", "Logtalk");
608    m.insert("lolcode", "LOLCODE");
609    m.insert("lookml", "LookML");
610    m.insert("loomscript", "LoomScript");
611    m.insert("ls", "LiveScript");
612    m.insert("lsl", "LSL");
613    m.insert("ltspice symbol", "LTspice Symbol");
614    m.insert("lua", "Lua");
615    m.insert("luau", "Luau");
616    m.insert("m", "M");
617    m.insert("m2", "Macaulay2");
618    m.insert("m3u", "M3U");
619    m.insert("m3u playlist", "M3U");
620    m.insert("m4", "M4");
621    m.insert("m4sugar", "M4");
622    m.insert("m68k", "Assembly");
623    m.insert("macaulay2", "Macaulay2");
624    m.insert("macruby", "Ruby");
625    m.insert("mail", "E-mail");
626    m.insert("make", "Makefile");
627    m.insert("makefile", "Makefile");
628    m.insert("mako", "Mako");
629    m.insert("man", "Roff");
630    m.insert("man page", "Roff");
631    m.insert("man-page", "Roff");
632    m.insert("manpage", "Roff");
633    m.insert("markdown", "Markdown");
634    m.insert("marko", "Marko");
635    m.insert("markojs", "Marko");
636    m.insert("mask", "Mask");
637    m.insert("mathematica", "Wolfram Language");
638    m.insert("mathematical programming system", "Mathematical Programming System");
639    m.insert("matlab", "MATLAB");
640    m.insert("maven pom", "XML");
641    m.insert("max", "Max");
642    m.insert("max/msp", "Max");
643    m.insert("maxmsp", "Max");
644    m.insert("maxscript", "MAXScript");
645    m.insert("mbox", "E-mail");
646    m.insert("mcfunction", "mcfunction");
647    m.insert("md", "Markdown");
648    m.insert("mdoc", "Roff");
649    m.insert("mdsvex", "mdsvex");
650    m.insert("mdx", "MDX");
651    m.insert("mediawiki", "Wikitext");
652    m.insert("mercury", "Mercury");
653    m.insert("mermaid", "Mermaid");
654    m.insert("mermaid example", "Mermaid");
655    m.insert("meson", "Meson");
656    m.insert("metal", "Metal");
657    m.insert("mf", "Makefile");
658    m.insert(
659        "microsoft developer studio project",
660        "Microsoft Developer Studio Project",
661    );
662    m.insert("microsoft visual studio solution", "Microsoft Visual Studio Solution");
663    m.insert("minid", "MiniD");
664    m.insert("miniyaml", "MiniYAML");
665    m.insert("minizinc", "MiniZinc");
666    m.insert("minizinc data", "MiniZinc Data");
667    m.insert("mint", "Mint");
668    m.insert("mirah", "Mirah");
669    m.insert("mirc script", "mIRC Script");
670    m.insert("mlir", "MLIR");
671    m.insert("mma", "Wolfram Language");
672    m.insert("modelica", "Modelica");
673    m.insert("modula-2", "Modula-2");
674    m.insert("modula-3", "Modula-3");
675    m.insert("module management system", "Module Management System");
676    m.insert("mojo", "Mojo");
677    m.insert("monkey", "Monkey");
678    m.insert("monkey c", "Monkey C");
679    m.insert("moocode", "Moocode");
680    m.insert("moonbit", "MoonBit");
681    m.insert("moonscript", "MoonScript");
682    m.insert("motoko", "Motoko");
683    m.insert("motorola 68k assembly", "Assembly");
684    m.insert("move", "Move");
685    m.insert("mps", "JetBrains MPS");
686    m.insert("mql4", "MQL4");
687    m.insert("mql5", "MQL5");
688    m.insert("mtml", "MTML");
689    m.insert("muf", "Forth");
690    m.insert("mumps", "M");
691    m.insert("mupad", "mupad");
692    m.insert("muse", "Muse");
693    m.insert("mustache", "Mustache");
694    m.insert("myghty", "Myghty");
695    m.insert("nanorc", "INI");
696    m.insert("nargo", "Noir");
697    m.insert("nasal", "Nasal");
698    m.insert("nasl", "NASL");
699    m.insert("nasm", "Assembly");
700    m.insert("ncl", "NCL");
701    m.insert("ne-on", "NEON");
702    m.insert("nearley", "Nearley");
703    m.insert("nemerle", "Nemerle");
704    m.insert("neon", "NEON");
705    m.insert("neosnippet", "Vim Snippet");
706    m.insert("nesc", "nesC");
707    m.insert("netlinx", "NetLinx");
708    m.insert("netlinx+erb", "NetLinx+ERB");
709    m.insert("netlogo", "NetLogo");
710    m.insert("nette object notation", "NEON");
711    m.insert("newlisp", "NewLisp");
712    m.insert("nextflow", "Nextflow");
713    m.insert("nginx", "Nginx");
714    m.insert("nginx configuration file", "Nginx");
715    m.insert("nickel", "Nickel");
716    m.insert("nim", "Nim");
717    m.insert("ninja", "Ninja");
718    m.insert("nit", "Nit");
719    m.insert("nix", "Nix");
720    m.insert("nixos", "Nix");
721    m.insert("njk", "Nunjucks");
722    m.insert("nl", "NL");
723    m.insert("nmodl", "NMODL");
724    m.insert("node", "JavaScript");
725    m.insert("noir", "Noir");
726    m.insert("npm config", "INI");
727    m.insert("npmrc", "INI");
728    m.insert("nroff", "Roff");
729    m.insert("nsis", "NSIS");
730    m.insert("nu", "Nu");
731    m.insert("nu-script", "Nushell");
732    m.insert("numpy", "Python");
733    m.insert("nunjucks", "Nunjucks");
734    m.insert("nush", "Nu");
735    m.insert("nushell", "Nushell");
736    m.insert("nushell-script", "Nushell");
737    m.insert("nvim", "Vim Script");
738    m.insert("nwscript", "NWScript");
739    m.insert("oasv2", "OpenAPI Specification v2");
740    m.insert("oasv2-json", "OpenAPI Specification v2");
741    m.insert("oasv2-yaml", "OpenAPI Specification v2");
742    m.insert("oasv3", "OpenAPI Specification v3");
743    m.insert("oasv3-json", "OpenAPI Specification v3");
744    m.insert("oasv3-yaml", "OpenAPI Specification v3");
745    m.insert("oberon", "Oberon");
746    m.insert("obj-c", "Objective-C");
747    m.insert("obj-c++", "Objective-C++");
748    m.insert("obj-j", "Objective-J");
749    m.insert("objc", "Objective-C");
750    m.insert("objc++", "Objective-C++");
751    m.insert("objdump", "ObjDump");
752    m.insert("object data instance notation", "Object Data Instance Notation");
753    m.insert("objective-c", "Objective-C");
754    m.insert("objective-c++", "Objective-C++");
755    m.insert("objective-j", "Objective-J");
756    m.insert("objectivec", "Objective-C");
757    m.insert("objectivec++", "Objective-C++");
758    m.insert("objectivej", "Objective-J");
759    m.insert("objectpascal", "Pascal");
760    m.insert("objectscript", "ObjectScript");
761    m.insert("objj", "Objective-J");
762    m.insert("ocaml", "OCaml");
763    m.insert("octave", "MATLAB");
764    m.insert("odin", "Odin");
765    m.insert("odin-lang", "Odin");
766    m.insert("odinlang", "Odin");
767    m.insert("omgrofl", "Omgrofl");
768    m.insert("omnet++ msg", "OMNeT++ MSG");
769    m.insert("omnet++ ned", "OMNeT++ NED");
770    m.insert("omnetpp-msg", "OMNeT++ MSG");
771    m.insert("omnetpp-ned", "OMNeT++ NED");
772    m.insert("oncrpc", "RPC");
773    m.insert("ooc", "ooc");
774    m.insert("opa", "Opa");
775    m.insert("opal", "Opal");
776    m.insert("open policy agent", "Open Policy Agent");
777    m.insert("openapi specification v2", "OpenAPI Specification v2");
778    m.insert("openapi specification v3", "OpenAPI Specification v3");
779    m.insert("opencl", "C");
780    m.insert("openedge", "OpenEdge ABL");
781    m.insert("openedge abl", "OpenEdge ABL");
782    m.insert("openqasm", "OpenQASM");
783    m.insert("openrc", "Shell");
784    m.insert("openrc runscript", "Shell");
785    m.insert("openscad", "OpenSCAD");
786    m.insert("openstep property list", "OpenStep Property List");
787    m.insert("opentofu", "HCL");
788    m.insert("opentype feature file", "OpenType Feature File");
789    m.insert("option list", "Option List");
790    m.insert("opts", "Option List");
791    m.insert("org", "Org");
792    m.insert("osascript", "AppleScript");
793    m.insert("overpassql", "OverpassQL");
794    m.insert("ox", "Ox");
795    m.insert("oxygene", "Oxygene");
796    m.insert("oz", "Oz");
797    m.insert("p4", "P4");
798    m.insert("pact", "Pact");
799    m.insert("pan", "Pan");
800    m.insert("pandoc", "Markdown");
801    m.insert("papyrus", "Papyrus");
802    m.insert("parrot", "Parrot");
803    m.insert("parrot assembly", "Parrot");
804    m.insert("parrot internal representation", "Parrot");
805    m.insert("pascal", "Pascal");
806    m.insert("pasm", "Parrot");
807    m.insert("pawn", "Pawn");
808    m.insert("pcbnew", "KiCad Layout");
809    m.insert("pddl", "PDDL");
810    m.insert("peg.js", "PEG.js");
811    m.insert("pep8", "Pep8");
812    m.insert("perl", "Perl");
813    m.insert("perl-6", "Raku");
814    m.insert("perl6", "Raku");
815    m.insert("php", "PHP");
816    m.insert("pic", "Roff");
817    m.insert("pickle", "Pickle");
818    m.insert("picolisp", "PicoLisp");
819    m.insert("piglatin", "PigLatin");
820    m.insert("pikchr", "Roff");
821    m.insert("pike", "Pike");
822    m.insert("pip requirements", "Pip Requirements");
823    m.insert("pir", "Parrot");
824    m.insert("pkl", "Pkl");
825    m.insert("plain text", "Text");
826    m.insert("plantuml", "PlantUML");
827    m.insert("plpgsql", "PLpgSQL");
828    m.insert("plsql", "PLSQL");
829    m.insert("pod", "Pod");
830    m.insert("pod 6", "Pod 6");
831    m.insert("pogoscript", "PogoScript");
832    m.insert("polar", "Polar");
833    m.insert("pony", "Pony");
834    m.insert("portugol", "Portugol");
835    m.insert("posh", "PowerShell");
836    m.insert("postcss", "CSS");
837    m.insert("postscr", "PostScript");
838    m.insert("postscript", "PostScript");
839    m.insert("pot", "Gettext Catalog");
840    m.insert("pov-ray", "POV-Ray SDL");
841    m.insert("pov-ray sdl", "POV-Ray SDL");
842    m.insert("povray", "POV-Ray SDL");
843    m.insert("powerbuilder", "PowerBuilder");
844    m.insert("powershell", "PowerShell");
845    m.insert("praat", "Praat");
846    m.insert("prisma", "Prisma");
847    m.insert("processing", "Processing");
848    m.insert("procfile", "Procfile");
849    m.insert("progress", "OpenEdge ABL");
850    m.insert("proguard", "Proguard");
851    m.insert("prolog", "Prolog");
852    m.insert("promela", "Promela");
853    m.insert("propeller spin", "Propeller Spin");
854    m.insert("proto", "Protocol Buffer");
855    m.insert("protobuf", "Protocol Buffer");
856    m.insert("protobuf text format", "Protocol Buffer Text Format");
857    m.insert("protocol buffer", "Protocol Buffer");
858    m.insert("protocol buffer text format", "Protocol Buffer Text Format");
859    m.insert("protocol buffers", "Protocol Buffer");
860    m.insert("public key", "Public Key");
861    m.insert("pug", "Pug");
862    m.insert("puppet", "Puppet");
863    m.insert("pure data", "Pure Data");
864    m.insert("purebasic", "PureBasic");
865    m.insert("purescript", "PureScript");
866    m.insert("pwsh", "PowerShell");
867    m.insert("pycon", "Python");
868    m.insert("pyret", "Pyret");
869    m.insert("pyrex", "Cython");
870    m.insert("python", "Python");
871    m.insert("python console", "Python");
872    m.insert("python traceback", "Python");
873    m.insert("python3", "Python");
874    m.insert("q", "q");
875    m.insert("q#", "Q#");
876    m.insert("qb", "QuickBASIC");
877    m.insert("qb64", "QuickBASIC");
878    m.insert("qbasic", "QuickBASIC");
879    m.insert("ql", "CodeQL");
880    m.insert("qmake", "QMake");
881    m.insert("qml", "QML");
882    m.insert("qsharp", "Q#");
883    m.insert("qt script", "Qt Script");
884    m.insert("quake", "Quake");
885    m.insert("quakec", "QuakeC");
886    m.insert("quickbasic", "QuickBASIC");
887    m.insert("r", "R");
888    m.insert("racket", "Racket");
889    m.insert("ragel", "Ragel");
890    m.insert("ragel-rb", "Ragel");
891    m.insert("ragel-ruby", "Ragel");
892    m.insert("rake", "Ruby");
893    m.insert("raku", "Raku");
894    m.insert("raml", "RAML");
895    m.insert("rascal", "Rascal");
896    m.insert("rascript", "RAScript");
897    m.insert("raw", "Raw token data");
898    m.insert("raw token data", "Raw token data");
899    m.insert("razor", "HTML");
900    m.insert("rb", "Ruby");
901    m.insert("rbs", "Ruby");
902    m.insert("rbx", "Ruby");
903    m.insert("rdoc", "RDoc");
904    m.insert("readline", "INI");
905    m.insert("readline config", "INI");
906    m.insert("realbasic", "REALbasic");
907    m.insert("reason", "Reason");
908    m.insert("reasonligo", "LigoLANG");
909    m.insert("rebol", "Rebol");
910    m.insert("record jar", "Record Jar");
911    m.insert("red", "Red");
912    m.insert("red/system", "Red");
913    m.insert("redcode", "Redcode");
914    m.insert("redirect rules", "Redirect Rules");
915    m.insert("redirects", "Redirect Rules");
916    m.insert("regex", "Regular Expression");
917    m.insert("regexp", "Regular Expression");
918    m.insert("regular expression", "Regular Expression");
919    m.insert("ren'py", "Ren'Py");
920    m.insert("renderscript", "RenderScript");
921    m.insert("renpy", "Ren'Py");
922    m.insert("rescript", "ReScript");
923    m.insert("restructuredtext", "reStructuredText");
924    m.insert("rexx", "REXX");
925    m.insert("rez", "Rez");
926    m.insert("rhtml", "HTML");
927    m.insert("rich text format", "Rich Text Format");
928    m.insert("ring", "Ring");
929    m.insert("riot", "Riot");
930    m.insert("rmarkdown", "RMarkdown");
931    m.insert("robotframework", "RobotFramework");
932    m.insert("robots", "robots.txt");
933    m.insert("robots txt", "robots.txt");
934    m.insert("robots.txt", "robots.txt");
935    m.insert("roc", "Roc");
936    m.insert("rocq", "Rocq Prover");
937    m.insert("rocq prover", "Rocq Prover");
938    m.insert("roff", "Roff");
939    m.insert("roff manpage", "Roff");
940    m.insert("ron", "RON");
941    m.insert("ros interface", "ROS Interface");
942    m.insert("rosmsg", "ROS Interface");
943    m.insert("rouge", "Rouge");
944    m.insert("routeros script", "RouterOS Script");
945    m.insert("rpc", "RPC");
946    m.insert("rpcgen", "RPC");
947    m.insert("rpgle", "RPGLE");
948    m.insert("rpm spec", "RPM Spec");
949    m.insert("rs", "Rust");
950    m.insert("rs-274x", "Gerber Image");
951    m.insert("rscript", "R");
952    m.insert("rss", "XML");
953    m.insert("rst", "reStructuredText");
954    m.insert("ruby", "Ruby");
955    m.insert("runoff", "RUNOFF");
956    m.insert("rust", "Rust");
957    m.insert("rusthon", "Python");
958    m.insert("sage", "Sage");
959    m.insert("sail", "Sail");
960    m.insert("salt", "SaltStack");
961    m.insert("saltstack", "SaltStack");
962    m.insert("saltstate", "SaltStack");
963    m.insert("sarif", "JSON");
964    m.insert("sas", "SAS");
965    m.insert("sass", "Sass");
966    m.insert("scala", "Scala");
967    m.insert("scaml", "Scaml");
968    m.insert("scenic", "Scenic");
969    m.insert("scheme", "Scheme");
970    m.insert("scilab", "Scilab");
971    m.insert("scss", "SCSS");
972    m.insert("sdc", "Tcl");
973    m.insert("sed", "sed");
974    m.insert("self", "Self");
975    m.insert("selinux kernel policy language", "SELinux Policy");
976    m.insert("selinux policy", "SELinux Policy");
977    m.insert("sepolicy", "SELinux Policy");
978    m.insert("sfv", "Checksums");
979    m.insert("sh", "Shell");
980    m.insert("shaderlab", "ShaderLab");
981    m.insert("shell", "Shell");
982    m.insert("shell-script", "Shell");
983    m.insert("shellcheck config", "ShellCheck Config");
984    m.insert("shellcheckrc", "ShellCheck Config");
985    m.insert("shellsession", "ShellSession");
986    m.insert("shen", "Shen");
987    m.insert("sieve", "Sieve");
988    m.insert("simple file verification", "Checksums");
989    m.insert("singularity", "Singularity");
990    m.insert("slang", "Slang");
991    m.insert("slash", "Slash");
992    m.insert("slice", "Slice");
993    m.insert("slim", "Slim");
994    m.insert("slint", "Slint");
995    m.insert("smali", "Smali");
996    m.insert("smalltalk", "Smalltalk");
997    m.insert("smarty", "Smarty");
998    m.insert("smithy", "Smithy");
999    m.insert("sml", "Standard ML");
1000    m.insert("smpl", "SmPL");
1001    m.insert("smt", "SMT");
1002    m.insert("snakefile", "Python");
1003    m.insert("snakemake", "Python");
1004    m.insert("snipmate", "Vim Snippet");
1005    m.insert("snippet", "YASnippet");
1006    m.insert("solidity", "Solidity");
1007    m.insert("soong", "Soong");
1008    m.insert("sourcemod", "SourcePawn");
1009    m.insert("sourcepawn", "SourcePawn");
1010    m.insert("soy", "Closure Templates");
1011    m.insert("sparql", "SPARQL");
1012    m.insert("specfile", "RPM Spec");
1013    m.insert("spline font database", "Spline Font Database");
1014    m.insert("splus", "R");
1015    m.insert("sqf", "SQF");
1016    m.insert("sql", "SQL");
1017    m.insert("sqlpl", "SQLPL");
1018    m.insert("sqlrpgle", "RPGLE");
1019    m.insert("squeak", "Smalltalk");
1020    m.insert("squirrel", "Squirrel");
1021    m.insert("srecode template", "SRecode Template");
1022    m.insert("ssh config", "INI");
1023    m.insert("ssh_config", "INI");
1024    m.insert("sshconfig", "INI");
1025    m.insert("sshd_config", "INI");
1026    m.insert("sshdconfig", "INI");
1027    m.insert("stan", "Stan");
1028    m.insert("standard ml", "Standard ML");
1029    m.insert("star", "STAR");
1030    m.insert("starlark", "Starlark");
1031    m.insert("stata", "Stata");
1032    m.insert("stl", "STL");
1033    m.insert("stla", "STL");
1034    m.insert("ston", "Smalltalk");
1035    m.insert("stringtemplate", "StringTemplate");
1036    m.insert("stylus", "Stylus");
1037    m.insert("subrip text", "SubRip Text");
1038    m.insert("sugarss", "SugarSS");
1039    m.insert("sum", "Checksums");
1040    m.insert("sums", "Checksums");
1041    m.insert("supercollider", "SuperCollider");
1042    m.insert("surql", "SurrealQL");
1043    m.insert("surrealql", "SurrealQL");
1044    m.insert("survex data", "Survex data");
1045    m.insert("svelte", "Svelte");
1046    m.insert("svg", "SVG");
1047    m.insert("sway", "Sway");
1048    m.insert("sweave", "Sweave");
1049    m.insert("swift", "Swift");
1050    m.insert("swig", "SWIG");
1051    m.insert("systemverilog", "SystemVerilog");
1052    m.insert("tab-seperated values", "TSV");
1053    m.insert("tabular model definition language", "TMDL");
1054    m.insert("tact", "Tact");
1055    m.insert("talon", "Talon");
1056    m.insert("tcl", "Tcl");
1057    m.insert("tcsh", "Shell");
1058    m.insert("tea", "Tea");
1059    m.insert("teal", "Teal");
1060    m.insert("templ", "templ");
1061    m.insert("terra", "Terra");
1062    m.insert("terraform", "HCL");
1063    m.insert("terraform template", "HCL");
1064    m.insert("tex", "TeX");
1065    m.insert("texinfo", "Texinfo");
1066    m.insert("text", "Text");
1067    m.insert("text proto", "Protocol Buffer Text Format");
1068    m.insert("textgrid", "TextGrid");
1069    m.insert("textile", "Textile");
1070    m.insert("textmate properties", "TextMate Properties");
1071    m.insert("thrift", "Thrift");
1072    m.insert("ti program", "TI Program");
1073    m.insert("tl", "Type Language");
1074    m.insert("tl-verilog", "TL-Verilog");
1075    m.insert("tla", "TLA");
1076    m.insert("tm-properties", "TextMate Properties");
1077    m.insert("tmdl", "TMDL");
1078    m.insert("toit", "Toit");
1079    m.insert("toml", "TOML");
1080    m.insert("topojson", "JSON");
1081    m.insert("tor config", "Tor Config");
1082    m.insert("torrc", "Tor Config");
1083    m.insert("traveling salesman problem", "TSPLIB data");
1084    m.insert("travelling salesman problem", "TSPLIB data");
1085    m.insert("tree-sitter query", "Tree-sitter Query");
1086    m.insert("troff", "Roff");
1087    m.insert("ts", "TypeScript");
1088    m.insert("tsp", "TypeSpec");
1089    m.insert("tsplib data", "TSPLIB data");
1090    m.insert("tsq", "Tree-sitter Query");
1091    m.insert("tsql", "TSQL");
1092    m.insert("tsv", "TSV");
1093    m.insert("tsx", "TypeScript");
1094    m.insert("turing", "Turing");
1095    m.insert("turtle", "Turtle");
1096    m.insert("twig", "Twig");
1097    m.insert("txl", "TXL");
1098    m.insert("typ", "Typst");
1099    m.insert("type language", "Type Language");
1100    m.insert("typescript", "TypeScript");
1101    m.insert("typespec", "TypeSpec");
1102    m.insert("typst", "Typst");
1103    m.insert("udiff", "Diff");
1104    m.insert("ultisnip", "Vim Snippet");
1105    m.insert("ultisnips", "Vim Snippet");
1106    m.insert("unified parallel c", "C");
1107    m.insert("unity3d asset", "Unity3D Asset");
1108    m.insert("unix asm", "Assembly");
1109    m.insert("unix assembly", "Assembly");
1110    m.insert("uno", "Uno");
1111    m.insert("unrealscript", "UnrealScript");
1112    m.insert("untyped plutus core", "Untyped Plutus Core");
1113    m.insert("ur", "UrWeb");
1114    m.insert("ur/web", "UrWeb");
1115    m.insert("urweb", "UrWeb");
1116    m.insert("v", "V");
1117    m.insert("vala", "Vala");
1118    m.insert("valve data format", "Valve Data Format");
1119    m.insert("vb .net", "Visual Basic .NET");
1120    m.insert("vb 6", "Visual Basic 6.0");
1121    m.insert("vb.net", "Visual Basic .NET");
1122    m.insert("vb6", "Visual Basic 6.0");
1123    m.insert("vba", "VBA");
1124    m.insert("vbnet", "Visual Basic .NET");
1125    m.insert("vbscript", "VBScript");
1126    m.insert("vcard", "vCard");
1127    m.insert("vcl", "VCL");
1128    m.insert("vdf", "Valve Data Format");
1129    m.insert("velocity", "Velocity Template Language");
1130    m.insert("velocity template language", "Velocity Template Language");
1131    m.insert("vento", "Vento");
1132    m.insert("verilog", "Verilog");
1133    m.insert("vhdl", "VHDL");
1134    m.insert("vim", "Vim Script");
1135    m.insert("vim help file", "Vim Help File");
1136    m.insert("vim script", "Vim Script");
1137    m.insert("vim snippet", "Vim Snippet");
1138    m.insert("vimhelp", "Vim Help File");
1139    m.insert("viml", "Vim Script");
1140    m.insert("vimscript", "Vim Script");
1141    m.insert("virtual contact file", "vCard");
1142    m.insert("visual basic", "Visual Basic .NET");
1143    m.insert("visual basic .net", "Visual Basic .NET");
1144    m.insert("visual basic 6", "Visual Basic 6.0");
1145    m.insert("visual basic 6.0", "Visual Basic 6.0");
1146    m.insert("visual basic classic", "Visual Basic 6.0");
1147    m.insert("visual basic for applications", "VBA");
1148    m.insert("vlang", "V");
1149    m.insert("volt", "Volt");
1150    m.insert("vtl", "Velocity Template Language");
1151    m.insert("vtt", "WebVTT");
1152    m.insert("vue", "Vue");
1153    m.insert("vyper", "Vyper");
1154    m.insert("wasm", "WebAssembly");
1155    m.insert("wast", "WebAssembly");
1156    m.insert("wavefront material", "Wavefront Material");
1157    m.insert("wavefront object", "Wavefront Object");
1158    m.insert("wdl", "WDL");
1159    m.insert("web ontology language", "Web Ontology Language");
1160    m.insert("webassembly", "WebAssembly");
1161    m.insert("webassembly interface type", "WebAssembly Interface Type");
1162    m.insert("webidl", "WebIDL");
1163    m.insert("webvtt", "WebVTT");
1164    m.insert("wget config", "INI");
1165    m.insert("wgetrc", "INI");
1166    m.insert("wgsl", "WGSL");
1167    m.insert("whiley", "Whiley");
1168    m.insert("wiki", "Wikitext");
1169    m.insert("wikitext", "Wikitext");
1170    m.insert("win32 message file", "Win32 Message File");
1171    m.insert("winbatch", "Batchfile");
1172    m.insert("windows registry entries", "Windows Registry Entries");
1173    m.insert("wisp", "wisp");
1174    m.insert("wit", "WebAssembly Interface Type");
1175    m.insert("witcher script", "Witcher Script");
1176    m.insert("wl", "Wolfram Language");
1177    m.insert("wolfram", "Wolfram Language");
1178    m.insert("wolfram lang", "Wolfram Language");
1179    m.insert("wolfram language", "Wolfram Language");
1180    m.insert("wollok", "Wollok");
1181    m.insert("workflow description language", "WDL");
1182    m.insert("world of warcraft addon data", "World of Warcraft Addon Data");
1183    m.insert("wren", "Wren");
1184    m.insert("wrenlang", "Wren");
1185    m.insert("wsdl", "XML");
1186    m.insert("x bitmap", "C");
1187    m.insert("x font directory index", "X Font Directory Index");
1188    m.insert("x pixmap", "C");
1189    m.insert("x10", "X10");
1190    m.insert("xbase", "xBase");
1191    m.insert("xbm", "C");
1192    m.insert("xc", "XC");
1193    m.insert("xcompose", "XCompose");
1194    m.insert("xdc", "Tcl");
1195    m.insert("xdr", "RPC");
1196    m.insert("xhtml", "HTML");
1197    m.insert("xmake", "Xmake");
1198    m.insert("xml", "XML");
1199    m.insert("xml property list", "XML");
1200    m.insert("xml+genshi", "Genshi");
1201    m.insert("xml+kid", "Genshi");
1202    m.insert("xojo", "Xojo");
1203    m.insert("xonsh", "Xonsh");
1204    m.insert("xpages", "XPages");
1205    m.insert("xpm", "C");
1206    m.insert("xproc", "XProc");
1207    m.insert("xquery", "XQuery");
1208    m.insert("xs", "XS");
1209    m.insert("xsd", "XML");
1210    m.insert("xsl", "XSLT");
1211    m.insert("xslt", "XSLT");
1212    m.insert("xten", "X10");
1213    m.insert("xtend", "Xtend");
1214    m.insert("yacc", "Yacc");
1215    m.insert("yaml", "YAML");
1216    m.insert("yang", "YANG");
1217    m.insert("yara", "YARA");
1218    m.insert("yas", "YASnippet");
1219    m.insert("yasnippet", "YASnippet");
1220    m.insert("yml", "YAML");
1221    m.insert("yul", "Yul");
1222    m.insert("zap", "ZAP");
1223    m.insert("zeek", "Zeek");
1224    m.insert("zenscript", "ZenScript");
1225    m.insert("zephir", "Zephir");
1226    m.insert("zig", "Zig");
1227    m.insert("zil", "ZIL");
1228    m.insert("zimpl", "Zimpl");
1229    m.insert("zmodel", "Zmodel");
1230    m.insert("zsh", "Shell");
1231    m
1232});
1233
1234/// Maps canonical language name -> all valid aliases (for validation)
1235pub static CANONICAL_TO_ALIASES: LazyLock<HashMap<&'static str, HashSet<&'static str>>> = LazyLock::new(|| {
1236    let mut m = HashMap::with_capacity(720);
1237    m.insert("1C Enterprise", HashSet::from(["1c enterprise"]));
1238    m.insert("2-Dimensional Array", HashSet::from(["2-dimensional array"]));
1239    m.insert("4D", HashSet::from(["4d"]));
1240    m.insert("ABAP", HashSet::from(["abap"]));
1241    m.insert("ABAP CDS", HashSet::from(["abap cds"]));
1242    m.insert("ABNF", HashSet::from(["abnf"]));
1243    m.insert("AGS Script", HashSet::from(["ags", "ags script"]));
1244    m.insert("AIDL", HashSet::from(["aidl"]));
1245    m.insert("AL", HashSet::from(["al"]));
1246    m.insert("ALGOL", HashSet::from(["algol"]));
1247    m.insert("AMPL", HashSet::from(["ampl"]));
1248    m.insert("ANTLR", HashSet::from(["antlr"]));
1249    m.insert("API Blueprint", HashSet::from(["api blueprint"]));
1250    m.insert("APL", HashSet::from(["apl"]));
1251    m.insert("ASL", HashSet::from(["asl"]));
1252    m.insert("ASN.1", HashSet::from(["asn.1"]));
1253    m.insert("ASP.NET", HashSet::from(["asp.net", "aspx", "aspx-vb"]));
1254    m.insert("ATS", HashSet::from(["ats", "ats2"]));
1255    m.insert(
1256        "ActionScript",
1257        HashSet::from(["actionscript", "actionscript 3", "actionscript3", "as3"]),
1258    );
1259    m.insert("Ada", HashSet::from(["ada", "ada2005", "ada95"]));
1260    m.insert(
1261        "Adblock Filter List",
1262        HashSet::from(["ad block", "ad block filters", "adb", "adblock", "adblock filter list"]),
1263    );
1264    m.insert(
1265        "Adobe Font Metrics",
1266        HashSet::from([
1267            "acfm",
1268            "adobe composite font metrics",
1269            "adobe font metrics",
1270            "adobe multiple font metrics",
1271            "amfm",
1272        ]),
1273    );
1274    m.insert("Agda", HashSet::from(["agda", "literate agda"]));
1275    m.insert("Aiken", HashSet::from(["aiken"]));
1276    m.insert("Alloy", HashSet::from(["alloy"]));
1277    m.insert("Altium Designer", HashSet::from(["altium", "altium designer"]));
1278    m.insert("AngelScript", HashSet::from(["angelscript"]));
1279    m.insert("Answer Set Programming", HashSet::from(["answer set programming"]));
1280    m.insert("Ant Build System", HashSet::from(["ant build system"]));
1281    m.insert("Antlers", HashSet::from(["antlers"]));
1282    m.insert("ApacheConf", HashSet::from(["aconf", "apache", "apacheconf"]));
1283    m.insert("Apex", HashSet::from(["apex"]));
1284    m.insert("AppleScript", HashSet::from(["applescript", "osascript"]));
1285    m.insert("Arc", HashSet::from(["arc"]));
1286    m.insert("AsciiDoc", HashSet::from(["asciidoc"]));
1287    m.insert("AspectJ", HashSet::from(["aspectj"]));
1288    m.insert(
1289        "Assembly",
1290        HashSet::from([
1291            "apollo guidance computer",
1292            "asm",
1293            "assembly",
1294            "gas",
1295            "gnu asm",
1296            "m68k",
1297            "motorola 68k assembly",
1298            "nasm",
1299            "unix asm",
1300            "unix assembly",
1301        ]),
1302    );
1303    m.insert("Astro", HashSet::from(["astro"]));
1304    m.insert("Asymptote", HashSet::from(["asymptote"]));
1305    m.insert("Augeas", HashSet::from(["augeas"]));
1306    m.insert("AutoHotkey", HashSet::from(["ahk", "autohotkey"]));
1307    m.insert("AutoIt", HashSet::from(["au3", "autoit", "autoit3", "autoitscript"]));
1308    m.insert("Avro IDL", HashSet::from(["avro idl"]));
1309    m.insert("Awk", HashSet::from(["awk"]));
1310    m.insert("B (Formal Method)", HashSet::from(["b (formal method)"]));
1311    m.insert("B4X", HashSet::from(["b4x", "basic for android"]));
1312    m.insert("BASIC", HashSet::from(["basic"]));
1313    m.insert("BQN", HashSet::from(["bqn"]));
1314    m.insert("Ballerina", HashSet::from(["ballerina"]));
1315    m.insert(
1316        "Batchfile",
1317        HashSet::from(["bat", "batch", "batchfile", "dosbatch", "winbatch"]),
1318    );
1319    m.insert("Beef", HashSet::from(["beef"]));
1320    m.insert("Befunge", HashSet::from(["befunge"]));
1321    m.insert("Berry", HashSet::from(["be", "berry"]));
1322    m.insert("BibTeX Style", HashSet::from(["bibtex style"]));
1323    m.insert("Bicep", HashSet::from(["bicep"]));
1324    m.insert("Bikeshed", HashSet::from(["bikeshed"]));
1325    m.insert("BitBake", HashSet::from(["bitbake"]));
1326    m.insert("Blade", HashSet::from(["blade"]));
1327    m.insert(
1328        "BlitzBasic",
1329        HashSet::from(["b3d", "blitz3d", "blitzbasic", "blitzplus", "bplus"]),
1330    );
1331    m.insert("BlitzMax", HashSet::from(["blitzmax", "bmax"]));
1332    m.insert(
1333        "Bluespec",
1334        HashSet::from([
1335            "bh",
1336            "bluespec",
1337            "bluespec bh",
1338            "bluespec bsv",
1339            "bluespec classic",
1340            "bsv",
1341        ]),
1342    );
1343    m.insert("Boo", HashSet::from(["boo"]));
1344    m.insert("Boogie", HashSet::from(["boogie"]));
1345    m.insert("Brainfuck", HashSet::from(["brainfuck"]));
1346    m.insert("BrighterScript", HashSet::from(["brighterscript"]));
1347    m.insert("Brightscript", HashSet::from(["brightscript"]));
1348    m.insert("Browserslist", HashSet::from(["browserslist"]));
1349    m.insert("Bru", HashSet::from(["bru"]));
1350    m.insert("BuildStream", HashSet::from(["buildstream"]));
1351    m.insert(
1352        "C",
1353        HashSet::from([
1354            "c",
1355            "opencl",
1356            "unified parallel c",
1357            "x bitmap",
1358            "x pixmap",
1359            "xbm",
1360            "xpm",
1361        ]),
1362    );
1363    m.insert("C#", HashSet::from(["c#", "cake", "cakescript", "csharp"]));
1364    m.insert("C++", HashSet::from(["c++", "cpp"]));
1365    m.insert("C-ObjDump", HashSet::from(["c-objdump"]));
1366    m.insert("C3", HashSet::from(["c3"]));
1367    m.insert("CAP CDS", HashSet::from(["cap cds", "cds"]));
1368    m.insert("CIL", HashSet::from(["cil"]));
1369    m.insert("CLIPS", HashSet::from(["clips"]));
1370    m.insert("CMake", HashSet::from(["cmake"]));
1371    m.insert("COBOL", HashSet::from(["cobol"]));
1372    m.insert("CODEOWNERS", HashSet::from(["codeowners"]));
1373    m.insert("COLLADA", HashSet::from(["collada"]));
1374    m.insert("CQL", HashSet::from(["cql"]));
1375    m.insert("CSON", HashSet::from(["cson"]));
1376    m.insert("CSS", HashSet::from(["css", "postcss"]));
1377    m.insert("CSV", HashSet::from(["csv"]));
1378    m.insert("CUE", HashSet::from(["cue"]));
1379    m.insert("CWeb", HashSet::from(["cweb"]));
1380    m.insert("Cabal Config", HashSet::from(["cabal", "cabal config"]));
1381    m.insert("Caddyfile", HashSet::from(["caddy", "caddyfile"]));
1382    m.insert("Cadence", HashSet::from(["cadence"]));
1383    m.insert("Cairo", HashSet::from(["cairo", "cairo zero"]));
1384    m.insert("Cangjie", HashSet::from(["cangjie"]));
1385    m.insert("Cap'n Proto", HashSet::from(["cap'n proto"]));
1386    m.insert("Carbon", HashSet::from(["carbon"]));
1387    m.insert("CartoCSS", HashSet::from(["carto", "cartocss"]));
1388    m.insert("Ceylon", HashSet::from(["ceylon"]));
1389    m.insert("Chapel", HashSet::from(["chapel", "chpl"]));
1390    m.insert("Charity", HashSet::from(["charity"]));
1391    m.insert(
1392        "Checksums",
1393        HashSet::from([
1394            "checksum",
1395            "checksums",
1396            "hash",
1397            "hashes",
1398            "sfv",
1399            "simple file verification",
1400            "sum",
1401            "sums",
1402        ]),
1403    );
1404    m.insert("ChucK", HashSet::from(["chuck"]));
1405    m.insert("Circom", HashSet::from(["circom"]));
1406    m.insert("Cirru", HashSet::from(["cirru"]));
1407    m.insert("Clarion", HashSet::from(["clarion"]));
1408    m.insert("Clarity", HashSet::from(["clarity"]));
1409    m.insert("Classic ASP", HashSet::from(["asp", "classic asp"]));
1410    m.insert("Clean", HashSet::from(["clean"]));
1411    m.insert("Click", HashSet::from(["click"]));
1412    m.insert("Clojure", HashSet::from(["clojure"]));
1413    m.insert("Closure Templates", HashSet::from(["closure templates", "soy"]));
1414    m.insert(
1415        "Cloud Firestore Security Rules",
1416        HashSet::from(["cloud firestore security rules"]),
1417    );
1418    m.insert("Clue", HashSet::from(["clue"]));
1419    m.insert("CoNLL-U", HashSet::from(["conll", "conll-u", "conll-x"]));
1420    m.insert("CodeQL", HashSet::from(["codeql", "ql"]));
1421    m.insert(
1422        "CoffeeScript",
1423        HashSet::from([
1424            "coffee",
1425            "coffee-script",
1426            "coffeescript",
1427            "litcoffee",
1428            "literate coffeescript",
1429        ]),
1430    );
1431    m.insert(
1432        "ColdFusion",
1433        HashSet::from(["cfc", "cfm", "cfml", "coldfusion", "coldfusion cfc", "coldfusion html"]),
1434    );
1435    m.insert("Common Lisp", HashSet::from(["common lisp", "lisp"]));
1436    m.insert(
1437        "Common Workflow Language",
1438        HashSet::from(["common workflow language", "cwl"]),
1439    );
1440    m.insert("Component Pascal", HashSet::from(["component pascal"]));
1441    m.insert("Cooklang", HashSet::from(["cooklang"]));
1442    m.insert("Cool", HashSet::from(["cool"]));
1443    m.insert("Cpp-ObjDump", HashSet::from(["c++-objdump", "cpp-objdump"]));
1444    m.insert("Creole", HashSet::from(["creole"]));
1445    m.insert("Crystal", HashSet::from(["crystal"]));
1446    m.insert("Csound", HashSet::from(["csound", "csound-orc"]));
1447    m.insert("Csound Document", HashSet::from(["csound document", "csound-csd"]));
1448    m.insert("Csound Score", HashSet::from(["csound score", "csound-sco"]));
1449    m.insert("Cuda", HashSet::from(["cuda"]));
1450    m.insert("Cue Sheet", HashSet::from(["cue sheet"]));
1451    m.insert("Curry", HashSet::from(["curry"]));
1452    m.insert("Cycript", HashSet::from(["cycript"]));
1453    m.insert("Cypher", HashSet::from(["cypher"]));
1454    m.insert("Cython", HashSet::from(["cython", "pyrex"]));
1455    m.insert("D", HashSet::from(["d", "dlang"]));
1456    m.insert("D-ObjDump", HashSet::from(["d-objdump"]));
1457    m.insert("D2", HashSet::from(["d2", "d2lang"]));
1458    m.insert(
1459        "DIGITAL Command Language",
1460        HashSet::from(["dcl", "digital command language"]),
1461    );
1462    m.insert("DM", HashSet::from(["byond", "dm"]));
1463    m.insert("DNS Zone", HashSet::from(["dns zone"]));
1464    m.insert("DTrace", HashSet::from(["dtrace", "dtrace-script"]));
1465    m.insert("Dafny", HashSet::from(["dafny"]));
1466    m.insert("Darcs Patch", HashSet::from(["darcs patch", "dpatch"]));
1467    m.insert("Dart", HashSet::from(["dart"]));
1468    m.insert("Daslang", HashSet::from(["daslang"]));
1469    m.insert("DataWeave", HashSet::from(["dataweave"]));
1470    m.insert(
1471        "Debian Package Control File",
1472        HashSet::from(["debian package control file"]),
1473    );
1474    m.insert("DenizenScript", HashSet::from(["denizenscript"]));
1475    m.insert("Dhall", HashSet::from(["dhall"]));
1476    m.insert("Diff", HashSet::from(["diff", "udiff"]));
1477    m.insert("DirectX 3D File", HashSet::from(["directx 3d file"]));
1478    m.insert("Dockerfile", HashSet::from(["containerfile", "dockerfile"]));
1479    m.insert("Dogescript", HashSet::from(["dogescript"]));
1480    m.insert("Dotenv", HashSet::from(["dotenv"]));
1481    m.insert("Dune", HashSet::from(["dune"]));
1482    m.insert("Dylan", HashSet::from(["dylan"]));
1483    m.insert("E", HashSet::from(["e"]));
1484    m.insert("E-mail", HashSet::from(["e-mail", "email", "eml", "mail", "mbox"]));
1485    m.insert("EBNF", HashSet::from(["ebnf"]));
1486    m.insert("ECL", HashSet::from(["ecl"]));
1487    m.insert("EJS", HashSet::from(["ejs"]));
1488    m.insert("EQ", HashSet::from(["eq"]));
1489    m.insert("Eagle", HashSet::from(["eagle"]));
1490    m.insert("Earthly", HashSet::from(["earthfile", "earthly"]));
1491    m.insert("Edge", HashSet::from(["edge"]));
1492    m.insert("EdgeQL", HashSet::from(["edgeql", "esdl"]));
1493    m.insert("Edje Data Collection", HashSet::from(["edje data collection"]));
1494    m.insert("Eiffel", HashSet::from(["eiffel"]));
1495    m.insert("Elixir", HashSet::from(["elixir"]));
1496    m.insert("Elm", HashSet::from(["elm"]));
1497    m.insert("Elvish", HashSet::from(["elvish", "elvish transcript"]));
1498    m.insert("Emacs Lisp", HashSet::from(["elisp", "emacs", "emacs lisp"]));
1499    m.insert("EmberScript", HashSet::from(["emberscript"]));
1500    m.insert("Erlang", HashSet::from(["erlang"]));
1501    m.insert("Euphoria", HashSet::from(["euphoria"]));
1502    m.insert("F#", HashSet::from(["f#", "fsharp"]));
1503    m.insert("F*", HashSet::from(["f*", "fstar"]));
1504    m.insert("FIGlet Font", HashSet::from(["figfont", "figlet font"]));
1505    m.insert("FIRRTL", HashSet::from(["firrtl"]));
1506    m.insert("FLUX", HashSet::from(["flux"]));
1507    m.insert("Factor", HashSet::from(["factor"]));
1508    m.insert("Fancy", HashSet::from(["fancy"]));
1509    m.insert("Fantom", HashSet::from(["fantom"]));
1510    m.insert("Faust", HashSet::from(["faust"]));
1511    m.insert("Fennel", HashSet::from(["fennel"]));
1512    m.insert("Filebench WML", HashSet::from(["filebench wml"]));
1513    m.insert("Flix", HashSet::from(["flix"]));
1514    m.insert("Fluent", HashSet::from(["fluent"]));
1515    m.insert("Formatted", HashSet::from(["formatted"]));
1516    m.insert("Forth", HashSet::from(["forth", "muf"]));
1517    m.insert("Fortran", HashSet::from(["fortran", "fortran free form"]));
1518    m.insert("FreeBASIC", HashSet::from(["fb", "freebasic"]));
1519    m.insert("FreeMarker", HashSet::from(["freemarker", "ftl"]));
1520    m.insert("Frege", HashSet::from(["frege"]));
1521    m.insert("Futhark", HashSet::from(["futhark"]));
1522    m.insert("G-code", HashSet::from(["g-code"]));
1523    m.insert("GAML", HashSet::from(["gaml"]));
1524    m.insert("GAMS", HashSet::from(["gams"]));
1525    m.insert("GAP", HashSet::from(["gap"]));
1526    m.insert("GCC Machine Description", HashSet::from(["gcc machine description"]));
1527    m.insert("GDB", HashSet::from(["gdb"]));
1528    m.insert("GDScript", HashSet::from(["gdscript"]));
1529    m.insert("GDShader", HashSet::from(["gdshader"]));
1530    m.insert("GEDCOM", HashSet::from(["gedcom"]));
1531    m.insert("GLSL", HashSet::from(["glsl"]));
1532    m.insert("GN", HashSet::from(["gn"]));
1533    m.insert("GSC", HashSet::from(["gsc"]));
1534    m.insert("Game Maker Language", HashSet::from(["game maker language"]));
1535    m.insert("Gemfile.lock", HashSet::from(["gemfile.lock"]));
1536    m.insert("Gemini", HashSet::from(["gemini", "gemtext"]));
1537    m.insert("Genero 4gl", HashSet::from(["genero 4gl"]));
1538    m.insert("Genero per", HashSet::from(["genero per"]));
1539    m.insert("Genie", HashSet::from(["genie"]));
1540    m.insert("Genshi", HashSet::from(["genshi", "xml+genshi", "xml+kid"]));
1541    m.insert("Gerber Image", HashSet::from(["gerber image", "rs-274x"]));
1542    m.insert("Gettext Catalog", HashSet::from(["gettext catalog", "pot"]));
1543    m.insert("Gherkin", HashSet::from(["cucumber", "gherkin"]));
1544    m.insert("Git Attributes", HashSet::from(["git attributes", "gitattributes"]));
1545    m.insert("Git Commit", HashSet::from(["commit", "git commit"]));
1546    m.insert(
1547        "Git Revision List",
1548        HashSet::from(["git blame ignore revs", "git revision list"]),
1549    );
1550    m.insert("Gleam", HashSet::from(["gleam"]));
1551    m.insert("Glyph", HashSet::from(["glyph"]));
1552    m.insert(
1553        "Glyph Bitmap Distribution Format",
1554        HashSet::from(["glyph bitmap distribution format"]),
1555    );
1556    m.insert("Gnuplot", HashSet::from(["gnuplot"]));
1557    m.insert("Go", HashSet::from(["go", "golang"]));
1558    m.insert(
1559        "Go Checksums",
1560        HashSet::from(["go checksums", "go sum", "go work sum", "go.sum", "go.work.sum"]),
1561    );
1562    m.insert("Go Module", HashSet::from(["go mod", "go module", "go.mod"]));
1563    m.insert("Go Template", HashSet::from(["go template", "gotmpl"]));
1564    m.insert("Go Workspace", HashSet::from(["go work", "go workspace", "go.work"]));
1565    m.insert("Godot Resource", HashSet::from(["godot resource"]));
1566    m.insert("Golo", HashSet::from(["golo"]));
1567    m.insert("Gosu", HashSet::from(["gosu"]));
1568    m.insert("Grace", HashSet::from(["grace"]));
1569    m.insert("Gradle", HashSet::from(["gradle", "gradle kotlin dsl"]));
1570    m.insert("Grammatical Framework", HashSet::from(["gf", "grammatical framework"]));
1571    m.insert("Graph Modeling Language", HashSet::from(["graph modeling language"]));
1572    m.insert("GraphQL", HashSet::from(["graphql"]));
1573    m.insert("Graphviz (DOT)", HashSet::from(["graphviz (dot)"]));
1574    m.insert(
1575        "Groovy",
1576        HashSet::from(["groovy", "groovy server pages", "gsp", "java server page"]),
1577    );
1578    m.insert("HAProxy", HashSet::from(["haproxy"]));
1579    m.insert(
1580        "HCL",
1581        HashSet::from([
1582            "hashicorp configuration language",
1583            "hcl",
1584            "opentofu",
1585            "terraform",
1586            "terraform template",
1587        ]),
1588    );
1589    m.insert("HIP", HashSet::from(["hip"]));
1590    m.insert("HLSL", HashSet::from(["hlsl"]));
1591    m.insert("HOCON", HashSet::from(["hocon"]));
1592    m.insert(
1593        "HTML",
1594        HashSet::from([
1595            "ecmarkdown",
1596            "ecmarkup",
1597            "ecr",
1598            "eex",
1599            "erb",
1600            "heex",
1601            "html",
1602            "html+ecr",
1603            "html+eex",
1604            "html+erb",
1605            "html+php",
1606            "html+razor",
1607            "html+ruby",
1608            "leex",
1609            "razor",
1610            "rhtml",
1611            "xhtml",
1612        ]),
1613    );
1614    m.insert("HTTP", HashSet::from(["http"]));
1615    m.insert("HXML", HashSet::from(["hxml"]));
1616    m.insert("Hack", HashSet::from(["hack"]));
1617    m.insert("Haml", HashSet::from(["haml"]));
1618    m.insert("Handlebars", HashSet::from(["handlebars", "hbs", "htmlbars"]));
1619    m.insert("Harbour", HashSet::from(["harbour"]));
1620    m.insert("Hare", HashSet::from(["hare"]));
1621    m.insert(
1622        "Haskell",
1623        HashSet::from(["c2hs", "c2hs haskell", "haskell", "lhaskell", "lhs", "literate haskell"]),
1624    );
1625    m.insert("Haxe", HashSet::from(["haxe"]));
1626    m.insert("HiveQL", HashSet::from(["hiveql"]));
1627    m.insert("HolyC", HashSet::from(["holyc"]));
1628    m.insert("Hosts File", HashSet::from(["hosts", "hosts file"]));
1629    m.insert("Hurl", HashSet::from(["hurl"]));
1630    m.insert("Hy", HashSet::from(["hy", "hylang"]));
1631    m.insert("HyPhy", HashSet::from(["hyphy"]));
1632    m.insert("IDL", HashSet::from(["idl"]));
1633    m.insert("IGOR Pro", HashSet::from(["igor", "igor pro", "igorpro"]));
1634    m.insert(
1635        "INI",
1636        HashSet::from([
1637            "curl config",
1638            "curlrc",
1639            "cylc",
1640            "dosini",
1641            "editor-config",
1642            "editorconfig",
1643            "git config",
1644            "gitconfig",
1645            "gitmodules",
1646            "ini",
1647            "inputrc",
1648            "nanorc",
1649            "npm config",
1650            "npmrc",
1651            "readline",
1652            "readline config",
1653            "ssh config",
1654            "ssh_config",
1655            "sshconfig",
1656            "sshd_config",
1657            "sshdconfig",
1658            "wget config",
1659            "wgetrc",
1660        ]),
1661    );
1662    m.insert("IRC log", HashSet::from(["irc", "irc log", "irc logs"]));
1663    m.insert("ISPC", HashSet::from(["ispc"]));
1664    m.insert("Idris", HashSet::from(["idris"]));
1665    m.insert(
1666        "Ignore List",
1667        HashSet::from(["git-ignore", "gitignore", "ignore", "ignore list"]),
1668    );
1669    m.insert("ImageJ Macro", HashSet::from(["ijm", "imagej macro"]));
1670    m.insert("Imba", HashSet::from(["imba"]));
1671    m.insert("Inform 7", HashSet::from(["i7", "inform 7", "inform7"]));
1672    m.insert("Ink", HashSet::from(["ink"]));
1673    m.insert("Inno Setup", HashSet::from(["inno setup"]));
1674    m.insert("Io", HashSet::from(["io"]));
1675    m.insert("Ioke", HashSet::from(["ioke"]));
1676    m.insert("Isabelle", HashSet::from(["isabelle", "isabelle root"]));
1677    m.insert("J", HashSet::from(["j"]));
1678    m.insert("JAR Manifest", HashSet::from(["jar manifest"]));
1679    m.insert("JCL", HashSet::from(["jcl"]));
1680    m.insert(
1681        "JSON",
1682        HashSet::from([
1683            "geojson",
1684            "json",
1685            "json with comments",
1686            "jsonc",
1687            "jsonl",
1688            "sarif",
1689            "topojson",
1690        ]),
1691    );
1692    m.insert("JSON5", HashSet::from(["json5"]));
1693    m.insert("JSONLD", HashSet::from(["jsonld"]));
1694    m.insert("JSONiq", HashSet::from(["jsoniq"]));
1695    m.insert("Jac", HashSet::from(["jac"]));
1696    m.insert("Jai", HashSet::from(["jai"]));
1697    m.insert("Janet", HashSet::from(["janet"]));
1698    m.insert("Jasmin", HashSet::from(["jasmin"]));
1699    m.insert(
1700        "Java",
1701        HashSet::from(["java", "java server pages", "java template engine", "jsp", "jte"]),
1702    );
1703    m.insert("Java Properties", HashSet::from(["java properties"]));
1704    m.insert(
1705        "JavaScript",
1706        HashSet::from([
1707            "ecere projects",
1708            "gjs",
1709            "glimmer js",
1710            "javascript",
1711            "javascript+erb",
1712            "js",
1713            "node",
1714        ]),
1715    );
1716    m.insert("Jest Snapshot", HashSet::from(["jest snapshot"]));
1717    m.insert("JetBrains MPS", HashSet::from(["jetbrains mps", "mps"]));
1718    m.insert(
1719        "Jinja",
1720        HashSet::from(["django", "html+django", "html+jinja", "htmldjango", "jinja"]),
1721    );
1722    m.insert("Jolie", HashSet::from(["jolie"]));
1723    m.insert("Jsonnet", HashSet::from(["jsonnet"]));
1724    m.insert("Julia", HashSet::from(["julia", "julia repl"]));
1725    m.insert(
1726        "Jupyter Notebook",
1727        HashSet::from(["ipython notebook", "jupyter notebook"]),
1728    );
1729    m.insert("Just", HashSet::from(["just", "justfile"]));
1730    m.insert("KCL", HashSet::from(["kcl"]));
1731    m.insert("KDL", HashSet::from(["kdl"]));
1732    m.insert("KFramework", HashSet::from(["kframework"]));
1733    m.insert("KRL", HashSet::from(["krl"]));
1734    m.insert("Kaitai Struct", HashSet::from(["kaitai struct", "ksy"]));
1735    m.insert("KakouneScript", HashSet::from(["kak", "kakounescript", "kakscript"]));
1736    m.insert("KerboScript", HashSet::from(["kerboscript"]));
1737    m.insert("KiCad Layout", HashSet::from(["kicad layout", "pcbnew"]));
1738    m.insert("KiCad Legacy Layout", HashSet::from(["kicad legacy layout"]));
1739    m.insert(
1740        "KiCad Schematic",
1741        HashSet::from(["eeschema schematic", "kicad schematic"]),
1742    );
1743    m.insert("Kickstart", HashSet::from(["kickstart"]));
1744    m.insert("Kit", HashSet::from(["kit"]));
1745    m.insert("KoLmafia ASH", HashSet::from(["kolmafia ash"]));
1746    m.insert("Koka", HashSet::from(["koka"]));
1747    m.insert("Kotlin", HashSet::from(["kotlin"]));
1748    m.insert("Kusto", HashSet::from(["kusto"]));
1749    m.insert("LFE", HashSet::from(["lfe"]));
1750    m.insert("LLVM", HashSet::from(["llvm"]));
1751    m.insert("LOLCODE", HashSet::from(["lolcode"]));
1752    m.insert("LSL", HashSet::from(["lsl"]));
1753    m.insert("LTspice Symbol", HashSet::from(["ltspice symbol"]));
1754    m.insert("LabVIEW", HashSet::from(["labview"]));
1755    m.insert("Lambdapi", HashSet::from(["lambdapi"]));
1756    m.insert("Langium", HashSet::from(["langium"]));
1757    m.insert("Lark", HashSet::from(["lark"]));
1758    m.insert("Lasso", HashSet::from(["lasso", "lassoscript"]));
1759    m.insert("Latte", HashSet::from(["latte"]));
1760    m.insert("Lean", HashSet::from(["lean", "lean 4", "lean4"]));
1761    m.insert("Leo", HashSet::from(["leo"]));
1762    m.insert("Less", HashSet::from(["less", "less-css"]));
1763    m.insert("Lex", HashSet::from(["flex", "jflex", "jison lex", "lex"]));
1764    m.insert("LigoLANG", HashSet::from(["cameligo", "ligolang", "reasonligo"]));
1765    m.insert("LilyPond", HashSet::from(["lilypond"]));
1766    m.insert("Limbo", HashSet::from(["limbo"]));
1767    m.insert("Linear Programming", HashSet::from(["linear programming"]));
1768    m.insert("Linker Script", HashSet::from(["linker script"]));
1769    m.insert("Linux Kernel Module", HashSet::from(["linux kernel module"]));
1770    m.insert("Liquid", HashSet::from(["liquid"]));
1771    m.insert("LiveCode Script", HashSet::from(["livecode script"]));
1772    m.insert("LiveScript", HashSet::from(["live-script", "livescript", "ls"]));
1773    m.insert("Logos", HashSet::from(["logos"]));
1774    m.insert("Logtalk", HashSet::from(["logtalk"]));
1775    m.insert("LookML", HashSet::from(["lookml"]));
1776    m.insert("LoomScript", HashSet::from(["loomscript"]));
1777    m.insert("Lua", HashSet::from(["lua"]));
1778    m.insert("Luau", HashSet::from(["luau"]));
1779    m.insert("M", HashSet::from(["m", "mumps"]));
1780    m.insert("M3U", HashSet::from(["hls playlist", "m3u", "m3u playlist"]));
1781    m.insert("M4", HashSet::from(["autoconf", "m4", "m4sugar"]));
1782    m.insert("MATLAB", HashSet::from(["matlab", "octave"]));
1783    m.insert("MAXScript", HashSet::from(["maxscript"]));
1784    m.insert("MDX", HashSet::from(["mdx"]));
1785    m.insert("MLIR", HashSet::from(["mlir"]));
1786    m.insert("MQL4", HashSet::from(["mql4"]));
1787    m.insert("MQL5", HashSet::from(["mql5"]));
1788    m.insert("MTML", HashSet::from(["mtml"]));
1789    m.insert("Macaulay2", HashSet::from(["m2", "macaulay2"]));
1790    m.insert("Makefile", HashSet::from(["bsdmake", "make", "makefile", "mf"]));
1791    m.insert("Mako", HashSet::from(["mako"]));
1792    m.insert("Markdown", HashSet::from(["markdown", "md", "pandoc"]));
1793    m.insert("Marko", HashSet::from(["marko", "markojs"]));
1794    m.insert("Mask", HashSet::from(["mask"]));
1795    m.insert(
1796        "Mathematical Programming System",
1797        HashSet::from(["mathematical programming system"]),
1798    );
1799    m.insert("Max", HashSet::from(["max", "max/msp", "maxmsp"]));
1800    m.insert("Mercury", HashSet::from(["mercury"]));
1801    m.insert("Mermaid", HashSet::from(["mermaid", "mermaid example"]));
1802    m.insert("Meson", HashSet::from(["meson"]));
1803    m.insert("Metal", HashSet::from(["metal"]));
1804    m.insert(
1805        "Microsoft Developer Studio Project",
1806        HashSet::from(["microsoft developer studio project"]),
1807    );
1808    m.insert(
1809        "Microsoft Visual Studio Solution",
1810        HashSet::from(["microsoft visual studio solution"]),
1811    );
1812    m.insert("MiniD", HashSet::from(["minid"]));
1813    m.insert("MiniYAML", HashSet::from(["miniyaml"]));
1814    m.insert("MiniZinc", HashSet::from(["minizinc"]));
1815    m.insert("MiniZinc Data", HashSet::from(["minizinc data"]));
1816    m.insert("Mint", HashSet::from(["mint"]));
1817    m.insert("Mirah", HashSet::from(["mirah"]));
1818    m.insert("Modelica", HashSet::from(["modelica"]));
1819    m.insert("Modula-2", HashSet::from(["modula-2"]));
1820    m.insert("Modula-3", HashSet::from(["modula-3"]));
1821    m.insert("Module Management System", HashSet::from(["module management system"]));
1822    m.insert("Mojo", HashSet::from(["mojo"]));
1823    m.insert("Monkey", HashSet::from(["monkey"]));
1824    m.insert("Monkey C", HashSet::from(["monkey c"]));
1825    m.insert("Moocode", HashSet::from(["moocode"]));
1826    m.insert("MoonBit", HashSet::from(["moonbit"]));
1827    m.insert("MoonScript", HashSet::from(["moonscript"]));
1828    m.insert("Motoko", HashSet::from(["motoko"]));
1829    m.insert("Move", HashSet::from(["move"]));
1830    m.insert("Muse", HashSet::from(["amusewiki", "emacs muse", "muse"]));
1831    m.insert("Mustache", HashSet::from(["mustache"]));
1832    m.insert("Myghty", HashSet::from(["myghty"]));
1833    m.insert("NASL", HashSet::from(["nasl"]));
1834    m.insert("NCL", HashSet::from(["ncl"]));
1835    m.insert("NEON", HashSet::from(["ne-on", "neon", "nette object notation"]));
1836    m.insert("NL", HashSet::from(["nl"]));
1837    m.insert("NMODL", HashSet::from(["nmodl"]));
1838    m.insert("NSIS", HashSet::from(["nsis"]));
1839    m.insert("NWScript", HashSet::from(["nwscript"]));
1840    m.insert("Nasal", HashSet::from(["nasal"]));
1841    m.insert("Nearley", HashSet::from(["nearley"]));
1842    m.insert("Nemerle", HashSet::from(["nemerle"]));
1843    m.insert("NetLinx", HashSet::from(["netlinx"]));
1844    m.insert("NetLinx+ERB", HashSet::from(["netlinx+erb"]));
1845    m.insert("NetLogo", HashSet::from(["netlogo"]));
1846    m.insert("NewLisp", HashSet::from(["newlisp"]));
1847    m.insert("Nextflow", HashSet::from(["nextflow"]));
1848    m.insert("Nginx", HashSet::from(["nginx", "nginx configuration file"]));
1849    m.insert("Nickel", HashSet::from(["nickel"]));
1850    m.insert("Nim", HashSet::from(["nim"]));
1851    m.insert("Ninja", HashSet::from(["ninja"]));
1852    m.insert("Nit", HashSet::from(["nit"]));
1853    m.insert("Nix", HashSet::from(["nix", "nixos"]));
1854    m.insert("Noir", HashSet::from(["nargo", "noir"]));
1855    m.insert("Nu", HashSet::from(["nu", "nush"]));
1856    m.insert("Nunjucks", HashSet::from(["njk", "nunjucks"]));
1857    m.insert("Nushell", HashSet::from(["nu-script", "nushell", "nushell-script"]));
1858    m.insert("OCaml", HashSet::from(["ocaml"]));
1859    m.insert("OMNeT++ MSG", HashSet::from(["omnet++ msg", "omnetpp-msg"]));
1860    m.insert("OMNeT++ NED", HashSet::from(["omnet++ ned", "omnetpp-ned"]));
1861    m.insert("Oberon", HashSet::from(["oberon"]));
1862    m.insert("ObjDump", HashSet::from(["objdump"]));
1863    m.insert(
1864        "Object Data Instance Notation",
1865        HashSet::from(["object data instance notation"]),
1866    );
1867    m.insert("ObjectScript", HashSet::from(["objectscript"]));
1868    m.insert(
1869        "Objective-C",
1870        HashSet::from(["obj-c", "objc", "objective-c", "objectivec"]),
1871    );
1872    m.insert(
1873        "Objective-C++",
1874        HashSet::from(["obj-c++", "objc++", "objective-c++", "objectivec++"]),
1875    );
1876    m.insert(
1877        "Objective-J",
1878        HashSet::from(["obj-j", "objective-j", "objectivej", "objj"]),
1879    );
1880    m.insert("Odin", HashSet::from(["odin", "odin-lang", "odinlang"]));
1881    m.insert("Omgrofl", HashSet::from(["omgrofl"]));
1882    m.insert("Opa", HashSet::from(["opa"]));
1883    m.insert("Opal", HashSet::from(["opal"]));
1884    m.insert("Open Policy Agent", HashSet::from(["open policy agent"]));
1885    m.insert(
1886        "OpenAPI Specification v2",
1887        HashSet::from(["oasv2", "oasv2-json", "oasv2-yaml", "openapi specification v2"]),
1888    );
1889    m.insert(
1890        "OpenAPI Specification v3",
1891        HashSet::from(["oasv3", "oasv3-json", "oasv3-yaml", "openapi specification v3"]),
1892    );
1893    m.insert(
1894        "OpenEdge ABL",
1895        HashSet::from(["abl", "openedge", "openedge abl", "progress"]),
1896    );
1897    m.insert("OpenQASM", HashSet::from(["openqasm"]));
1898    m.insert("OpenSCAD", HashSet::from(["openscad"]));
1899    m.insert("OpenStep Property List", HashSet::from(["openstep property list"]));
1900    m.insert(
1901        "OpenType Feature File",
1902        HashSet::from(["afdko", "opentype feature file"]),
1903    );
1904    m.insert("Option List", HashSet::from(["ackrc", "option list", "opts"]));
1905    m.insert("Org", HashSet::from(["org"]));
1906    m.insert("OverpassQL", HashSet::from(["overpassql"]));
1907    m.insert("Ox", HashSet::from(["ox"]));
1908    m.insert("Oxygene", HashSet::from(["oxygene"]));
1909    m.insert("Oz", HashSet::from(["oz"]));
1910    m.insert("P4", HashSet::from(["p4"]));
1911    m.insert("PDDL", HashSet::from(["pddl"]));
1912    m.insert("PEG.js", HashSet::from(["peg.js"]));
1913    m.insert("PHP", HashSet::from(["inc", "php"]));
1914    m.insert("PLSQL", HashSet::from(["plsql"]));
1915    m.insert("PLpgSQL", HashSet::from(["plpgsql"]));
1916    m.insert("POV-Ray SDL", HashSet::from(["pov-ray", "pov-ray sdl", "povray"]));
1917    m.insert("Pact", HashSet::from(["pact"]));
1918    m.insert("Pan", HashSet::from(["pan"]));
1919    m.insert("Papyrus", HashSet::from(["papyrus"]));
1920    m.insert(
1921        "Parrot",
1922        HashSet::from([
1923            "parrot",
1924            "parrot assembly",
1925            "parrot internal representation",
1926            "pasm",
1927            "pir",
1928        ]),
1929    );
1930    m.insert("Pascal", HashSet::from(["delphi", "objectpascal", "pascal"]));
1931    m.insert("Pawn", HashSet::from(["pawn"]));
1932    m.insert("Pep8", HashSet::from(["pep8"]));
1933    m.insert("Perl", HashSet::from(["cperl", "perl"]));
1934    m.insert("Pickle", HashSet::from(["pickle"]));
1935    m.insert("PicoLisp", HashSet::from(["picolisp"]));
1936    m.insert("PigLatin", HashSet::from(["piglatin"]));
1937    m.insert("Pike", HashSet::from(["pike"]));
1938    m.insert("Pip Requirements", HashSet::from(["pip requirements"]));
1939    m.insert("Pkl", HashSet::from(["pkl"]));
1940    m.insert("PlantUML", HashSet::from(["plantuml"]));
1941    m.insert("Pod", HashSet::from(["pod"]));
1942    m.insert("Pod 6", HashSet::from(["pod 6"]));
1943    m.insert("PogoScript", HashSet::from(["pogoscript"]));
1944    m.insert("Polar", HashSet::from(["polar"]));
1945    m.insert("Pony", HashSet::from(["pony"]));
1946    m.insert("Portugol", HashSet::from(["portugol"]));
1947    m.insert("PostScript", HashSet::from(["postscr", "postscript"]));
1948    m.insert("PowerBuilder", HashSet::from(["powerbuilder"]));
1949    m.insert("PowerShell", HashSet::from(["posh", "powershell", "pwsh"]));
1950    m.insert("Praat", HashSet::from(["praat"]));
1951    m.insert("Prisma", HashSet::from(["prisma"]));
1952    m.insert("Processing", HashSet::from(["processing"]));
1953    m.insert("Procfile", HashSet::from(["procfile"]));
1954    m.insert("Proguard", HashSet::from(["proguard"]));
1955    m.insert("Prolog", HashSet::from(["eclipse", "prolog"]));
1956    m.insert("Promela", HashSet::from(["promela"]));
1957    m.insert("Propeller Spin", HashSet::from(["propeller spin"]));
1958    m.insert(
1959        "Protocol Buffer",
1960        HashSet::from(["proto", "protobuf", "protocol buffer", "protocol buffers"]),
1961    );
1962    m.insert(
1963        "Protocol Buffer Text Format",
1964        HashSet::from(["protobuf text format", "protocol buffer text format", "text proto"]),
1965    );
1966    m.insert("Public Key", HashSet::from(["public key"]));
1967    m.insert("Pug", HashSet::from(["pug"]));
1968    m.insert("Puppet", HashSet::from(["puppet"]));
1969    m.insert("Pure Data", HashSet::from(["pure data"]));
1970    m.insert("PureBasic", HashSet::from(["purebasic"]));
1971    m.insert("PureScript", HashSet::from(["purescript"]));
1972    m.insert("Pyret", HashSet::from(["pyret"]));
1973    m.insert(
1974        "Python",
1975        HashSet::from([
1976            "easybuild",
1977            "numpy",
1978            "pycon",
1979            "python",
1980            "python console",
1981            "python traceback",
1982            "python3",
1983            "rusthon",
1984            "snakefile",
1985            "snakemake",
1986        ]),
1987    );
1988    m.insert("Q#", HashSet::from(["q#", "qsharp"]));
1989    m.insert("QML", HashSet::from(["qml"]));
1990    m.insert("QMake", HashSet::from(["qmake"]));
1991    m.insert("Qt Script", HashSet::from(["qt script"]));
1992    m.insert("Quake", HashSet::from(["quake"]));
1993    m.insert("QuakeC", HashSet::from(["quakec"]));
1994    m.insert(
1995        "QuickBASIC",
1996        HashSet::from([
1997            "classic qbasic",
1998            "classic quickbasic",
1999            "qb",
2000            "qb64",
2001            "qbasic",
2002            "quickbasic",
2003        ]),
2004    );
2005    m.insert("R", HashSet::from(["r", "rscript", "splus"]));
2006    m.insert("RAML", HashSet::from(["raml"]));
2007    m.insert("RAScript", HashSet::from(["rascript"]));
2008    m.insert("RDoc", HashSet::from(["rdoc"]));
2009    m.insert("REALbasic", HashSet::from(["realbasic"]));
2010    m.insert("REXX", HashSet::from(["arexx", "rexx"]));
2011    m.insert("RMarkdown", HashSet::from(["rmarkdown"]));
2012    m.insert("RON", HashSet::from(["ron"]));
2013    m.insert("ROS Interface", HashSet::from(["ros interface", "rosmsg"]));
2014    m.insert("RPC", HashSet::from(["oncrpc", "rpc", "rpcgen", "xdr"]));
2015    m.insert("RPGLE", HashSet::from(["ile rpg", "rpgle", "sqlrpgle"]));
2016    m.insert("RPM Spec", HashSet::from(["rpm spec", "specfile"]));
2017    m.insert("RUNOFF", HashSet::from(["runoff"]));
2018    m.insert("Racket", HashSet::from(["racket"]));
2019    m.insert("Ragel", HashSet::from(["ragel", "ragel-rb", "ragel-ruby"]));
2020    m.insert("Raku", HashSet::from(["perl-6", "perl6", "raku"]));
2021    m.insert("Rascal", HashSet::from(["rascal"]));
2022    m.insert("Raw token data", HashSet::from(["raw", "raw token data"]));
2023    m.insert("ReScript", HashSet::from(["rescript"]));
2024    m.insert("Reason", HashSet::from(["reason"]));
2025    m.insert("Rebol", HashSet::from(["rebol"]));
2026    m.insert("Record Jar", HashSet::from(["record jar"]));
2027    m.insert("Red", HashSet::from(["red", "red/system"]));
2028    m.insert("Redcode", HashSet::from(["redcode"]));
2029    m.insert("Redirect Rules", HashSet::from(["redirect rules", "redirects"]));
2030    m.insert(
2031        "Regular Expression",
2032        HashSet::from(["regex", "regexp", "regular expression"]),
2033    );
2034    m.insert("Ren'Py", HashSet::from(["ren'py", "renpy"]));
2035    m.insert("RenderScript", HashSet::from(["filterscript", "renderscript"]));
2036    m.insert("Rez", HashSet::from(["rez"]));
2037    m.insert("Rich Text Format", HashSet::from(["rich text format"]));
2038    m.insert("Ring", HashSet::from(["ring"]));
2039    m.insert("Riot", HashSet::from(["riot"]));
2040    m.insert("RobotFramework", HashSet::from(["robotframework"]));
2041    m.insert("Roc", HashSet::from(["roc"]));
2042    m.insert("Rocq Prover", HashSet::from(["coq", "rocq", "rocq prover"]));
2043    m.insert(
2044        "Roff",
2045        HashSet::from([
2046            "groff",
2047            "man",
2048            "man page",
2049            "man-page",
2050            "manpage",
2051            "mdoc",
2052            "nroff",
2053            "pic",
2054            "pikchr",
2055            "roff",
2056            "roff manpage",
2057            "troff",
2058        ]),
2059    );
2060    m.insert("Rouge", HashSet::from(["rouge"]));
2061    m.insert("RouterOS Script", HashSet::from(["routeros script"]));
2062    m.insert(
2063        "Ruby",
2064        HashSet::from(["jruby", "macruby", "rake", "rb", "rbs", "rbx", "ruby"]),
2065    );
2066    m.insert("Rust", HashSet::from(["rs", "rust"]));
2067    m.insert("SAS", HashSet::from(["sas"]));
2068    m.insert("SCSS", HashSet::from(["scss"]));
2069    m.insert(
2070        "SELinux Policy",
2071        HashSet::from(["selinux kernel policy language", "selinux policy", "sepolicy"]),
2072    );
2073    m.insert("SMT", HashSet::from(["smt"]));
2074    m.insert("SPARQL", HashSet::from(["sparql"]));
2075    m.insert("SQF", HashSet::from(["sqf"]));
2076    m.insert("SQL", HashSet::from(["sql"]));
2077    m.insert("SQLPL", HashSet::from(["sqlpl"]));
2078    m.insert("SRecode Template", HashSet::from(["srecode template"]));
2079    m.insert("STAR", HashSet::from(["star"]));
2080    m.insert("STL", HashSet::from(["ascii stl", "stl", "stla"]));
2081    m.insert("SVG", HashSet::from(["svg"]));
2082    m.insert("SWIG", HashSet::from(["swig"]));
2083    m.insert("Sage", HashSet::from(["sage"]));
2084    m.insert("Sail", HashSet::from(["sail"]));
2085    m.insert("SaltStack", HashSet::from(["salt", "saltstack", "saltstate"]));
2086    m.insert("Sass", HashSet::from(["sass"]));
2087    m.insert("Scala", HashSet::from(["scala"]));
2088    m.insert("Scaml", HashSet::from(["scaml"]));
2089    m.insert("Scenic", HashSet::from(["scenic"]));
2090    m.insert("Scheme", HashSet::from(["scheme"]));
2091    m.insert("Scilab", HashSet::from(["scilab"]));
2092    m.insert("Self", HashSet::from(["self"]));
2093    m.insert("ShaderLab", HashSet::from(["shaderlab"]));
2094    m.insert(
2095        "Shell",
2096        HashSet::from([
2097            "abuild",
2098            "alpine abuild",
2099            "apkbuild",
2100            "bash",
2101            "envrc",
2102            "fish",
2103            "gentoo ebuild",
2104            "gentoo eclass",
2105            "openrc",
2106            "openrc runscript",
2107            "sh",
2108            "shell",
2109            "shell-script",
2110            "tcsh",
2111            "zsh",
2112        ]),
2113    );
2114    m.insert(
2115        "ShellCheck Config",
2116        HashSet::from(["shellcheck config", "shellcheckrc"]),
2117    );
2118    m.insert(
2119        "ShellSession",
2120        HashSet::from(["bash session", "console", "shellsession"]),
2121    );
2122    m.insert("Shen", HashSet::from(["shen"]));
2123    m.insert("Sieve", HashSet::from(["sieve"]));
2124    m.insert("Singularity", HashSet::from(["singularity"]));
2125    m.insert("Slang", HashSet::from(["slang"]));
2126    m.insert("Slash", HashSet::from(["slash"]));
2127    m.insert("Slice", HashSet::from(["slice"]));
2128    m.insert("Slim", HashSet::from(["slim"]));
2129    m.insert("Slint", HashSet::from(["slint"]));
2130    m.insert("SmPL", HashSet::from(["coccinelle", "smpl"]));
2131    m.insert("Smali", HashSet::from(["smali"]));
2132    m.insert("Smalltalk", HashSet::from(["smalltalk", "squeak", "ston"]));
2133    m.insert("Smarty", HashSet::from(["smarty"]));
2134    m.insert("Smithy", HashSet::from(["smithy"]));
2135    m.insert("Solidity", HashSet::from(["solidity"]));
2136    m.insert("Soong", HashSet::from(["soong"]));
2137    m.insert("SourcePawn", HashSet::from(["sourcemod", "sourcepawn"]));
2138    m.insert("Spline Font Database", HashSet::from(["spline font database"]));
2139    m.insert("Squirrel", HashSet::from(["squirrel"]));
2140    m.insert("Stan", HashSet::from(["stan"]));
2141    m.insert("Standard ML", HashSet::from(["sml", "standard ml"]));
2142    m.insert("Starlark", HashSet::from(["bazel", "bzl", "starlark"]));
2143    m.insert("Stata", HashSet::from(["stata"]));
2144    m.insert("StringTemplate", HashSet::from(["stringtemplate"]));
2145    m.insert("Stylus", HashSet::from(["stylus"]));
2146    m.insert("SubRip Text", HashSet::from(["subrip text"]));
2147    m.insert("SugarSS", HashSet::from(["sugarss"]));
2148    m.insert("SuperCollider", HashSet::from(["supercollider"]));
2149    m.insert("SurrealQL", HashSet::from(["surql", "surrealql"]));
2150    m.insert("Survex data", HashSet::from(["survex data"]));
2151    m.insert("Svelte", HashSet::from(["svelte"]));
2152    m.insert("Sway", HashSet::from(["sway"]));
2153    m.insert("Sweave", HashSet::from(["sweave"]));
2154    m.insert("Swift", HashSet::from(["swift"]));
2155    m.insert("SystemVerilog", HashSet::from(["systemverilog"]));
2156    m.insert("TI Program", HashSet::from(["ti program"]));
2157    m.insert("TL-Verilog", HashSet::from(["tl-verilog"]));
2158    m.insert("TLA", HashSet::from(["tla"]));
2159    m.insert("TMDL", HashSet::from(["tabular model definition language", "tmdl"]));
2160    m.insert("TOML", HashSet::from(["toml"]));
2161    m.insert(
2162        "TSPLIB data",
2163        HashSet::from([
2164            "traveling salesman problem",
2165            "travelling salesman problem",
2166            "tsplib data",
2167        ]),
2168    );
2169    m.insert("TSQL", HashSet::from(["tsql"]));
2170    m.insert("TSV", HashSet::from(["tab-seperated values", "tsv"]));
2171    m.insert("TXL", HashSet::from(["txl"]));
2172    m.insert("Tact", HashSet::from(["tact"]));
2173    m.insert("Talon", HashSet::from(["talon"]));
2174    m.insert("Tcl", HashSet::from(["sdc", "tcl", "xdc"]));
2175    m.insert("TeX", HashSet::from(["bibtex", "latex", "tex"]));
2176    m.insert("Tea", HashSet::from(["tea"]));
2177    m.insert("Teal", HashSet::from(["teal"]));
2178    m.insert("Terra", HashSet::from(["terra"]));
2179    m.insert("Texinfo", HashSet::from(["texinfo"]));
2180    m.insert("Text", HashSet::from(["fundamental", "plain text", "text"]));
2181    m.insert("TextGrid", HashSet::from(["textgrid"]));
2182    m.insert(
2183        "TextMate Properties",
2184        HashSet::from(["textmate properties", "tm-properties"]),
2185    );
2186    m.insert("Textile", HashSet::from(["textile"]));
2187    m.insert("Thrift", HashSet::from(["thrift"]));
2188    m.insert("Toit", HashSet::from(["toit"]));
2189    m.insert("Tor Config", HashSet::from(["tor config", "torrc"]));
2190    m.insert("Tree-sitter Query", HashSet::from(["tree-sitter query", "tsq"]));
2191    m.insert("Turing", HashSet::from(["turing"]));
2192    m.insert("Turtle", HashSet::from(["turtle"]));
2193    m.insert("Twig", HashSet::from(["twig"]));
2194    m.insert("Type Language", HashSet::from(["tl", "type language"]));
2195    m.insert(
2196        "TypeScript",
2197        HashSet::from(["glimmer ts", "gts", "ts", "tsx", "typescript"]),
2198    );
2199    m.insert("TypeSpec", HashSet::from(["tsp", "typespec"]));
2200    m.insert("Typst", HashSet::from(["typ", "typst"]));
2201    m.insert("Unity3D Asset", HashSet::from(["unity3d asset"]));
2202    m.insert("Uno", HashSet::from(["uno"]));
2203    m.insert("UnrealScript", HashSet::from(["unrealscript"]));
2204    m.insert("Untyped Plutus Core", HashSet::from(["untyped plutus core"]));
2205    m.insert("UrWeb", HashSet::from(["ur", "ur/web", "urweb"]));
2206    m.insert("V", HashSet::from(["v", "vlang"]));
2207    m.insert("VBA", HashSet::from(["vba", "visual basic for applications"]));
2208    m.insert("VBScript", HashSet::from(["vbscript"]));
2209    m.insert("VCL", HashSet::from(["vcl"]));
2210    m.insert("VHDL", HashSet::from(["vhdl"]));
2211    m.insert("Vala", HashSet::from(["vala"]));
2212    m.insert(
2213        "Valve Data Format",
2214        HashSet::from(["keyvalues", "valve data format", "vdf"]),
2215    );
2216    m.insert(
2217        "Velocity Template Language",
2218        HashSet::from(["velocity", "velocity template language", "vtl"]),
2219    );
2220    m.insert("Vento", HashSet::from(["vento"]));
2221    m.insert("Verilog", HashSet::from(["verilog"]));
2222    m.insert("Vim Help File", HashSet::from(["help", "vim help file", "vimhelp"]));
2223    m.insert(
2224        "Vim Script",
2225        HashSet::from(["nvim", "vim", "vim script", "viml", "vimscript"]),
2226    );
2227    m.insert(
2228        "Vim Snippet",
2229        HashSet::from(["neosnippet", "snipmate", "ultisnip", "ultisnips", "vim snippet"]),
2230    );
2231    m.insert(
2232        "Visual Basic .NET",
2233        HashSet::from(["vb .net", "vb.net", "vbnet", "visual basic", "visual basic .net"]),
2234    );
2235    m.insert(
2236        "Visual Basic 6.0",
2237        HashSet::from([
2238            "classic visual basic",
2239            "vb 6",
2240            "vb6",
2241            "visual basic 6",
2242            "visual basic 6.0",
2243            "visual basic classic",
2244        ]),
2245    );
2246    m.insert("Volt", HashSet::from(["volt"]));
2247    m.insert("Vue", HashSet::from(["vue"]));
2248    m.insert("Vyper", HashSet::from(["vyper"]));
2249    m.insert("WDL", HashSet::from(["wdl", "workflow description language"]));
2250    m.insert("WGSL", HashSet::from(["wgsl"]));
2251    m.insert("Wavefront Material", HashSet::from(["wavefront material"]));
2252    m.insert("Wavefront Object", HashSet::from(["wavefront object"]));
2253    m.insert("Web Ontology Language", HashSet::from(["web ontology language"]));
2254    m.insert("WebAssembly", HashSet::from(["wasm", "wast", "webassembly"]));
2255    m.insert(
2256        "WebAssembly Interface Type",
2257        HashSet::from(["webassembly interface type", "wit"]),
2258    );
2259    m.insert("WebIDL", HashSet::from(["webidl"]));
2260    m.insert("WebVTT", HashSet::from(["vtt", "webvtt"]));
2261    m.insert("Whiley", HashSet::from(["whiley"]));
2262    m.insert("Wikitext", HashSet::from(["mediawiki", "wiki", "wikitext"]));
2263    m.insert("Win32 Message File", HashSet::from(["win32 message file"]));
2264    m.insert("Windows Registry Entries", HashSet::from(["windows registry entries"]));
2265    m.insert("Witcher Script", HashSet::from(["witcher script"]));
2266    m.insert(
2267        "Wolfram Language",
2268        HashSet::from([
2269            "mathematica",
2270            "mma",
2271            "wl",
2272            "wolfram",
2273            "wolfram lang",
2274            "wolfram language",
2275        ]),
2276    );
2277    m.insert("Wollok", HashSet::from(["wollok"]));
2278    m.insert(
2279        "World of Warcraft Addon Data",
2280        HashSet::from(["world of warcraft addon data"]),
2281    );
2282    m.insert("Wren", HashSet::from(["wren", "wrenlang"]));
2283    m.insert("X Font Directory Index", HashSet::from(["x font directory index"]));
2284    m.insert("X10", HashSet::from(["x10", "xten"]));
2285    m.insert("XC", HashSet::from(["xc"]));
2286    m.insert("XCompose", HashSet::from(["xcompose"]));
2287    m.insert(
2288        "XML",
2289        HashSet::from(["maven pom", "rss", "wsdl", "xml", "xml property list", "xsd"]),
2290    );
2291    m.insert("XPages", HashSet::from(["xpages"]));
2292    m.insert("XProc", HashSet::from(["xproc"]));
2293    m.insert("XQuery", HashSet::from(["xquery"]));
2294    m.insert("XS", HashSet::from(["xs"]));
2295    m.insert("XSLT", HashSet::from(["xsl", "xslt"]));
2296    m.insert("Xmake", HashSet::from(["xmake"]));
2297    m.insert("Xojo", HashSet::from(["xojo"]));
2298    m.insert("Xonsh", HashSet::from(["xonsh"]));
2299    m.insert("Xtend", HashSet::from(["xtend"]));
2300    m.insert("YAML", HashSet::from(["yaml", "yml"]));
2301    m.insert("YANG", HashSet::from(["yang"]));
2302    m.insert("YARA", HashSet::from(["yara"]));
2303    m.insert("YASnippet", HashSet::from(["snippet", "yas", "yasnippet"]));
2304    m.insert("Yacc", HashSet::from(["bison", "jison", "yacc"]));
2305    m.insert("Yul", HashSet::from(["yul"]));
2306    m.insert("ZAP", HashSet::from(["zap"]));
2307    m.insert("ZIL", HashSet::from(["zil"]));
2308    m.insert("Zeek", HashSet::from(["bro", "zeek"]));
2309    m.insert("ZenScript", HashSet::from(["zenscript"]));
2310    m.insert("Zephir", HashSet::from(["zephir"]));
2311    m.insert("Zig", HashSet::from(["zig"]));
2312    m.insert("Zimpl", HashSet::from(["zimpl"]));
2313    m.insert("Zmodel", HashSet::from(["zmodel"]));
2314    m.insert("crontab", HashSet::from(["cron", "cron table", "crontab"]));
2315    m.insert("desktop", HashSet::from(["desktop"]));
2316    m.insert("dircolors", HashSet::from(["dircolors"]));
2317    m.insert("eC", HashSet::from(["ec"]));
2318    m.insert("edn", HashSet::from(["edn"]));
2319    m.insert("hoon", HashSet::from(["hoon"]));
2320    m.insert("iCalendar", HashSet::from(["ical", "icalendar"]));
2321    m.insert("jq", HashSet::from(["jq"]));
2322    m.insert("kvlang", HashSet::from(["kvlang"]));
2323    m.insert("mIRC Script", HashSet::from(["mirc script"]));
2324    m.insert("mcfunction", HashSet::from(["mcfunction"]));
2325    m.insert("mdsvex", HashSet::from(["mdsvex"]));
2326    m.insert("mupad", HashSet::from(["mupad"]));
2327    m.insert("nesC", HashSet::from(["nesc"]));
2328    m.insert("ooc", HashSet::from(["ooc"]));
2329    m.insert("q", HashSet::from(["q"]));
2330    m.insert("reStructuredText", HashSet::from(["restructuredtext", "rst"]));
2331    m.insert("robots.txt", HashSet::from(["robots", "robots txt", "robots.txt"]));
2332    m.insert("sed", HashSet::from(["sed"]));
2333    m.insert("templ", HashSet::from(["templ"]));
2334    m.insert(
2335        "vCard",
2336        HashSet::from(["electronic business card", "vcard", "virtual contact file"]),
2337    );
2338    m.insert("wisp", HashSet::from(["wisp"]));
2339    m.insert("xBase", HashSet::from(["advpl", "clipper", "foxpro", "xbase"]));
2340    m
2341});
2342
2343/// Preferred default alias for common languages (curated for widespread usage)
2344pub static DEFAULT_ALIASES: LazyLock<HashMap<&'static str, &'static str>> = LazyLock::new(|| {
2345    let mut m = HashMap::with_capacity(39);
2346    m.insert("C", "c");
2347    m.insert("C#", "csharp");
2348    m.insert("C++", "cpp");
2349    m.insert("CSS", "css");
2350    m.insert("Clojure", "clojure");
2351    m.insert("Dart", "dart");
2352    m.insert("Dockerfile", "dockerfile");
2353    m.insert("Elixir", "elixir");
2354    m.insert("Erlang", "erlang");
2355    m.insert("Go", "go");
2356    m.insert("GraphQL", "graphql");
2357    m.insert("HTML", "html");
2358    m.insert("Haskell", "haskell");
2359    m.insert("JSON", "json");
2360    m.insert("Java", "java");
2361    m.insert("JavaScript", "js");
2362    m.insert("Julia", "julia");
2363    m.insert("Kotlin", "kotlin");
2364    m.insert("Less", "less");
2365    m.insert("Lua", "lua");
2366    m.insert("Makefile", "makefile");
2367    m.insert("Markdown", "markdown");
2368    m.insert("Objective-C", "objc");
2369    m.insert("PHP", "php");
2370    m.insert("Perl", "perl");
2371    m.insert("Python", "python");
2372    m.insert("R", "r");
2373    m.insert("Ruby", "ruby");
2374    m.insert("Rust", "rust");
2375    m.insert("SCSS", "scss");
2376    m.insert("SQL", "sql");
2377    m.insert("Sass", "sass");
2378    m.insert("Scala", "scala");
2379    m.insert("Shell", "bash");
2380    m.insert("Swift", "swift");
2381    m.insert("TOML", "toml");
2382    m.insert("TypeScript", "ts");
2383    m.insert("XML", "xml");
2384    m.insert("YAML", "yaml");
2385    m
2386});
2387
2388/// Resolve an alias to its canonical language name
2389#[inline]
2390pub fn resolve_canonical(alias: &str) -> Option<&'static str> {
2391    ALIAS_TO_CANONICAL.get(alias.to_lowercase().as_str()).copied()
2392}
2393
2394/// Check if an alias is valid for a canonical language
2395#[inline]
2396pub fn is_valid_alias(canonical: &str, alias: &str) -> bool {
2397    CANONICAL_TO_ALIASES
2398        .get(canonical)
2399        .map(|aliases| aliases.contains(alias.to_lowercase().as_str()))
2400        .unwrap_or(false)
2401}
2402
2403/// Get the preferred default alias for a language
2404#[inline]
2405pub fn default_alias(canonical: &str) -> Option<&'static str> {
2406    DEFAULT_ALIASES.get(canonical).copied()
2407}
2408
2409/// Get all valid aliases for a canonical language
2410#[inline]
2411pub fn get_aliases(canonical: &str) -> Option<&HashSet<&'static str>> {
2412    CANONICAL_TO_ALIASES.get(canonical)
2413}
2414
2415// Statistics:
2416// - 1208 aliases
2417// - 720 canonical languages
2418// - 39 curated default aliases