locc 1.3.1

CLI for counting lines of code per language
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
use std::path::Path;

pub fn detect(path: &Path) -> Option<(&'static str, (u8, u8, u8))> {
    if let Some(ext) = path.extension().and_then(std::ffi::OsStr::to_str) {
        match ext {
            "rs" | "rs.in" => Some(("Rust", (222, 165, 132))),
            "cgi" | "fcgi" | "gyp" | "gypi" | "lmi" | "py" | "py3" | "pyde" | "pyi" | "pyp" | "pyt" | "pyw" | "rpy" | "spec" | "tac" | "wsgi" | "xpy" => Some(("Python", (53, 114, 165))),
            "_js" | "bones" | "cjs" | "es" | "es6" | "frag" | "gs" | "jake" | "javascript" | "js" | "jsb" | "jscad" | "jsfl" | "jslib" | "jsm" | "jspre" | "jss" | "jsx" | "mjs" | "njs" | "pac" | "sjs" | "ssjs" | "xsjs" | "xsjslib" => Some(("JavaScript", (241, 224, 90))),
            "cts" | "mts" | "ts" => Some(("TypeScript", (49, 120, 198))),
            "go" => Some(("Go", (0, 173, 216))),
            "builder" | "eye" | "gemspec" | "god" | "jbuilder" | "mspec" | "pluginspec" | "podspec" | "prawn" | "rabl" | "rake" | "rb" | "rbi" | "rbuild" | "rbw" | "rbx" | "ru" | "ruby" | "thor" | "watchr" => Some(("Ruby", (112, 21, 22))),
            "c" | "cats" | "h" | "h.in" | "idc" => Some(("C", (85, 85, 85))),
            "c++" | "cc" | "cp" | "cpp" | "cppm" | "cxx" | "h++" | "hh" | "hpp" | "hxx" | "inc" | "inl" | "ino" | "ipp" | "ixx" | "re" | "tcc" | "tpp" | "txx" => Some(("C++", (243, 75, 125))),
            "cake" | "cs" | "cs.pp" | "csx" | "linq" => Some(("C#", (115, 85, 221))),
            "jav" | "java" | "jsh" => Some(("Java", (176, 114, 25))),
            "kt" | "ktm" | "kts" => Some(("Kotlin", (169, 123, 255))),
            "swift" => Some(("Swift", (240, 81, 56))),
            "aw" | "ctp" | "php" | "php3" | "php4" | "php5" | "phps" | "phpt" => Some(("PHP", (79, 93, 149))),
            "bash" | "bats" | "command" | "ksh" | "sbatch" | "sh" | "sh.in" | "slurm" | "tmux" | "tool" | "trigger" | "zsh" | "zsh-theme" => Some(("Shell", (137, 224, 81))),
            "kojo" | "sbt" | "sc" | "scala" => Some(("Scala", (194, 45, 64))),
            "dart" => Some(("Dart", (0, 180, 171))),
            "lua" | "nse" | "p8" | "pd_lua" | "rbxs" | "rockspec" | "wlua" => Some(("Lua", (0, 0, 128))),
            "hs" | "hs-boot" | "hsc" => Some(("Haskell", (94, 80, 134))),
            "ex" | "exs" => Some(("Elixir", (110, 74, 126))),
            "bb" | "boot" | "cl2" | "clj" | "cljc" | "cljs" | "cljs.hl" | "cljscm" | "cljx" | "hic" => Some(("Clojure", (219, 88, 85))),
            "al" | "perl" | "ph" | "pl" | "plx" | "pm" | "psgi" | "t" => Some(("Perl", (2, 152, 195))),
            "r" | "rd" | "rsx" => Some(("R", (25, 140, 231))),
            "m" => Some(("Objective-C", (67, 142, 255))),
            "a51" | "asm" | "i" | "nas" | "nasm" | "s" => Some(("Assembly", (110, 76, 19))),
            "zig" | "zig.zon" => Some(("Zig", (236, 145, 92))),
            "eliom" | "eliomi" | "ml" | "ml4" | "mli" | "mll" | "mly" => Some(("OCaml", (239, 122, 8))),
            "fs" | "fsi" | "fsx" => Some(("F#", (184, 69, 252))),
            "app" | "app.src" | "erl" | "escript" | "hrl" | "xrl" | "yrl" => Some(("Erlang", (184, 57, 152))),
            "cr" => Some(("Crystal", (0, 1, 0))),
            "nim" | "nim.cfg" | "nimble" | "nimrod" | "nims" => Some(("Nim", (255, 194, 0))),
            "f" | "f77" | "for" | "fpp" => Some(("Fortran", (77, 65, 177))),
            "ada" | "adb" | "ads" => Some(("Ada", (2, 248, 140))),
            "dfm" | "dpr" | "lpr" | "pas" | "pascal" | "pp" => Some(("Pascal", (227, 241, 113))),
            "ps1" | "psd1" | "psm1" => Some(("PowerShell", (1, 36, 86))),
            "containerfile" | "dockerfile" => Some(("Dockerfile", (56, 77, 84))),
            "d" | "mak" | "make" | "makefile" | "mk" | "mkfile" => Some(("Makefile", (66, 120, 25))),
            "cmake" | "cmake.in" => Some(("CMake", (218, 52, 52))),
            "nix" => Some(("Nix", (126, 126, 255))),
            "gleam" => Some(("Gleam", (255, 175, 243))),
            "cbl" | "ccp" | "cob" | "cobol" | "cpy" => Some(("COBOL", (136, 136, 136))),
            "hc" => Some(("HolyC", (255, 239, 175))),
            "bsl" | "os" => Some(("1C Enterprise", (129, 76, 204))),
            "4dm" => Some(("4D", (0, 66, 137))),
            "abap" => Some(("ABAP", (232, 39, 75))),
            "asddls" => Some(("ABAP CDS", (85, 94, 37))),
            "as" => Some(("ActionScript", (136, 43, 15))),
            "agda" => Some(("Agda", (49, 86, 101))),
            "asc" | "ash" => Some(("AGS Script", (185, 217, 255))),
            "aidl" => Some(("AIDL", (52, 235, 107))),
            "ak" => Some(("Aiken", (100, 15, 248))),
            "alg" => Some(("ALGOL", (209, 224, 219))),
            "als" => Some(("Alloy", (100, 200, 0))),
            "ampl" | "mod" => Some(("AMPL", (230, 239, 187))),
            "angelscript" => Some(("AngelScript", (199, 215, 220))),
            "lp" => Some(("Answer Set Programming", (169, 204, 41))),
            "g4" => Some(("ANTLR", (157, 195, 255))),
            "apex" | "cls" => Some(("Apex", (23, 151, 192))),
            "apl" | "dyalog" => Some(("APL", (90, 129, 100))),
            "agc" => Some(("Apollo Guidance Computer", (11, 61, 145))),
            "applescript" | "scpt" => Some(("AppleScript", (16, 31, 31))),
            "arc" => Some(("Arc", (170, 42, 254))),
            "asl" | "dsl" => Some(("ASL", (136, 136, 136))),
            "asax" | "ascx" | "ashx" | "asmx" | "aspx" | "axd" => Some(("ASP.NET", (148, 0, 255))),
            "aj" => Some(("AspectJ", (169, 87, 176))),
            "asy" => Some(("Asymptote", (255, 0, 0))),
            "dats" | "hats" | "sats" => Some(("ATS", (26, 198, 32))),
            "aug" => Some(("Augeas", (156, 193, 52))),
            "ahk" | "ahkl" => Some(("AutoHotkey", (101, 148, 185))),
            "au3" => Some(("AutoIt", (28, 53, 82))),
            "auk" | "awk" | "gawk" | "mawk" | "nawk" => Some(("Awk", (195, 14, 155))),
            "mch" => Some(("B (Formal Method)", (138, 168, 197))),
            "bas" => Some(("B4X", (0, 228, 255))),
            "bal" => Some(("Ballerina", (255, 80, 0))),
            "baml" => Some(("BAML", (168, 85, 247))),
            "bat" | "cmd" => Some(("Batchfile", (193, 241, 46))),
            "bf" => Some(("Beef", (165, 47, 78))),
            "befunge" => Some(("Befunge", (136, 136, 136))),
            "be" => Some(("Berry", (21, 161, 60))),
            "bst" => Some(("BibTeX Style", (136, 136, 136))),
            "bicep" | "bicepparam" => Some(("Bicep", (81, 154, 186))),
            "bison" => Some(("Bison", (106, 70, 63))),
            "bbappend" | "bbclass" => Some(("BitBake", (0, 188, 228))),
            "decls" => Some(("BlitzBasic", (0, 255, 174))),
            "bmx" => Some(("BlitzMax", (205, 100, 0))),
            "bsv" => Some(("Bluespec", (18, 34, 60))),
            "bs" => Some(("Bluespec BH", (18, 34, 60))),
            "boo" => Some(("Boo", (212, 190, 193))),
            "bpl" => Some(("Boogie", (200, 15, 160))),
            "bqn" => Some(("BQN", (43, 112, 103))),
            "b" => Some(("Brainfuck", (47, 37, 48))),
            "brs" => Some(("Brightscript", (102, 45, 145))),
            "chs" => Some(("C2hs Haskell", (136, 136, 136))),
            "c3" => Some(("C3", (37, 99, 235))),
            "cdc" => Some(("Cadence", (0, 239, 139))),
            "cairo" => Some(("Cairo", (255, 74, 72))),
            "mligo" => Some(("CameLIGO", (59, 225, 51))),
            "cj" => Some(("Cangjie", (0, 134, 139))),
            "cds" => Some(("CAP CDS", (0, 146, 209))),
            "capnp" => Some(("Cap'n Proto", (196, 39, 39))),
            "carbon" => Some(("Carbon", (34, 34, 34))),
            "mss" => Some(("CartoCSS", (136, 136, 136))),
            "ceylon" => Some(("Ceylon", (223, 165, 53))),
            "chpl" => Some(("Chapel", (141, 198, 63))),
            "ch" => Some(("Charity", (136, 136, 136))),
            "ck" => Some(("ChucK", (63, 128, 0))),
            "circom" => Some(("Circom", (112, 117, 117))),
            "cirru" => Some(("Cirru", (204, 204, 255))),
            "clw" => Some(("Clarion", (219, 144, 30))),
            "clar" => Some(("Clarity", (85, 70, 255))),
            "asp" => Some(("Classic ASP", (106, 64, 253))),
            "dcl" | "icl" => Some(("Clean", (63, 133, 175))),
            "click" => Some(("Click", (228, 230, 243))),
            "clp" => Some(("CLIPS", (0, 163, 0))),
            "clue" => Some(("Clue", (0, 9, 181))),
            "ql" | "qll" => Some(("CodeQL", (20, 15, 70))),
            "_coffee" | "cjsx" | "coffee" | "iced" => Some(("CoffeeScript", (36, 71, 118))),
            "cfm" | "cfml" => Some(("ColdFusion", (237, 44, 214))),
            "cfc" => Some(("ColdFusion CFC", (237, 44, 214))),
            "asd" | "cl" | "l" | "lisp" | "lsp" | "ny" | "podsl" | "sexp" => Some(("Common Lisp", (63, 182, 139))),
            "cwl" => Some(("Common Workflow Language", (181, 49, 76))),
            "cps" => Some(("Component Pascal", (176, 206, 78))),
            "cql" => Some(("CQL", (0, 96, 145))),
            "orc" | "udo" => Some(("Csound", (26, 26, 26))),
            "csd" => Some(("Csound Document", (26, 26, 26))),
            "sco" => Some(("Csound Score", (26, 26, 26))),
            "cu" | "cuh" => Some(("Cuda", (58, 78, 58))),
            "cue" => Some(("CUE", (88, 134, 225))),
            "curry" => Some(("Curry", (83, 18, 66))),
            "w" => Some(("CWeb", (0, 0, 122))),
            "cy" => Some(("Cycript", (136, 136, 136))),
            "cyp" | "cypher" => Some(("Cypher", (52, 192, 235))),
            "pxd" | "pxi" | "pyx" => Some(("Cython", (254, 223, 91))),
            "di" => Some(("D", (186, 89, 94))),
            "dfy" => Some(("Dafny", (255, 236, 37))),
            "das" => Some(("Daslang", (211, 211, 211))),
            "dwl" => Some(("DataWeave", (0, 58, 82))),
            "dsc" => Some(("DenizenScript", (251, 238, 150))),
            "dhall" => Some(("Dhall", (223, 175, 255))),
            "com" => Some(("DIGITAL Command Language", (136, 136, 136))),
            "dm" => Some(("DM", (68, 114, 101))),
            "djs" => Some(("Dogescript", (204, 167, 96))),
            "dyl" | "dylan" | "intr" | "lid" => Some(("Dylan", (108, 97, 110))),
            "e" => Some(("E", (204, 206, 53))),
            "ec" | "eh" => Some(("eC", (145, 57, 96))),
            "ecl" | "eclxml" => Some(("ECL", (138, 18, 103))),
            "edgeql" | "esdl" => Some(("EdgeQL", (49, 167, 255))),
            "elm" => Some(("Elm", (96, 181, 204))),
            "elv" => Some(("Elvish", (85, 187, 85))),
            "el" | "emacs" | "emacs.desktop" => Some(("Emacs Lisp", (192, 101, 219))),
            "em" | "emberscript" => Some(("EmberScript", (255, 244, 243))),
            "eq" => Some(("EQ", (167, 134, 73))),
            "fst" | "fsti" => Some(("F*", (87, 46, 48))),
            "factor" => Some(("Factor", (99, 103, 70))),
            "fancypack" | "fy" => Some(("Fancy", (123, 157, 180))),
            "fan" => Some(("Fantom", (20, 37, 60))),
            "dsp" => Some(("Faust", (195, 114, 64))),
            "fnl" => Some(("Fennel", (255, 243, 215))),
            "fir" => Some(("FIRRTL", (47, 99, 47))),
            "fish" => Some(("fish", (74, 174, 71))),
            "flix" => Some(("Flix", (212, 74, 69))),
            "ftl" => Some(("Fluent", (255, 204, 51))),
            "flux" | "fx" => Some(("FLUX", (136, 204, 255))),
            "4th" | "forth" | "fr" | "frt" | "fth" => Some(("Forth", (52, 23, 8))),
            "f03" | "f08" | "f90" | "f95" => Some(("Fortran Free Form", (77, 65, 177))),
            "bi" => Some(("FreeBASIC", (20, 26, 201))),
            "ftlh" => Some(("FreeMarker", (0, 80, 178))),
            "fut" => Some(("Futhark", (95, 2, 31))),
            "cnc" | "g" | "gco" | "gcode" => Some(("G-code", (208, 140, 242))),
            "gml" => Some(("Game Maker Language", (113, 180, 23))),
            "gaml" => Some(("GAML", (255, 199, 102))),
            "gms" => Some(("GAMS", (244, 154, 34))),
            "gap" | "gd" | "gi" | "tst" => Some(("GAP", (0, 0, 204))),
            "md" => Some(("GCC Machine Description", (255, 207, 171))),
            "gdb" | "gdbinit" => Some(("GDB", (136, 136, 136))),
            "gdshader" | "gdshaderinc" => Some(("GDShader", (71, 140, 191))),
            "4gl" => Some(("Genero 4gl", (99, 64, 142))),
            "kid" => Some(("Genshi", (149, 21, 49))),
            "ebuild" => Some(("Gentoo Ebuild", (148, 0, 255))),
            "eclass" => Some(("Gentoo Eclass", (148, 0, 255))),
            "feature" | "story" => Some(("Gherkin", (91, 32, 99))),
            "gjs" => Some(("Glimmer JS", (245, 131, 95))),
            "gts" => Some(("Glimmer TS", (49, 120, 198))),
            "fp" | "frg" | "fsh" | "fshader" | "geo" | "geom" | "glsl" | "glslf" | "glslv" | "gshader" | "rchit" | "rmiss" | "shader" | "tesc" | "tese" | "vert" | "vrx" | "vs" | "vsh" | "vshader" => Some(("GLSL", (86, 134, 165))),
            "glf" => Some(("Glyph", (193, 172, 127))),
            "gno" => Some(("Gno", (83, 12, 4))),
            "gnu" | "gnuplot" | "gp" | "p" | "plot" | "plt" => Some(("Gnuplot", (240, 169, 240))),
            "golo" => Some(("Golo", (136, 86, 42))),
            "gst" | "gsx" | "vark" => Some(("Gosu", (130, 147, 127))),
            "grace" => Some(("Grace", (97, 95, 139))),
            "gf" => Some(("Grammatical Framework", (255, 0, 0))),
            "groovy" | "grt" | "gtpl" | "gvy" => Some(("Groovy", (66, 152, 184))),
            "gsp" => Some(("Groovy Server Pages", (66, 152, 184))),
            "csc" | "gsc" | "gsh" => Some(("GSC", (255, 104, 0))),
            "hack" | "hhi" => Some(("Hack", (135, 135, 135))),
            "hb" => Some(("Harbour", (14, 96, 227))),
            "ha" => Some(("Hare", (157, 116, 36))),
            "hx" | "hxsl" => Some(("Haxe", (223, 121, 0))),
            "hcl" | "nomad" | "tf" | "tfvars" | "tofu" | "workflow" => Some(("HCL", (132, 79, 186))),
            "hip" => Some(("HIP", (79, 58, 79))),
            "hql" | "q" => Some(("HiveQL", (220, 226, 0))),
            "cginc" | "fxh" | "hlsl" | "hlsli" => Some(("HLSL", (170, 206, 96))),
            "hoon" => Some(("hoon", (0, 177, 113))),
            "hurl" => Some(("Hurl", (255, 2, 136))),
            "hy" => Some(("Hy", (119, 144, 178))),
            "dlm" | "pro" => Some(("IDL", (163, 82, 47))),
            "idr" | "lidr" => Some(("Idris", (179, 0, 0))),
            "ipf" => Some(("IGOR Pro", (0, 0, 204))),
            "il" => Some(("IL Assembly", (81, 43, 212))),
            "ijm" => Some(("ImageJ Macro", (153, 170, 255))),
            "imba" => Some(("Imba", (22, 206, 198))),
            "i7x" | "ni" => Some(("Inform 7", (136, 136, 136))),
            "ink" => Some(("Ink", (136, 136, 136))),
            "isl" | "iss" => Some(("Inno Setup", (38, 75, 153))),
            "io" => Some(("Io", (169, 24, 141))),
            "ik" => Some(("Ioke", (7, 129, 147))),
            "thy" => Some(("Isabelle", (254, 254, 0))),
            "ispc" => Some(("ISPC", (45, 104, 177))),
            "ijs" => Some(("J", (158, 237, 255))),
            "jac" => Some(("Jac", (252, 121, 45))),
            "jai" => Some(("Jai", (171, 139, 75))),
            "janet" => Some(("Janet", (8, 134, 165))),
            "j" => Some(("Jasmin", (208, 54, 0))),
            "jsp" | "tag" => Some(("Java Server Pages", (42, 98, 119))),
            "jte" => Some(("Java Template Engine", (42, 98, 119))),
            "js.erb" => Some(("JavaScript+ERB", (241, 224, 90))),
            "jcl" => Some(("JCL", (217, 14, 9))),
            "mpl" | "mps" | "msd" => Some(("JetBrains MPS", (33, 215, 137))),
            "flex" | "jflex" => Some(("JFlex", (219, 202, 0))),
            "jison" => Some(("Jison", (86, 179, 203))),
            "jisonlex" => Some(("Jison Lex", (86, 179, 203))),
            "iol" | "ol" => Some(("Jolie", (132, 49, 121))),
            "jq" => Some(("jq", (199, 37, 78))),
            "jsonnet" | "libsonnet" => Some(("Jsonnet", (0, 100, 189))),
            "jl" => Some(("Julia", (162, 112, 186))),
            "just" => Some(("Just", (56, 77, 84))),
            "ksy" => Some(("Kaitai Struct", (119, 59, 55))),
            "kak" => Some(("KakouneScript", (111, 128, 66))),
            "k" => Some(("KCL", (122, 186, 191))),
            "ks" => Some(("KerboScript", (65, 173, 240))),
            "kk" => Some(("Koka", (33, 81, 102))),
            "krl" => Some(("KRL", (40, 67, 10))),
            "lvclass" | "lvlib" | "lvproj" => Some(("LabVIEW", (254, 222, 6))),
            "langium" => Some(("Langium", (44, 140, 135))),
            "las" | "lasso" | "lasso8" | "lasso9" => Some(("Lasso", (153, 153, 153))),
            "hlean" | "lean" => Some(("Lean", (136, 136, 136))),
            "leo" => Some(("Leo", (196, 255, 194))),
            "lex" => Some(("Lex", (219, 202, 0))),
            "lfe" => Some(("LFE", (76, 48, 35))),
            "ligo" => Some(("LigoLANG", (14, 116, 255))),
            "ily" | "ly" => Some(("LilyPond", (156, 204, 124))),
            "ld" | "lds" | "x" => Some(("Linker Script", (136, 136, 136))),
            "liq" => Some(("Liquidsoap", (153, 0, 102))),
            "lagda" => Some(("Literate Agda", (49, 86, 101))),
            "coffee.md" | "litcoffee" => Some(("Literate CoffeeScript", (36, 71, 118))),
            "lhs" => Some(("Literate Haskell", (94, 80, 134))),
            "livecodescript" => Some(("LiveCode Script", (12, 91, 165))),
            "_ls" | "ls" => Some(("LiveScript", (73, 152, 134))),
            "ll" => Some(("LLVM", (24, 86, 25))),
            "xi" | "xm" => Some(("Logos", (136, 136, 136))),
            "lgt" | "logtalk" => Some(("Logtalk", (41, 91, 154))),
            "lol" => Some(("LOLCODE", (204, 153, 0))),
            "lkml" | "lookml" => Some(("LookML", (101, 43, 129))),
            "lsl" | "lslp" => Some(("LSL", (61, 153, 112))),
            "luau" => Some(("Luau", (0, 162, 255))),
            "mumps" => Some(("M", (136, 136, 136))),
            "m4" | "mc" => Some(("M4", (136, 136, 136))),
            "m2" => Some(("Macaulay2", (216, 255, 255))),
            "mako" | "mao" => Some(("Mako", (126, 133, 141))),
            "matlab" => Some(("MATLAB", (225, 103, 55))),
            "maxhelp" | "maxpat" | "maxproj" | "mxt" | "pat" => Some(("Max", (196, 167, 156))),
            "mcr" | "ms" => Some(("MAXScript", (0, 166, 166))),
            "mcfunction" => Some(("mcfunction", (226, 40, 55))),
            "moo" => Some(("Mercury", (255, 43, 43))),
            "metal" => Some(("Metal", (143, 20, 233))),
            "metta" => Some(("MeTTa", (106, 90, 205))),
            "minid" => Some(("MiniD", (136, 136, 136))),
            "mzn" => Some(("MiniZinc", (6, 169, 230))),
            "mint" => Some(("Mint", (2, 176, 70))),
            "druby" | "duby" | "mirah" => Some(("Mirah", (199, 169, 56))),
            "mrc" => Some(("mIRC Script", (61, 87, 195))),
            "mlir" => Some(("MLIR", (94, 200, 219))),
            "mo" => Some(("Modelica", (222, 29, 49))),
            "i3" | "ig" | "m3" | "mg" => Some(("Modula-3", (34, 51, 136))),
            "mmk" | "mms" => Some(("Module Management System", (136, 136, 136))),
            "mojo" => Some(("Mojo", (255, 76, 31))),
            "monkey" | "monkey2" => Some(("Monkey", (136, 136, 136))),
            "mbt" => Some(("MoonBit", (185, 35, 129))),
            "moon" => Some(("MoonScript", (255, 69, 133))),
            "x68" => Some(("Motorola 68K Assembly", (0, 93, 170))),
            "move" => Some(("Move", (74, 19, 122))),
            "mq4" | "mqh" => Some(("MQL4", (98, 168, 214))),
            "mq5" => Some(("MQL5", (74, 118, 184))),
            "muf" => Some(("MUF", (136, 136, 136))),
            "mu" => Some(("mupad", (36, 73, 99))),
            "myt" => Some(("Myghty", (136, 136, 136))),
            "nasl" => Some(("NASL", (136, 136, 136))),
            "ncl" => Some(("NCL", (40, 67, 31))),
            "ne" | "nearley" => Some(("Nearley", (153, 0, 0))),
            "n" => Some(("Nemerle", (61, 60, 110))),
            "nc" => Some(("nesC", (148, 176, 199))),
            "axi" | "axs" => Some(("NetLinx", (10, 160, 255))),
            "axi.erb" | "axs.erb" => Some(("NetLinx+ERB", (116, 127, 170))),
            "nlogo" => Some(("NetLogo", (255, 99, 117))),
            "nl" => Some(("NewLisp", (135, 174, 215))),
            "nf" => Some(("Nextflow", (58, 196, 134))),
            "nit" => Some(("Nit", (0, 153, 23))),
            "nr" => Some(("Noir", (47, 31, 73))),
            "nsh" | "nsi" => Some(("NSIS", (136, 136, 136))),
            "nu" => Some(("Nu", (201, 223, 64))),
            "numpy" | "numpyw" | "numsc" => Some(("NumPy", (156, 138, 249))),
            "nss" => Some(("NWScript", (17, 21, 34))),
            "ob2" => Some(("Oberon", (136, 136, 136))),
            "mm" => Some(("Objective-C++", (104, 102, 251))),
            "sj" => Some(("Objective-J", (255, 12, 90))),
            "odin" => Some(("Odin", (96, 175, 254))),
            "omgrofl" => Some(("Omgrofl", (202, 187, 255))),
            "msg" => Some(("OMNeT++ MSG", (160, 224, 160))),
            "ned" => Some(("OMNeT++ NED", (8, 96, 124))),
            "ooc" => Some(("ooc", (176, 183, 126))),
            "opa" => Some(("Opa", (136, 136, 136))),
            "opal" => Some(("Opal", (247, 237, 224))),
            "rego" => Some(("Open Policy Agent", (125, 145, 153))),
            "opencl" => Some(("OpenCL", (237, 46, 45))),
            "qasm" => Some(("OpenQASM", (170, 112, 255))),
            "scad" => Some(("OpenSCAD", (229, 205, 69))),
            "overpassql" => Some(("OverpassQL", (204, 226, 170))),
            "opy" => Some(("OverPy", (120, 179, 85))),
            "ox" | "oxh" | "oxo" => Some(("Ox", (136, 136, 136))),
            "oxygene" => Some(("Oxygene", (205, 208, 227))),
            "oz" => Some(("Oz", (250, 183, 56))),
            "p4" => Some(("P4", (112, 85, 181))),
            "pact" => Some(("Pact", (247, 168, 184))),
            "pan" => Some(("Pan", (204, 0, 0))),
            "psc" => Some(("Papyrus", (102, 0, 204))),
            "parrot" => Some(("Parrot", (243, 202, 10))),
            "pasm" => Some(("Parrot Assembly", (136, 136, 136))),
            "pir" => Some(("Parrot Internal Representation", (136, 136, 136))),
            "pwn" | "sma" => Some(("Pawn", (219, 178, 132))),
            "pddl" => Some(("PDDL", (13, 0, 255))),
            "peggy" | "pegjs" => Some(("PEG.js", (35, 77, 107))),
            "pep" => Some(("Pep8", (199, 111, 91))),
            "pig" => Some(("PigLatin", (252, 215, 222))),
            "pike" | "pmod" => Some(("Pike", (0, 83, 144))),
            "pkl" => Some(("Pkl", (107, 149, 67))),
            "pgsql" | "sql" => Some(("PLpgSQL", (51, 103, 144))),
            "bdy" | "ddl" | "fnc" | "pck" | "pkb" | "pks" | "plb" | "pls" | "plsql" | "prc" | "spc" | "tpb" | "tps" | "trg" | "vw" => Some(("PLSQL", (218, 216, 216))),
            "pogo" => Some(("PogoScript", (216, 0, 116))),
            "polar" => Some(("Polar", (174, 129, 255))),
            "pony" => Some(("Pony", (136, 136, 136))),
            "por" => Some(("Portugol", (248, 189, 0))),
            "pov" => Some(("POV-Ray SDL", (107, 172, 101))),
            "pq" => Some(("Power Query", (211, 142, 13))),
            "pbt" | "sra" | "sru" | "srw" => Some(("PowerBuilder", (143, 15, 141))),
            "praat" => Some(("Praat", (200, 80, 109))),
            "pc" => Some(("Pro*C", (187, 131, 104))),
            "pde" => Some(("Processing", (0, 150, 216))),
            "prolog" | "yap" => Some(("Prolog", (116, 40, 60))),
            "pml" => Some(("Promela", (222, 0, 0))),
            "spin" => Some(("Propeller Spin", (127, 162, 167))),
            "pb" | "pbi" => Some(("PureBasic", (90, 105, 134))),
            "purs" => Some(("PureScript", (29, 34, 45))),
            "arr" => Some(("Pyret", (238, 30, 16))),
            "qs" => Some(("Q#", (254, 214, 89))),
            "pri" => Some(("QMake", (136, 136, 136))),
            "qbs" | "qml" => Some(("QML", (68, 165, 28))),
            "qc" => Some(("QuakeC", (151, 87, 119))),
            "qnt" => Some(("Quint", (157, 108, 229))),
            "rkt" | "rktd" | "rktl" | "scrbl" => Some(("Racket", (60, 92, 170))),
            "rl" => Some(("Ragel", (157, 82, 0))),
            "6pl" | "6pm" | "nqp" | "p6" | "p6l" | "p6m" | "pl6" | "pm6" | "raku" | "rakumod" => Some(("Raku", (0, 0, 251))),
            "rsc" => Some(("Rascal", (255, 250, 160))),
            "rascript" => Some(("RAScript", (44, 151, 250))),
            "rbbas" | "rbfrm" | "rbmnu" | "rbres" | "rbtbar" | "rbuistate" => Some(("REALbasic", (136, 136, 136))),
            "rei" => Some(("Reason", (255, 88, 71))),
            "religo" => Some(("ReasonLIGO", (255, 88, 71))),
            "r2" | "r3" | "reb" | "rebol" => Some(("Rebol", (53, 138, 91))),
            "red" | "reds" => Some(("Red", (245, 0, 0))),
            "cw" => Some(("Redcode", (136, 136, 136))),
            "rsh" => Some(("RenderScript", (136, 136, 136))),
            "res" | "resi" => Some(("ReScript", (237, 80, 81))),
            "pprx" | "rex" | "rexx" => Some(("REXX", (217, 14, 9))),
            "ring" => Some(("Ring", (45, 84, 203))),
            "resource" | "robot" => Some(("RobotFramework", (0, 192, 181))),
            "roc" => Some(("Roc", (124, 56, 245))),
            "coq" | "v" => Some(("Rocq Prover", (208, 182, 140))),
            "rg" => Some(("Rouge", (204, 0, 136))),
            "rpgle" | "sqlrpgle" => Some(("RPGLE", (43, 222, 33))),
            "sage" | "sagews" => Some(("Sage", (136, 136, 136))),
            "sail" => Some(("Sail", (37, 157, 213))),
            "sls" => Some(("SaltStack", (100, 100, 100))),
            "sas" => Some(("SAS", (179, 73, 54))),
            "scenic" => Some(("Scenic", (253, 199, 0))),
            "sch" | "scm" | "sld" | "sps" | "ss" => Some(("Scheme", (30, 74, 236))),
            "sce" | "sci" => Some(("Scilab", (202, 15, 33))),
            "sed" => Some(("sed", (100, 185, 112))),
            "self" => Some(("Self", (5, 121, 170))),
            "sh-session" => Some(("ShellSession", (136, 136, 136))),
            "shen" => Some(("Shen", (18, 15, 20))),
            "sieve" => Some(("Sieve", (136, 136, 136))),
            "slang" => Some(("Slang", (31, 190, 201))),
            "sl" => Some(("Slash", (0, 126, 255))),
            "ice" => Some(("Slice", (0, 63, 162))),
            "smali" => Some(("Smali", (136, 136, 136))),
            "st" => Some(("Smalltalk", (89, 103, 6))),
            "tpl" => Some(("Smarty", (240, 192, 64))),
            "smithy" => Some(("Smithy", (196, 69, 54))),
            "cocci" => Some(("SmPL", (201, 73, 73))),
            "smt" | "smt2" | "z3" => Some(("SMT", (136, 136, 136))),
            "smk" | "snakefile" => Some(("Snakemake", (65, 145, 121))),
            "sol" => Some(("Solidity", (170, 103, 70))),
            "sp" => Some(("SourcePawn", (246, 158, 29))),
            "hqf" | "sqf" => Some(("SQF", (63, 63, 63))),
            "db2" => Some(("SQLPL", (227, 140, 0))),
            "nut" => Some(("Squirrel", (128, 0, 0))),
            "stan" => Some(("Stan", (178, 1, 29))),
            "fun" | "sig" | "sml" => Some(("Standard ML", (220, 86, 109))),
            "bzl" | "star" => Some(("Starlark", (118, 210, 117))),
            "ado" | "do" | "doh" | "ihlp" | "mata" | "matah" | "sthlp" => Some(("Stata", (26, 95, 145))),
            "scd" => Some(("SuperCollider", (70, 57, 11))),
            "surql" => Some(("SurrealQL", (255, 0, 160))),
            "sw" => Some(("Sway", (0, 245, 140))),
            "swg" | "swig" => Some(("SWIG", (136, 136, 136))),
            "sv" | "svh" | "vh" => Some(("SystemVerilog", (218, 225, 194))),
            "tact" => Some(("Tact", (72, 181, 255))),
            "talon" => Some(("Talon", (51, 51, 51))),
            "adp" | "sdc" | "tcl" | "tcl.in" | "tm" | "xdc" => Some(("Tcl", (228, 204, 152))),
            "csh" | "tcsh" => Some(("Tcsh", (136, 136, 136))),
            "tl" => Some(("Teal", (0, 177, 188))),
            "thrift" => Some(("Thrift", (209, 33, 39))),
            "8xp" | "8xp.txt" => Some(("TI Program", (160, 170, 135))),
            "tlv" => Some(("TL-Verilog", (196, 0, 35))),
            "tla" => Some(("TLA", (75, 0, 121))),
            "toit" => Some(("Toit", (194, 201, 251))),
            "tsx" => Some(("TSX", (49, 120, 198))),
            "tu" => Some(("Turing", (207, 20, 43))),
            "txl" => Some(("TXL", (1, 120, 184))),
            "tsp" => Some(("TypeSpec", (74, 54, 101))),
            "typ" => Some(("Typst", (35, 157, 173))),
            "upc" => Some(("Unified Parallel C", (78, 54, 23))),
            "uno" => Some(("Uno", (153, 51, 204))),
            "uc" => Some(("UnrealScript", (165, 76, 77))),
            "uplc" => Some(("Untyped Plutus Core", (54, 173, 189))),
            "ur" | "urs" => Some(("UrWeb", (204, 204, 238))),
            "vala" | "vapi" => Some(("Vala", (165, 109, 226))),
            "frm" | "vba" => Some(("VBA", (134, 125, 177))),
            "vbs" => Some(("VBScript", (21, 220, 220))),
            "vcl" => Some(("VCL", (20, 138, 168))),
            "veo" => Some(("Verilog", (178, 183, 248))),
            "vhd" | "vhdl" | "vhf" | "vhi" | "vho" | "vhs" | "vht" | "vhw" => Some(("VHDL", (173, 178, 203))),
            "vim" | "vimrc" | "vmb" => Some(("Vim Script", (25, 159, 75))),
            "vb" | "vbhtml" => Some(("Visual Basic .NET", (148, 93, 183))),
            "Dsr" | "ctl" => Some(("Visual Basic 6.0", (44, 99, 83))),
            "volt" => Some(("Volt", (31, 31, 31))),
            "vy" => Some(("Vyper", (159, 76, 242))),
            "wdl" => Some(("WDL", (66, 241, 244))),
            "wast" | "wat" => Some(("WebAssembly", (4, 19, 59))),
            "webidl" => Some(("WebIDL", (136, 136, 136))),
            "wgsl" => Some(("WGSL", (26, 94, 154))),
            "whiley" => Some(("Whiley", (213, 195, 151))),
            "wisp" => Some(("wisp", (117, 130, 209))),
            "ws" => Some(("Witcher Script", (255, 0, 0))),
            "cdf" | "ma" | "mathematica" | "mt" | "nb" | "nbp" | "wl" | "wls" | "wlt" => Some(("Wolfram Language", (221, 17, 0))),
            "wlk" => Some(("Wollok", (162, 55, 56))),
            "wren" => Some(("Wren", (56, 56, 56))),
            "x10" => Some(("X10", (75, 107, 239))),
            "prg" | "prw" => Some(("xBase", (64, 58, 64))),
            "xc" => Some(("XC", (153, 218, 7))),
            "xojo_code" | "xojo_menu" | "xojo_report" | "xojo_script" | "xojo_toolbar" | "xojo_window" => Some(("Xojo", (129, 189, 65))),
            "xsh" => Some(("Xonsh", (40, 94, 239))),
            "xpl" | "xproc" => Some(("XProc", (136, 136, 136))),
            "xq" | "xql" | "xqm" | "xquery" | "xqy" => Some(("XQuery", (82, 50, 231))),
            "xs" => Some(("XS", (136, 136, 136))),
            "xsl" | "xslt" => Some(("XSLT", (235, 140, 235))),
            "xtend" => Some(("Xtend", (36, 37, 93))),
            "y" | "yacc" | "yy" => Some(("Yacc", (75, 108, 75))),
            "yar" | "yara" => Some(("YARA", (34, 0, 0))),
            "yul" => Some(("Yul", (121, 73, 50))),
            "xzap" | "zap" => Some(("ZAP", (13, 102, 94))),
            "bro" | "zeek" => Some(("Zeek", (136, 136, 136))),
            "zs" => Some(("ZenScript", (0, 188, 209))),
            "zep" => Some(("Zephir", (17, 143, 158))),
            "mud" | "zil" => Some(("ZIL", (220, 117, 229))),
            "zimpl" | "zmpl" | "zpl" => Some(("Zimpl", (214, 119, 17))),
            _ => None,
        }
    } else {
        match path.file_name().and_then(|n| n.to_str()) {
            Some("Makefile" | "makefile" | "GNUmakefile") => Some(("Makefile", (66, 120, 25))),
            Some("Dockerfile" | "dockerfile" | "Containerfile") => Some(("Dockerfile", (56, 77, 84))),
            Some("CMakeLists.txt") => Some(("CMake", (218, 52, 52))),
            _ => None,
        }
    }
}