1use std::sync::{Arc, LazyLock};
2
3use crate::{Lang, LangInner};
4
5macro_rules! define_langs {
6 (
7 $(
8 $fn_name:ident => {
9 feature: $feature:literal,
10 name: $name:literal,
11 ts_lang: $ts_lang:expr,
12 node_types_key: $node_types_key:literal,
13 names: [$($alias:literal),* $(,)?],
14 extensions: [$($ext:literal),* $(,)?] $(,)?
15 }
16 ),* $(,)?
17 ) => {
18 $(
20 #[cfg(feature = $feature)]
21 plotnik_macros::generate_node_types!($node_types_key);
22 )*
23
24 $(
26 #[cfg(feature = $feature)]
27 pub fn $fn_name() -> Lang {
28 paste::paste! {
29 static LANG: LazyLock<Lang> = LazyLock::new(|| {
30 Arc::new(LangInner::new_static(
31 $name,
32 $ts_lang.into(),
33 &[<$node_types_key:upper _NODE_TYPES>],
34 ))
35 });
36 }
37 Arc::clone(&LANG)
38 }
39 )*
40
41 pub fn from_name(s: &str) -> Option<Lang> {
42 match s.to_ascii_lowercase().as_str() {
43 $(
44 #[cfg(feature = $feature)]
45 $($alias)|* => Some($fn_name()),
46 )*
47 _ => None,
48 }
49 }
50
51 #[allow(unreachable_patterns)]
52 pub fn from_ext(ext: &str) -> Option<Lang> {
53 match ext.to_ascii_lowercase().as_str() {
54 $(
55 #[cfg(feature = $feature)]
56 $($ext)|* => Some($fn_name()),
57 )*
58 _ => None,
59 }
60 }
61
62 pub fn all() -> Vec<Lang> {
63 vec![
64 $(
65 #[cfg(feature = $feature)]
66 $fn_name(),
67 )*
68 ]
69 }
70 };
71}
72
73define_langs! {
74 ada => {
75 feature: "lang-ada",
76 name: "ada",
77 ts_lang: arborium_ada::language(),
78 node_types_key: "ada",
79 names: ["ada"],
80 extensions: ["ada", "adb", "ads"],
81 },
82 agda => {
83 feature: "lang-agda",
84 name: "agda",
85 ts_lang: arborium_agda::language(),
86 node_types_key: "agda",
87 names: ["agda"],
88 extensions: ["agda"],
89 },
90 asciidoc => {
91 feature: "lang-asciidoc",
92 name: "asciidoc",
93 ts_lang: arborium_asciidoc::language(),
94 node_types_key: "asciidoc",
95 names: ["asciidoc", "adoc"],
96 extensions: ["adoc", "asciidoc", "asc"],
97 },
98 asm => {
99 feature: "lang-asm",
100 name: "asm",
101 ts_lang: arborium_asm::language(),
102 node_types_key: "asm",
103 names: ["asm", "assembly"],
104 extensions: ["asm", "s"],
105 },
106 awk => {
107 feature: "lang-awk",
108 name: "awk",
109 ts_lang: arborium_awk::language(),
110 node_types_key: "awk",
111 names: ["awk", "gawk", "mawk", "nawk"],
112 extensions: ["awk"],
113 },
114 bash => {
115 feature: "lang-bash",
116 name: "bash",
117 ts_lang: arborium_bash::language(),
118 node_types_key: "bash",
119 names: ["bash", "sh", "shell"],
120 extensions: ["sh", "bash"],
121 },
122 batch => {
123 feature: "lang-batch",
124 name: "batch",
125 ts_lang: arborium_batch::language(),
126 node_types_key: "batch",
127 names: ["batch", "bat", "cmd"],
128 extensions: ["bat", "cmd"],
129 },
130 c => {
131 feature: "lang-c",
132 name: "c",
133 ts_lang: arborium_c::language(),
134 node_types_key: "c",
135 names: ["c"],
136 extensions: ["c", "h"],
137 },
138 caddy => {
139 feature: "lang-caddy",
140 name: "caddy",
141 ts_lang: arborium_caddy::language(),
142 node_types_key: "caddy",
143 names: ["caddy", "caddyfile"],
144 extensions: ["caddyfile"],
145 },
146 capnp => {
147 feature: "lang-capnp",
148 name: "capnp",
149 ts_lang: arborium_capnp::language(),
150 node_types_key: "capnp",
151 names: ["capnp", "capnproto"],
152 extensions: ["capnp"],
153 },
154 clojure => {
155 feature: "lang-clojure",
156 name: "clojure",
157 ts_lang: arborium_clojure::language(),
158 node_types_key: "clojure",
159 names: ["clojure", "clj"],
160 extensions: ["clj", "cljs", "cljc", "edn"],
161 },
162 cmake => {
163 feature: "lang-cmake",
164 name: "cmake",
165 ts_lang: arborium_cmake::language(),
166 node_types_key: "cmake",
167 names: ["cmake"],
168 extensions: ["cmake"],
169 },
170 commonlisp => {
171 feature: "lang-commonlisp",
172 name: "commonlisp",
173 ts_lang: arborium_commonlisp::language(),
174 node_types_key: "commonlisp",
175 names: ["commonlisp", "common-lisp", "lisp", "cl"],
176 extensions: ["lisp", "lsp", "cl"],
177 },
178 cpp => {
179 feature: "lang-cpp",
180 name: "cpp",
181 ts_lang: arborium_cpp::language(),
182 node_types_key: "cpp",
183 names: ["cpp", "c++", "cxx", "cc"],
184 extensions: ["cpp", "cc", "cxx", "hpp", "hh", "hxx", "h++", "c++"],
185 },
186 csharp => {
187 feature: "lang-c-sharp",
188 name: "c_sharp",
189 ts_lang: arborium_c_sharp::language(),
190 node_types_key: "c_sharp",
191 names: ["csharp", "c#", "cs", "c_sharp"],
192 extensions: ["cs"],
193 },
194 css => {
195 feature: "lang-css",
196 name: "css",
197 ts_lang: arborium_css::language(),
198 node_types_key: "css",
199 names: ["css"],
200 extensions: ["css"],
201 },
202 d => {
203 feature: "lang-d",
204 name: "d",
205 ts_lang: arborium_d::language(),
206 node_types_key: "d",
207 names: ["d", "dlang"],
208 extensions: ["d"],
209 },
210 dart => {
211 feature: "lang-dart",
212 name: "dart",
213 ts_lang: arborium_dart::language(),
214 node_types_key: "dart",
215 names: ["dart"],
216 extensions: ["dart"],
217 },
218 devicetree => {
219 feature: "lang-devicetree",
220 name: "devicetree",
221 ts_lang: arborium_devicetree::language(),
222 node_types_key: "devicetree",
223 names: ["devicetree", "dts"],
224 extensions: ["dts", "dtsi"],
225 },
226 diff => {
227 feature: "lang-diff",
228 name: "diff",
229 ts_lang: arborium_diff::language(),
230 node_types_key: "diff",
231 names: ["diff", "patch"],
232 extensions: ["diff", "patch"],
233 },
234 dockerfile => {
235 feature: "lang-dockerfile",
236 name: "dockerfile",
237 ts_lang: arborium_dockerfile::language(),
238 node_types_key: "dockerfile",
239 names: ["dockerfile", "docker"],
240 extensions: ["dockerfile"],
241 },
242 dot => {
243 feature: "lang-dot",
244 name: "dot",
245 ts_lang: arborium_dot::language(),
246 node_types_key: "dot",
247 names: ["dot", "graphviz"],
248 extensions: ["dot", "gv"],
249 },
250 elisp => {
251 feature: "lang-elisp",
252 name: "elisp",
253 ts_lang: arborium_elisp::language(),
254 node_types_key: "elisp",
255 names: ["elisp", "emacs-lisp"],
256 extensions: ["el"],
257 },
258 elixir => {
259 feature: "lang-elixir",
260 name: "elixir",
261 ts_lang: arborium_elixir::language(),
262 node_types_key: "elixir",
263 names: ["elixir", "ex"],
264 extensions: ["ex", "exs"],
265 },
266 elm => {
267 feature: "lang-elm",
268 name: "elm",
269 ts_lang: arborium_elm::language(),
270 node_types_key: "elm",
271 names: ["elm"],
272 extensions: ["elm"],
273 },
274 erlang => {
275 feature: "lang-erlang",
276 name: "erlang",
277 ts_lang: arborium_erlang::language(),
278 node_types_key: "erlang",
279 names: ["erlang", "erl"],
280 extensions: ["erl", "hrl"],
281 },
282 fish => {
283 feature: "lang-fish",
284 name: "fish",
285 ts_lang: arborium_fish::language(),
286 node_types_key: "fish",
287 names: ["fish"],
288 extensions: ["fish"],
289 },
290 fsharp => {
291 feature: "lang-fsharp",
292 name: "fsharp",
293 ts_lang: arborium_fsharp::language(),
294 node_types_key: "fsharp",
295 names: ["fsharp", "f#", "fs"],
296 extensions: ["fs", "fsi", "fsx"],
297 },
298 gleam => {
299 feature: "lang-gleam",
300 name: "gleam",
301 ts_lang: arborium_gleam::language(),
302 node_types_key: "gleam",
303 names: ["gleam"],
304 extensions: ["gleam"],
305 },
306 glsl => {
307 feature: "lang-glsl",
308 name: "glsl",
309 ts_lang: arborium_glsl::language(),
310 node_types_key: "glsl",
311 names: ["glsl"],
312 extensions: ["glsl", "vert", "frag", "geom", "tesc", "tese", "comp"],
313 },
314 go => {
315 feature: "lang-go",
316 name: "go",
317 ts_lang: arborium_go::language(),
318 node_types_key: "go",
319 names: ["go", "golang"],
320 extensions: ["go"],
321 },
322 graphql => {
323 feature: "lang-graphql",
324 name: "graphql",
325 ts_lang: arborium_graphql::language(),
326 node_types_key: "graphql",
327 names: ["graphql", "gql"],
328 extensions: ["graphql", "gql"],
329 },
330 groovy => {
331 feature: "lang-groovy",
332 name: "groovy",
333 ts_lang: arborium_groovy::language(),
334 node_types_key: "groovy",
335 names: ["groovy", "gradle"],
336 extensions: ["groovy", "gradle", "gvy", "gy", "gsh"],
337 },
338 haskell => {
339 feature: "lang-haskell",
340 name: "haskell",
341 ts_lang: arborium_haskell::language(),
342 node_types_key: "haskell",
343 names: ["haskell", "hs"],
344 extensions: ["hs", "lhs"],
345 },
346 hcl => {
347 feature: "lang-hcl",
348 name: "hcl",
349 ts_lang: arborium_hcl::language(),
350 node_types_key: "hcl",
351 names: ["hcl", "terraform", "tf"],
352 extensions: ["hcl", "tf", "tfvars"],
353 },
354 hlsl => {
355 feature: "lang-hlsl",
356 name: "hlsl",
357 ts_lang: arborium_hlsl::language(),
358 node_types_key: "hlsl",
359 names: ["hlsl"],
360 extensions: ["hlsl", "hlsli", "fx"],
361 },
362 html => {
363 feature: "lang-html",
364 name: "html",
365 ts_lang: arborium_html::language(),
366 node_types_key: "html",
367 names: ["html", "htm"],
368 extensions: ["html", "htm"],
369 },
370 idris => {
371 feature: "lang-idris",
372 name: "idris",
373 ts_lang: arborium_idris::language(),
374 node_types_key: "idris",
375 names: ["idris"],
376 extensions: ["idr"],
377 },
378 ini => {
379 feature: "lang-ini",
380 name: "ini",
381 ts_lang: arborium_ini::language(),
382 node_types_key: "ini",
383 names: ["ini"],
384 extensions: ["ini", "cfg", "conf"],
385 },
386 java => {
387 feature: "lang-java",
388 name: "java",
389 ts_lang: arborium_java::language(),
390 node_types_key: "java",
391 names: ["java"],
392 extensions: ["java"],
393 },
394 javascript => {
395 feature: "lang-javascript",
396 name: "javascript",
397 ts_lang: arborium_javascript::language(),
398 node_types_key: "javascript",
399 names: ["javascript", "js", "jsx", "ecmascript", "es"],
400 extensions: ["js", "mjs", "cjs", "jsx"],
401 },
402 jinja2 => {
403 feature: "lang-jinja2",
404 name: "jinja2",
405 ts_lang: arborium_jinja2::language(),
406 node_types_key: "jinja2",
407 names: ["jinja2", "jinja"],
408 extensions: ["j2", "jinja", "jinja2"],
409 },
410 jq => {
411 feature: "lang-jq",
412 name: "jq",
413 ts_lang: arborium_jq::language(),
414 node_types_key: "jq",
415 names: ["jq"],
416 extensions: ["jq"],
417 },
418 json => {
419 feature: "lang-json",
420 name: "json",
421 ts_lang: arborium_json::language(),
422 node_types_key: "json",
423 names: ["json"],
424 extensions: ["json"],
425 },
426 julia => {
427 feature: "lang-julia",
428 name: "julia",
429 ts_lang: arborium_julia::language(),
430 node_types_key: "julia",
431 names: ["julia", "jl"],
432 extensions: ["jl"],
433 },
434 kdl => {
435 feature: "lang-kdl",
436 name: "kdl",
437 ts_lang: arborium_kdl::language(),
438 node_types_key: "kdl",
439 names: ["kdl"],
440 extensions: ["kdl"],
441 },
442 kotlin => {
443 feature: "lang-kotlin",
444 name: "kotlin",
445 ts_lang: arborium_kotlin::language(),
446 node_types_key: "kotlin",
447 names: ["kotlin", "kt"],
448 extensions: ["kt", "kts"],
449 },
450 lean => {
451 feature: "lang-lean",
452 name: "lean",
453 ts_lang: arborium_lean::language(),
454 node_types_key: "lean",
455 names: ["lean", "lean4"],
456 extensions: ["lean"],
457 },
458 lua => {
459 feature: "lang-lua",
460 name: "lua",
461 ts_lang: arborium_lua::language(),
462 node_types_key: "lua",
463 names: ["lua"],
464 extensions: ["lua"],
465 },
466 markdown => {
467 feature: "lang-markdown",
468 name: "markdown",
469 ts_lang: arborium_markdown::language(),
470 node_types_key: "markdown",
471 names: ["markdown", "md"],
472 extensions: ["md", "markdown"],
473 },
474 matlab => {
475 feature: "lang-matlab",
476 name: "matlab",
477 ts_lang: arborium_matlab::language(),
478 node_types_key: "matlab",
479 names: ["matlab", "octave"],
480 extensions: ["m"],
481 },
482 meson => {
483 feature: "lang-meson",
484 name: "meson",
485 ts_lang: arborium_meson::language(),
486 node_types_key: "meson",
487 names: ["meson"],
488 extensions: ["meson"],
489 },
490 nginx => {
491 feature: "lang-nginx",
492 name: "nginx",
493 ts_lang: arborium_nginx::language(),
494 node_types_key: "nginx",
495 names: ["nginx"],
496 extensions: ["nginx"],
497 },
498 ninja => {
499 feature: "lang-ninja",
500 name: "ninja",
501 ts_lang: arborium_ninja::language(),
502 node_types_key: "ninja",
503 names: ["ninja"],
504 extensions: ["ninja"],
505 },
506 nix => {
507 feature: "lang-nix",
508 name: "nix",
509 ts_lang: arborium_nix::language(),
510 node_types_key: "nix",
511 names: ["nix"],
512 extensions: ["nix"],
513 },
514 objc => {
515 feature: "lang-objc",
516 name: "objc",
517 ts_lang: arborium_objc::language(),
518 node_types_key: "objc",
519 names: ["objc", "objective-c", "objectivec"],
520 extensions: ["m", "mm"],
521 },
522 ocaml => {
523 feature: "lang-ocaml",
524 name: "ocaml",
525 ts_lang: arborium_ocaml::language(),
526 node_types_key: "ocaml",
527 names: ["ocaml", "ml"],
528 extensions: ["ml", "mli"],
529 },
530 perl => {
531 feature: "lang-perl",
532 name: "perl",
533 ts_lang: arborium_perl::language(),
534 node_types_key: "perl",
535 names: ["perl", "pl"],
536 extensions: ["pl", "pm"],
537 },
538 php => {
539 feature: "lang-php",
540 name: "php",
541 ts_lang: arborium_php::language(),
542 node_types_key: "php",
543 names: ["php"],
544 extensions: ["php"],
545 },
546 postscript => {
547 feature: "lang-postscript",
548 name: "postscript",
549 ts_lang: arborium_postscript::language(),
550 node_types_key: "postscript",
551 names: ["postscript", "ps"],
552 extensions: ["ps", "eps"],
553 },
554 powershell => {
555 feature: "lang-powershell",
556 name: "powershell",
557 ts_lang: arborium_powershell::language(),
558 node_types_key: "powershell",
559 names: ["powershell", "pwsh", "ps1"],
560 extensions: ["ps1", "psm1", "psd1"],
561 },
562 prolog => {
563 feature: "lang-prolog",
564 name: "prolog",
565 ts_lang: arborium_prolog::language(),
566 node_types_key: "prolog",
567 names: ["prolog"],
568 extensions: ["pl", "pro"],
569 },
570 python => {
571 feature: "lang-python",
572 name: "python",
573 ts_lang: arborium_python::language(),
574 node_types_key: "python",
575 names: ["python", "py"],
576 extensions: ["py", "pyi", "pyw"],
577 },
578 query => {
579 feature: "lang-query",
580 name: "query",
581 ts_lang: arborium_query::language(),
582 node_types_key: "query",
583 names: ["query", "scm"],
584 extensions: ["scm"],
585 },
586 r => {
587 feature: "lang-r",
588 name: "r",
589 ts_lang: arborium_r::language(),
590 node_types_key: "r",
591 names: ["r", "rlang"],
592 extensions: ["r", "R"],
593 },
594 rescript => {
595 feature: "lang-rescript",
596 name: "rescript",
597 ts_lang: arborium_rescript::language(),
598 node_types_key: "rescript",
599 names: ["rescript", "res"],
600 extensions: ["res", "resi"],
601 },
602 ron => {
603 feature: "lang-ron",
604 name: "ron",
605 ts_lang: arborium_ron::language(),
606 node_types_key: "ron",
607 names: ["ron"],
608 extensions: ["ron"],
609 },
610 ruby => {
611 feature: "lang-ruby",
612 name: "ruby",
613 ts_lang: arborium_ruby::language(),
614 node_types_key: "ruby",
615 names: ["ruby", "rb"],
616 extensions: ["rb", "rake", "gemspec"],
617 },
618 rust => {
619 feature: "lang-rust",
620 name: "rust",
621 ts_lang: arborium_rust::language(),
622 node_types_key: "rust",
623 names: ["rust", "rs"],
624 extensions: ["rs"],
625 },
626 scala => {
627 feature: "lang-scala",
628 name: "scala",
629 ts_lang: arborium_scala::language(),
630 node_types_key: "scala",
631 names: ["scala"],
632 extensions: ["scala", "sc"],
633 },
634 scheme => {
635 feature: "lang-scheme",
636 name: "scheme",
637 ts_lang: arborium_scheme::language(),
638 node_types_key: "scheme",
639 names: ["scheme", "racket"],
640 extensions: ["scm", "ss", "rkt"],
641 },
642 scss => {
643 feature: "lang-scss",
644 name: "scss",
645 ts_lang: arborium_scss::language(),
646 node_types_key: "scss",
647 names: ["scss", "sass"],
648 extensions: ["scss", "sass"],
649 },
650 sparql => {
651 feature: "lang-sparql",
652 name: "sparql",
653 ts_lang: arborium_sparql::language(),
654 node_types_key: "sparql",
655 names: ["sparql"],
656 extensions: ["sparql", "rq"],
657 },
658 sql => {
659 feature: "lang-sql",
660 name: "sql",
661 ts_lang: arborium_sql::language(),
662 node_types_key: "sql",
663 names: ["sql"],
664 extensions: ["sql"],
665 },
666 ssh_config => {
667 feature: "lang-ssh-config",
668 name: "ssh_config",
669 ts_lang: arborium_ssh_config::language(),
670 node_types_key: "ssh_config",
671 names: ["ssh-config", "ssh_config", "sshconfig"],
672 extensions: ["ssh_config"],
673 },
674 starlark => {
675 feature: "lang-starlark",
676 name: "starlark",
677 ts_lang: arborium_starlark::language(),
678 node_types_key: "starlark",
679 names: ["starlark", "bazel", "bzl"],
680 extensions: ["bzl", "bazel"],
681 },
682 svelte => {
683 feature: "lang-svelte",
684 name: "svelte",
685 ts_lang: arborium_svelte::language(),
686 node_types_key: "svelte",
687 names: ["svelte"],
688 extensions: ["svelte"],
689 },
690 swift => {
691 feature: "lang-swift",
692 name: "swift",
693 ts_lang: arborium_swift::language(),
694 node_types_key: "swift",
695 names: ["swift"],
696 extensions: ["swift"],
697 },
698 textproto => {
699 feature: "lang-textproto",
700 name: "textproto",
701 ts_lang: arborium_textproto::language(),
702 node_types_key: "textproto",
703 names: ["textproto", "pbtxt"],
704 extensions: ["textproto", "pbtxt"],
705 },
706 thrift => {
707 feature: "lang-thrift",
708 name: "thrift",
709 ts_lang: arborium_thrift::language(),
710 node_types_key: "thrift",
711 names: ["thrift"],
712 extensions: ["thrift"],
713 },
714 tlaplus => {
715 feature: "lang-tlaplus",
716 name: "tlaplus",
717 ts_lang: arborium_tlaplus::language(),
718 node_types_key: "tlaplus",
719 names: ["tlaplus", "tla+", "tla"],
720 extensions: ["tla"],
721 },
722 toml => {
723 feature: "lang-toml",
724 name: "toml",
725 ts_lang: arborium_toml::language(),
726 node_types_key: "toml",
727 names: ["toml"],
728 extensions: ["toml"],
729 },
730 tsx => {
731 feature: "lang-tsx",
732 name: "tsx",
733 ts_lang: arborium_tsx::language(),
734 node_types_key: "tsx",
735 names: ["tsx"],
736 extensions: ["tsx"],
737 },
738 typescript => {
739 feature: "lang-typescript",
740 name: "typescript",
741 ts_lang: arborium_typescript::language(),
742 node_types_key: "typescript",
743 names: ["typescript", "ts"],
744 extensions: ["ts", "mts", "cts"],
745 },
746 typst => {
747 feature: "lang-typst",
748 name: "typst",
749 ts_lang: arborium_typst::language(),
750 node_types_key: "typst",
751 names: ["typst"],
752 extensions: ["typ"],
753 },
754 uiua => {
755 feature: "lang-uiua",
756 name: "uiua",
757 ts_lang: arborium_uiua::language(),
758 node_types_key: "uiua",
759 names: ["uiua"],
760 extensions: ["ua"],
761 },
762 vb => {
763 feature: "lang-vb",
764 name: "vb",
765 ts_lang: arborium_vb::language(),
766 node_types_key: "vb",
767 names: ["vb", "vbnet", "visualbasic"],
768 extensions: ["vb"],
769 },
770 verilog => {
771 feature: "lang-verilog",
772 name: "verilog",
773 ts_lang: arborium_verilog::language(),
774 node_types_key: "verilog",
775 names: ["verilog", "v"],
776 extensions: ["v", "sv"],
777 },
778 vhdl => {
779 feature: "lang-vhdl",
780 name: "vhdl",
781 ts_lang: arborium_vhdl::language(),
782 node_types_key: "vhdl",
783 names: ["vhdl"],
784 extensions: ["vhd", "vhdl"],
785 },
786 vim => {
787 feature: "lang-vim",
788 name: "vim",
789 ts_lang: arborium_vim::language(),
790 node_types_key: "vim",
791 names: ["vim", "vimscript"],
792 extensions: ["vim"],
793 },
794 vue => {
795 feature: "lang-vue",
796 name: "vue",
797 ts_lang: arborium_vue::language(),
798 node_types_key: "vue",
799 names: ["vue"],
800 extensions: ["vue"],
801 },
802 wit => {
803 feature: "lang-wit",
804 name: "wit",
805 ts_lang: arborium_wit::language(),
806 node_types_key: "wit",
807 names: ["wit"],
808 extensions: ["wit"],
809 },
810 x86asm => {
811 feature: "lang-x86asm",
812 name: "x86asm",
813 ts_lang: arborium_x86asm::language(),
814 node_types_key: "x86asm",
815 names: ["x86asm", "x86"],
816 extensions: ["asm"],
817 },
818 xml => {
819 feature: "lang-xml",
820 name: "xml",
821 ts_lang: arborium_xml::language(),
822 node_types_key: "xml",
823 names: ["xml"],
824 extensions: ["xml", "xsl", "xslt", "xsd", "svg"],
825 },
826 yaml => {
827 feature: "lang-yaml",
828 name: "yaml",
829 ts_lang: arborium_yaml::language(),
830 node_types_key: "yaml",
831 names: ["yaml", "yml"],
832 extensions: ["yaml", "yml"],
833 },
834 yuri => {
835 feature: "lang-yuri",
836 name: "yuri",
837 ts_lang: arborium_yuri::language(),
838 node_types_key: "yuri",
839 names: ["yuri"],
840 extensions: ["yuri"],
841 },
842 zig => {
843 feature: "lang-zig",
844 name: "zig",
845 ts_lang: arborium_zig::language(),
846 node_types_key: "zig",
847 names: ["zig"],
848 extensions: ["zig"],
849 },
850 zsh => {
851 feature: "lang-zsh",
852 name: "zsh",
853 ts_lang: arborium_zsh::language(),
854 node_types_key: "zsh",
855 names: ["zsh"],
856 extensions: ["zsh"],
857 },
858}